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?

> 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

Reply via email to