Reading the spec sections 7 and 8, it does
not explicitly state that at most one 'format' annotation can appear at
an annotation point. But I think I know why. Firstly, we used to have selectors
in the spec, which would have allowed multiple 'format' annotations on
the same object, although looking back to draft 035 of the spec, the wording
for selectors makes it clear that it allowed just one annotation to be
chosen from the set of annotations. Secondly, we used to allow multiple
formats on certain objects - remember the "applies" attribute,
which had values "toScope" and "hereOnly". When
both these features were dropped I think the wording in the spec was not
updated to say that at most one 'format' annotation can appear at an annotation
point. There used to be an example that showed two dfdl:formats in
a dfdl:defineFormat - that was changed to show just one.
Thinking about it, the IBM DFDL xsd
for DFDL annotations can't impose the one annotation constraint, as it
only supplies global elements for dfdl:element etc. So that check
must be being imposed by IBM DFDL code.
However the IBM DFDL xsd allows multiple
dfdl:format within dfdl:defineFormat, but again IBM DFDL code issues an
error if more than one is found. I think this is a hangover from
selector support and should be corrected in the xsd. (The IBM code was
originally written when selectors were in the spec.)
<xsd:element
name="defineFormat" type="dfdl:DFDLDefineFormat" />
<xsd:complexType
name="DFDLDefineFormat">
<xsd:sequence>
<xsd:element
maxOccurs="unbounded"
minOccurs="0"
ref="dfdl:format" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:NCName"
/>
<xsd:attribute ref="ibmDfdlExtn:basicProperties"
/>
</xsd:complexType>
I strongly feel that the only time we
should allow multiple 'format' annotations at the same annotation point
is if we add support for selectors in a future DFDL version.
Regards
Steve Hanson
Architect, Data Format Description Language (DFDL)
Co-Chair, OGF
DFDL Working Group
IBM SWG, Hursley, UK
smh@uk.ibm.com
tel:+44-1962-815848
From:
Mike Beckerle <mbeckerle.dfdl@gmail.com>
To:
Steve Hanson/UK/IBM@IBMGB,
Cc:
dfdl-wg@ogf.org
Date:
30/10/2012 19:00
Subject:
Re: [DFDL-WG]
question relevant to evaluation timing - short form
But, do you know where in the spec or the errata there
are any constraints on format annotations at a particular annotation point?
I'm aware of the one about discriminators (only one, and excludes asserts).
But I can't find anything saying that you can't have more than one format
annotation at a given annotation point, nor anything constraining the relative
order of the various annotations that appear at a given annotation point
that would dis-allow inter-leaving them arbitrarily. (Though I'm happy
to see this constrained.)
I also can't find anything in the IBM XML Schema for DFDL annotations that
would constrain this. This describes the properties allowed on individual
annotation elements, but I don't see how it constrains how they are combined/interleaved.
On Tue, Oct 30, 2012 at 2:32 PM, Steve Hanson <smh@uk.ibm.com>
wrote:
This makes no sense to me. It doesn't
work - you can't spread properties across multiple annotations and expect
the timing to be different at runtime - what if dfdl:length was on one
and dfdl:lengthKind on the other?
IBM DFDL disallows this in its xsd for DFDL annotations. Spec should make
this clear if it doesn't already.
Regards
Steve Hanson
Architect, Data Format Description Language (DFDL)
Co-Chair, OGF
DFDL Working Group
IBM SWG, Hursley, UK
smh@uk.ibm.com
tel:+44-1962-815848
From: Mike
Beckerle <mbeckerle.dfdl@gmail.com>
To: dfdl-wg@ogf.org,
Date: 30/10/2012
17:50
Subject: [DFDL-WG]
question relevant to evaluation timing - short form
Sent by: dfdl-wg-bounces@ogf.org
Can I do this?
<sequence>
<annotation><appinfo...>
<dfdl:setVariable ref="foo"
.../>
<dfdl:sequence initiator="{...expression
involving foo...}"/>
<dfdl:newVariableInstance ref="foo"
value="{...some expression...}"/>
<dfdl:sequence terminator="{...expression
involving foo...}"/>
</appinfo></annotation>
</element>
See how I am spreading out the evaluation of the runtime-valued properties
with the setVariable and newVariable stuff.
This works so long as we evaluate everything in schema definition order.
Now let me throw one more wrench (spanner for the UK folks) in the works.
I'm going to add a short form annotation:
<sequence dfdl:separator="{... expression...}">
<annotation><appinfo...>
<dfdl:setVariable ref="foo"
.../>
<dfdl:sequence initiator="{...expression
involving foo...}"/>
<dfdl:newVariableInstance ref="foo"
value="{...some expression...}"/>
<dfdl:sequence terminator="{...expression
involving foo...}"/>
</appinfo></annotation>
</element>
Now, a short form annotation is equivalent to a long form conversion thereof,
but in this case is it this one???
<sequence>
<annotation><appinfo...>
<!-- short form annotation comes FIRST when
converted. -->
<dfdl:sequence separator="{...expression
...}"/> <!-- Expression cannot use variable foo. -->
<dfdl:setVariable ref="foo"
.../>
<dfdl:sequence initiator="{...expression
involving foo...}"/>
<dfdl:newVariableInstance ref="foo"
value="{...some expression...}"/>
<dfdl:sequence terminator="{...expression
involving foo...}"/>
</appinfo></annotation>
</element>
Or... is it this one:
<sequence>
<annotation><appinfo...>
<dfdl:setVariable ref="foo"
.../>
<dfdl:sequence initiator="{...expression
involving foo...}"/>
<dfdl:newVariableInstance ref="foo"
value="{...some expression...}"/>
<dfdl:sequence terminator="{...expression
involving foo...}"/>
<!-- short form annotation comes LAST
when converted -->
<dfdl:sequence separator="{...expression
...}"/> <!-- expression could use varible foo. -->
</appinfo></annotation>
</element>
I would argue I prefer the first one, because makes the lexical order of
appearance consistent with evaluation order.
...mikeb
--
Mike Beckerle | OGF DFDL WG Co-Chair
Tel: 781-330-0412
--
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
--
Mike Beckerle | OGF DFDL WG Co-Chair
Tel: 781-330-0412
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