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

Ladislav Lhotka <ladislav.lhotka@nic.cz> Fri, 04 February 2022 13:50 UTC

Return-Path: <ladislav.lhotka@nic.cz>
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 7765E3A122C; Fri, 4 Feb 2022 05:50:55 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.099
X-Spam-Level:
X-Spam-Status: No, score=-7.099 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_HI=-5, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=nic.cz
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 Q5YS9_XSwNp9; Fri, 4 Feb 2022 05:50:50 -0800 (PST)
Received: from mail.nic.cz (mail.nic.cz [217.31.204.67]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 9A6EC3A122D; Fri, 4 Feb 2022 05:50:49 -0800 (PST)
Received: from localhost (unknown [IPv6:2001:1488:fffe:6:a88f:7eff:fed2:45f8]) by mail.nic.cz (Postfix) with ESMTPSA id D9EE014063C; Fri, 4 Feb 2022 14:50:45 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nic.cz; s=default; t=1643982646; bh=epuT9sAkDLL0ZSF8vBIFFbFNoI/s3WhLltob7DbF+TU=; h=From:To:Date; b=PFd1GE5vKka7H9aKo1fR1Lf7yn0YckxATIjySM5t01S5caddtA6p4SyLYFQG1A+5s RVTDMu/aSxH3tozr2e1dRvfRLnOIH7RPXfvrYsAesFb2dq5mZmBHfByrBOt+sM5lYA RgCjayS0Yj8DrKw2svdh1kmOqspHVQBmLNpMs1OM=
From: Ladislav Lhotka <ladislav.lhotka@nic.cz>
To: Jernej Tuljak <jernej.tuljak@mg-soft.si>, Martin Björkl und <mbj+ietf@4668.se>, tbray@textuality.com
Cc: dhc-chairs@ietf.org, evyncke@cisco.com, drafts-expert-review@iana.org, netmod@ietf.org
In-Reply-To: <866e763b-88ce-ca3f-300a-7f702467fe7c@mg-soft.si>
References: <CAHBU6ivX+j4aY_f_ftQo2Uwvr-u+Y-qebY=jsk0mUDNpHVRi3g@mail.gmail.com> <20220203.192043.63845024394361435.id@4668.se> <CAHBU6is235QT3d7q+0xhJHdtVna_9-qjGzHG_P4gnMd6nKtdTw@mail.gmail.com> <20220204.081841.166197909676487568.id@4668.se> <866e763b-88ce-ca3f-300a-7f702467fe7c@mg-soft.si>
Mail-Followup-To: Jernej Tuljak <jernej.tuljak@mg-soft.si>, Martin Björklund <mbj+ietf@4668.se>, tbray@textuality.com, dhc-chairs@ietf.org, evyncke@cisco.com, drafts-expert-review@iana.org, netmod@ietf.org
Date: Fri, 04 Feb 2022 14:50:45 +0100
Message-ID: <8735kyivuy.fsf@nic.cz>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
X-Virus-Scanned: clamav-milter 0.102.4 at mail
X-Virus-Status: Clean
Archived-At: <https://mailarchive.ietf.org/arch/msg/netmod/NEahQrbiXDXpOXgu_j9be7dojwM>
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: Fri, 04 Feb 2022 13:50:56 -0000

Jernej Tuljak <jernej.tuljak@mg-soft.si> writes:

> On 04/02/2022 08:18, Martin Björklund wrote:
>> Tim Bray <tbray@textuality.com> wrote:
>>> On Thu, Feb 3, 2022 at 10:21 AM Martin Björklund <mbj+ietf@4668.se> wrote:
>>>
>>>> If an XML document has <foo xmlns:bar="...">, won't the XML processor
>>>> pass the attribute "xmlns:bar" and its value to the application?  This
>>>> should be enough even if the XML processor doesn't provide a mapping
>>>> table between prefix and namespace (it requires more work in the
>>>> application of course).
>>>>
>>> Nope, there's no requirement that they do and some don't.
>> Does this mean that an XML processor might not pass attributes in
>> general to the application?  If so, we might have other similar
>> problems.  Or does it mean that an XML processor might just not pass
>> these "special" attributes?  If so, where is that specified?  (I tried
>> to find this info in the spec, but didn't find it).
>
> Names that start with "xml" (case insensitive) are reserved by XML 1.0 
> specification, "xmlns" in an attribute name included (2.3 Common 
> Syntactic Constructs). They are special. There is also a guideline on 
> colon usage within names.
>
> All processors I'm aware of differentiate between attributes and 
> namespace attributes in their APIs. What Tim is probably saying is that 
> some XML processors either don't implement Namespaces in XML 1.0 or need 
> to be explicitly configured to become "namespace aware". If not 
> configured as namespace aware, they might simply ignore namespace 
> attributes therefore not passing them. If they are configured as 
> namespace aware, they might remove prefix information and pass only 
> "namespace : local-name" pairs where required (and that excludes text 
> node content).

Right, and "namespace" here means a full namespace URI.

Lada

>
> Jernej
>
>>
>>
>> /martin
>>
>>
>>>> I think that if special text is needed for identityref values in XML,
>>>> that text should go in to the YANG specification (RFC 7950).  All
>>>> these other drafts just follow the rules defined in RFC 7950.
>>>>
>>> Agreed.
>>>
>>>
>>>
>>>>
>>>> /martin
>>>>
>>>>
>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> 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
>>>>>>>>>
>> _______________________________________________
>> 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

-- 
Ladislav Lhotka
Head, CZ.NIC Labs
PGP Key ID: 0xB8F92B08A9F76C67