Ladislav Lhotka <[email protected]> wrote: > > > 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
Do you mean for a YANG leaf? /martin > (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
