On 16/04/2018 17:07, Andy Bierman wrote:
On Mon, Apr 16, 2018 at 8:44 AM, Robert Wilton <rwil...@cisco.com
<mailto: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.
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.
Thanks,
Rob
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
<mailto: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 <mailto:netmod@ietf.org>
https://www.ietf.org/mailman/listinfo/netmod
<https://www.ietf.org/mailman/listinfo/netmod>
_______________________________________________
netmod mailing list
netmod@ietf.org <mailto:netmod@ietf.org>
https://www.ietf.org/mailman/listinfo/netmod
<https://www.ietf.org/mailman/listinfo/netmod>
_______________________________________________
netmod mailing list
netmod@ietf.org
https://www.ietf.org/mailman/listinfo/netmod