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. > /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'. /martin > /foo/*[. = 'fred'] // correct > > [7] NodeTest ::= NameTest > <https://www.w3.org/TR/1999/REC-xpath-19991116/#NT-NameTest> > | NodeType <https://www.w3.org/TR/1999/REC-xpath-19991116/#NT-NodeType> '(' > ')' > | 'processing-instruction' '(' Literal > <https://www.w3.org/TR/1999/REC-xpath-19991116/#NT-Literal> ')' > > > >> However, it wasn't clear to me from reading 7950 or rfc6087bis-14 > >>> whether text() matches anything. In particular, does a YANG leaf node > >>> (except of type empty) always parent a text node that holds its value? > >>> > >> I believe this is how it should be interpreted. According to XPath 1.0 > >> spec, comparisons like > >> > >> xyz = 'foo' > >> > >> use string-value of xyz node, which is defined as the concatenation of > >> the string-values of all text node descendants of xyz. > >> > > Yes. I don't think that I've ever come across for XPath usage in YANG > > where the "concatenation of the string-values of all text node descendants > > " is actually useful (particularly as the children nodes are likely to not > > be consistently ordered). > > > > > > > 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). > > > [7] NodeTest ::= NameTest > <https://www.w3.org/TR/1999/REC-xpath-19991116/#NT-NameTest> > | NodeType <https://www.w3.org/TR/1999/REC-xpath-19991116/#NT-NodeType> '(' > ')' > | 'processing-instruction' '(' Literal > <https://www.w3.org/TR/1999/REC-xpath-19991116/#NT-Literal> ')' > > > > > [38] NodeType ::= 'comment' > | 'text' > | 'processing-instruction' > | 'node' > > > > > The node test text() is true for any text node. For example, child::text() > will > select the text node children of the context node. Similarly, the node test > comment() is true for any comment node, and the node test > processing-instruction() is true for any processing instruction. The > processing-instruction() test may have an argument that is Literal > <https://www.w3.org/TR/1999/REC-xpath-19991116/#NT-Literal>; in this case, > it is true for any processing instruction that has a name equal to the > value of the Literal > <https://www.w3.org/TR/1999/REC-xpath-19991116/#NT-Literal>. > > > Thanks, > > Rob > > > > > > > >> Lada > >> > >> > > Andy > > > > > Thanks, > >>> Rob > >>> > >>> > >>> > >>> _______________________________________________ > >>> netmod mailing list > >>> [email protected] > >>> https://www.ietf.org/mailman/listinfo/netmod > >>> > >> > > _______________________________________________ > > netmod mailing list > > [email protected] > > https://www.ietf.org/mailman/listinfo/netmod > > _______________________________________________ netmod mailing list [email protected] https://www.ietf.org/mailman/listinfo/netmod
