Hello, I would like to get some input for a use-case I came across, which to me does not seem to have any consistent rules that can be applied.
module mod_b { namespace "x:example:mod_b"; prefix "mb"; grouping mylist_wrapper { list mylist { key "name"; unique "value"; leaf name { type string; } leaf value { type uint32; } } } list mylist2 { key "a"; leaf a { type string; } leaf b { type string; } } } module mod_a { namespace "x:example:mod_a"; prefix "ma"; import mod_b { prefix "mb"; } container root { uses mb:mylist_wrapper; } augment /mb:mylist2 { leaf c { type string; } } deviation /mb:mylist2 { deviate add { unique "mb:b c"; } } } The focus is on the "unique" statements and how to resolve non-prefixed identifiers. RFC 7950 says that the argument is a "list of schema node identifiers"[1], which use "current module" for non-prefixed identifiers[2]. I have asked on this mailing list a few years back what current module means and the answer I got was the module where the statement is defined. So let's get to the examples. As they are written, the unique in "mylist" should be wrong because the node "value" belongs to the module "mod_a" when the grouping is instantiated there, but unique is defined in the module "mod_b". But even if we use the other understanding of current module and interpret is as the module of the context node of the statement (corresponds to the "current()" XPath function), then the other "unique" in the deviation cannot be resolved. It is referencing node "c", which belongs to the module "mod_a" (added by an augment) but the current module would then be "mod_b". To summarize, if strictly following the specs, the "unique" in the "mylist" should probably reference "value" with a prefix, but that is not possible because "mod_a" is not even imported and it generally does not make sense. But then I cannot think of any consistent rule to successfully resolve both "unique" statements in this example. Can anyone help me with this, please? Finally, I am asking because I am trying to implement this correctly in yanglint. I have also tried to test these examples with pyang, which, however, seems to not have any consistent rules applied because it loads these examples without warnings. No warnings are printed even if the "unique" in the deviation is changed to "b c", which is definitely wrong since node "b" belongs to "mod_b" and node "c" belongs to "mod_a". Thanks, Michal [1] https://datatracker.ietf.org/doc/html/rfc7950#section-7.8.3 [2] https://datatracker.ietf.org/doc/html/rfc7950#section-6.5 _______________________________________________ netmod mailing list netmod@ietf.org https://www.ietf.org/mailman/listinfo/netmod