> Michal Vaško <mva...@cesnet.cz> wrote:
> > 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?
> 
> Compare with this:
> 
>      grouping mylist_wrapper {
>          list mylist {
>              key "name";
>              unique "value";
>              must "value > 42";
>              leaf name {
>                  type string;
>              }
>              leaf value {
>                  type uint32;
>              }
>          }
>      }
> 
> I think the rules for the prefixes in "unique" should be the same as
> for "must".  So I think that the correct syntax is to not use any
> prefix in "unique".
> 
> And the deviation that adds a unique statement look correct.

Thanks for the reply but I do not think you have answered my question. Please 
formulate a formal rule how to assign modules to non-prefixed identifiers, 
whether they be in "unique", "must", or any other statement with identifiers. 
That is what I need to implement it properly and I am simply not able to come 
up with any that would be consistent and compliant with the specification.

> /martin
> 
> > 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

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

Reply via email to