Ladislav Lhotka <[email protected]> wrote:
> 
> > On 25 Feb 2016, at 14:16, Martin Bjorklund <[email protected]> wrote:
> > 
> > Ladislav Lhotka <[email protected]> wrote:
> >> Martin Bjorklund <[email protected]> writes:
> >> 
> >>> Ladislav Lhotka <[email protected]> wrote:
> >>>> Hi,
> >>>> 
> >>>> another ABNF issue:
> >>>> 
> >>>>   predicate           = "[" *WSP (predicate-expr / pos) *WSP "]"
> >>>> 
> >>>>   predicate-expr      = (node-identifier / ".") *WSP "=" *WSP
> >>>>                         ((DQUOTE string DQUOTE) /
> >>>>                          (SQUOTE string SQUOTE))
> >>>> 
> >>>>   pos                 = non-negative-integer-value
> >>>> 
> >>>>   non-negative-integer-value = "0" / positive-integer-value
> >>>> 
> >>>> The value of 0 shouldn't be allowed for 'pos' because context position
> >>>> in XPath is always positive, i.e. the first list entry is selected
> >>>> with "[1]".
> >>> 
> >>> You are right - I have changed this to:
> >>> 
> >>>   pos = positive-integer-value
> >> 
> >> Actually, there is another problem: the ABNF allows, for example
> >> 
> >> /if:interfaces/if:interface[1][2]
> >> 
> >> which doesn't make sense.
> > 
> > Yes, you're right.
> > 
> >> So a correct version could be
> >> 
> >>   instance-identifier = 1*("/" (node-identifier (*predicate / pos))
> > 
> > this would make pos mandatory after every node-identifier.  It should
> > be: 
> > 
> >  instance-identifier = 1*("/" (node-identifier (*predicate / *1pos)))
> > 
> > or, in order to match the style in the rest of the grammar:
> > 
> >  instance-identifier = 1*("/" (node-identifier [1*predicate / pos]))
> 
> If we want to be really precise, then the predicate for a leaf-list [
> . = 'foo'] can also appear no more than once.

Correct.  But we can only do so much in the grammar... For example, we
cannot verify that the name and number of keys are correct.

It would be:

instance-identifier = 1*("/" (node-identifier [1*key-predicate /
                                               leaf-list-predicate /
                                               pos]))

key-predicate       = "[" *WSP key-predicate-expr *WSP "]"

key-predicate-expr  = node-identifier *WSP "=" *WSP
                      ((DQUOTE string DQUOTE) /
                       (SQUOTE string SQUOTE))

leaf-list-predicate = "[" *WSP leaf-list-predicate-expr *WSP "]"

leaf-list-predicate-expr = "." *WSP "=" *WSP
                      ((DQUOTE string DQUOTE) /
                       (SQUOTE string SQUOTE))

pos                 = "[" *WSP positive-integer-value *WSP "]"



/martin

_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to