End of parent enables saving some space for extra stored length fields, by 
dual-purposing an overall record length
to also provide the length of the last child item.

Consider a record with these data items in it:

quantity
price
tax (optional field)
description

Only the last is a text string and is variable length.

So this could be represented by:

<element name="recLen" type="xs:unsignedInt"
    dfdl:outputValueCalc="{ dfdl:contentLength(../record, 'bytes') }" />
<element name="record" dfdl:lengthKind="explicit" dfdl:length="{ ../recLen }">
   <complexType>
      <sequence>
        <element name="quantity" type="xs:unsignedInt"/>
        <element name="price" type="xs:decimal" dfdl:binaryNumberRep="packed" 
dfdl:length="6" />
        <element name="isTax" type="xs:boolean" dfdl:length="1"/>
        <element name="tax" type="xs:decimal" minOccurs="0" 
dfdl:binaryNumberRep="packed" dfdl:length="4"
             dfdl:occursCountKind="expression" dfdl:occursCount="{ ../isTax }"/>
         <element name="description" type="xs:string" 
dfdl:lengthKind="endOfParent"/>
     </sequence>
  </complexType>
</element>

Basically, if there are multiple variable-length things in the record, you get 
to have an overall record length at the start, which is useful for skipping 
past whole records without having to parse the individual items within each 
record, and you save on storing one length field/item within the record, as the 
last variable length thing doesn't need one.

So you get some useful functionality (recLen above) for no storage cost.


________________________________
From: Roger L Costello <coste...@mitre.org>
Sent: Wednesday, February 3, 2021 9:07 AM
To: users@daffodil.apache.org <users@daffodil.apache.org>
Subject: Example of where lengthKind=endOfParent is well-suited?

Hi Folks,

Would you give an easy-to-understand, intuitive example where 
lengthKind=endOfParent is well-suited, please?

/Roger

Reply via email to