> 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

Reply via email to