| rfc8791xml2.original.xml | rfc8791.xml | |||
|---|---|---|---|---|
| <?xml version="1.0"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <!DOCTYPE rfc SYSTEM 'rfc2629.dtd'> | ||||
| <?rfc toc="yes"?> | ||||
| <?rfc compact="no"?> | ||||
| <?rfc subcompact="no"?> | ||||
| <?rfc symrefs="yes" ?> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <?rfc iprnotified="no"?> | ||||
| <?rfc strict="yes"?> | ||||
| <rfc ipr="trust200902" updates="8340" category="std" | ||||
| docName="draft-ietf-netmod-yang-data-ext-05" > | ||||
| <front> | ||||
| <title abbrev="YANG Structure">YANG Data Structure Extensions</title> | ||||
| <author initials="A" surname="Bierman" fullname='Andy Bierman' > | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" | |||
| updates="8340" category="std" consensus="true" | ||||
| docName="draft-ietf-netmod-yang-data-ext-05" number="8791" obsoletes="" | ||||
| submissionType="IETF" xml:lang="en" tocInclude="true" symRefs="true" | ||||
| sortRefs="true" version="3"> | ||||
| <!-- xml2rfc v2v3 conversion 2.40.0 --> | ||||
| <front> | ||||
| <title abbrev="YANG Data Structure Extensions">YANG Data Structure Extension | ||||
| s</title> | ||||
| <seriesInfo name="RFC" value="8791"/> | ||||
| <author initials="A" surname="Bierman" fullname="Andy Bierman"> | ||||
| <organization>YumaWorks</organization> | <organization>YumaWorks</organization> | |||
| <address> | <address> | |||
| <email>andy@yumaworks.com</email> | <email>andy@yumaworks.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="M" surname="Bjorklund" fullname='Martin Bjorklund' > | <author initials="M" surname="Bjorklund" fullname="Martin Bjorklund"> | |||
| <organization>Cisco</organization> | <organization>Cisco</organization> | |||
| <address> | <address> | |||
| <email>mbj@tail-f.com</email> | <email>mbj+ietf@4668.se</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="K" surname="Watsen" fullname='Kent Watsen' > | <author initials="K" surname="Watsen" fullname="Kent Watsen"> | |||
| <organization>Watsen Networks</organization> | <organization>Watsen Networks</organization> | |||
| <address> | <address> | |||
| <email>kent+ietf@watsen.net</email> | <email>kent+ietf@watsen.net</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date/> | <date year="2020" month="June" /> | |||
| <abstract> | <abstract> | |||
| <t> | ||||
| <t> | ||||
| This document describes YANG mechanisms for | This document describes YANG mechanisms for | |||
| defining abstract data structures with YANG. | defining abstract data structures with YANG. | |||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section title="Introduction" anchor="introduction"> | <section anchor="introduction" numbered="true" toc="default"> | |||
| <t> | <name>Introduction</name> | |||
| <t> | ||||
| There is a need for standard mechanisms to allow the | There is a need for standard mechanisms to allow the | |||
| definition of abstract data that is not intended to | definition of abstract data that is not intended to | |||
| be implemented as configuration or operational state. | be implemented as configuration or operational state. | |||
| The "yang‑data" extension statement from RFC 8040 <xref target=" | The "yang-data" extension statement from RFC 8040 <xref target="RFC8040" | |||
| RFC8040"/> | format="default"/> was defined for this purpose, but it is limited in its | |||
| was defined for this purpose but it is limited in its | ||||
| functionality. | functionality. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The intended use of the "yang‑data" extension was to model all o | The intended use of the "yang-data" extension was to model all or part | |||
| r part | of a protocol message, such as the "errors" definition in the | |||
| of a protocol message, such as the "errors" definition in the YANG | YANG module "ietf-restconf" <xref target="RFC8040" format="default"/>, or the | |||
| module "ietf‑restconf" <xref target="RFC8040"/>, or the contents | contents of a file. However, | |||
| of a file. However, | ||||
| protocols are often layered such that the header or payload portions | protocols are often layered such that the header or payload portions | |||
| of the message can be extended by external documents. The YANG | of the message can be extended by external documents. The YANG | |||
| statements that model a protocol need to support this extensibility | statements that model a protocol need to support this extensibility | |||
| that is already found in that protocol. | that is already found in that protocol. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document defines a new YANG extension statement called | This document defines a new YANG extension statement called | |||
| "structure", which is similar to but more flexible than the | "structure", which is similar to but more flexible than the | |||
| "yang‑data" extension from <xref target="RFC8040"/>. There is n | "yang-data" extension from <xref target="RFC8040" format="default"/>. | |||
| o assumption that a | ||||
| There is no assumption that a | ||||
| YANG data structure can only be used as a top-level abstraction, and | YANG data structure can only be used as a top-level abstraction, and | |||
| it may also be nested within some other data structure. | it may also be nested within some other data structure. | |||
| </t> | </t> | |||
| <t> | ||||
| <t> | ||||
| This document also defines a new YANG extension statement called | This document also defines a new YANG extension statement called | |||
| "augment‑structure", which allows abstract data structures to be | "augment&nbhy;structure", which allows abstract data structures to be | |||
| augmented from external modules, similarly to the existing YANG | augmented from external modules and is similar to the existing YANG "augment" | |||
| "augment" statement. Note that "augment" cannot be used to | statement. Note that "augment" cannot be used to augment a YANG data | |||
| augment a | structure since a YANG compiler or other tool is not required to understand | |||
| YANG data structure since a YANG compiler or other tool is not | the "structure" extension. | |||
| required to understand the "structure" extension. | </t> | |||
| </t> | <section anchor="terminology" numbered="true" toc="default"> | |||
| <section title="Terminology" anchor="terminology"> | ||||
| <t> | <name>Terminology</name> | |||
| The key words "MUST", "MUST NOT", "REQUIRED", &quo | <t> | |||
| t;SHALL", "SHALL NOT", | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT R | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", | |||
| ECOMMENDED", "MAY", and | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| "OPTIONAL" in this document are to be interpreted as described in | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, th | "<bcp14>MAY</bcp14>", and | |||
| ey appear in all | "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in | |||
| BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" | ||||
| format="default"/> when, and only when, they appear in all | ||||
| capitals, as shown here. | capitals, as shown here. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The following terms are used within this document: | The following term is used within this document: | |||
| </t> | </t> | |||
| <t> | <dl newline="false" spacing="normal"> | |||
| <list style="symbols"> | <dt>YANG data structure:</dt> | |||
| <t> | <dd>A data structure defined with the "structure" | |||
| YANG data structure: A data structure defined with the "structure" | statement.</dd> | |||
| statement. | </dl> | |||
| </t> | <section anchor="nmda" numbered="true" toc="default"> | |||
| </list> | <name>NMDA</name> | |||
| </t> | <t> | |||
| <section title="NMDA" anchor="nmda"> | ||||
| <t> | ||||
| The following terms are defined in the | The following terms are defined in the | |||
| Network Management Datastore Architecture | Network Management Datastore Architecture | |||
| (NMDA) <xref target="RFC8342"/>, | (NMDA) <xref target="RFC8342" format="default"/> | |||
| and are not redefined here: | and are not redefined here:</t> | |||
| </t> | <ul spacing="normal"> | |||
| <t> | <li>configuration</li> | |||
| <list style="symbols"> | <li>operational state</li> | |||
| <t> | </ul> | |||
| configuration | </section> | |||
| </t> | <section anchor="yang" numbered="true" toc="default"> | |||
| <t> | <name>YANG</name> | |||
| operational state | ||||
| </t> | <t>The following terms are defined in <xref target="RFC7950" | |||
| </list> | format="default"/> and are not redefined here:</t> | |||
| </t> | <ul spacing="normal"> | |||
| </section> | <li>absolute-schema-nodeid</li> | |||
| <section title="YANG" anchor="yang"> | <li>container</li> | |||
| <t> | <li>data definition statement</li> | |||
| The following terms are defined in <xref target="RFC7950"/>: | <li>data node</li> | |||
| </t> | <li>leaf</li> | |||
| <t> | <li>leaf-list</li> | |||
| <list style="symbols"> | <li>list</li> | |||
| <t> | </ul> | |||
| absolute-schema-nodeid | </section> | |||
| </t> | </section> | |||
| <t> | </section> | |||
| container | <section anchor="definitions" numbered="true" toc="default"> | |||
| </t> | <name>Definitions</name> | |||
| <t> | <t> | |||
| data definition statement | A YANG data structure is defined with the "structure" extension | |||
| </t> | statement, which is defined in the YANG module | |||
| <t> | "ietf-yang-structure-ext". The | |||
| data node | argument to the "structure" extension statement is the name of the | |||
| </t> | ||||
| <t> | ||||
| leaf | ||||
| </t> | ||||
| <t> | ||||
| leaf-list | ||||
| </t> | ||||
| <t> | ||||
| list | ||||
| </t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Definitions" anchor="definitions"> | ||||
| <t> | ||||
| A YANG data structure is defined with the "structure" extension | ||||
| statement, defined in the YANG module "ietf‑yang‑structure̴ | ||||
| 9;ext". The | ||||
| argument to the "structure" extension statement is the name of the | ||||
| data structure. The data structures are considered to be in the same | data structure. The data structures are considered to be in the same | |||
| identifier namespace as defined in section 6.2.1 of <xref target="RFC7950"/>. In | identifier namespace as defined in <xref target="RFC7950" | |||
| particular, bullet 7: | sectionFormat="of" section="6.2.1"/>. In particular, the seventh bullet states: | |||
| </t> | </t> | |||
| <figure> | <blockquote> | |||
| <artwork><![CDATA[ | ||||
| All leafs, leaf-lists, lists, containers, choices, rpcs, actions, | All leafs, leaf-lists, lists, containers, choices, rpcs, actions, | |||
| notifications, anydatas, and anyxmls defined (directly or through | notifications, anydatas, and anyxmls defined (directly or through | |||
| a "uses" statement) within a parent node or at the top level of | a "uses" statement) within a parent node or at the top level of | |||
| the module or its submodules share the same identifier namespace. | the module or its submodules share the same identifier namespace. | |||
| ]]></artwork> | </blockquote> | |||
| </figure> | <t> | |||
| <t> | This means that data structures defined with the "structure" statement | |||
| This means that data structures defined with the "structure" statement | ||||
| cannot have the same name as sibling nodes from regular YANG data | cannot have the same name as sibling nodes from regular YANG data | |||
| definition statements or other "structure" statements in the same YANG | definition statements or other "structure" statements in the same YANG | |||
| module. | module. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This does not mean a YANG data structure, once defined, has to be used | This does not mean a YANG data structure, once defined, has to be used | |||
| as a top-level protocol message or other top-level data structure. | as a top-level protocol message or other top-level data structure. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A YANG data structure is encoded in the same way as an "anydata" node. | A YANG data structure is encoded in the same way as an "anydata" node. | |||
| This means that the name of the structure is encoded as a "container", | This means that the name of the structure is encoded as a "container", | |||
| with the instantiated children encoded as child nodes to this | with the instantiated children encoded as child nodes to this | |||
| node. For example, this structure: | node. For example, this structure: | |||
| </t> | </t> | |||
| <figure> | <sourcecode type="yang"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| module example-errors { | module example-errors { | |||
| ... | ... | |||
| sx:structure my-error { | sx:structure my-error { | |||
| leaf error-number { | leaf error-number { | |||
| type int; | type int; | |||
| } | } | |||
| } | } | |||
| } | }]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure> | <t> | |||
| <t> | ||||
| can be encoded in JSON as: | can be encoded in JSON as: | |||
| </t> | </t> | |||
| <figure> | <sourcecode type="json"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| "example-errors:my-error": { | "example-errors:my-error": { | |||
| "error-number": 131 | "error-number": 131 | |||
| } | }]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure> | </section> | |||
| </section> | <section anchor="yang-data-structures-in-yang-tree-diagrams" | |||
| <section title="YANG Data Structures in YANG Tree Diagrams" anchor="yang-data-st | numbered="true" toc="default"> | |||
| ructures-in-yang-tree-diagrams"> | <name>YANG Data Structures in YANG Tree Diagrams</name> | |||
| <t> | <t> | |||
| A YANG data structure can be printed in a YANG Tree Diagram <xref target="RFC834 | A YANG data structure can be printed in a YANG tree diagram <xref | |||
| 0"/>. | target="RFC8340" format="default"/>. | |||
| This document updates RFC 8340 by defining two new sections in the | This document updates RFC 8340 <xref target="RFC8340" format="default"/> by defi | |||
| ning | ||||
| two new sections in the | ||||
| tree diagram for a module: | tree diagram for a module: | |||
| </t> | </t> | |||
| <t> | <ol spacing="normal"> | |||
| <list style="numbers"> | <li>YANG data structures, which are offset by two spaces and identified by the k | |||
| <t> | eyword | |||
| YANG data structures, offset by two spaces and identified by the keyword | "structure" followed by the name of the YANG data structure and a colon (":") | |||
| "structure" followed by the name | character. </li> | |||
| of the YANG data structure and a colon (":") character. | <li>YANG data structure augmentations, which are offset by 2 spaces and identifi | |||
| </t> | ed by | |||
| <t> | the keyword "augment&nbhy;structure" followed by the augment target structure | |||
| YANG data structure augmentations, offset by 2 spaces and identified | name and a colon (":") character.</li> | |||
| by the keyword "augment‑structure" followed by the augment targe | </ol> | |||
| t | ||||
| structure name and a colon (":") character. | <t> | |||
| </t> | The new sections, including spaces conventions, appear as follows: | |||
| </list> | </t> | |||
| </t> | <sourcecode type="yangtree"><![CDATA[ | |||
| <t> | ||||
| The new sections, including spaces conventions is: | ||||
| </t> | ||||
| <figure> | ||||
| <artwork><![CDATA[ | ||||
| structure <structure-name>: | structure <structure-name>: | |||
| +--<node> | +--<node> | |||
| +--<node> | +--<node> | |||
| | +--<node> | | +--<node> | |||
| +--<node> | +--<node> | |||
| structure <structure-name>: | structure <structure-name>: | |||
| +--<node> | +--<node> | |||
| augment-structure <structure-name>: | augment-structure <structure-name>: | |||
| +--<node> | +--<node> | |||
| +--<node> | +--<node> | |||
| | +--<node> | | +--<node> | |||
| +--<node> | +--<node> | |||
| augment-structure <structure-name>: | augment-structure <structure-name>: | |||
| +--<node> | +--<node>]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure> | <t> | |||
| <t> | Nodes in YANG data structures are printed according to the rules defined in | |||
| Nodes in YANG data structures are printed according to the rules | <xref target="RFC8340" sectionFormat="of" section="2.6"/>. The nodes in YANG | |||
| defined in section 2.6 in <xref target="RFC8340"/>. | data structures do not have any <flags>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="YANG Data Structure Extensions Module" anchor="mod"> | <section anchor="mod" numbered="true" toc="default"> | |||
| <t> | <name>YANG Data Structure Extensions Module</name> | |||
| RFC Ed.: update the date below with the date of RFC publication and | ||||
| remove this note. | <sourcecode type="yang" name="ietf-yang-structure-ext@2020-06-08.yang" markers=" | |||
| </t> | true"><![CDATA[ | |||
| <t><CODE BEGINS> file "ietf-yang-structure-ext@2019-03-07.yang"</t> | ||||
| <figure> | ||||
| <artwork><![CDATA[ | ||||
| module ietf-yang-structure-ext { | module ietf-yang-structure-ext { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-yang-structure-ext"; | namespace "urn:ietf:params:xml:ns:yang:ietf-yang-structure-ext"; | |||
| prefix sx; | prefix sx; | |||
| organization | organization | |||
| "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; | |||
| contact | contact | |||
| "WG Web: <http://tools.ietf.org/wg/netmod/> | "WG Web: <https://datatracker.ietf.org/wg/netmod/> | |||
| WG List: <mailto:netmod@ietf.org> | WG List: <mailto:netmod@ietf.org> | |||
| Author: Andy Bierman | Author: Andy Bierman | |||
| <mailto:andy@yumaworks.com> | <mailto:andy@yumaworks.com> | |||
| Author: Martin Bjorklund | Author: Martin Bjorklund | |||
| <mailto:mbj@tail-f.com> | <mailto:mbj+ietf@4668.se> | |||
| Author: Kent Watsen | Author: Kent Watsen | |||
| <mailto:kent+ietf@watsen.net>"; | <mailto:kent+ietf@watsen.net>"; | |||
| description | description | |||
| "This module contains conceptual YANG specifications for defining | "This module contains conceptual YANG specifications for defining | |||
| abstract data structures. | abstract data structures. | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
| they appear in all capitals, as shown here. | they appear in all capitals, as shown here. | |||
| Copyright (c) 2019 IETF Trust and the persons identified as | Copyright (c) 2020 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Simplified BSD License set | the license terms contained in, the Simplified BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info). | (http://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 8791 | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | (https://www.rfc-editor.org/info/rfc8791); see the RFC itself | |||
| for full legal notices."; | for full legal notices."; | |||
| // RFC Ed.: update the date below with the date of RFC publication | revision 2020-06-08 { | |||
| // and remove this note. | ||||
| revision 2019-03-07 { | ||||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| // RFC Ed.: replace XXXX with RFC number and remove this note | ||||
| reference | reference | |||
| "RFC XXXX: YANG Structure Extensions."; | "RFC 8791: YANG Data Structure Extensions."; | |||
| } | } | |||
| extension structure { | extension structure { | |||
| argument name { | argument name { | |||
| yin-element true; | yin-element true; | |||
| } | } | |||
| description | description | |||
| "This extension is used to specify a YANG data structure that | "This extension is used to specify a YANG data structure that | |||
| represents conceptual data defined in YANG. It is intended to | represents conceptual data defined in YANG. It is intended to | |||
| describe hierarchical data independent of protocol context or | describe hierarchical data independent of protocol context or | |||
| specific message encoding format. Data definition statements | specific message encoding format. Data definition statements | |||
| within a 'structure' extension statement specify the generic | within a 'structure' extension statement specify the generic | |||
| syntax for the specific YANG data structure, whose name is the | syntax for the specific YANG data structure, whose name is the | |||
| argument of the 'structure' extension statement. | argument of the 'structure' extension statement. | |||
| Note that this extension does not define a media-type. A | Note that this extension does not define a media type. A | |||
| specification using this extension MUST specify the message | specification using this extension MUST specify the message | |||
| encoding rules, including the content media type, if | encoding rules, including the content media type, if | |||
| applicable. | applicable. | |||
| The mandatory 'name' parameter value identifies the YANG data | The mandatory 'name' parameter value identifies the YANG data | |||
| structure that is being defined. | structure that is being defined. | |||
| This extension is only valid as a top-level statement, i.e., | This extension is only valid as a top-level statement, i.e., | |||
| given as a sub-statement to 'module' or 'submodule'. | given as a substatement to 'module' or 'submodule'. | |||
| The sub-statements of this extension MUST follow the ABNF | The substatements of this extension MUST follow the ABNF | |||
| rules below, where the rules are defined in RFC 7950: | rules below, where the rules are defined in RFC 7950: | |||
| *must-stmt | *must-stmt | |||
| [status-stmt] | [status-stmt] | |||
| [description-stmt] | [description-stmt] | |||
| [reference-stmt] | [reference-stmt] | |||
| *(typedef-stmt / grouping-stmt) | *(typedef-stmt / grouping-stmt) | |||
| *data-def-stmt | *data-def-stmt | |||
| A YANG data structure defined with this extension statement is | A YANG data structure defined with this extension statement is | |||
| encoded in the same way as an 'anydata' node. This means | encoded in the same way as an 'anydata' node. This means | |||
| that the name of the structure is encoded as a 'container', | that the name of the structure is encoded as a 'container', | |||
| with the instantiated child statements encoded as child nodes | with the instantiated child statements encoded as child nodes | |||
| to this node. | to this node. | |||
| The module name and namespace value for the YANG module using | The module name and namespace value for the YANG module using | |||
| the extension statement is assigned to each of the data | the extension statement are assigned to each of the data | |||
| definition statements resulting from the YANG data structure. | definition statements resulting from the YANG data structure. | |||
| The XPath document element is the extension statement itself, | The XPath document element is the extension statement itself, | |||
| such that the child nodes of the document element are | such that the child nodes of the document element are | |||
| represented by the data-def-stmt sub-statements within this | represented by the data-def-stmt substatements within this | |||
| extension. This conceptual document is the context for the | extension. This conceptual document is the context for the | |||
| following YANG statements: | following YANG statements: | |||
| - must-stmt | - must-stmt | |||
| - when-stmt | - when-stmt | |||
| - path-stmt | - path-stmt | |||
| - min-elements-stmt | - min-elements-stmt | |||
| - max-elements-stmt | - max-elements-stmt | |||
| - mandatory-stmt | - mandatory-stmt | |||
| - unique-stmt | - unique-stmt | |||
| - ordered-by | - ordered-by | |||
| - instance-identifier data type | - instance-identifier data type | |||
| The following data-def-stmt sub-statements are constrained | The following data-def-stmt substatements are constrained | |||
| when used within a 'structure' extension statement. | when used within a 'structure' extension statement. | |||
| - The list-stmt is not required to have a key-stmt defined. | - The list-stmt is not required to have a key-stmt defined. | |||
| - The config-stmt is ignored if present. | - The config-stmt is ignored if present. | |||
| "; | "; | |||
| } | } | |||
| extension augment-structure { | extension augment-structure { | |||
| argument path { | argument path { | |||
| yin-element true; | yin-element true; | |||
| } | } | |||
| description | description | |||
| "This extension is used to specify an augmentation to YANG data | "This extension is used to specify an augmentation to a YANG | |||
| structure defined with the 'structure' statement. It is | data structure defined with the 'structure' statement. It is | |||
| intended to describe hierarchical data independent of protocol | intended to describe hierarchical data independent of protocol | |||
| context or specific message encoding format. | context or specific message encoding format. | |||
| This statement has almost the same structure as the | This statement has almost the same structure as the | |||
| 'augment-stmt'. Data definition statements within this | 'augment-stmt'. Data definition statements within this | |||
| statement specify the semantics and generic syntax for the | statement specify the semantics and generic syntax for the | |||
| additional data to be added to the specific YANG data | additional data to be added to the specific YANG data | |||
| structure, identified by the 'path' argument. | structure, identified by the 'path' argument. | |||
| The mandatory 'path' parameter value identifies the YANG | The mandatory 'path' parameter value identifies the YANG | |||
| conceptual data node that is being augmented, represented as | conceptual data node that is being augmented and is | |||
| an absolute-schema-nodeid string, where the first node in the | represented as an absolute-schema-nodeid string, where the | |||
| absolute-schema-nodeid string identifies the YANG data | first node in the absolute-schema-nodeid string identifies the | |||
| structure to augment, and the rest of the nodes in the string | YANG data structure to augment, and the rest of the nodes in | |||
| identifies the node within the YANG structure to augment. | the string identifies the node within the YANG structure to | |||
| augment. | ||||
| This extension is only valid as a top-level statement, i.e., | This extension is only valid as a top-level statement, i.e., | |||
| given as a sub-statement to 'module' or 'submodule'. | given as a substatement to 'module' or 'submodule'. | |||
| The sub-statements of this extension MUST follow the ABNF | The substatements of this extension MUST follow the ABNF | |||
| rules below, where the rules are defined in RFC 7950: | rules below, where the rules are defined in RFC 7950: | |||
| [status-stmt] | [status-stmt] | |||
| [description-stmt] | [description-stmt] | |||
| [reference-stmt] | [reference-stmt] | |||
| 1*(data-def-stmt / case-stmt) | 1*(data-def-stmt / case-stmt) | |||
| The module name and namespace value for the YANG module using | The module name and namespace value for the YANG module using | |||
| the extension statement is assigned to instance document data | the extension statement are assigned to instance document data | |||
| conforming to the data definition statements within this | conforming to the data definition statements within this | |||
| extension. | extension. | |||
| The XPath document element is the augmented extension | The XPath document element is the augmented extension | |||
| statement itself, such that the child nodes of the document | statement itself, such that the child nodes of the document | |||
| element are represented by the data-def-stmt sub-statements | element are represented by the data-def-stmt substatements | |||
| within the augmented 'structure' statement. | within the augmented 'structure' statement. | |||
| The context node of the 'augment-structure' statement is | The context node of the 'augment-structure' statement is | |||
| derived in the same way as the 'augment' statement, as defined | derived in the same way as the 'augment' statement, as defined | |||
| in section 6.4.1 of [RFC7950]. This conceptual node is | in Section 6.4.1 of [RFC7950]. This conceptual node is | |||
| considered the context node for the following YANG statements: | considered the context node for the following YANG statements: | |||
| - must-stmt | - must-stmt | |||
| - when-stmt | - when-stmt | |||
| - path-stmt | - path-stmt | |||
| - min-elements-stmt | - min-elements-stmt | |||
| - max-elements-stmt | - max-elements-stmt | |||
| - mandatory-stmt | - mandatory-stmt | |||
| - unique-stmt | - unique-stmt | |||
| - ordered-by | - ordered-by | |||
| - instance-identifier data type | - instance-identifier data type | |||
| The following data-def-stmt sub-statements are constrained | The following data-def-stmt substatements are constrained | |||
| when used within an 'augment-structure' extension statement. | when used within an 'augment-structure' extension statement. | |||
| - The list-stmt is not required to have a key-stmt defined. | - The list-stmt is not required to have a key-stmt defined. | |||
| - The config-stmt is ignored if present. | - The config-stmt is ignored if present. | |||
| Example: | Example: | |||
| module foo { | module foo { | |||
| import ietf-yang-structure-ext { prefix sx; } | import ietf-yang-structure-ext { prefix sx; } | |||
| skipping to change at line 465 ¶ | skipping to change at line 440 ¶ | |||
| import ietf-yang-structure-ext { prefix sx; } | import ietf-yang-structure-ext { prefix sx; } | |||
| import foo { prefix foo; } | import foo { prefix foo; } | |||
| sx:augment-structure /foo:foo-data/foo:foo-con { | sx:augment-structure /foo:foo-data/foo:foo-con { | |||
| leaf add-leaf1 { type int32; } | leaf add-leaf1 { type int32; } | |||
| leaf add-leaf2 { type string; } | leaf add-leaf2 { type string; } | |||
| } | } | |||
| } | } | |||
| "; | "; | |||
| } | } | |||
| } | }]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure> | </section> | |||
| <t><CODE ENDS></t> | <section anchor="iana" numbered="true" toc="default"> | |||
| </section> | <name>IANA Considerations</name> | |||
| <section title="IANA Considerations" anchor="iana"> | <section anchor="yang-module-registry" numbered="true" toc="default"> | |||
| <section title="YANG Module Registry" anchor="yang-module-registry"> | <name>YANG Module Registry</name> | |||
| <t> | <t> | |||
| This document registers one URI as a namespace in the | IANA has registered the following URI in the "ns" subregistry within the "IETF | |||
| "IETF XML Registry" <xref target="RFC3688"/>: | XML Registry" <xref target="RFC3688" format="default"/>: | |||
| </t> | </t> | |||
| <figure> | ||||
| <artwork><![CDATA[ | <dl newline="false" spacing="compact" indent="6"> | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-yang-structure-ext | <dt>URI:</dt> | |||
| Registrant Contact: The IESG. | <dd>urn:ietf:params:xml:ns:yang:ietf-yang-structure-ext</dd> | |||
| XML: N/A; the requested URI is an XML namespace. | <dt>Registrant Contact: </dt> | |||
| ]]></artwork> | <dd>The IESG.</dd> | |||
| </figure> | <dt>XML: </dt> | |||
| <t> | <dd>N/A; the requested URI is an XML namespace.</dd> | |||
| This document registers one YANG module in the "YANG Module Names" | </dl> | |||
| registry <xref target="RFC6020"/>: | ||||
| </t> | <t> | |||
| <figure> | IANA has registered the following YANG module in the "YANG Module Names" subregi | |||
| <artwork><![CDATA[ | stry | |||
| name: ietf-yang-structure-ext | <xref target="RFC6020" format="default"/> within the "YANG Parameters" registry: | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-yang-structure-ext | </t> | |||
| prefix: sx | ||||
| // RFC Ed.: replace XXXX with RFC number and remove this note | <dl newline="false" spacing="compact" indent="6"> | |||
| reference: RFC XXXX | <dt>Name:</dt> | |||
| ]]></artwork> | <dd>ietf-yang-structure-ext</dd> | |||
| </figure> | <dt>Namespace:</dt> | |||
| </section> | <dd>urn:ietf:params:xml:ns:yang:ietf-yang-structure-ext</dd> | |||
| </section> | <dt>Prefix:</dt> | |||
| <section title="Security Considerations" anchor="security-considerations"> | <dd>sx</dd> | |||
| <t> | <dt>Reference:</dt> | |||
| This document defines YANG extensions that are used to define | <dd>RFC 8791</dd> | |||
| conceptual YANG data structures. It does not introduce any new | </dl> | |||
| vulnerabilities beyond those specified in YANG 1.1 <xref target="RFC7950"/>. | ||||
| </t> | </section> | |||
| </section> | </section> | |||
| </middle> | <section anchor="security-considerations" numbered="true" toc="default"> | |||
| <back> | <name>Security Considerations</name> | |||
| <references title="Normative References"> | ||||
| <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119"> | <t> This document defines YANG extensions that are used to define conceptual | |||
| <front> | YANG data structures. It does not introduce any new vulnerabilities beyond | |||
| <title>Key words for use in RFCs to Indicate Requirement Levels</title> | those specified in YANG 1.1 <xref target="RFC7950" format="default"/>.</t> | |||
| <author initials="S." surname="Bradner" fullname="S. Bradner"> | </section> | |||
| <organization/> | </middle> | |||
| </author> | <back> | |||
| <date year="1997" month="March"/> | <references> | |||
| <abstract> | <name>References</name> | |||
| <t>In many standards track documents several words are used to signify the | <references> | |||
| requirements in the specification. These words are often capitalized. This doc | <name>Normative References</name> | |||
| ument defines these words as they should be interpreted in IETF documents. This | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| document specifies an Internet Best Current Practices for the Internet Communit | ence.RFC.2119.xml"/> | |||
| y, and requests discussion and suggestions for improvements.</t> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| </abstract> | ence.RFC.7950.xml"/> | |||
| </front> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <seriesInfo name="BCP" value="14"/> | ence.RFC.8040.xml"/> | |||
| <seriesInfo name="RFC" value="2119"/> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <seriesInfo name="DOI" value="10.17487/RFC2119"/> | ence.RFC.8174.xml"/> | |||
| </reference> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <reference anchor="RFC7950" target="https://www.rfc-editor.org/info/rfc7950"> | ence.RFC.8340.xml"/> | |||
| <front> | <xi:include | |||
| <title>The YANG 1.1 Data Modeling Language</title> | href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC. | |||
| <author initials="M." surname="Bjorklund" fullname="M. Bjorklund" role="edit | 8342.xml"/> | |||
| or"> | ||||
| <organization/> | <reference anchor='W3C.REC-xml-20081126' | |||
| </author> | target='http://www.w3.org/TR/2008/REC-xml-20081126'> | |||
| <date year="2016" month="August"/> | <front> | |||
| <abstract> | <title>Extensible Markup Language (XML) 1.0 (Fifth Edition)</title> | |||
| <t>YANG is a data modeling language used to model configuration data, stat | ||||
| e data, Remote Procedure Calls, and notifications for network management protoco | <author initials='T.' surname='Bray' fullname='Tim Bray'> | |||
| ls. This document describes the syntax and semantics of version 1.1 of the YANG | <organization /> | |||
| language. YANG version 1.1 is a maintenance release of the YANG language, addr | </author> | |||
| essing ambiguities and defects in the original specification. There are a small | ||||
| number of backward incompatibilities from YANG version 1. This document also s | <author initials='J.' surname='Paoli' fullname='Jean Paoli'> | |||
| pecifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t> | <organization /> | |||
| </abstract> | </author> | |||
| </front> | ||||
| <seriesInfo name="RFC" value="7950"/> | <author initials='M.' surname='Sperberg-McQueen' fullname='Michael Sperberg-McQu | |||
| <seriesInfo name="DOI" value="10.17487/RFC7950"/> | een'> | |||
| </reference> | <organization /> | |||
| <reference anchor="RFC8040" target="https://www.rfc-editor.org/info/rfc8040"> | </author> | |||
| <front> | ||||
| <title>RESTCONF Protocol</title> | <author initials='E.' surname='Maler' fullname='Eve Maler'> | |||
| <author initials="A." surname="Bierman" fullname="A. Bierman"> | <organization /> | |||
| <organization/> | </author> | |||
| </author> | ||||
| <author initials="M." surname="Bjorklund" fullname="M. Bjorklund"> | <author initials='F.' surname='Yergeau' fullname='François Yergeau'> | |||
| <organization/> | <organization /> | |||
| </author> | </author> | |||
| <author initials="K." surname="Watsen" fullname="K. Watsen"> | ||||
| <organization/> | <date month='November' year='2008' /> | |||
| </author> | </front> | |||
| <date year="2017" month="January"/> | ||||
| <abstract> | <seriesInfo name='World Wide Web Consortium Recommendation' value='REC-xml-20081 | |||
| <t>This document describes an HTTP-based protocol that provides a programm | 126' /> | |||
| atic interface for accessing data defined in YANG, using the datastore concepts | <format type='HTML' target='http://www.w3.org/TR/2008/REC-xml-20081126' /> | |||
| defined in the Network Configuration Protocol (NETCONF).</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8040"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8040"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174"> | ||||
| <front> | ||||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title> | ||||
| <author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2017" month="May"/> | ||||
| <abstract> | ||||
| <t>RFC 2119 specifies common key words that may be used in protocol speci | ||||
| fications. This document aims to reduce the ambiguity by clarifying that only U | ||||
| PPERCASE usage of the key words have the defined special meanings.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <seriesInfo name="RFC" value="8174"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8340" target="https://www.rfc-editor.org/info/rfc8340"> | ||||
| <front> | ||||
| <title>YANG Tree Diagrams</title> | ||||
| <author initials="M." surname="Bjorklund" fullname="M. Bjorklund"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="L." surname="Berger" fullname="L. Berger" role="editor"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2018" month="March"/> | ||||
| <abstract> | ||||
| <t>This document captures the current syntax used in YANG module tree diag | ||||
| rams. The purpose of this document is to provide a single location for this def | ||||
| inition. This syntax may be updated from time to time based on the evolution of | ||||
| the YANG language.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="215"/> | ||||
| <seriesInfo name="RFC" value="8340"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8340"/> | ||||
| </reference> | ||||
| <reference anchor="RFC8342" target="https://www.rfc-editor.org/info/rfc8342"> | ||||
| <front> | ||||
| <title>Network Management Datastore Architecture (NMDA)</title> | ||||
| <author initials="M." surname="Bjorklund" fullname="M. Bjorklund"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="J." surname="Schoenwaelder" fullname="J. Schoenwaelder"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="P." surname="Shafer" fullname="P. Shafer"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="K." surname="Watsen" fullname="K. Watsen"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="R." surname="Wilton" fullname="R. Wilton"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2018" month="March"/> | ||||
| <abstract> | ||||
| <t>Datastores are a fundamental concept binding the data models written in | ||||
| the YANG data modeling language to network management protocols such as the Net | ||||
| work Configuration Protocol (NETCONF) and RESTCONF. This document defines an arc | ||||
| hitectural framework for datastores based on the experience gained with the init | ||||
| ial simpler model, addressing requirements that were not well supported in the i | ||||
| nitial model. This document updates RFC 7950.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="8342"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8342"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references title="Informative References"> | ||||
| <reference anchor="RFC3688" target="https://www.rfc-editor.org/info/rfc3688"> | ||||
| <front> | ||||
| <title>The IETF XML Registry</title> | ||||
| <author initials="M." surname="Mealling" fullname="M. Mealling"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2004" month="January"/> | ||||
| <abstract> | ||||
| <t>This document describes an IANA maintained registry for IETF standards | ||||
| which use Extensible Markup Language (XML) related items such as Namespaces, Doc | ||||
| ument Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF | ||||
| ) Schemas.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="BCP" value="81"/> | ||||
| <seriesInfo name="RFC" value="3688"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC3688"/> | ||||
| </reference> | ||||
| <reference anchor="RFC6020" target="https://www.rfc-editor.org/info/rfc6020"> | ||||
| <front> | ||||
| <title>YANG - A Data Modeling Language for the Network Configuration Protoco | ||||
| l (NETCONF)</title> | ||||
| <author initials="M." surname="Bjorklund" fullname="M. Bjorklund" role="edit | ||||
| or"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2010" month="October"/> | ||||
| <abstract> | ||||
| <t>YANG is a data modeling language used to model configuration and state | ||||
| data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote | ||||
| procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <seriesInfo name="RFC" value="6020"/> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6020"/> | ||||
| </reference> | </reference> | |||
| </references> | ||||
| <section title="Examples" anchor="examples"> | </references> | |||
| <section title=""structure" Example" anchor="structure-example"> | <references> | |||
| <t> | <name>Informative References</name> | |||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.3688.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6020.xml"/> | ||||
| </references> | ||||
| </references> | ||||
| <section anchor="examples" numbered="true" toc="default"> | ||||
| <name>Examples</name> | ||||
| <section anchor="structure-example" numbered="true" toc="default"> | ||||
| <name>"structure" Example</name> | ||||
| <t> | ||||
| This example shows a simple address book that could be stored as an | This example shows a simple address book that could be stored as an | |||
| artifact. | artifact: | |||
| </t> | </t> | |||
| <figure> | <sourcecode type="yang"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| module example-module { | module example-module { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:example:example-module"; | namespace "urn:example:example-module"; | |||
| prefix exm; | prefix exm; | |||
| import ietf-yang-structure-ext { | import ietf-yang-structure-ext { | |||
| prefix sx; | prefix sx; | |||
| } | } | |||
| sx:structure address-book { | sx:structure address-book { | |||
| skipping to change at line 690 ¶ | skipping to change at line 582 ¶ | |||
| leaf city { | leaf city { | |||
| type string; | type string; | |||
| description "City name"; | description "City name"; | |||
| } | } | |||
| leaf state { | leaf state { | |||
| type string; | type string; | |||
| description "State name"; | description "State name"; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | }]]> | |||
| </sourcecode> | ||||
| ]]></artwork> | <t> | |||
| </figure> | Below is the tree diagram of this module: | |||
| <t> | </t> | |||
| Below is the tree diagram of this module. | <sourcecode type="yangtree"><![CDATA[ | |||
| </t> | ||||
| <figure> | ||||
| <artwork><![CDATA[ | ||||
| module: example-module | module: example-module | |||
| structure address-book: | structure address-book: | |||
| +-- address* [last first] | +-- address* [last first] | |||
| +-- last string | +-- last string | |||
| +-- first string | +-- first string | |||
| +-- street? string | +-- street? string | |||
| +-- city? string | +-- city? string | |||
| +-- state? string | +-- state? string]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure> | </section> | |||
| </section> | <section anchor="augment-structure-example" numbered="true" toc="default"> | |||
| <section title=""augment‑structure" Example" anchor="augment-str | <name>"augment&nbhy;structure" Example</name> | |||
| ucture-example"> | <t> | |||
| <t> | This example adds "county" and "zipcode" leafs to the address book: | |||
| This example adds "county" and "zipcode" leafs to the addres | </t> | |||
| s book: | ||||
| </t> | <sourcecode type="yang"><![CDATA[ | |||
| <figure> | ||||
| <artwork><![CDATA[ | ||||
| module example-module-aug { | module example-module-aug { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:example:example-module-aug"; | namespace "urn:example:example-module-aug"; | |||
| prefix exma; | prefix exma; | |||
| import ietf-yang-structure-ext { | import ietf-yang-structure-ext { | |||
| prefix sx; | prefix sx; | |||
| } | } | |||
| import example-module { | import example-module { | |||
| prefix exm; | prefix exm; | |||
| skipping to change at line 739 ¶ | skipping to change at line 628 ¶ | |||
| sx:augment-structure "/exm:address-book/exm:address" { | sx:augment-structure "/exm:address-book/exm:address" { | |||
| leaf county { | leaf county { | |||
| type string; | type string; | |||
| description "County name"; | description "County name"; | |||
| } | } | |||
| leaf zipcode { | leaf zipcode { | |||
| type string; | type string; | |||
| description "Postal zipcode"; | description "Postal zipcode"; | |||
| } | } | |||
| } | } | |||
| } | }]]> | |||
| </sourcecode> | ||||
| ]]></artwork> | <t> | |||
| </figure> | Below is the tree diagram of this module: | |||
| <t> | </t> | |||
| Below is the tree diagram of this module. | <sourcecode type="yangtree"><![CDATA[ | |||
| </t> | ||||
| <figure> | ||||
| <artwork><![CDATA[ | ||||
| module: example-module-aug | module: example-module-aug | |||
| augment-structure /exm:address-book/exm:address: | augment-structure /exm:address-book/exm:address: | |||
| +-- county? string | +-- county? string | |||
| +-- zipcode? string | +-- zipcode? string]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure> | </section> | |||
| </section> | <section anchor="xml-encoding-example" numbered="true" toc="default"> | |||
| <section title="XML Encoding Example" anchor="xml-encoding-example"> | <name>XML Encoding Example</name> | |||
| <t> | ||||
| This example shows how an address book can be encoded in XML: | <t> | |||
| </t> | This example shows how an address book can be encoded in XML <xref | |||
| <figure> | target="W3C.REC-xml-20081126"/>: | |||
| <artwork><![CDATA[ | </t> | |||
| <sourcecode type="xml"><![CDATA[ | ||||
| <address-book xmlns="urn:example:example-module"> | <address-book xmlns="urn:example:example-module"> | |||
| <address> | <address> | |||
| <last>Flintstone</last> | <last>Flintstone</last> | |||
| <first>Fred</first> | <first>Fred</first> | |||
| <street>301 Cobblestone Way</street> | <street>301 Cobblestone Way</street> | |||
| <city>Bedrock</city> | <city>Bedrock</city> | |||
| <zipcode xmlns="urn:example:example-module-aug">70777</zipcode> | <zipcode xmlns="urn:example:example-module-aug">70777</zipcode> | |||
| </address> | </address> | |||
| <address> | <address> | |||
| <last>Root</last> | <last>Root</last> | |||
| <first>Charlie</first> | <first>Charlie</first> | |||
| <street>4711 Cobblestone Way</street> | <street>4711 Cobblestone Way</street> | |||
| <city>Bedrock</city> | <city>Bedrock</city> | |||
| <zipcode xmlns="urn:example:example-module-aug">70777</zipcode> | <zipcode xmlns="urn:example:example-module-aug">70777</zipcode> | |||
| </address> | </address> | |||
| </address-book> | </address-book>]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure> | </section> | |||
| </section> | <section anchor="json-encoding-example" numbered="true" toc="default"> | |||
| <section title="JSON Encoding Example" anchor="json-encoding-example"> | <name>JSON Encoding Example</name> | |||
| <t> | <t> | |||
| This example shows how an address book can be encoded in JSON: | This example shows how an address book can be encoded in JSON: | |||
| </t> | </t> | |||
| <figure> | <sourcecode type="json"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| "example-module:address-book": { | "example-module:address-book": { | |||
| "address": [ | "address": [ | |||
| { | { | |||
| "city": "Bedrock", | "city": "Bedrock", | |||
| "example-module-aug:zipcode": "70777", | "example-module-aug:zipcode": "70777", | |||
| "first": "Fred", | "first": "Fred", | |||
| "last": "Flintstone", | "last": "Flintstone", | |||
| "street": "301 Cobblestone Way" | "street": "301 Cobblestone Way" | |||
| }, | }, | |||
| { | { | |||
| "city": "Bedrock", | "city": "Bedrock", | |||
| "example-module-aug:zipcode": "70777", | "example-module-aug:zipcode": "70777", | |||
| "first": "Charlie", | "first": "Charlie", | |||
| "last": "Root", | "last": "Root", | |||
| "street": "4711 Cobblestone Way" | "street": "4711 Cobblestone Way" | |||
| } | } | |||
| ] | ] | |||
| } | }]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure> | </section> | |||
| </section> | <section | |||
| <section title=""structure" example that defines a non-top-level struc | anchor="structure-example-that-defines-a-non-top-level-structure" | |||
| ture" anchor="structure-example-that-defines-a-non-top-level-structure"> | numbered="true" toc="default"> | |||
| <t> | <name>"structure" Example That Defines a Non-top-level Structure</name> | |||
| The following example defines a data structure with error information, | <t> | |||
| that can be included in an <error‑info> element in an <rpc‑ | The following example defines a data structure with error information | |||
| error>. | that can be included in an <error&nbhy;info> element in an | |||
| </t> | <rpc&nbhy;error>: | |||
| <figure> | </t> | |||
| <artwork><![CDATA[ | <sourcecode type="yang"><![CDATA[ | |||
| module example-error-info { | module example-error-info { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:example:example-error-info"; | namespace "urn:example:example-error-info"; | |||
| prefix exei; | prefix exei; | |||
| import ietf-yang-structure-ext { | import ietf-yang-structure-ext { | |||
| prefix sx; | prefix sx; | |||
| } | } | |||
| sx:structure my-example-error-info { | sx:structure my-example-error-info { | |||
| leaf error-code { | leaf error-code { | |||
| type uint32; | type uint32; | |||
| } | } | |||
| } | } | |||
| } | }]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure> | <t> | |||
| <t> | ||||
| The example below shows how this structure can be used in an | The example below shows how this structure can be used in an | |||
| <rpc‑error>. | <rpc&nbhy;error>: | |||
| </t> | </t> | |||
| <figure> | <sourcecode type="xml"><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| <rpc-reply message-id="101" | <rpc-reply message-id="101" | |||
| xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
| <rpc-error> | <rpc-error> | |||
| <error-type>protocol</error-type> | <error-type>protocol</error-type> | |||
| <error-tag>operation-failed</error-tag> | <error-tag>operation-failed</error-tag> | |||
| <error-severity>error</error-severity> | <error-severity>error</error-severity> | |||
| <error-info> | <error-info> | |||
| <my-example-error-info | <my-example-error-info | |||
| xmlns="urn:example:example-error-info"> | xmlns="urn:example:example-error-info"> | |||
| <error-code>42</error-code> | <error-code>42</error-code> | |||
| </my-example-error-info> | </my-example-error-info> | |||
| </error-info> | </error-info> | |||
| </rpc-error> | </rpc-error> | |||
| </rpc-reply> | </rpc-reply>]]> | |||
| ]]></artwork> | </sourcecode> | |||
| </figure> | </section> | |||
| </section> | </section> | |||
| </section> | ||||
| </back></rfc> | </back> | |||
| </rfc> | ||||
| End of changes. 61 change blocks. | ||||
| 517 lines changed or deleted | 373 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||