Re: [netmod] XPath node type tests
Martin Bjorklund <mbj@tail-f.com> Mon, 23 October 2017 10:39 UTC
Return-Path: <mbj@tail-f.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3178513F0AD for <netmod@ietfa.amsl.com>; Mon, 23 Oct 2017 03:39:04 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.901
X-Spam-Level:
X-Spam-Status: No, score=-1.901 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0jD8Oi6hO52A for <netmod@ietfa.amsl.com>; Mon, 23 Oct 2017 03:39:02 -0700 (PDT)
Received: from mail.tail-f.com (mail.tail-f.com [46.21.102.45]) by ietfa.amsl.com (Postfix) with ESMTP id 9C83613E167 for <netmod@ietf.org>; Mon, 23 Oct 2017 03:39:02 -0700 (PDT)
Received: from localhost (unknown [173.38.220.41]) by mail.tail-f.com (Postfix) with ESMTPSA id AD8FE1AE012C; Mon, 23 Oct 2017 12:39:00 +0200 (CEST)
Date: Mon, 23 Oct 2017 12:37:34 +0200
Message-Id: <20171023.123734.1274882060625273119.mbj@tail-f.com>
To: rwilton@cisco.com
Cc: andy@yumaworks.com, netmod@ietf.org
From: Martin Bjorklund <mbj@tail-f.com>
In-Reply-To: <93844bdb-dcd9-758e-f58a-4cad047d4fd7@cisco.com>
References: <CABCOCHROiHZ6ojdamjtto7gbC=WZ_NkaNP6D_pDDeGsGp=X7xQ@mail.gmail.com> <20171023.111041.247783860756995497.mbj@tail-f.com> <93844bdb-dcd9-758e-f58a-4cad047d4fd7@cisco.com>
X-Mailer: Mew version 6.7 on Emacs 24.5 / Mule 6.0 (HANACHIRUSATO)
Mime-Version: 1.0
Content-Type: Text/Plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/ed3S1egNP4KEp9T5yX8T8fi9ftI>
Subject: Re: [netmod] XPath node type tests
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 23 Oct 2017 10:39:04 -0000
Robert Wilton <rwilton@cisco.com> wrote: > > > On 23/10/2017 10:10, Martin Bjorklund wrote: > > Andy Bierman <andy@yumaworks.com> wrote: > >> On Fri, Oct 20, 2017 at 9:24 AM, Robert Wilton <rwilton@cisco.com> > >> wrote: > >> > >>> Hi Lada, > >>> > >>> Thanks for the explanation, that makes sense. > >>> > >>> > >>> On 20/10/2017 16:27, Ladislav Lhotka wrote: > >>> > >>>> Hi Rob, > >>>> > >>>> Robert Wilton <rwilton@cisco.com> 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. > 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] XPath node type tests Robert Wilton
- Re: [netmod] XPath node type tests Ladislav Lhotka
- Re: [netmod] XPath node type tests Robert Wilton
- Re: [netmod] XPath node type tests Andy Bierman
- Re: [netmod] XPath node type tests Martin Bjorklund
- Re: [netmod] XPath node type tests Robert Wilton
- Re: [netmod] XPath node type tests Martin Bjorklund
- Re: [netmod] XPath node type tests Ladislav Lhotka
- Re: [netmod] XPath node type tests Martin Bjorklund
- Re: [netmod] XPath node type tests Phil Shafer