Re: [netmod] Use XML namespaces in YANG document examples

Tim Bray <tbray@textuality.com> Thu, 03 February 2022 17:49 UTC

Return-Path: <tbray@textuality.com>
X-Original-To: netmod@ietfa.amsl.com
Delivered-To: netmod@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6B2043A1248 for <netmod@ietfa.amsl.com>; Thu, 3 Feb 2022 09:49:47 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.897
X-Spam-Level:
X-Spam-Status: No, score=-1.897 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=textuality-com.20210112.gappssmtp.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jUR1rScMf_Gy for <netmod@ietfa.amsl.com>; Thu, 3 Feb 2022 09:49:42 -0800 (PST)
Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7851D3A1241 for <netmod@ietf.org>; Thu, 3 Feb 2022 09:49:41 -0800 (PST)
Received: by mail-lf1-x12e.google.com with SMTP id b9so7596884lfq.6 for <netmod@ietf.org>; Thu, 03 Feb 2022 09:49:41 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=textuality-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=iOzyzdrihNsLApQnbXIskMLx5esEXz1+Qdw315keRdY=; b=TtAFC7pXMm9Nl6a616bH+KKwHaEngx1kSmznCcIZPOS7ZXf83kEt8ozR2IZZooBRRe CJneIEivhCmX/HzaGUQxpQK9w1ZLlGaUUIEONBi+8ZcwjCzijzjE2NGyKz/7JQjyyYfg 482ObNGd/kEkOe1sXzYxhcGZiF5YLwPFpK5p4W6+oFZrk2S6DaNEuFg1E1coakgMMO8T t0EFcyf3E9sO7ljYsEkyPVmAWR/FyhchOyLDt5nu/OL1r9F+n7VObPJgLah6OBt4m+SJ Ri21e8cfQCAjkgxR74WB6RAymQ/Y3FgJ4YloPLHsowDciK/UnCuRq1l0nDCJhYcuhxor 0e9w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=iOzyzdrihNsLApQnbXIskMLx5esEXz1+Qdw315keRdY=; b=FgBfU0EpTyfAk+Hx28pqXuu8gVGLZVzXYNziYB9iqgklO0Em+uZGV3V6kdS5OOkGK/ IpKN2ZuHcr8fvsBb3O9TYrXJgbV/u6FciHAw2Utrr1SaW2Vy17hKpzVnODMILbfrmR9G JgpoKVb69JHcrDJ7RKHKBQ+zHqGNrHKz2xtCAHjj1jbE5LQBE3IpwadFk5v1O8eOOlJj l4VqGxIxoBPAbJcDwF76henj1NvHnxpTsxb7ziKhYc2oRq1Wyu9v6Kl4oQeFJm2uK3FZ V6u7wsPTDfaWqW6xPbpWbOT8GhaitQfX2iqMqGbyVm8wMAX2vJRQgwhFpZMOO/puhyAu +Trw==
X-Gm-Message-State: AOAM532/3tXgFeCpAoo0orEk7mfiHdEHKNem+/qFU9SMR3fBsc7KW/iL ZGOE6t29nsMPPLFPRHBdDsh9qOtDeMHg3eo6pu7eiw==
X-Google-Smtp-Source: ABdhPJz1GQOXtwyekigfTEgbCLc30bN6e0CSOpg2ph9yi/0U3tzDuPaRFqr1frvmV8kxXwLqW+IF7ctcWUys8JI3CYI=
X-Received: by 2002:a05:6512:3404:: with SMTP id i4mr22986211lfr.338.1643910577861; Thu, 03 Feb 2022 09:49:37 -0800 (PST)
MIME-Version: 1.0
References: <B6F5C201-A42B-47AB-9518-886C97EBA931@gmx.com> <AM7PR07MB624865498F51F41EFD26D723A0289@AM7PR07MB6248.eurprd07.prod.outlook.com> <CABCOCHSM0MdXwY5AKkSXvvxDqf_CDX6SamZtMJotrn4R8FQ7Bw@mail.gmail.com> <CAHBU6iucqMiyVdZncfTHdO=y7dqz=4i0UTqMRa+BBSp=1sTpSw@mail.gmail.com> <C2FC4904-F0BA-4992-9F50-090313CCD528@gmail.com>
In-Reply-To: <C2FC4904-F0BA-4992-9F50-090313CCD528@gmail.com>
From: Tim Bray <tbray@textuality.com>
Date: Thu, 03 Feb 2022 09:49:26 -0800
Message-ID: <CAHBU6iuZH1NTR0LAaiqdxSu3xdTyH_kBr4qRKQPBEOHCNfWLQg@mail.gmail.com>
To: Mahesh Jethanandani <mjethanandani@gmail.com>
Cc: Andy Bierman <andy@yumaworks.com>, "netmod@ietf.org" <netmod@ietf.org>, "dhc-chairs@ietf.org" <dhc-chairs@ietf.org>, "drafts-expert-review@iana.org" <drafts-expert-review@iana.org>, "Eric Vyncke (evyncke)" <evyncke@cisco.com>
Content-Type: multipart/alternative; boundary="000000000000095d7a05d720c2ce"
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/LyIoAtK4AX8aplfCsB25vE44rDc>
Subject: Re: [netmod] Use XML namespaces in YANG document examples
X-BeenThere: netmod@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NETMOD WG list <netmod.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/netmod>, <mailto:netmod-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/netmod/>
List-Post: <mailto:netmod@ietf.org>
List-Help: <mailto:netmod-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/netmod>, <mailto:netmod-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 03 Feb 2022 17:49:59 -0000

