Data Segment - shaunturner84/transmute GitHub Wiki
This segment of the file details out the actual data structure. This involves a parent/child relationship of a number of elements.
There are numerous types of element:
A container can have multiple child elements, it is the only element type capable of holding other elements. The trade off however is that it cannot contain any values
Name | Type | Description |
---|---|---|
Element Type | BYTE | For a container element this is always 0 |
Tag ID) | UINT16 | The index of the tag in the header section |
Number of child elements | UINT16 | The number of child elements |
Child | DATAELEMENT | A child |
Child | DATAELEMENT | A child |
... | ... | ... |
This represents what would be classed as an attribute in XML, there is a limit of 255 characters for each attribute.
Name | Type | Description |
---|---|---|
ELEMENT_TYPE | BYTE | For an attribute element this is always 1 |
TAG_ID | UINT16 | The index of the tag in the header section |
VALUE_LENGTH | BYTE | The length of the value string |
VALUE_ACTUAL | STRING | The length of the value string |
This represents a value / text field. The value length is limited to 32767 characters
Name | Type | Description |
---|---|---|
ELEMENT_TYPE | BYTE | For a text element this is always 2 |
TAG_ID | UINT16 | The index of the tag in the header section |
VALUE_LENGTH | UINT16 | The length of the value string |
VALUE_ACTUAL | STRING | The length of the value string |
<Customer name="John Smith"> <Order id="ord-0123"> <Product id="prod-456">Scooter</product> <Product id="prod-789">Bicycle</product> </order> </customer>
Stripping out the excess whitespace would leave 149 bytes of data.
{ "Customer": { name = "John Smith", "Order": { "id" : "ord-0123", product : { { "id" : "prod-456", "value" : "Scooter" }, { "id" : "prod-789", "value" : "Bicycle" } } } } }
Stripping out the excess whitespace would leave 143 bytes of data.
This would be represented as:
0 1 0 0004 0 8 Customer 0 4 name 0 4 name 0 5 Order 0 2 id 0 00 02 1 01 8 John Smith 0 02 03 1 03 8 ord-0123 0 04 02 1 03 8 prod-456 2 07 Scooter 0 04 02 1 03 8 prod-789 2 07 Bicycle
This is a 131 byte binary made up of:
- 0 (Document Source = JSON)
- 1 (Encoding = UTF8)
- 0 (Number of namespaces - empty as no namespace defined)
- 0004 (Number of tags)
- 0 (Namespace ID)
- 8 (length of tag name)
- Customer (tag name)
- 0 (Namespace ID)
- 4 (length of tag name)
- name (tag name)
- 0 (Namespace ID)
- 4 (length of tag name)
- name (tag name)
- 0 (Namespace ID)
- 5 (length of tag name)
- Order (tag name)
- 0 (Namespace ID)
- 2 (length of tag name)
- id (tag name)
- 0 (Type of element = Container)
- 00 (tag id of "Customer")
- 02 (Number of child elements)
- 1 (Type of element = attribute)
- 01 (tag id of "name")
- 8 (length of the value string)
- John Smith (the value string)
- 0 (Type of element = container)
- 02 (tag id of "Order" tag)
- 03 (Number of child elements)
- 1 (type of element = attribute)
- 03 (id of "id" tag)
- 8 (length of the value string)
- ord-0123
- 0 (type of element = container)
- 04 (tag id of "Product" tag)
- 02 (Number of child elements)
- 1 (type of element = attribute)
- 03 (tag id of "id" tag)
- 8 (length of the value string)
- prod-456
- 2 (type of element = text)
- 07 length of the text string
- Scooter
- 0 (type of element = container)
- 04 (tag id of "Product" tag)
- 02 (Number of child elements)
- 1 (type of element = attribute)
- 03 (tag id of "id" tag)
- 8 (length of the value string)
- prod-789
- 2 (type of element = text)
- 07 length of the text string
- Bicycle