> On 23 Oct 2017, at 12:37, Martin Bjorklund <[email protected]> wrote:
> 
> Robert Wilton <[email protected]> wrote:
>> 
>> 
>> On 23/10/2017 10:10, Martin Bjorklund wrote:
>>> Andy Bierman <[email protected]> wrote:
>>>> On Fri, Oct 20, 2017 at 9:24 AM, Robert Wilton <[email protected]>
>>>> wrote:
>>>> 
>>>>> Hi Lada,
>>>>> 
>>>>> Thanks for the explanation, that makes sense.
>>>>> 
>>>>> 
>>>>> On 20/10/2017 16:27, Ladislav Lhotka wrote:
>>>>> 
>>>>>> Hi Rob,
>>>>>> 
>>>>>> Robert Wilton <[email protected]> writes:
>>>>>> 
>>>>>> Hi,
>>>>>>> XPATH 1.0 defines the following three node-type tests:
>>>>>>> 
>>>>>>> 1) comment()
>>>>>>> 2) processing-instruction(<opt arg>)
>>>>>>> 3) text()
>>>>>>> 
>>>>>> For completeness, node() is the fourth one.
>>>>>> 
>>>>>> My assumption is that a YANG tree doesn't contain any nodes of type
>>>>>>> 'comment' or 'processing-instruction' and hence these filters would
>>>>>>> never match any nodes.
>>>>>>> 
>>>>>> Yes. FWIW, Yangson library raises NotSupported exception upon
>>>>>> encountering these.
>>>>>> 
>>>> But a server or client should ignore PIs, not reject the XML.
>>>> 
>>>> I think text() and node() are just filter tests.
>>>> 
>>>>   /foo/*[text()] would return all the child nodes of /foo that are leaf
>>>>   or
>>>> leaf-list
>>>> 
>>>> text() returns a boolean (0 or 1).  Do not use it for value testing:
>>> No.  text() will select the text node children of the context node.
>> This is presumably because text() is evaluated as "child::text()".
> 
> Yes.
> 
>>>>   /foo/*[text() = 'fred']  // wrong!
>>> This actually works.  text() selects all text nodes (just one for a
>>> leaf), and then that text node is compared to the string 'fred'.
>> For clarity, am I right in my interpretation that a leaf is not itself
>> a text node, but instead a leaf is an element node that contains a
>> direct child text node?
> 
> Yes.

In principle, there could be multiple text nodes (in XML processing this is 
quite common).

Lada

> 
>> Presumably, it is only leaf and leaf-list element nodes that can have
>> these direct child text nodes.
> 
> Yes.
> 
>> I can see how this make sense for a XML document, but it does feel a
>> bit non intuitive for a YANG data tree
> 
> Maybe, but since we use XPath, we need to conform to the data model
> used by XPath (see section 5 of the xpath spec).
> 
>> and it may be helpful if this
>> is documented somewhat ...
> 
> RFC 7950 refers to the data model of XPath (See section 6.4 of RFC
> 7950), but I agree that it could have had more text.  Specifically, it
> could have stated how nodes are mapped to elements, that only
> leaf/leaf-list have text nodes; that annotations are mapped to
> attribute nodes (ok, not really in 7950...); that there are no
> processing-instruction and comment nodes.
> 
>> 
>>  /foo/*[. = 'fred']  // correct
>> 
>> Presumably this test isn't quite the same, since child container and
>> list nodes would also be included in the comparison (i.e. by
>> concatenating all their descendant leaf values together into a single
>> string)
>> whereas the expression with the text() check will only
>> include the values of direct child leaf and leaf-list nodes (as YANG
>> is currently defined today).
> 
> Yes.
> 
> 
> /martin
> 
> _______________________________________________
> netmod mailing list
> [email protected]
> https://www.ietf.org/mailman/listinfo/netmod

--
Ladislav Lhotka
Head, CZ.NIC Labs
PGP Key ID: 0xB8F92B08A9F76C67





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

Reply via email to