Hi Jernej,
 Sorry, the path should be /instances/instance/name.

I do know the specifications about how to resolve XPATH of RFC7950, and I wrote 
a YANG parser which comply with these specifications.
When I compile YANG modules like the example, I get an error.

Yes, if the author write path as "/a:instances/a:instance/a:name", it's 
correct. But if you are the author, the path "/instances/instance/name" also 
should point to the schema node defined in module a, not point to the module b 
where the typedef is used.

The specification of RFC7950 force author to write prefixed names in xpath if 
the xpath is used in groupings and typedefs. I think it may be unreasonable.

-----邮件原件-----
发件人: Jernej Tuljak [mailto:[email protected]] 
发送时间: 2023年1月12日 23:02
收件人: Fengchong (frank) <[email protected]>; Ladislav Lhotka 
<[email protected]>; [email protected]
主题: Re: [netmod] 答复: question about name without prefix in XPath expression

On 12/01/2023 02:24, Fengchong (frank) wrote:
> Lada,
>    For example:
> Module a {
>     namespace "http://example.com/a";;
>     typedef instance-ref {
>         type leafref {
>            path "instances/instance/name";
>         }
>     }
>     container instances {
>       list instance {
>          key name;
>          leaf name {
>            type string;
>          }
>          ....
>       }
>     }
> }
>
> module b import module a, and use the instance-ref defined by module a
>
> module b {
>    namespace "http://example.com/b";;
>    import a {
>      prefix a;
>    }
>    list interface {
>      key name;
>      leaf name {
>        ...
>      }
>      leaf instance {
>        type a:instance-ref;
>      }
>    }
> }
>
> According section 6.4.1, the namespace of names without prefix belong 
> to the same namespace where the typedefs are used. So, The path 
> instances/instance/name,the namespace of these 3 names should be 
> http://example.com/b, but module b have no these definitions. I think it's 
> unreasonable.
>
> The meaning of author of module a should be reference the instance name 
> defined in module a, not module b.
>
> So, IMO, the namespace of un-prefixed names in absolute location XPATH should 
> be the same with the namespace of the module where they are defined. The 
> context node of absolute path should be the module where they are defined.

Your path is relative, however - making your example not valid YANG with that 
specific expression. You probably meant "/instances/instance/name"?

The context node is always the leaf/leaf-list for which the type is defined, 
regardless of whether the path expression is relative or absolute (Section 
9.9.2.):

    The "path" XPath expression is conceptually evaluated in the
    following context, in addition to the definition in Section 6.4.1:

    o  If the "path" statement is defined within a typedef, the context
       node is the leaf or leaf-list node in the data tree that
       references the typedef.

    o  Otherwise, the context node is the node in the data tree for which
       the "path" statement is defined.

A YANG author that writes their YANG with accordance to best practices would 
write that expression as "/a:instances/a:instance/a:name" 
(assuming prefix "a"), since RFC 8407 instructs to do so (Section 4.2.):

    The following guidelines apply to prefix usage of the current (local)
    module:

    o  The local module prefix SHOULD be used instead of no prefix in all
       path expressions.

Jernej

>
> -----邮件原件-----
> 发件人: Ladislav Lhotka [mailto:[email protected]]
> 发送时间: 2023年1月11日 15:42
> 收件人: Fengchong (frank) <[email protected]>; [email protected]
> 主题: Re: [netmod] question about name without prefix in XPath 
> expression
>
>
>
> Dne 11. 01. 23 v 4:16 Fengchong (frank) napsal(a):
>> Hi all,
>>
>> In RFC 7950 section 6.4.1:
>>
>>      o  Names without a namespace prefix belong to the same namespace 
>> as
>>
>>         the identifier of the current node.  Inside a grouping, that
>>
>>         namespace is affected by where the grouping is used (see
>>
>> Section 7.13 <https://www.rfc-editor.org/rfc/rfc7950#section-7.13>).
>> Inside a typedef, that namespace is affected by
>>
>>         where the typedef is referenced.  If a typedef is defined and
>>
>>         referenced within a grouping, the namespace is affected by 
>> where
>>
>>         the grouping is used (see Section 7.13 
>> <https://www.rfc-editor.org/rfc/rfc7950#section-7.13>).
>>
>> and section 5.4:
>>
>>      Grouping, type, and identity names are resolved in the context 
>> in
>>
>>      which they are defined, rather than the context in which they 
>> are
>>
>>      used.  Users of groupings, typedefs, and identities are not 
>> required
>>
>>      to import modules or include submodules to satisfy all 
>> references
>>
>>      made by the original definition.  This behaves like static 
>> scoping in
>>
>>      a conventional programming language.
>>
>> I think these two section have some conflicts. If groupings and 
>> typedefs are resolved in the context where they are defined, why 
>> names without prefix belongs to the namespace where they are used?
> I don't think there is any conflict. The quoted text from 5.4 can actually be 
> expanded as "Grouping names, type names and identity names are resolved ..."
>
> I may be missing something because I also don't see the XPath expression part 
> that you have in the subject.
>
> Lada
>
>> The authors who defined the groupings and typedefs don’t know where 
>> these definitions are used, they only know the place where these 
>> definitions are defined.
>>
>>
>> _______________________________________________
>> netmod mailing list
>> [email protected]
>> https://www.ietf.org/mailman/listinfo/netmod
> --
> Ladislav Lhotka, CZ.NIC
> PGP Key ID: 0xB8F92B08A9F76C67
>
> _______________________________________________
> netmod mailing list
> [email protected]
> https://www.ietf.org/mailman/listinfo/netmod


_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to