>> [mj] That is correct. We have been beaten up enough number of times for
not using the prefix defined by the YANG module. Is the suggestion to state
that in the draft?

Yes, or more simply, the suggestion is to just say what's going on: That
the prefix you use inside the element has to be the same as the prefix
attached to the
particular YANG namespace. And because of that, to process YANG correctly
you need to use an XML tool that makes available the namespace/prefix
mappings.

I think for YANG people this is all just understood and wired into the
software tools. But since it's a constraint that could cause failure to
interoperate I think it should be
stated explicitly.

On Thu, Feb 3, 2022 at 9:43 AM Mahesh Jethanandani <mjethanandani@gmail.com>
wrote:

> Hi Tim,
>
> See inline with [mj] as I cannot seem to insert my comments between the
> text without distinguishing it from the rest of the thread.
>
> On Feb 3, 2022, at 9:07 AM, Tim Bray <tbray@textuality.com> wrote:
>
> Hi everyone, I'm the person on the XML directorate who raised this issue
> in conversation with Ian Farrer in a review of draft-ietf-dhc-dhcpv6-yang.
> After a lot of back and forth, I think we came to agreement on the
> necessary language to address this issue.  I believe that language has.
> been included in draft-ietf-i2nsf-nsf-monitoring-data-model, see
> https://datatracker.ietf.org/doc/html/draft-ietf-i2nsf-nsf-monitoring-data-model-13#section-10
>
> I've excerpted an email exchange with Ian Farrer that I think makes the
> potential problem concrete:
>
> Hi Ian, I don't think we've met.  I'm the grumpy person on the "XML
> Directorate" who's been whining about the namespace prefixes in YANG
> internet-drafts. One quick issue: I'm a little surprised, is anyone still
> using XML in this kind of thing any more in 2021?
>
> Anyhow, below I've excerpted the issue that's still troubling me. Here's
> the XML:
>
>  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
>      xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">
>      <interface>
>        <name>eth0</name>
>        <type>ianaift:ethernetCsmacd</type>
>        <description>DHCPv6 Relay Interface</description>
>        <enabled>true</enabled>
>      </interface>
>    </interfaces>
>
> So my question is, I see the XML namespace prefix and the prefix for the
> <type> element content are identical. Is this a coincidence?  For example,
> would the following work, changing the namespace prefix to "foo"?
>
>
>  <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
>      xmlns:foo="urn:ietf:params:xml:ns:yang:iana-if-type">
>      <interface>
>        <name>eth0</name>
>        <type>ianaift:ethernetCsmacd</type>
>        <description>DHCPv6 Relay Interface</description>
>        <enabled>true</enabled>
>      </interface>
>    </interfaces>
>
> [if - This example would not work and fails validation with yanglint:
>
> $ yanglint --strict --verbose -t config -p $IETFYANG
> $IETFYANG/iana-if-type.yang $IETFYANG/ietf-interfaces.yang test1.xml
> err : Invalid value "ianaift:ethernetCsmacd" in "type" element.
> (/ietf-interfaces:interfaces/interface[name='eth0']/type)
> ]
>
> [mj] It would work if the type field used the prefix that was defined, i.e.
> <type>foo:ethernetCsmacd</type>
>
>
> Follow-up, would the following work, foo for both namespace and content
> prefix?
>
> <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
>      xmlns:foo="urn:ietf:params:xml:ns:yang:iana-if-type">
>      <interface>
>        <name>eth0</name>
>        <type>foo:ethernetCsmacd</type>
>        <description>DHCPv6 Relay Interface</description>
>        <enabled>true</enabled>
>      </interface>
>    </interfaces>
>
> Thanks in advance!
>
>
> [if - This does validate with yanglint, however the convention in the IETF
> examples I’ve seen seems to be to use the prefix that is defined in the
> original YANG module for imports for consistency, e.g. (from
> iana-if-type.yang):
>
> [mj] That is correct. We have been beaten up enough number of times for
> not using the prefix defined by the YANG module. Is the suggestion to state
> that in the draft?
>
>
> On Thu, Feb 3, 2022 at 8:03 AM Andy Bierman <andy@yumaworks.com> wrote:
>
>> Hi,
>>
>> I think the text from sec 4 refers to the usage within an application.
>> The XML instance document is the on-the-wire representation and
>> the I-D example looks correct.
>>
>> https://www.w3.org/TR/xml-names/#ns-qualnames
>>
>>
>> Andy
>>
>>
>> On Thu, Feb 3, 2022 at 3:53 AM tom petch <ietfc@btconnect.com> wrote:
>>
>>> From: netmod <netmod-bounces@ietf.org> on behalf of ianfarrer@gmx.com <
>>> ianfarrer@gmx.com>
>>> Sent: 03 February 2022 09:37
>>>
>>> Hi,
>>>
>>> A draft I have been working on (
>>> https://datatracker.ietf.org/doc/draft-ietf-dhc-dhcpv6-yang/) contains
>>> a number of XML configuration examples. During the XML expert review, a
>>> question has been raised about the use of XML namespaces in these examples.
>>> I’m raising it here as I don’t have the XML knowledge to answer.
>>>
>>> <tp>
>>>
>>> Ian
>>>
>>> This looks like the issue I raised on this list 14jan2022 with a subject
>>> line of
>>> XML and prefix
>>> although I have not checked that the usage is exactly the same; the 'XML
>>> Expert' comment would appear to be.
>>>
>>> Tom Petch
>>>
>>> In my example:
>>>
>>> <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"
>>>
>>>      xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">
>>>      <interface>
>>>        <name>eth0</name>
>>>        <type>ianaift:ethernetCsmacd</type>
>>>        <description>DHCPv6 Relay Interface</description>
>>>        <enabled>true</enabled>
>>>      </interface>
>>>    </interfaces>
>>>
>>> The question is related to the use of the ‘ianaift:’ prefix. This is
>>> quite commonly use in XML examples in YANG documents (e.g. RFC8344) so I
>>> think the question is generally applicable.
>>>
>>> The specific comments from the expert review are:
>>>
>>> -
>>> For the correct processing of these documents requires that whatever XML
>>> software is being used makes available to application code the namespace
>>> prefixes.
>>>
>>> Whilst the recommended tools (e.g. yanglint) provides this function, it
>>> is not an XML best practice. Quoting from the Namespaces in XML, section 4:
>>> "Note that the prefix functions only as a placeholder for a namespace name.
>>> Applications SHOULD use the namespace name, not the prefix, in constructing
>>> names whose scope extends beyond the containing document.”
>>>
>>> I think that violating a SHOULD assertion in a W3C standard is a problem.
>>>
>>> There is no requirement for XML processors to provide this prefix
>>> information, and software that (quite legally) doesn't, will not work
>>> correctly with YANG documents constructed as specified in this I-D.
>>>
>>> 1, YANG specifications should note this fact and specify that software
>>> which is used to process YANG documents MUST provide an interface such that
>>> applications can retrieve the prefix-namespace mappings.
>>> 2, For constructs such as <type>ianaift:ethernetCsmacd</type> the
>>> Internet-Draft should specify that the prefix ("ianaift" in this case) MUST
>>> be identical to the xmlns namespace prefix representing the namespace name
>>> urn:ietf:params:xml:ns:yang:iana-if-type
>>> 3, Alternately, the draft could specify that for the namespace
>>> urn:ietf:params:xml:ns:yang:iana-if-type, the XML namespace prefix ianaift
>>> MUST be used. Another XML bad practice because software that generates XML
>>> programmatically should feel free to generate synthetic prefixes without
>>> breaking the content, but at least this would solve the problem.
>>> -
>>>
>>> BCP216 (RFC8407 - Guidelines for Authors and Reviewers of Documents
>>> Containing YANG modules) doesn’t make any mention of how XML namespaces
>>> should be used, only that example XML/ JSON should be included and that
>>> these examples need to be validated (pyang and yanglint are mentioned for
>>> this).
>>>
>>> Does this guidance need to be updated to reflect expert review comments
>>> above?
>>>
>>> Thanks,
>>> Ian
>>>
>>>
>>>
>>> _______________________________________________
>>> 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
>
>
>
> Mahesh Jethanandani
> mjethanandani@gmail.com
>
>
>
>
>
>
>