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)! 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. 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