draft-ietf-netmod-yang-json-08.txt | draft-ietf-netmod-yang-json-09.txt | |||
---|---|---|---|---|
NETMOD Working Group L. Lhotka | NETMOD Working Group L. Lhotka | |||
Internet-Draft CZ.NIC | Internet-Draft CZ.NIC | |||
Intended status: Standards Track February 24, 2016 | Intended status: Standards Track March 09, 2016 | |||
Expires: August 27, 2016 | Expires: September 10, 2016 | |||
JSON Encoding of Data Modeled with YANG | JSON Encoding of Data Modeled with YANG | |||
draft-ietf-netmod-yang-json-08 | draft-ietf-netmod-yang-json-09 | |||
Abstract | Abstract | |||
This document defines encoding rules for representing configuration, | This document defines encoding rules for representing configuration | |||
state data, parameters of RPC operations or actions, and | data, state data, parameters of RPC operations or actions, and | |||
notifications defined using YANG as JavaScript Object Notation (JSON) | notifications defined using YANG as JavaScript Object Notation (JSON) | |||
text. | text. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on August 27, 2016. | This Internet-Draft will expire on September 10, 2016. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 10 ¶ | skipping to change at page 2, line 10 ¶ | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | 2. Terminology and Notation . . . . . . . . . . . . . . . . . . 3 | |||
3. Properties of the JSON Encoding . . . . . . . . . . . . . . . 4 | 3. Properties of the JSON Encoding . . . . . . . . . . . . . . . 4 | |||
4. Names and Namespaces . . . . . . . . . . . . . . . . . . . . 4 | 4. Names and Namespaces . . . . . . . . . . . . . . . . . . . . 5 | |||
5. Encoding of YANG Data Node Instances . . . . . . . . . . . . 6 | 5. Encoding of YANG Data Node Instances . . . . . . . . . . . . 7 | |||
5.1. The "leaf" Data Node . . . . . . . . . . . . . . . . . . 7 | 5.1. The "leaf" Data Node . . . . . . . . . . . . . . . . . . 7 | |||
5.2. The "container" Data Node . . . . . . . . . . . . . . . . 7 | 5.2. The "container" Data Node . . . . . . . . . . . . . . . . 7 | |||
5.3. The "leaf-list" Data Node . . . . . . . . . . . . . . . . 7 | 5.3. The "leaf-list" Data Node . . . . . . . . . . . . . . . . 8 | |||
5.4. The "list" Data Node . . . . . . . . . . . . . . . . . . 8 | 5.4. The "list" Data Node . . . . . . . . . . . . . . . . . . 8 | |||
5.5. The "anydata" Data Node . . . . . . . . . . . . . . . . . 9 | 5.5. The "anydata" Data Node . . . . . . . . . . . . . . . . . 9 | |||
5.6. The "anyxml" Data Node . . . . . . . . . . . . . . . . . 10 | 5.6. The "anyxml" Data Node . . . . . . . . . . . . . . . . . 10 | |||
5.7. Metadata Objects . . . . . . . . . . . . . . . . . . . . 10 | 5.7. Metadata Objects . . . . . . . . . . . . . . . . . . . . 10 | |||
6. Representing YANG Data Types in JSON Values . . . . . . . . . 10 | 6. Representing YANG Data Types in JSON Values . . . . . . . . . 10 | |||
6.1. Numeric Types . . . . . . . . . . . . . . . . . . . . . . 10 | 6.1. Numeric Types . . . . . . . . . . . . . . . . . . . . . . 11 | |||
6.2. The "string" Type . . . . . . . . . . . . . . . . . . . . 11 | 6.2. The "string" Type . . . . . . . . . . . . . . . . . . . . 11 | |||
6.3. The "boolean" Type . . . . . . . . . . . . . . . . . . . 11 | 6.3. The "boolean" Type . . . . . . . . . . . . . . . . . . . 11 | |||
6.4. The "enumeration" Type . . . . . . . . . . . . . . . . . 11 | 6.4. The "enumeration" Type . . . . . . . . . . . . . . . . . 11 | |||
6.5. The "bits" Type . . . . . . . . . . . . . . . . . . . . . 11 | 6.5. The "bits" Type . . . . . . . . . . . . . . . . . . . . . 11 | |||
6.6. The "binary" Type . . . . . . . . . . . . . . . . . . . . 11 | 6.6. The "binary" Type . . . . . . . . . . . . . . . . . . . . 12 | |||
6.7. The "leafref" Type . . . . . . . . . . . . . . . . . . . 12 | 6.7. The "leafref" Type . . . . . . . . . . . . . . . . . . . 12 | |||
6.8. The "identityref" Type . . . . . . . . . . . . . . . . . 12 | 6.8. The "identityref" Type . . . . . . . . . . . . . . . . . 12 | |||
6.9. The "empty" Type . . . . . . . . . . . . . . . . . . . . 12 | 6.9. The "empty" Type . . . . . . . . . . . . . . . . . . . . 13 | |||
6.10. The "union" Type . . . . . . . . . . . . . . . . . . . . 13 | 6.10. The "union" Type . . . . . . . . . . . . . . . . . . . . 13 | |||
6.11. The "instance-identifier" Type . . . . . . . . . . . . . 14 | 6.11. The "instance-identifier" Type . . . . . . . . . . . . . 14 | |||
7. I-JSON Compliance . . . . . . . . . . . . . . . . . . . . . . 14 | 7. I-JSON Compliance . . . . . . . . . . . . . . . . . . . . . . 14 | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | |||
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 15 | 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 15 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 15 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 16 | 10.2. Informative References . . . . . . . . . . . . . . . . . 16 | |||
Appendix A. A Complete Example . . . . . . . . . . . . . . . . . 16 | Appendix A. A Complete Example . . . . . . . . . . . . . . . . . 17 | |||
Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 18 | Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 19 | |||
B.1. Changes Between Revisions -07 and -08 . . . . . . . . . . 18 | B.1. Changes Between Revisions -08 and -09 . . . . . . . . . . 19 | |||
B.2. Changes Between Revisions -06 and -07 . . . . . . . . . . 19 | B.2. Changes Between Revisions -07 and -08 . . . . . . . . . . 19 | |||
B.3. Changes Between Revisions -05 and -06 . . . . . . . . . . 19 | B.3. Changes Between Revisions -06 and -07 . . . . . . . . . . 19 | |||
B.4. Changes Between Revisions -04 and -05 . . . . . . . . . . 19 | B.4. Changes Between Revisions -05 and -06 . . . . . . . . . . 19 | |||
B.5. Changes Between Revisions -03 and -04 . . . . . . . . . . 19 | B.5. Changes Between Revisions -04 and -05 . . . . . . . . . . 19 | |||
B.6. Changes Between Revisions -02 and -03 . . . . . . . . . . 19 | B.6. Changes Between Revisions -03 and -04 . . . . . . . . . . 20 | |||
B.7. Changes Between Revisions -01 and -02 . . . . . . . . . . 19 | B.7. Changes Between Revisions -02 and -03 . . . . . . . . . . 20 | |||
B.8. Changes Between Revisions -00 and -01 . . . . . . . . . . 20 | B.8. Changes Between Revisions -01 and -02 . . . . . . . . . . 20 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 20 | B.9. Changes Between Revisions -00 and -01 . . . . . . . . . . 20 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 21 | ||||
1. Introduction | 1. Introduction | |||
The NETCONF protocol [RFC6241] uses XML [W3C.REC-xml-20081126] for | The NETCONF protocol [RFC6241] uses XML [W3C.REC-xml-20081126] for | |||
encoding data in its Content Layer. Other management protocols might | encoding data in its Content Layer. Other management protocols might | |||
want to use other encodings while still benefiting from using YANG | want to use other encodings while still benefiting from using YANG | |||
[I-D.ietf-netmod-rfc6020bis] as the data modeling language. | [I-D.ietf-netmod-rfc6020bis] as the data modeling language. | |||
For example, the RESTCONF protocol [I-D.ietf-netconf-restconf] | For example, the RESTCONF protocol [I-D.ietf-netconf-restconf] | |||
supports two encodings: XML (media type "application/yang.data+xml") | supports two encodings: XML (media type "application/yang.data+xml") | |||
and JSON (media type "application/yang.data+json"). | and JSON (media type "application/yang.data+json"). | |||
The specification of YANG 1.1 data modelling language | The specification of YANG 1.1 data modelling language | |||
[I-D.ietf-netmod-rfc6020bis] defines only XML encoding of data trees, | [I-D.ietf-netmod-rfc6020bis] defines only XML encoding of data trees, | |||
i.e., contents of configuration datastores, state data, input/output | i.e., configuration data, state data, input/output parameters of RPC | |||
parameters of RPC operations or actions, and event notifications. | operations or actions, and notifications. The aim of this document | |||
The aim of this document is to define rules for encoding the same | is to define rules for encoding the same data as JavaScript Object | |||
data as JavaScript Object Notation (JSON) text [RFC7159]. | Notation (JSON) text [RFC7159]. | |||
2. Terminology and Notation | 2. Terminology and Notation | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
The following terms are defined in [I-D.ietf-netmod-rfc6020bis]: | The following terms are defined in [I-D.ietf-netmod-rfc6020bis]: | |||
o action, | o action, | |||
skipping to change at page 4, line 12 ¶ | skipping to change at page 4, line 12 ¶ | |||
o leaf-list, | o leaf-list, | |||
o list, | o list, | |||
o module, | o module, | |||
o RPC operation, | o RPC operation, | |||
o submodule. | o submodule. | |||
The following terms are defined in [RFC6241]: | ||||
o configuration data, | ||||
o notification, | ||||
o state data. | ||||
3. Properties of the JSON Encoding | 3. Properties of the JSON Encoding | |||
This document defines JSON encoding for YANG data trees and their | This document defines JSON encoding for YANG data trees and their | |||
subtrees. It is always assumed that the top-level structure in JSON- | subtrees. It is always assumed that the top-level structure in JSON- | |||
encoded data is an object. | encoded data is an object. | |||
Instances of YANG data nodes (leafs, containers, leaf-lists, lists, | Instances of YANG data nodes (leafs, containers, leaf-lists, lists, | |||
anydata and anyxml nodes) are encoded as members of a JSON object, | anydata and anyxml nodes) are encoded as members of a JSON object, | |||
i.e., name/value pairs. Section 4 defines how the name part is | i.e., name/value pairs. Section 4 defines how the name part is | |||
formed, and the following sections deal with the value part. The | formed, and the following sections deal with the value part. The | |||
encoding rules are identical for all types of data trees, i.e., | encoding rules are identical for all types of data trees, i.e., | |||
configuration and state data, parameters of RPC operations and | configuration data, state data, parameters of RPC operations, | |||
actions, and notifications. | 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]. | ||||
Unlike XML element content, JSON values carry partial type | Unlike XML element content, JSON values carry partial type | |||
information (number, string, boolean). The JSON encoding is defined | information (number, string, boolean). The JSON encoding is defined | |||
so that this information is never in conflict with the data type of | so that this information is never in conflict with the data type of | |||
the corresponding YANG leaf or leaf-list. | the corresponding YANG leaf or leaf-list. | |||
With the exception of anyxml and schema-less anydata nodes, it is | With the exception of anyxml and schema-less anydata nodes, it is | |||
possible to map a JSON-encoded data tree to XML encoding as defined | possible to map a JSON-encoded data tree to XML encoding as defined | |||
in [I-D.ietf-netmod-rfc6020bis], and vice versa. However, such | in [I-D.ietf-netmod-rfc6020bis], and vice versa. However, such | |||
conversions require the YANG data model to be available. | conversions require the YANG data model to be available. | |||
skipping to change at page 5, line 31 ¶ | skipping to change at page 5, line 41 ¶ | |||
top-level JSON object, and then also whenever the namespaces of the | top-level JSON object, and then also whenever the namespaces of the | |||
data node and its parent node are different. In all other cases, the | data node and its parent node are different. In all other cases, the | |||
simple form of the member name MUST be used. | simple form of the member name MUST be used. | |||
For example, consider the following YANG module: | For example, consider the following YANG module: | |||
module example-foomod { | module example-foomod { | |||
namespace "http://example.com/foomod"; | namespace "http://example.com/foomod"; | |||
prefix "foo"; | prefix "foomod"; | |||
container top { | container top { | |||
leaf foo { | leaf foo { | |||
type uint8; | type uint8; | |||
} | } | |||
} | } | |||
} | } | |||
If the data model consists only of this module, then the following is | If the data model consists only of this module, then the following is | |||
a valid JSON-encoded configuration: | a valid JSON-encoded configuration data: | |||
{ | { | |||
"example-foomod:top": { | "example-foomod:top": { | |||
"foo": 54 | "foo": 54 | |||
} | } | |||
} | } | |||
Note that the member of the top-level object uses the namespace- | Note that the member of the top-level object uses the namespace- | |||
qualified name but the "foo" leaf doesn't because it is defined in | qualified name but the "foo" leaf doesn't because it is defined in | |||
the same module as its parent container "top". | the same module as its parent container "top". | |||
Now, assume the container "top" is augmented from another module, | Now, assume the container "top" is augmented from another module, | |||
"example-barmod": | "example-barmod": | |||
module example-barmod { | module example-barmod { | |||
namespace "http://example.com/barmod"; | namespace "http://example.com/barmod"; | |||
prefix "bar"; | prefix "barmod"; | |||
import example-foomod { | import example-foomod { | |||
prefix "foo"; | prefix "foomod"; | |||
} | } | |||
augment "/foo:top" { | augment "/foo:top" { | |||
leaf bar { | leaf bar { | |||
type boolean; | type boolean; | |||
} | } | |||
} | } | |||
} | } | |||
A valid JSON-encoded configuration containing both leafs may then | A valid JSON-encoded configuration data containing both leafs may | |||
look like this: | then look like this: | |||
{ | { | |||
"example-foomod:top": { | "example-foomod:top": { | |||
"foo": 54, | "foo": 54, | |||
"example-barmod:bar": true | "example-barmod:bar": true | |||
} | } | |||
} | } | |||
The name of the "bar" leaf is prefixed with the namespace identifier | The name of the "bar" leaf is prefixed with the namespace identifier | |||
because its parent is defined in a different module. | because its parent is defined in a different module. | |||
skipping to change at page 16, line 22 ¶ | skipping to change at page 16, line 37 ¶ | |||
10.2. Informative References | 10.2. Informative References | |||
[I-D.ietf-netconf-restconf] | [I-D.ietf-netconf-restconf] | |||
Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
Protocol", draft-ietf-netconf-restconf-09 (work in | Protocol", draft-ietf-netconf-restconf-09 (work in | |||
progress), December 2015. | progress), December 2015. | |||
[I-D.ietf-netmod-yang-metadata] | [I-D.ietf-netmod-yang-metadata] | |||
Lhotka, L., "Defining and Using Metadata with YANG", | Lhotka, L., "Defining and Using Metadata with YANG", | |||
draft-ietf-netmod-yang-metadata-03 (work in progress), | draft-ietf-netmod-yang-metadata-04 (work in progress), | |||
January 2016. | February 2016. | |||
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | ||||
the Network Configuration Protocol (NETCONF)", RFC 6020, | ||||
DOI 10.17487/RFC6020, October 2010, | ||||
<http://www.rfc-editor.org/info/rfc6020>. | ||||
[RFC7223] Bjorklund, M., "A YANG Data Model for Interface | [RFC7223] Bjorklund, M., "A YANG Data Model for Interface | |||
Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, | Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, | |||
<http://www.rfc-editor.org/info/rfc7223>. | <http://www.rfc-editor.org/info/rfc7223>. | |||
[W3C.REC-xml-20081126] | [W3C.REC-xml-20081126] | |||
Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and | Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and | |||
F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth | F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth | |||
Edition)", World Wide Web Consortium Recommendation REC- | Edition)", World Wide Web Consortium Recommendation REC- | |||
xml-20081126, November 2008, | xml-20081126, November 2008, | |||
skipping to change at page 18, line 45 ¶ | skipping to change at page 19, line 21 ¶ | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
Appendix B. Change Log | Appendix B. Change Log | |||
RFC Editor: Remove this section upon publication as an RFC. | RFC Editor: Remove this section upon publication as an RFC. | |||
B.1. Changes Between Revisions -07 and -08 | B.1. Changes Between Revisions -08 and -09 | |||
o References to RFC 6241 term in the Terminology section were added. | ||||
o Prefixes in the example in Sec. 4 were changed so as to be | ||||
different from node names. | ||||
B.2. Changes Between Revisions -07 and -08 | ||||
o Changed the names of example modules so that they start with | o Changed the names of example modules so that they start with | |||
"example-". | "example-". | |||
B.2. Changes Between Revisions -06 and -07 | B.3. Changes Between Revisions -06 and -07 | |||
o General permit on object members whose names start with "@". | o General permit on object members whose names start with "@". | |||
B.3. Changes Between Revisions -05 and -06 | B.4. Changes Between Revisions -05 and -06 | |||
o More text and a new example about resolving union-type values. | o More text and a new example about resolving union-type values. | |||
B.4. Changes Between Revisions -04 and -05 | B.5. Changes Between Revisions -04 and -05 | |||
o Removed section "Validation of JSON-encoded Instance Data" and | o Removed section "Validation of JSON-encoded Instance Data" and | |||
other text about XML-JSON mapping. | other text about XML-JSON mapping. | |||
o Added section "Properties of the JSON Encoding". | o Added section "Properties of the JSON Encoding". | |||
B.5. Changes Between Revisions -03 and -04 | B.6. Changes Between Revisions -03 and -04 | |||
o I-D.ietf-netmod-rfc6020bis is used as a normative reference | o I-D.ietf-netmod-rfc6020bis is used as a normative reference | |||
instead of RFC 6020. | instead of RFC 6020. | |||
o Removed noncharacters as an I-JSON issue because it doesn't exist | o Removed noncharacters as an I-JSON issue because it doesn't exist | |||
in YANG 1.1. | in YANG 1.1. | |||
o Section about anydata encoding was added. | o Section about anydata encoding was added. | |||
o Require I-JSON for anyxml encoding. | o Require I-JSON for anyxml encoding. | |||
o Use ABNF for defining qualified name. | o Use ABNF for defining qualified name. | |||
B.6. Changes Between Revisions -02 and -03 | B.7. Changes Between Revisions -02 and -03 | |||
o Namespace encoding is defined without using RFC 2119 keywords. | o Namespace encoding is defined without using RFC 2119 keywords. | |||
o Specification for anyxml nodes was extended and clarified. | o Specification for anyxml nodes was extended and clarified. | |||
o Text about ordering of list entries was corrected. | o Text about ordering of list entries was corrected. | |||
B.7. Changes Between Revisions -01 and -02 | B.8. Changes Between Revisions -01 and -02 | |||
o Encoding of namespaces in instance-identifiers was changed. | o Encoding of namespaces in instance-identifiers was changed. | |||
o Text specifying the order of array elements in leaf-list and list | o Text specifying the order of array elements in leaf-list and list | |||
instances was added. | instances was added. | |||
B.8. Changes Between Revisions -00 and -01 | B.9. Changes Between Revisions -00 and -01 | |||
o Metadata encoding was moved to a separate I-D, draft-lhotka- | o Metadata encoding was moved to a separate I-D, draft-lhotka- | |||
netmod-yang-metadata. | netmod-yang-metadata. | |||
o JSON encoding is now defined directly rather than via XML-JSON | o JSON encoding is now defined directly rather than via XML-JSON | |||
mapping. | mapping. | |||
o The rules for namespace encoding has changed. This affect both | o The rules for namespace encoding has changed. This affect both | |||
node instance names and instance-identifiers. | node instance names and instance-identifiers. | |||
End of changes. 28 change blocks. | ||||
44 lines changed or deleted | 68 lines changed or added | |||
This html diff was produced by rfcdiff 1.44. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |