On Wed, Apr 18, 2018 at 10:26 AM, Kent Watsen <kwat...@juniper.net> wrote:

> I like Andy's proposal below, for the argument of the 'yang-data'
> statement to encode some meta-information regarding the context/namespace
> in which it's used, but I wonder how it really works.  For instance, would
> "top" and "error-info" be the only allowed base-path values for the
> argument? and what is the value of the remainder of the path?  are we
> expecting for there to be some kind us 'uses' statement that can refer to
> just the base-path component to implement substitution-group like behavior?
>
>
>


If we want to avoid defining these contexts, then we could just define root
vs. nonroot.

e,g:

x:yang-data /mydef1 {
  container foo;
}

x:yang-data mydef2 {
  leaf x;
  leaf y;
  container z;
}


Only an argument starting with '/' would be treated as a top-level data
node.

All other yang-data definitions are not allowed to appear as a root node.
The context where this yang-data is used is completely proprietary.
The mechanism used to expand this yang-data as if it was a grouping
is completely proprietary.

The augment-yang-data extension only applies to top-level yang-data
definitions.

However, my preference is to only standardize top-level yang-data.
I do not see any need for the other form since all functionality can be
achieved with a grouping and a proprietary YANG extension.

Kent // contributor
>

Andy


>
>
>
>
> On 4/16/18, 1:05 PM, "netmod on behalf of Andy Bierman" <
> netmod-boun...@ietf.org on behalf of a...@yumaworks.com> wrote:
>
>
>
>
>
>
>
> On Mon, Apr 16, 2018 at 9:46 AM, Robert Wilton <rwil...@cisco.com> wrote:
>
>
>
>
>
> On 16/04/2018 17:07, Andy Bierman wrote:
>
>
>
>
>
> On Mon, Apr 16, 2018 at 8:44 AM, Robert Wilton <rwil...@cisco.com> wrote:
>
> Don't groupings have a somewhat similar concern?
>
>  E.g. if two groupings define the same data node name and are used at the
> same point then you would get a namespace clash, but YANG does not disallow
> the groupings:
>
>
>      grouping foo_widget {
>
>        leaf name {
>
>          type string;
>
>          description "Name of my foo widget";
>
>        }
>
>      }
>
>
>
>      grouping bar_widget {
>
>        leaf name {
>
>          type string;
>
>          description "Name of my bar widget";
>
>        }
>
>      }
>
>
>
>      container all_widgets {
>
>        uses foo_widget;
>
>        uses bar_widget;
>
>      }
>
>
> The principal difference here, is that the compiler can easily check and
> reject the conflict at the uses statements.
>
> Hence I think that it would be good if we could find a solution for
> yang-data-ext that doesn't not require all root yang-data nodes to be
> unique, since that feels somewhat clunky.  I.e. my preference is to keep
> them less restrictive, as Martin has proposed, if this is feasible.
>
>
>
>
>
>
>
> It is not clunky that 2 top-level YANG data nodes in the same module
>
> have unique names. This is simple and deterministic.
>
> This restriction has not been a problem so far.
>
> I agree with the statements above.
>
> But it is not clear to me that yang-data-ext is really defining new top
> level data nodes that are part of the same tree/namespace as the
> configuration/state nodes.  In Martin's examples they were used within
> RPCs, and it the forcing the names to be unique in that context that I
> think would be clunky.  E.g. in Martin's example forcing different names
> for "reason" and "user-info" doesn't seem to be helpful.
>
>
>
>
>
>
> The yang-data statement has to define the context or new abstract
> namespace,
>
> or whatever this hack is called.
>
> Perhaps.  I think that this depends on how they are used.
>
>
>
>
>
> The yang-data statement has to specify the expansion point, or
>
> at least specify that it is or is not the top-level.
>
>
>
>   yang-data top/name1 {
>
>       container mydata;
>
>   }
>
>
>
> where context is something like "top" or "error-info", etc.
>
>
>
> It is trivial to use groupings if the same set of nodes needs to be used
> in different contexts:
>
>
>
>
>   yang-data error-info/name1 {
>
>       container mydata;
>
>   }
>
>
>
> Only the context named "top" is restricted to a resulting single-container
>
> and cannot have duplicate names.
>
>
>
> This is OK:
>
>
>
>   x:yang-data error-info/my-error1 {
>
>       leaf reason {}
>
>   }
>
>
>
>
>   x:yang-data error-info/my-error2 {
>
>       leaf reason {}
>
>   }
>
>
>
>
>
>
>
>
> Could a fix for this be something along the lines of:
>  - yang-data names must be unique amongst other top level data nodes
> within the module.
>  - if yang-data extensions are used at the top level then their name must
> be used as a single top level container.
>  - if a yang-data extension is used within another structure then the
> yang-data name is excluded, and the top level nodes defined in the
> yang-data definition are used ....
>
>
>   Every tool that implements yang-data has to be able
>
> to interpret a yang-data statement exactly the same way.
>
>
>
> If you want to reinvent XSD substitutionGroup, then do it right.
>
> I'm not familiar with them.  From a quick read, I don't see how they are
> related to the problem that we are trying to solve here.
>
>
>
>
>
> A substitutionGroup allows a point int the schema to be identified by name.
>
> Different elements can be defined that match this name, which then can be
>
> used (like a YANG choice) at the specified schema point.
>
> (e.g. error-info above is like a substitutionGroup)
>
>
>
>
>
>
>
> Thanks,
> Rob
>
>
>
> Andy
>
>
>
>
>
>
>
>
>
>
>
>
> Thanks,
> Rob
>
>
>
>
>
> Andy
>
>
>
>
>
> On 16/04/2018 15:36, Andy Bierman wrote:
>
> Hi,
>
>
>
> I am strongly opposed to this change because it breaks the rule in YANG 1..1
>
> that there cannot be 2 sibling nodes defined in the same module namespace..
>
>
>
> IMO since any yang-data nodes are ALLOWED to be used at the top-level,
>
> then these top-level nodes cannot have conflicting names.
>
>
>
> It is very important when parsing an instance document that the instance
> data
>
> can be associated with the correct schema.  This is not possible if the
>
> same top-level node has multiple yang-data nodes defined.
>
>
>
> If one needs to define data that is not top-level, (1) use
> augment-yang-data
>
> or (2) use a different module.
>
>
>
>
>
> Andy
>
>
>
>
>
>
>
> On Mon, Apr 16, 2018 at 5:56 AM, Martin Bjorklund <m...@tail-f.com> wrote:
>
> Hi,
>
> While preparing draft-ietf-netmod-yang-data-ext-02, it turned out that
> it is not clear what, if any, restrictions should be enforced for
> yang-data structures.  Even among the authors we have different ideas
> for how this should work.
>
> Background:
>
> In 8040, the original yang-data extension had a restriction that said
> that a yang-data structure MUST have exactly one container, since it
> wouldn't be possible to have a yang-data structure in an XML instance
> document otherwise.
>
> Since people want to use yang-data structures in other places, this
> restriction was lifted in the new draft:
>
>    There is no longer an assumption that a yang data structure can
>    only be used as a top-level abstraction, instead of nested within
>    some other data structure.
>
>
> With this in mind, here's a use case that I think we ought to support:
>
>   rpc my-first-rpc {
>     description
>       "Bla bla...
>        If an error occurs, <error-info> will contain an instance of
>        the yang-data structure 'my-first-rpc-error-info'.";
>     ...
>   }
>
>   yang-data my-first-rpc-error-info {
>     leaf reason { ... }
>     container user-info { ... }
>   }
>
>   rpc my-second-rpc {
>     description
>       "Bla bla...
>        If an error occurs, <error-info> will contain an instance of
>        the yang-data structure 'my-second-rpc-error-info'.";
>     ...
>   }
>
>   yang-data my-second-rpc-error-info {
>     leaf reason { ... }
>     leaf important-url { ... }
>   }
>
> (maybe in the future we could even have a YANG extension statement to
> formalize the description:
>
>    rpc my-first-rpc {
>      ...
>      opx:error-info-structure my-first-rpc-error-info;
>    }
>
> but this is not point now.)
>
>
>
>
>
>
>
> I see no reason to reinvent the grouping-stmt.
>
> You could easily say opx:error-info-structure argument is a grouping name
>
> as it is a yang-data name.
>
>
>
>
>
>
> In the example above, note that the leaf "reason" is present in both
> structures.  IMO this is not a problem, since these structures are
> used in different contexts.
>
> My point is that I think we should impose as few restrictions as
> possible to the yang-data extension.  It should be up to the user of
> yang-data to ensure that the structure is defined in such a way so
> that it can be used properly.  For example, a structure that is
> supposed to describe an XML instance document cannot define two leafs
> at the top level.
>
> If the WG agrees with what I wrote above, we need to change the
> augment-yang-data extension so that you would write for example:
>
>   yx:augment-yang-data /ex:my-first-rpc-error-info/ex:user-info {
>     ...
>   }
>
> Comments?
>
>
>
> /martin
>
> _______________________________________________
> netmod mailing list
> netmod@ietf.org
> https://www.ietf.org/mailman/listinfo/netmod
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.ietf.org_mailman_listinfo_netmod&d=DwMFaQ&c=HAkYuh63rsuhr6Scbfh0UjBXeMK-ndb3voDTXcWzoCI&r=9zkP0xnJUvZGJ9EPoOH7Yhqn2gsBYaGTvjISlaJdcZo&m=q6I_yKbXVoahv9h5I1wZiQMUeHLZ5XWuMohEYtypmzs&s=jECZMhypw9LtuxzuntkFNM-8lm7xpztYwDDLOxCM_8k&e=>
>
>
>
>
>
> _______________________________________________
>
> netmod mailing list
>
> netmod@ietf.org
>
> https://www.ietf.org/mailman/listinfo/netmod 
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__www.ietf.org_mailman_listinfo_netmod&d=DwMFaQ&c=HAkYuh63rsuhr6Scbfh0UjBXeMK-ndb3voDTXcWzoCI&r=9zkP0xnJUvZGJ9EPoOH7Yhqn2gsBYaGTvjISlaJdcZo&m=q6I_yKbXVoahv9h5I1wZiQMUeHLZ5XWuMohEYtypmzs&s=jECZMhypw9LtuxzuntkFNM-8lm7xpztYwDDLOxCM_8k&e=>
>
>
>
>
>
>
>
>
>
_______________________________________________
netmod mailing list
netmod@ietf.org
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to