If I understand the example correctly, you have added 'payloadLength' to the infoset as a convenience to the user, but at the same time  you are referencing it from the 'payload' element's dfdl:length property. Your example could be changed to use the 'length' element instead:

<element name="length" type="xs:int"
  dfdl:outputValueCalc="{ dfdl:contentLength(../payload) + 20 }">
<element name="payloadLength" type="xs:int"
  dfdl:inputValueCalc="{ ../length - 20 }" />
<element name="payload" dfdl:length="
{ ../length - 20 }">
   <complexType>.....</complexType>
</element>

If we allow both input & output value calc on a element, it is saying that on unparsing the element's value in the infoset is ignored, and its value never appear in the data. So it's a place to hold a transient value, don't we have variables for that?

Regards
 
Steve Hanson

IBM Integration Bus, Hursley, UK
Architect,
IBM DFDL
Co-Chair,
OGF DFDL Working Group
smh@uk.ibm.com
tel:+44-1962-815848
mob:+44-7717-378890




From:        Mike Beckerle <mbeckerle.dfdl@gmail.com>
To:        "dfdl-wg@ogf.org" <dfdl-wg@ogf.org>
Date:        19/07/2016 18:49
Subject:        [DFDL-WG] Need dfdl:inputValueCalc and dfdl:outputValueCalc on same        element
Sent by:        "dfdl-wg" <dfdl-wg-bounces@ogf.org>





So in PCAP format we find something like this:


<element name="length" type="xs:int"
  dfdl:outputValueCalc="{ dfdl:contentLength(../payload) + 20 }">
<element name="payloadLength" type="xs:int"
  dfdl:inputValueCalc="{ ../length - 20 }" />
<element name="payload" dfdl:length="{ ../payloadLength }">
   <complexType>.....</complexType>
</element>


To make this unparse we really need the payloadLength element to carry both an IVC and an OVC.

Otherwise when unparsing the dfdl:length expression on the payload element can't be meaningful. We have an erratum that states that length expressions are always re-evaluated when unparsing, so as to produce a target length that can be used to insert padding/fillByte.

However, the spec currently says you cannot have both IVC and OVC on the same element.

I do not recall why we have this restriction, other than trying to prohibit things we didn't think were necessary, but it seems in this situation to be needed.

Comments?


Mike Beckerle | OGF DFDL Workgroup Co-Chair | Tresys Technology | www.tresys.com
Please note: Contributions to the DFDL Workgroup's email discussions are subject to the OGF Intellectual Property Policy
--
 dfdl-wg mailing list
 dfdl-wg@ogf.org
 
https://www.ogf.org/mailman/listinfo/dfdl-wg


Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU