Hi,

Here's a summary of the changes:

OLD:

   instance-identifier = 1*("/" (node-identifier *predicate))

   predicate           = "[" *WSP (predicate-expr / pos) *WSP "]"

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

   pos                 = non-negative-integer-value

NEW:

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

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

   leaf-list-predicate-expr = "." *WSP "=" *WSP quoted-string

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

   quoted-string       = (DQUOTE string DQUOTE) / (SQUOTE string SQUOTE)



/martin



Ladislav Lhotka <[email protected]> wrote:
> 
> > On 25 Feb 2016, at 14:51, Martin Bjorklund <[email protected]> wrote:
> > 
> > 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.
> 
> Yes, but these are already semantic constraints. I think the new productions 
> below are in fact easier to comprehend. Perhaps a production like
> 
> quoted-string = (DQUOTE string DQUOTE) / (SQUOTE string SQUOTE)
> 
> would also be an improvement.
> 
> Lada
> 
> > 
> > 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
> 
> --
> Ladislav Lhotka, CZ.NIC Labs
> PGP Key ID: E74E8C0C
> 
> 
> 
> 

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

Reply via email to