> On 17 Dec 2015, at 14:28, Jernej Tuljak <[email protected]> wrote: > > Martin Bjorklund je 17.12.2015 ob 13:23 napisal: >> Jernej Tuljak <[email protected]> wrote: >>> Martin Bjorklund je 16.12.2015 ob 18:47 napisal: >>>> Jernej Tuljak <[email protected]> wrote: >>>>> Dne 16.12.2015 ob 17:18 je Martin Bjorklund zapisal(a): >>>>>> Jernej Tuljak <[email protected]> wrote: >>>>>>> Ladislav Lhotka je 16.12.2015 ob 15:10 napisal: >>>>>>>>> On 16 Dec 2015, at 14:08, Jernej Tuljak <[email protected]> wrote: >>>>>>>>> >>>>>>>>> Martin Bjorklund je 16.12.2015 ob 13:48 napisal: >>>>>>>>>> Jernej Tuljak <[email protected]> wrote: >>>>>>>>>>> Martin Bjorklund je 25.11.2015 ob 11:16 napisal: >>>>>>>>>>>> Ladislav Lhotka <[email protected]> wrote: >>>>>>>>>>>>> Hi, >>>>>>>>>>>>> >>>>>>>>>>>>> I'd like to resolve this issue. Here is a complete example >>>>>>>>>>>>> (valid, I >>>>>>>>>>>>> believe): >>>>>>>>>>>>> >>>>>>>>>>>>> module context { >>>>>>>>>>>>> namespace "http://example.com/context"; >>>>>>>>>>>>> prefix ctx; >>>>>>>>>>>>> >>>>>>>>>>>>> leaf foo { >>>>>>>>>>>>> config false; >>>>>>>>>>>>> type uint32; >>>>>>>>>>>>> } >>>>>>>>>>>>> rpc oper { >>>>>>>>>>>>> output { >>>>>>>>>>>>> must "/foo mod foo = 0"; >>>>>>>>>>>>> leaf foo { >>>>>>>>>>>>> type uint32; >>>>>>>>>>>>> } >>>>>>>>>>>>> } >>>>>>>>>>>>> } >>>>>>>>>>>>> } >>>>>>>>>>>>> >>>>>>>>>>>>> 1. What does the accessible tree look like? >>>>>>>>>>>> Note that the anser to this depends on the outcomne of Y04. Andy >>>>>>>>>>>> has >>>>>>>>>>>> strong objections to Y04-02, and proposed Y04-04 instead. >>>>>>>>>>>> >>>>>>>>>>>> Assuming Y04-02, and assuming /foo has the value 20 and the oper >>>>>>>>>>>> rpc's >>>>>>>>>>>> result has foo = 10, the accessible tree would look like this: >>>>>>>>>>>> >>>>>>>>>>>> <root> >>>>>>>>>>>> +-- oper >>>>>>>>>>>> | +-- foo = 10 >>>>>>>>>>>> +-- foo = 20 >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> (If we instead move back to Y04-04, the accessible tree would be: >>>>>>>>>>>> >>>>>>>>>>>> <root> >>>>>>>>>>>> +-- oper >>>>>>>>>>>> +-- foo = 10 >>>>>>>>>>>> >>>>>>>>>>>> ) >>>>>>>>>>>> >>>>>>>>>>>>> 2. What is the context node for the "must" expression? >>>>>>>>>>>> /oper >>>>>>>>>>> This change to the accessible tree (1.0 --> 1.1) may break some >>>>>>>>>>> existing "when" XPath expressions (those under "output" statement). >>>>>>>>>> Maybe. The old text said: >>>>>>>>>> >>>>>>>>>> o If the context node represents RPC output parameters, the >>>>>>>>>> tree >>>>>>>>>> is >>>>>>>>>> the RPC reply instance document. >>>>>>>>>> >>>>>>>>>> So this probably meant that for this definition: >>>>>>>>>> >>>>>>>>>> module ex { >>>>>>>>>> ... >>>>>>>>>> prefix x; >>>>>>>>>> ... >>>>>>>>>> rpc foo { >>>>>>>>>> output { >>>>>>>>>> leaf bar { ... } >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> The accessile tree was: >>>>>>>>>> >>>>>>>>>> nc:rpc-reply >>>>>>>>>> +-- x:bar >>>>>>>>>> >>>>>>>>>> This is very NETCONF-specifc. With 1.1, the tree would be: >>>>>>>>>> >>>>>>>>>> x:foo >>>>>>>>>> +-- x:bar >>>>>>>>>> >>>>>>>>>> which is protocol-neutral. >>>>>>>>>> >>>>>>>>>>> Is >>>>>>>>>>> this compatible with 1.1 charter - "All compliant YANG 1.0 modules >>>>>>>>>>> must be accepted as compliant YANG 1.1 modules"? >>>>>>>>>>> >>>>>>>>>>> rpc my-rpc { >>>>>>>>>>> output { >>>>>>>>>>> uses my-stuff { >>>>>>>>>>> when "specific-param = 'foo'";// 1.0 >>>>>>>>>>> // when "my-rpc/specific-param = 'foo'" // 1.1 >>>>>>>>>> This is not correct. If a relative path is used, it would be the >>>>>>>>>> same >>>>>>>>>> in 1.0 and 1.1. >>>>>>>>> I disagree due to current text: >>>>>>>>> >>>>>>>>> o data node: A node in the schema tree that can be instantiated >>>>>>>>> in >>>>>>>>> a >>>>>>>>> data tree. One of container, leaf, leaf-list, list, anydata, >>>>>>>>> and >>>>>>>>> anyxml. >>>>>>>>> >>>>>>>>> o If the XPath expression is defined in a substatement to an >>>>>>>>> "output" statement in an "rpc" or "action" statement, the >>>>>>>>> accessible tree is the RPC or action operation instance, all >>>>>>>>> state >>>>>>>>> data in the server, and the running configuration datastore. >>>>>>>>> The >>>>>>>>> root node has top-level data nodes in all modules as children. >>>>>>>>> Additionally, for an RPC, the root node also has the node >>>>>>>>> representing the RPC operation being defined as a child. The >>>>>>>>> node >>>>>>>>> representing the operation being defined has the operation's >>>>>>>>> output parameters as children. >>>>>>>>> >>>>>>>>> o If the "when" statement is a child of a "uses", "choice", or >>>>>>>>> "case" statement, then the context node is the closest >>>>>>>>> ancestor >>>>>>>>> node to the "uses", "choice", or "case" node that is also a >>>>>>>>> data >>>>>>>>> node. If no such node exists, the context node is the root >>>>>>>>> node. >>>>>>>>> The accessible tree is tentatively altered during the >>>>>>>>> processing >>>>>>>>> of the XPath expression by removing all instances (if any) of >>>>>>>>> the >>>>>>>>> nodes added by the "uses", "choice", or "case" statement. >>>>>>>>> >>>>>>>>> >>>>>>>>> It clearly says that the context node is the root node ("/"), not the >>>>>>>>> node representing the RPC ("/my-rpc"), which is a child to root >>>>>>>>> node. The "root node" aka "document root" can only mean a single thing >>>>>>>>> XPath terminology. >>>>>>>> RFC 6020 clearly says that the tree is the rpc reply instance >>>>>>>> document, so it is a different document whose root node coincides with >>>>>>>> <rpc-reply>. The problem of 6020bis is that we need a definition >>>>>>>> that's independent of XML, and that's not so easy, but I agree with >>>>>>>> Martin that nothing should change for relative paths. >>>>>>> I'm not against the new accessible tree. That nothing should change >>>>>>> for relative paths is a given, IMO. So what about absolute location >>>>>>> paths? >>>>>>> >>>>>>> The previous accessible tree for a "when" expression under "output" >>>>>>> was: >>>>>>> >>>>>>> <root> >>>>>>> +- x:bar >>>>>> No it was: >>>>>> >>>>>> <root> >>>>>> +-- nc:rpc-reply >>>>>> +- x:bar >>>>>> >>>>>>> and now it is: >>>>>>> >>>>>>> <root> >>>>>>> +- x:foo >>>>>>> +- x:bar >>>>>>> >>>>>>> The absolute path to "x:bar" was: >>>>>>> >>>>>>> /x:bar >>>>>> /nc:rpc-reply/x:bar >>>>> No. How do you explain the different wording for "input" when compared >>>>> to "output" (6020, 7.19.5): >>>>> >>>>> o If the context node represents RPC input parameters, the tree is >>>>> the RPC XML instance document. The XPath root node has the >>>>> element representing the RPC operation being defined as the only >>>>> child. >>>>> >>>>> o If the context node represents RPC output parameters, the tree is >>>>> the RPC reply instance document. The XPath root node has the >>>>> elements representing the RPC output parameters as children. >>>>> >>>>> "XPath root node has the _element_ representing the RPC operation as >>>>> the _only child_" vs. "XPath root node has the _elements_ representing >>>>> the RPC output as _children_". >>>>> >>>>> This is different from what 6020bis-09 is saying. The latter >>>>> "equalized" accessible trees for "input" and "output". What I am >>>>> asking is whether this confilcts with 1.1 charter. >>>> You're right, but the entire thing is underspecifed in 6020. In the >>>> example you had: >>>> >>>> rpc foo { >>>> output { >>>> uses my-stuff { >>>> when "..."; >>>> } >>>> } >>>> } >>>> >>>> and if you go by 6020, there is no context node for the when >>>> expression, and the accessible tree is defined in terms of the context >>>> node. >>>> >>>> Yes this is different in 1.1, but I think we're specifying rules for >>>> something that wasn't specified, and fix inconsistencies. >>>> >>>>> You could never refer to "nc:rpc-reply" as anything other that the >>>>> document root in 1.0 ("/") . You could never refer to "nc:rpc" either, >>>>> only to "x:foo". >>>> It depends on how you interpret the words: "the tree is the RPC reply >>>> instance document." >>> There is no room for misinterpreting what an XPath root node is (next >>> sentence). Even if the processing is actually done on an RPC reply >>> instance document, an RPC instance document or a notification instance >>> document, "nc:rpc-reply", "nc:rpc" and "ncEvent:notification" are >>> simply not part of the YANG XPath model as anything else than a root >>> node ("/") and they never were. The QNames previously listed do not >>> exist in this model. >>> >>>>>>> and is now: >>>>>>> >>>>>>> /x:foo/x:bar >>>>>>> >>>>>>> and this needs to be taken into account for at least relative paths to >>>>>>> stay the same. Again, the root node is "/" in any case. So the context >>>>>>> node needs to be set explicitly "/x:foo" for this corner case. I dare >>>>>>> say it is not even a corner case. There is a similar YANG pattern to >>>>>>> my "my-rpc" example in ietf-netconf-notifications for a >>>>>>> "notification". >>>>>> I think what needs to be done is to clarify that the context node for >>>>>> when/must in input/output or uses in input/output is the node >>>>>> representing the rpc. Note that this is unspecified in 6020. >>>>> True. It is unspecified. For notifications also, yet >>>>> ietf-netconf-notifications practices it. >>>> It just uses relative paths, in places where the context node is >>>> well-defined. >>> The specific definition I had in mind is netconf-confirmed-commit >>> "notification" (trimmed): >>> >>> notification netconf-confirmed-commit { >>> uses common-session-parms { >>> when "confirm-event != 'timeout'"; >>> } >>> } >>> >>> The context node for this "when" is as unspecified as in my original >>> example for "output" per 6020 (no data node ancestor to "uses"). And >>> in 6020bis-09 the context node now defaults to root node (not >>> root/document element)! >> As I wrote before, this needs to be fixed. We need to take the >> node representing the notification (or rpc) into account. Do you >> agree? > > I agree. The root node is acceptable only if none of these ancestors are > found: a data node, node representing a notification, node representing an > rpc, node representing rpc output.
The latter is somewhat more peculiar because it doesn't appear in XML instances - the others do. I think it would be useful to include a section describing the data tree, its properties, and how it maps to XPath. This is a bit difficult prospect though given that 6020bis is already in the (second) WGLC. Lada > > Jernej > >> >>> So if I take >>> ietf-netconf-notifications@2012-02-06 and add a "yang-version 1.1;" to >>> it, the module will break. >>> Furthermore the absolute XPath location path for confirm-event node is >>> "/ncn:netconf-confirmed-commit/ncn:confirm-event", not >>> "/ncEvent:notification/ncn:netconf-confirmed-commit/ncn:confirm-event", >>> which is what you seem to be saying. >> No, you are right. >> >> >> /martin >> >> >>> If this is what the intention >>> was, several errata need to be posted for 6020. We implement the 1.0 >>> accessible tree the way I have been describing, and yes, we do >>> implement absolute location paths. >>> >>> XPATH, 5.1 (http://www.w3.org/TR/1999/REC-xpath-19991116/#data-model): >>> The root node is the root of the tree. A root node does not occur >>> except as the root of the tree. The element node for the document >>> element is a child of the root node. >>> >>> 6020: >>> >>> The data model used in the XPath expressions is the same as that used >>> in XPath 1.0 >>> >>> [XPATH<https://tools.ietf.org/html/draft-ietf-netmod-rfc6020bis-09#ref-XPATH>], >>> with the same extension for root node children >>> as used by XSLT 1.0 >>> >>> [XSLT<https://tools.ietf.org/html/draft-ietf-netmod-rfc6020bis-09#ref-XSLT>] >>> (Section 3.1). Specifically, it means >>> that the root node may have any number of element nodes as its >>> children. >>> >>> o data node: A node in the schema tree that can be instantiated in a >>> data tree. One of container, leaf, leaf-list, list, and anyxml. >>> >>> o If the "when" statement is a child of a "uses", "choice", or >>> "case" statement, then the context node is the closest ancestor >>> node to the "uses", "choice", or "case" node that is also a data >>> node. >>> >>> o If the context node represents notification content, the tree is >>> the notification XML instance document. The XPath root node has >>> the element representing the notification being defined as the >>> only child. >>> >>> 6020bis-09: >>> >>> The data model used in the XPath expressions is the same as that used >>> in XPath 1.0 [XPATH], with the same extension for root node children >>> as used by XSLT 1.0 [XSLT] (Section 3.1). Specifically, it means >>> that the root node may have any number of element nodes as its >>> children. >>> >>> o data node: A node in the schema tree that can be instantiated in a >>> data tree. One of container, leaf, leaf-list, list, anydata, and >>> anyxml. >>> >>> o If the XPath expression is defined in a substatement to a >>> "notification" statement, the accessible tree is the notification >>> instance, all state data in the server, and the running >>> configuration datastore. If the notification is defined on the >>> top-level in a module, then the root node has the node >>> representing the notification being defined and all top-level data >>> nodes in all modules as children. Otherwise, the root node has >>> all top-level data nodes in all modules as children. >>> >>> o If the "when" statement is a child of a "uses", "choice", or >>> "case" statement, then the context node is the closest ancestor >>> node to the "uses", "choice", or "case" node that is also a data >>> node. If no such node exists, the context node is the root node. >>> The accessible tree is tentatively altered during the processing >>> of the XPath expression by removing all instances (if any) of the >>> nodes added by the "uses", "choice", or "case" statement. >>> >>> >>> I hope this clarifies what my previous email was saying about >>> ietf-netconf-notifications. The accessible tree for "output" is a >>> different issue. >>> >>> (PS: I've been having trouble replying to the mailing list ever since >>> we migrated our mail server which is why my previous message was not >>> sent to the mailing list and Martin seemed to be replying to thin >>> air.) >>> >>> Jernej >>> >>>> >>>> /martin >>>> >>>> >>>> >>>>> Jernej >>>>> >>>>>> /martin >>>>>> >>>>>> >>>>>> >>>>>>> Jernej >>>>>>> >>>>>>>> Lada >>>>>>>> >>>>>>>>> Jernej >>>>>>>>> >>>>>>>>>> If an absolute path is used, it would be: >>>>>>>>>> >>>>>>>>>> when "/nc:rpc-reply/x:specific-param = 'foo'"; // 1.0 >>>>>>>>>> when "/x:my-rpc/x:specific-param = 'foo'"; // 1.1 >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> I wonder if any implementation of 1.0 supports this absolute form. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> /martin >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> } >>>>>>>>>>> leaf specific-param { >>>>>>>>>>> type string; >>>>>>>>>>> } >>>>>>>>>>> } >>>>>>>>>>> } >>>>>>>>>>> >>>>>>>>>>> Jernej >>>>>>>>>>> >>>>>>>>>>>> /martin >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>> Thanks, Lada >>>>>>>>>>>>> >>>>>>>>>>>>> Martin Bjorklund <[email protected]> writes: >>>>>>>>>>>>> >>>>>>>>>>>>>> Ladislav Lhotka <[email protected]> wrote: >>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Y02-01 allows "must" as a substatement of "input", "output" and >>>>>>>>>>>>>>> "notification" but for these cases the specification of the >>>>>>>>>>>>>>> context >>>>>>>>>>>>>>> node in sec. 7.5.3 doesn't work. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> o The context node is the node in the accessible tree for >>>>>>>>>>>>>>> which >>>>>>>>>>>>>>> the >>>>>>>>>>>>>>> "must" statement is defined. >>>>>>>>>>>>>> You are right. But note how the accessible tree is defined. >>>>>>>>>>>>>> There >>>>>>>>>>>>>> is >>>>>>>>>>>>>> a node for the operation / notification. This node should be the >>>>>>>>>>>>>> context node: >>>>>>>>>>>>>> >>>>>>>>>>>>>> o If the "must" statement is a substatement of a >>>>>>>>>>>>>> "notification" >>>>>>>>>>>>>> statement, the context node is the node representing >>>>>>>>>>>>>> the >>>>>>>>>>>>>> notification in the accessible tree. >>>>>>>>>>>>>> >>>>>>>>>>>>>> o If the "must" statement is a substatement of a "input" >>>>>>>>>>>>>> statement, the context node is the node representing >>>>>>>>>>>>>> the >>>>>>>>>>>>>> operation in the accessible tree. >>>>>>>>>>>>>> >>>>>>>>>>>>>> o If the "must" statement is a substatement of a "output" >>>>>>>>>>>>>> statement, the context node is the node representing >>>>>>>>>>>>>> the >>>>>>>>>>>>>> operation in the accessible tree. >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> /martin >>>>>>>>>>>>> -- >>>>>>>>>>>>> Ladislav Lhotka, CZ.NIC Labs >>>>>>>>>>>>> PGP Key ID: E74E8C0C >>>>>>>>>>>>> >>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>> 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 >>>>>>>> -- >>>>>>>> Ladislav Lhotka, CZ.NIC Labs >>>>>>>> PGP Key ID: E74E8C0C >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> 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 > > _______________________________________________ > netmod mailing list > [email protected] > https://www.ietf.org/mailman/listinfo/netmod -- Ladislav Lhotka, CZ.NIC Labs PGP Key ID: E74E8C0C _______________________________________________ netmod mailing list [email protected] https://www.ietf.org/mailman/listinfo/netmod
