Internet-Draft XML Encoding of YANG Data May 2024
Watsen Expires 18 November 2024 [Page]
Workgroup:
NETMOD Working Group
Internet-Draft:
draft-yn-netmod-yang-xml-00
Published:
Intended Status:
Standards Track
Expires:
Author:
K. Watsen
Watsen Networks

XML Encoding of Data Modeled with YANG

Abstract

This document defines encoding rules for representing YANG modeled configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using XML.

GitHub Information (to be removed by RFC Editor)

This document is developed on GitHub (https://github.com/netmod-wg/rfc7950bis). If you wish to contribute, please consider opening a pull request (PR). Please see the README file for details.

Special Thanks

The following individuals were entrusted to review all of the design proposals and specification updates made by authors. Sorted by first name: Kent Watsen.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on 18 November 2024.

Table of Contents

1. Introduction

This document defines encoding rules for representing YANG [RFC7950] modeled configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using the Extensible Markup Language (XML) [XML].

2. Terminology and Notation

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

The following terms are defined in [RFC7950]:

The following terms are defined in [RFC6241]:

3. Properties of the XML Encoding

This document defines XML encoding for YANG data trees and their subtrees. It is always assumed that there may be one or more top-level elements in XML-encoded configuration data and state data. RPC operations and notifications contain a single top-level element.

Instances of YANG data nodes (leafs, containers, leaf-lists, lists, anydata nodes, and anyxml nodes) are encoded as XML elements having the name of the YANG data node. Section 4) defines how the name is qualified with a namespace, and the following sections deal with the value part. The encoding rules are identical for all types of data trees, i.e., configuration data, state data, parameters of RPC operations, actions, and notifications.

With the exception of "anydata" encoding (Section 5.5), all rules in this document are also applicable to YANG 1.0 [RFC6020].

With the exception of anyxml and schema-less anydata nodes, it is possible to map an XML-encoded data tree to other encodings, such as the JSON encoding as defined in [RFC7951], and vice versa. However, such conversions require the YANG data model to be available.

4. Names and Namespaces

An XML element name is always identical to the identifier of the corresponding YANG data node.

All XML elements encoding YANG data are namespace qualified. The XML default namespace is never used in YANG encoded data.

The namespace of an XML element is either inherited from its ancestor or set using the "xmlns" attribute in the element.

The "xmlns" attribute may either set the XML default namespace or define and use a prefix for the namespace. For instance, the following two XML documents are the same.

Document 1:


<foo xmlns="https://example.com/foo"/>

Document 2:


<my-prefix:foo xmlns:my-prefix="https://example.com/foo"/>

The "namespace" statement of a module determines the namespace of all data node names defined in that module. If a data node is defined in a submodule, then the namespace of the main module is used.

A namespace MUST be set for all top-level XML elements and then also whenever the namespaces of the data node and its parent node are different.

For example, consider the following YANG module:


module example-foomod {

  namespace "https://example.com/foomod";

  prefix "foomod";

  container top {
    leaf foo {
      type uint8;
    }
  }
}

If the data model consists only of this module, then the following is valid XML-encoded configuration data:


<top xmlns="https://example.com/foomod">
  <foo>54</foo>
</top>

Note that the top-level element sets the default namespace which "foo" leaf inherits its parent container "top".

Now, assume that the container "top" is augmented from another module, "example-barmod":


module example-barmod {

  namespace "https://example.com/barmod";

  prefix "barmod";

  import example-foomod {
    prefix "foomod";
  }

  augment "/foomod:top" {
    leaf bar {
      type boolean;
    }
  }
}

Valid XML-encoded configuration data containing both leafs may then look like this:


<top xmlns="https://example.com/foomod">
  <foo>54</foo>
  <bar xmlns="https://example.com/barmod">true</bar>
</top>

The "bar" leaf's element sets a new default namespace because its parent is defined in a different module.

Prefixed namespace identifiers are sometimes needed when encoding values of the "identityref" and "instance-identifier" types. See Section 6.8 and Section 6.11 for details.

5. Encoding of YANG Data Node Instances

5.1. The "leaf" Data Node

TBD

5.2. The "container" Data Node

TBD

5.3. The "leaf-list" Data Node

TBD

5.4. The "list" Data Node

TBD

5.5. The "anydata" Data Node

TBD

5.6. The "anyxml" Data Node

TBD

5.7. Metadata Objects

TBD

6. Representing YANG Data Types in JSON Values

6.1. Numeric Types

TBD

6.2. The "string" Type

TBD

6.3. The "boolean" Type

TBD

6.4. The "enumeration" Type

TBD

6.5. The "bits" Type

TBD

6.6. The "binary" Type

TBD

6.7. The "leafref" Type

TBD

6.8. The "identityref" Type

TBD

6.9. The "empty" Type

TBD

6.10. The "union" Type

TBD

6.11. The "instance-identifier" Type

TBD

7. IANA Considerations

This document registers one capability identifier URN from the "Network Configuration Protocol (NETCONF) Capability URNs" registry:

8. Security Considerations

This document defines a language with which to write and read descriptions of management information. The language itself has no security impact on the Internet.

9. References

9.1. Normative References

[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
[RFC7950]
Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", RFC 7950, DOI 10.17487/RFC7950, , <https://www.rfc-editor.org/info/rfc7950>.
[RFC8174]
Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.
[I-D.yn-netmod-rfc7950bis]
IETF, "The YANG 1.1 Data Modeling Language", .
[XML]
Bray, T., Paoli, J., Sperberg-McQueen, C., Maler, E., and F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth Edition)", W3C Recommendation REC-xml-20081126, , <https://www.w3.org/TR/2008/REC-xml-20081126/>.

9.2. Informative References

[RFC6020]
Bjorklund, M., Ed., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, DOI 10.17487/RFC6020, , <https://www.rfc-editor.org/info/rfc6020>.
[RFC7951]
Lhotka, L., "JSON Encoding of Data Modeled with YANG", RFC 7951, DOI 10.17487/RFC7951, , <https://www.rfc-editor.org/info/rfc7951>.

Acknowledgements

Substantial text in this document was copied from [RFC7951]. The authors wish to thank Ladislav Lhotka for authoring RFC 7951.

Author's Address

Kent Watsen
Watsen Networks