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

Andy Bierman <andy@yumaworks.com> Thu, 03 February 2022 17:46 UTC

Return-Path: <andy@yumaworks.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 27E9A3A120A for <netmod@ietfa.amsl.com>; Thu, 3 Feb 2022 09:46:54 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.887
X-Spam-Level:
X-Spam-Status: No, score=-1.887 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, T_SPF_PERMERROR=0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=yumaworks-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 vOyTdcZMUD4j for <netmod@ietfa.amsl.com>; Thu, 3 Feb 2022 09:46:49 -0800 (PST)
Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) (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 CB1803A1208 for <netmod@ietf.org>; Thu, 3 Feb 2022 09:46:48 -0800 (PST)
Received: by mail-lf1-x133.google.com with SMTP id k13so7546230lfg.9 for <netmod@ietf.org>; Thu, 03 Feb 2022 09:46:48 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yumaworks-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=gcWZi9pEtbNc2KJrE7/0LY2pq0Tk2TMfZiyJGKTPu28=; b=K+7tYui5U555AIWZQUueEGmsc23P6LtQ4S1jWHTtKZkc59EiOqTLyzb0YHKOgEiM/h kO7CYQJnRmmjROBq3nhw8DfSNdDaG/v+vUge+gfS+kPR3KAZmosS+hIk1bzLyOa3fAfS UuaRXDU5Opy/DJv7Xqz7CXftvIuoTEhDqd4dSp9EuEdggSGE3BERZ+wu9oF2gcImw8b2 R1xZ1+6odYsgxqAXKqbR37avOjbhj+bn5ueEy+hBNZBoXU0cAOSwfy7vgja68/pnNEoa SXtFBC0/6HDkEFB8DxfQY5HyUI+ILxUjF9/VVnSKmuqMfB4E+qPDaPBx8njetnWTYX6W fSgA==
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=gcWZi9pEtbNc2KJrE7/0LY2pq0Tk2TMfZiyJGKTPu28=; b=HJSVZ1mL5kWViipS8GSgUjqPCH3N3U3toqqBcDOvAAxXYDxHtm5ImW4EcsyGPv76zp da9Wm19UMwaLjBILv2kRBoNOBb4Ik2Zx9z/f/KJKMcg7NkCmaHrHHXeg3Essc6BG2kQw Vwcx8za+Jydazxrf9mvPRr1AMaEKexUsDCcsUGCxZcw+K8k+m5+4wgwvqZvqAUCQZbtw 1rX8cMkeZL03his1wvXg2B1E4T15YgStLmE0rYLrDAjSsdv0oMqw711rgMXCirXoipNJ 1cc9ZpCW82XLpsCRFo47Gyr+98I/TrDUrmiIS9dFa5q88DEGBMDnk6aNwn/eDCU+mSM4 OgSw==
X-Gm-Message-State: AOAM530QA5vfxpQ2J9WKIIFNXgyZ6CfsgZ/LGLPwuBdGSfRTGkGa/1z2 k7jTlrY2aSuWcUIBxShLopFiggr7EoUEvtn+p5lBaw==
X-Google-Smtp-Source: ABdhPJyEAMnK8lYPgX8MIVdT++WGj1UHo+M2y1l1yKt8u/LjFV+UZFjcfxcvnD9GAmbQrjTxjx6M4BuUiEkzfoMR4u0=
X-Received: by 2002:ac2:41cb:: with SMTP id d11mr26238571lfi.10.1643910405958; Thu, 03 Feb 2022 09:46:45 -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>
In-Reply-To: <CAHBU6iucqMiyVdZncfTHdO=y7dqz=4i0UTqMRa+BBSp=1sTpSw@mail.gmail.com>
From: Andy Bierman <andy@yumaworks.com>
Date: Thu, 03 Feb 2022 09:46:35 -0800
Message-ID: <CABCOCHRLmi2mQoeEQcYS5b8=0wKUxGY7ntRhqSGLXje=nctgdA@mail.gmail.com>
To: Tim Bray <tbray@textuality.com>
Cc: tom petch <ietfc@btconnect.com>, "ianfarrer@gmx.com" <ianfarrer@gmx.com>, "netmod@ietf.org" <netmod@ietf.org>, "dhc-chairs@ietf.org" <dhc-chairs@ietf.org>, "Eric Vyncke (evyncke)" <evyncke@cisco.com>, "drafts-expert-review@iana.org" <drafts-expert-review@iana.org>
Content-Type: multipart/alternative; boundary="000000000000ca4ae505d720b759"
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/DoH_lHP0zkQy0O7NbhBuEbxw410>
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:46:54 -0000

Hi,


On Thu, 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 do not think this is consistent with the YANG definitions for identityref
in RFC 7950
 https://datatracker.ietf.org/doc/html/rfc7950#section-9.10.3

Implementations use the prefixed encoding shown in 9.10.5

libxml2 has an API to get the namespace for a string node.
A YANG parser needs to know identityref is handled differently than a plain
string.


Andy


> 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)
> ]
>
>
> 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):
>
>
> 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
>>>
>>