On 04/04/2022 17:16, Andy Bierman wrote:


On Mon, Apr 4, 2022 at 4:48 AM Jernej Tuljak <jernej.tul...@mg-soft.si> wrote:

    On 01/04/2022 15:49, Andy Bierman wrote:


    On Fri, Apr 1, 2022 at 4:24 AM Kent Watsen <k...@watsen.net> wrote:


        Hi Jernej,

        > RFC7950, 7.14.4. says:
        >
        >    Input parameters are encoded as child XML elements to
        the rpc node's
        >    XML element, in the same order as they are defined
        within the "input"
        >    statement.
        >
        > For the following model:
        >
        > module b {
        >   namespace "b:uri";
        >   prefix b;
        >
        >   grouping params {
        >     container params {
        >       leaf x {
        >         type string;
        >       }
        >     }
        >   }
        >
        >   rpc foo {
        >     input {
        >       uses params {
        >         augment params {
        >           leaf y {
        >             type string;
        >           }
        >         }
        >       }
        >     }
        >   }
        > }
        >
        > If both "leaf" data nodes are instantiated (XML encoding)
        as part of <rpc> for "foo", does <x> come before or after <y>
        (in document order)?

        Augmented-in nodes come after other nodes.



    Maybe this is an implementation convention, but the RFC says they
    are encoded in any order.
    https://datatracker.ietf.org/doc/html/rfc7950#section-7.17.2


    You are referring to this:

       When a node is augmented, the augmenting child nodes are encoded as
       subelements to the augmented node, in any order.

    This implies interleaving of augmenting and non-augmenting child
    nodes within "input" parameters for XML encoding?


There is no data node order defined except in 4 places:
  - rpc or action input (just the child nodes or all descendants?)
  - rpc or action output  (just the child nodes or all descendants?)
  - ordered by user applies to list and leaf-list entries
    (not the nodes within a list, just the list entries themselves)
  - list key leafs are encoded in key-stmt order, before other list child nodes.     This is true even if the list is affected by previous 3 rules (but this is not specified)

Additionally, there are interleaving rules for list and leaf-list entries.

   The XML elements representing
   list entries MAY be interleaved with elements for siblings of the
   list, unless the list defines RPC or action input or output
   parameters.

   The XML elements
   representing leaf-list entries MAY be interleaved with elements for
   siblings of the leaf-list, unless the leaf-list defines RPC or action
   input or output parameters.

Until augmentation comes along?


It is not clear if the phrase "in any order" (appearing about a dozen times)
is in addition to these rules or instead of them.

I'm not convinced of your interpretation of "in any order" in text you were originally referring to (and I later quoted). No matter how many times I read that, the "in any order" there only becomes relevant if there is more than one augmenting child present - to me, the intention behind that text was to handle multiple augments targeting the same node, not to introduce interleaving with non-augmenting children.

There should be text present in that section clarifying what that sentence means in contexts where order matters.


What about an 'anyxml' or  'anydata' for a <config> node?
Since it is a terminal node, it could be interpreted that it is ordered,
but it is converted to regular nodes when applied to a datastore.

The way I see it, only the node representing the <config> node is an input/output parameter. The content is an opaque blob of data. No different to a leaf of type binary, which contains bytes of an XML document.

With such ambiguity in the RFC it would not be surprising if implementations chose to ignore these rules entirely and just accepted RPC payloads with arbitrary order of their content, even for the cases where things are somewhat clear. Or hope that all other implementations follow the same implementation convention.

Jernej



Andy



    Jernej


        I’ve always wished there were a way to specify where they’re
        placed, for readability, but it’s too inconsequential to
        raise as an issue here.


    There is no canonical order defined for any schema nodes.
    There is no order at all defined for top-level or augmenting
    schema nodes.



        > Jernej

        Kent


    Andy

        _______________________________________________
        netmod mailing list
        netmod@ietf.org
        https://www.ietf.org/mailman/listinfo/netmod


_______________________________________________
netmod mailing list
netmod@ietf.org
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to