[DFDL-WG] bug: calendarLanguage property can be expression, but does not say no forward references allowed.

Steve Hanson smh at uk.ibm.com
Tue Feb 17 15:16:11 EST 2015


So setVariable and newInstanceVariable are another example of the 
dfdl:length scenario that we recently discussed.  We said that any 
non-outputValueCalc expression must be resolvable at the time it is 
unparsed otherwise the unparser must detect the deadlock and throw an 
error.

Sorry but I don't follow your schema. When unparsing there is no 
backtracking of choice branches (unless trying to apply defaults to an 
entirely missing choice element) so if the parse created something for the 
first choice branch, the first choice branch will be output when 
unparsing. 

Regards
 
Steve Hanson
Architect, IBM DFDL
Co-Chair, OGF DFDL Working Group
IBM SWG, Hursley, UK
smh at uk.ibm.com
tel:+44-1962-815848



From:   Mike Beckerle <mbeckerle.dfdl at gmail.com>
To:     Steve Hanson/UK/IBM at IBMGB
Cc:     "dfdl-wg at ogf.org" <dfdl-wg at ogf.org>
Date:   17/02/2015 18:05
Subject:        Re: [DFDL-WG] bug: calendarLanguage property can be 
expression, but does not say no forward references allowed.



So, to follow up, even with this backward-only reference restriction, if a 
setVariable or newVariableInstance (the default value expression) refers 
(properly, in the backward direction) to an element, well if we are 
unparsing, then that element can have an outputValueCalc. So is the 
variable expression an error if that outputValueCalc cannot yet be 
evaluated, or is that expression effectively delayed until the 
outputValueCalc can have a value. 

E.g., if one is implementing DFDL unparsing, and delivering the infoset 
element by element to the unparse processor, then an outputValueCalc 
expression can end up being delayed until the infoset elements it requires 
have arrived.  When a setVariable or newVariableInstance expression refers 
to such an outputValueCalc element, does it inherit this delayed 
characteristic, or is this an error?

The example for this would be when one must compute the length of 
something, but then use that length in more than one place. Concretely, 
two variable-length elements have their length stored in elements that 
precede them, and then a third element stores the sum of both of those 
lengths. In this situation one would want to put the length computation 
into a variable, and then reference that variable more than once from 
outputValueCalc expressions. 

Originally, I thought the fact that setVariable and newVariableInstance 
are evaluated both parsing and unparsing made it clear that they have to 
refer backward only to parts of the infoset that are fully defined because 
that's the only thing that can make sense when parsing. But then I was 
able to construct a schema (attached) that enables sub-parts of the schema 
to be purely parser only or unparser only, as in:

    <xs:element name="root">
      <xs:complexType>
        <xs:sequence>
          <xs:sequence dfdl:hiddenGroupRef="mode:hDefModeGroup" />
          <xs:choice>
          <xs:sequence>
            <xs:group ref="mode:assertParsing"/>
            <!-- This is parser only -->
            <xs:element name="a" type="xs:int" dfdl:length="2" 
dfdl:lengthKind="explicit"/>
            <xs:element name="b" type="xs:string" dfdl:inputValueCalc="{ 
'parsing' }" />
          </xs:sequence>
          <xs:sequence>
            <xs:group ref="mode:assertUnparsing"/>
            <!-- This is unparser only -->
            <xs:element name="a" type="xs:int" dfdl:length="2" 
dfdl:lengthKind="explicit"/>
            <xs:element name="b" type="xs:string" dfdl:length="0" 
dfdl:lengthKind="explicit"/>
          </xs:sequence>
          </xs:choice>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

btw: the above does not violate UPA rules because of things in the group 
refs (which must be group refs, not hidden group refs) that are not hidden 
and distinguish the two arms of the choice.

On Feb 16, 2015 5:14 AM, "Steve Hanson" <smh at uk.ibm.com> wrote:
Section 23.1 makes the definitive statement about when forward references 
are allowed, but it is true that expression properties also make the 
statement so yes the phrase should be added to the description of 
calendarLanguage.  It is also missing from choiceDispatchKey, and from 
setVariable. 

Regards
 
Steve Hanson
Architect, IBM DFDL
Co-Chair, OGF DFDL Working Group
IBM SWG, Hursley, UK
smh at uk.ibm.com
tel:+44-1962-815848 



From:        Mike Beckerle <mbeckerle.dfdl at gmail.com> 
To:        "dfdl-wg at ogf.org" <dfdl-wg at ogf.org> 
Date:        13/02/2015 21:14 
Subject:        Re: [DFDL-WG] bug: calendarLanguage property can be 
expression, but does not say no forward references allowed. 
Sent by:        dfdl-wg-bounces at ogf.org 



Well, of course dfdl:outputValueCalc can also have forward reference. I 
meant all properties except this. 

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 


On Fri, Feb 13, 2015 at 3:55 PM, Mike Beckerle <mbeckerle.dfdl at gmail.com> 
wrote: 
Every property that can be an expression needs to stipulate "The 
expression must not contain forward references to elements which have not 
yet been processed."

There are only two exceptions which are for the message of 
asserts/discriminators. 

This phrase is missing for calendarLanguage.


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 at 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

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ogf.org/pipermail/dfdl-wg/attachments/20150217/79c5aa42/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: parseUnparseMode.dfdl.xsd
Type: application/octet-stream
Size: 4168 bytes
Desc: not available
URL: <http://www.ogf.org/pipermail/dfdl-wg/attachments/20150217/79c5aa42/attachment-0001.obj>


More information about the dfdl-wg mailing list