[DFDL-WG] Fw: clarification needed: assert evaluation order and arrays

Steve Hanson smh at uk.ibm.com
Wed Nov 14 06:10:50 EST 2012


Agreed on DFDL WG call that checkConstraints() will only look at facets 
and the fixed attribute.

Regards

Steve Hanson
Architect, Data Format Description Language (DFDL)
Co-Chair, OGF DFDL Working Group
IBM SWG, Hursley, UK
smh at uk.ibm.com
tel:+44-1962-815848
----- Forwarded by Steve Hanson/UK/IBM on 14/11/2012 11:04 -----

From:   Steve Hanson/UK/IBM
To:     "Mike Beckerle" <mbeckerle.dfdl at gmail.com>, 
Cc:     Tim Kimber/UK/IBM at IBMGB, dfdl-wg at ogf.org
Date:   02/11/2012 14:51
Subject:        Fw: [DFDL-WG] clarification needed: assert evaluation 
order and arrays


Hi Mike

I have checked with our resident XPath expert, and you are correct. The 
self-axis refers to the current occurrence. Sorry to mislead you.

I think we need a short discussion about what checkConstraints() can and 
can't check against. I'll add to agenda for next call. 

Regards

Steve Hanson
Architect, Data Format Description Language (DFDL)
Co-Chair, OGF DFDL Working Group
IBM SWG, Hursley, UK
smh at uk.ibm.com
tel:+44-1962-815848
----- Forwarded by Steve Hanson/UK/IBM on 02/11/2012 09:19 -----

From:   Mike Beckerle <mbeckerle.dfdl at gmail.com>
To:     Steve Hanson/UK/IBM at IBMGB, 
Cc:     dfdl-wg at ogf.org
Date:   01/11/2012 18:34
Subject:        Re: [DFDL-WG] clarification needed: assert evaluation 
order and arrays




Do I understand this right? I have always thought that "." refers to the 
current occurrence (i.e., the [dfdl:occursIndex()] is implied if the 
current elemetn is an array). Hence, if I have an array of a complex type 
with children named a and b, then "./a" is a valid expression referring to 
the current instance's child a. 

Similarly, if I type "../bar", and my parent is an array, then ".." moves 
me up to the current instance within that array. 

Upward paths are unambiguous. Current node paths are unambiguous. Only 
downward paths that encounter an array would need indexing brackets.

I think lots of things break if the above isn't the rule. E.g., you can't 
take an element and add minOccurs/maxOccurs to it to make it repeat 
without all the paths written on it being broken.

If I am right, then there is no problem with making 
dfdl:checkConstraints(.) take the node, ask if it is an array, and if so 
compare its occursIndex to maxOccurs.

I do take your point that the secondary check for minOccurs has to be 
expressed differently with a separate assert. 

The fact that dfdl:occursCount(path) takes a node-set-valued path is .... 
well really annoying, but inevitable. We need to watch for these 
exceptions. 


On Thu, Nov 1, 2012 at 1:39 PM, Steve Hanson <smh at uk.ibm.com> wrote:
You can't do that with one assert I'm afraid. The main issue is that a 
path location must always return exactly one item, so it's use within the 
context of an array must be in conjunction with a predicate, which must 
refer to a single instance.  That's what dfdl:occursIndex() is for. 

To check that an array meets its bounds, you need a separate assert that 
uses the dfdl:count() function. You'd have to hard-code the min/max 
values, and place it on a containing object. 

<sequence> 
   <annotation><appinfo...>
      <dfdl:assert>{ dfdl:occursCount(./foo) ge 5 and 
dfdl:occursCount(./foo) le 10 }</dfdl:assert>
   </appinfo></annotation>
  <element name="foo" minOccurs="5" maxOccurs="10" 
dfdl:occursCountKind='parsed'>
     <annotation><appinfo...>
      <dfdl:assert>{ dfdl:checkConstraints(.[dfdl:occursIndex()]) 
}</dfdl:assert>

     </appinfo></annotation>
     <simpleType>
       <restriction base="xs:string">
        <pattern value="...some regex..."/>
       </restriction>
     </simpleType>
 </element>
</sequence> 

I think that means our definition of dfdl:checkConstraints() in the spec 
is wrong. Table 34 and Section 5.2 together imply that minOccurs and 
maxOccurs are used in checkConstraints. I think that simply doesn't work. 
It should only be using 'fixed' and the facets (I think 'default' is 
pointless as well).

Worth noting that when a path is used in the context 
dfdl:occursCount(<path>) then it is not an error if more than one item is 
returned, and it should not be wrapped with fn:exactly-one(). 

Regards

Steve Hanson
Architect, Data Format Description Language (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, 
Date:        01/11/2012 16:45 
Subject:        [DFDL-WG] clarification needed: assert evaluation order 
and arrays 
Sent by:        dfdl-wg-bounces at ogf.org 





Question: If I write 

<element name="foo" minOccurs="5" maxOccurs="10" 
dfdl:occursCountKind='parsed'>
   <annotation><appinfo...>
      <dfdl:assert>{ dfdl:checkConstraints(.) }</dfdl:assert>
   </appinfo></annotation>
   <simpleType>
     <restriction base="xs:string">
        <pattern value="...some regex..."/>
     </restriction>
   </simpleType>
</element>

I have two sources of constraints. One is the pattern, the other the 
min/max occurs.

Does that one assertion calling dfdl:checkConstraints mean both will be 
checked? 
That is, one check occurring as each element is parsed, and the other at 
the end of the array?

Assume I am not using any validation option, so the DFDL processor would 
not otherwise check the max/minOccurs because occursCountKind is parsed.

Will the checkConstraints fail as soon as we parse the 11th element (is it 
checking the min/max occurs for each element occurrence as it is parsed), 
or do we parse as many as we can, and fail only when we check and find out 
that the entire array has 36 elements that were successfully parsed? 

What I would like the above to mean is this:

1) as each element occurrence is parsed we check the pattern and parse 
error (assertion failed) if there is no match. 
2) Also after a successful parse of an occurrence, we check that the index 
is <=10, and parse-error (assertion failed) if not.
3) at the end of the array, we check that the number of occurrences is >= 
5. If not we get a parse error (assertion failed). 

Comments?





...mikeb

-- 
Mike Beckerle | OGF DFDL WG Co-Chair 
Tel:  781-330-0412
--
 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



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

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/20121114/25a3d958/attachment.html>


More information about the dfdl-wg mailing list