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