> On 25 Feb 2016, at 16:10, Martin Bjorklund <[email protected]> wrote: > > 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)
Looks great! Thanks, Lada > > > > /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 >> >> >> >> -- Ladislav Lhotka, CZ.NIC Labs PGP Key ID: E74E8C0C _______________________________________________ netmod mailing list [email protected] https://www.ietf.org/mailman/listinfo/netmod
