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.

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

Reply via email to