<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.6 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bormann-cbor-yang-standin-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.2 -->
  <front>
    <title>Stand-in Tags for YANG-CBOR</title>
    <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-yang-standin-00"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="M." surname="Matejka" fullname="Maria Matejka">
      <organization>CZ.NIC</organization>
      <address>
        <postal>
          <street>Milesovska 1136/5</street>
          <city>Praha</city>
          <code>13000</code>
          <country>Czechia</country>
        </postal>
        <email>maria.matejka@nic.cz</email>
        <email>mq@jmq.cz</email>
      </address>
    </author>
    <date year="2024" month="February" day="21"/>
    <area>Applications and Real-Time</area>
    <workgroup>Concise Binary Object Representation Maintenance and Extensions</workgroup>
    <keyword>efficient YANG</keyword>
    <abstract>
      <?line 53?>

<t>YANG (RFC 7950) is a data modeling language used to model
configuration data, state data, parameters and results of Remote
Procedure Call (RPC) operations or actions, and notifications.</t>
      <t>YANG-CBOR (RFC 9254) defines encoding rules for YANG in the Concise Binary
Object Representation (CBOR) (RFC 8949).
While the overall structure of YANG-CBOR is encoded in an efficient,
binary format, YANG itself has its roots in XML and therefore
traditionally encodes some information such as date/times and IP
addresses/prefixes in a verbose text form.</t>
      <t>This document defines how to use existing CBOR tags for this kind of
information in YANG-CBOR as a "stand-in" for the text-based
information that would be found in the original form of YANG-CBOR.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-bormann-cbor-yang-standin/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        CBOR (Concise Binary Object Representation Maintenance and Extensions) Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cabo/yang-standin"/>.</t>
    </note>
  </front>
  <middle>
    <?line 71?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>(see abstract)</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The terminology of <xref target="RFC9254"/> applies.</t>
      <dl>
        <dt>Legacy representation:</dt>
        <dd>
          <t>The (often text-based) representation for a YANG data item as used
in YANG-XML, YANG-JSON, and (unchanged) YANG-CBOR.</t>
        </dd>
        <dt>Stand-in tag:</dt>
        <dd>
          <t>A CBOR tag that can supply the information that is equivalent to a
legacy representation in a more efficient format (e.g., using binary
data).</t>
        </dd>
        <dt>Encoder:</dt>
        <dd>
          <t>The party which generates (sends) CBOR data described by YANG.</t>
        </dd>
        <dt>Intermediate Encoder:</dt>
        <dd>
          <t>An encoder which isn't the original author of the data, converting it
from legacy representation.</t>
        </dd>
        <dt>Decoder:</dt>
        <dd>
          <t>The party which receives and parses CBOR data described by YANG.</t>
        </dd>
        <dt>Intermediate Decoder:</dt>
        <dd>
          <t>A decoder which isn't the final recipient of the data, converting it
to legacy representation.</t>
        </dd>
        <dt>Data Transfer:</dt>
        <dd>
          <t>A series of actions, generally beginning by data origination, encoding,
continuing by optional intermediate transcoding, sending and receiving,
and finally decoding and consuming.</t>
        </dd>
        <dt>Round Trip:</dt>
        <dd>
          <t>Part of a data transfer between an encoder generating CBOR data with
stand-in tags and a decoder parsing the data.</t>
        </dd>
        <dt>Legacy Round Trip:</dt>
        <dd>
          <t>A Round Trip where the encoder is an intermediate encoder or the decoder is
an intermediate decoder and any of these converts from or to the
legacy representation.</t>
        </dd>
        <dt>Unambiguous Round Trip:</dt>
        <dd>
          <t>A Legacy Round Trip that provides exactly the same legacy representation
(not just semantically equivalent).
The stand-in tag is also said to "unambiguously stand in" for the
legacy representation.</t>
        </dd>
      </dl>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="stand-in-tags">
      <name>Stand-In Tags</name>
      <t>This document defines two sets of stand-in tags.
Where information starts out in a legacy representation, these tags
are only used when an Unambiguous Round Trip can be achieved.</t>
      <section anchor="ietf-yang-types-tag-1-datetime-and-tag-100-date">
        <name><tt>ietf-yang-types</tt>: Tag 1 (Date/Time) and Tag 100 (Date)</name>
        <t><xref section="3" sectionFormat="of" target="I-D.schoenw-netmod-rfc6991-bis"/> defines the following types in <tt>ietf-yang-types</tt>:</t>
        <table>
          <name>Legacy representations in ietf-yang-types</name>
          <thead>
            <tr>
              <th align="left">YANG type</th>
              <th align="left">base type</th>
              <th align="left">specification</th>
              <th align="left">stand-in</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">date-and-time</td>
              <td align="left">string</td>
              <td align="left">
                <xref target="RFC6021"/></td>
              <td align="left">tag 1</td>
            </tr>
            <tr>
              <td align="left">date-with-zone-offset</td>
              <td align="left">string</td>
              <td align="left">
                <xref target="I-D.schoenw-netmod-rfc6991-bis"/></td>
              <td align="left">(none)</td>
            </tr>
            <tr>
              <td align="left">date-no-zone</td>
              <td align="left">string</td>
              <td align="left">
                <xref target="I-D.schoenw-netmod-rfc6991-bis"/></td>
              <td align="left">tag 100</td>
            </tr>
          </tbody>
        </table>
        <t>Tag 1 (Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) can unambiguously stand in for all <tt>date-and-time</tt> values that:</t>
        <ul spacing="normal">
          <li>
            <t>do not specify a time zone (note that <xref target="I-D.schoenw-netmod-rfc6991-bis"/>
uses the legacy "<tt>-00:00</tt>" format for time-zone-free date-times)</t>
          </li>
          <li>
            <t>are not an inserted leap second (23:59:60 or 23:59:61)</t>
          </li>
          <li>
            <t>do not have trailing zeroes in the fractional part of the seconds.</t>
          </li>
          <li>
            <t>do not have fractional parts of the seconds with a precision that
cannot be represented in floating-point tag content in a tag 1.</t>
          </li>
        </ul>
        <t>All other <tt>date-and-time</tt> values stay in legacy representation.</t>
        <t>Tag 1 uses an integer tag content for all <tt>date-and-time</tt> values
without fractional seconds and a floating-point tag content for values
that have fractional seconds given.</t>
        <t>Tag 100 <xref target="RFC8943"/> can unambiguously stand in for all <tt>date-no-zone</tt> values.</t>
      </section>
      <section anchor="ietf-inet-types-tags-54-and-52-ip-addresses-and-prefixes">
        <name><tt>ietf-inet-types</tt>: Tags 54 and 52 (IP addresses and prefixes)</name>
        <t><xref section="4" sectionFormat="of" target="I-D.schoenw-netmod-rfc6991-bis"/> defines in <tt>ietf-inet-types</tt>:</t>
        <table>
          <name>Legacy representations in ietf-yang-types</name>
          <thead>
            <tr>
              <th align="left">YANG type</th>
              <th align="left">base type</th>
              <th align="left">specification</th>
              <th align="left">stand-in</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ip-address</td>
              <td align="left">union</td>
              <td align="left">
                <xref target="RFC6021"/></td>
              <td align="left">(see union)</td>
            </tr>
            <tr>
              <td align="left">ipv6-address</td>
              <td align="left">string</td>
              <td align="left">
                <xref target="RFC6021"/></td>
              <td align="left">tag 54</td>
            </tr>
            <tr>
              <td align="left">ipv4-address</td>
              <td align="left">string</td>
              <td align="left">
                <xref target="RFC6021"/></td>
              <td align="left">tag 52</td>
            </tr>
            <tr>
              <td align="left">ip-address-no-zone</td>
              <td align="left">union</td>
              <td align="left">RFC 6991</td>
              <td align="left">(see union)</td>
            </tr>
            <tr>
              <td align="left">ipv6-address-no-zone</td>
              <td align="left">ipv6-address</td>
              <td align="left">RFC 6991</td>
              <td align="left">tag 54</td>
            </tr>
            <tr>
              <td align="left">ipv4-address-no-zone</td>
              <td align="left">ipv4-address</td>
              <td align="left">RFC 6991</td>
              <td align="left">tag 52</td>
            </tr>
            <tr>
              <td align="left">ip-address-link-local</td>
              <td align="left">union</td>
              <td align="left">
                <xref target="I-D.schoenw-netmod-rfc6991-bis"/></td>
              <td align="left">(see union)</td>
            </tr>
            <tr>
              <td align="left">ipv6-address-link-local</td>
              <td align="left">ipv6-address</td>
              <td align="left">
                <xref target="I-D.schoenw-netmod-rfc6991-bis"/></td>
              <td align="left">tag 54</td>
            </tr>
            <tr>
              <td align="left">ipv4-address-link-local</td>
              <td align="left">ipv4-address</td>
              <td align="left">
                <xref target="I-D.schoenw-netmod-rfc6991-bis"/></td>
              <td align="left">tag 52</td>
            </tr>
            <tr>
              <td align="left">ip-prefix</td>
              <td align="left">union</td>
              <td align="left">
                <xref target="RFC6021"/></td>
              <td align="left">(see union)</td>
            </tr>
            <tr>
              <td align="left">ipv6-prefix</td>
              <td align="left">string</td>
              <td align="left">
                <xref target="RFC6021"/></td>
              <td align="left">tag 54</td>
            </tr>
            <tr>
              <td align="left">ipv4-prefix</td>
              <td align="left">string</td>
              <td align="left">
                <xref target="RFC6021"/></td>
              <td align="left">tag 52</td>
            </tr>
            <tr>
              <td align="left">ip-address-and-prefix</td>
              <td align="left">union</td>
              <td align="left">
                <xref target="I-D.schoenw-netmod-rfc6991-bis"/></td>
              <td align="left">(see union)</td>
            </tr>
            <tr>
              <td align="left">ipv6-address-and-prefix</td>
              <td align="left">string</td>
              <td align="left">
                <xref target="I-D.schoenw-netmod-rfc6991-bis"/></td>
              <td align="left">tag 54</td>
            </tr>
            <tr>
              <td align="left">ipv4-address-and-prefix</td>
              <td align="left">string</td>
              <td align="left">
                <xref target="I-D.schoenw-netmod-rfc6991-bis"/></td>
              <td align="left">tag 52</td>
            </tr>
          </tbody>
        </table>
        <t>An intermediate encoder <bcp14>MAY</bcp14> normalize IPv6 addresses and prefixes that do not comply with <xref target="RFC5952"/>
but can be converted into the stand-in representation.
For example, IPv6 address written as 2001:db8:: is the same as 2001:0db8::0:0 and both would
be converted to <tt>54(h'20010db8000000000000000000000000')</tt>, anyway only the
first one complies with <xref target="RFC5952"/>. The encoder <bcp14>MAY</bcp14> refuse to convert the
latter one.</t>
        <t>If the schema specifies
<tt>ip-prefix</tt>, an intermediate encoder <bcp14>MAY</bcp14> normalize prefixes with non-zero bits after the prefix end.
For example, if the legacy representation of <tt>ipv6-prefix</tt> is 2001:db8:1::/40, the encoder
may either refuse it as malformed or convert it to 2001:db8::/40 and represent
as <tt>54([40, h'20010db8'])</tt>.</t>
        <t>The encoder implementation should be clear about which normalizations are employed and how.</t>
        <t>Adapted examples from <xref target="RFC9164"/>:</t>
        <t>Stand-in representation of IPv6 address 2001:db8:1234:deed:beef:cafe:face:feed
is <tt>54(h'20010db81234deedbeefcafefacefeed')</tt>.</t>
        <t>CBOR encoding of stand-in (19 bytes):</t>
        <t><tt>cbor-pretty
D8 36                                  # tag(54)
   50                                  # bytes(16)
      20010DB81234DEEDBEEFCAFEFACEFEED
</tt></t>
        <t>CBOR encoding of legacy representation (40 bytes):</t>
        <t><tt>cbor-pretty
78 26                                   # text(38)
   323030313A6462383A313233343A646565643A626565663A636166653A666163653A66656564
</tt></t>
        <t>Stand-in representation of IPv6 prefix 2001:db8:1234::/48 is
<tt>54([48, h'20010db81234'])</tt>.</t>
        <t>CBOR encoding of stand-in (12 bytes):</t>
        <t><tt>cbor-pretty
D8 36                 # tag(54)
   82                 # array(2)
      18 30           # unsigned(48)
      46              # bytes(6)
         20010DB81234 # " \u0001\r\xB8\u00124"
</tt></t>
        <t>CBOR encoding of legacy representation (19 bytes):</t>
        <t><tt>cbor-pretty
72                                      # text(18)
   323030313A6462383A313233343A3A2F3438 # "2001:db8:1234::/48"
</tt></t>
        <t>Stand-in representation of IPv6 link-local address fe80::0202:02ff:ffff:fe03:0303/64%eth0 is
<tt>54([h'fe8000000000020202fffffffe030303', 64, 'eth0'])</tt>.</t>
        <t>CBOR encoding of stand-in (27 bytes):</t>
        <t><tt>cbor-pretty
D8 36                                   # tag(54)
   83                                   # array(3)
      50                                # bytes(16)
         FE8000000000020202FFFFFFFE030303
      18 40                             # unsigned(64)
      44                                # bytes(4)
         65746830                       # "eth0"
</tt></t>
        <t>CBOR encoding of legacy representation (40 bytes):</t>
        <t><tt>cbor-pretty
78 26                                   # text(38)
   666538303A3A303230323A303266663A666666663A666530333A303330332F36342565746830
</tt></t>
        <t>TO DO: adapt more examples from <xref target="RFC9164"/></t>
        <t>TO DO: Check how the unions in <xref target="RFC6021"/> and <xref target="I-D.schoenw-netmod-rfc6991-bis"/> interact
with this.  E.g., the union ip-address needs to be parsed to decide
between tag 54 and tag 52.</t>
      </section>
      <section anchor="union-handling">
        <name>Union handling</name>
        <t>When the schema specifies a union data type for a node, there are
additional requirements on the encoder and decoder.</t>
        <t>An encoder which is fully aware of data semantics <bcp14>MUST</bcp14> use the appropriate
data type, even though it isn't formally specified by the schema.</t>
        <t>If an intermediate encoder doesn't fully understand the data semantics,
it needs to find out which type the data actually is to choose the right stand-in.
If more types are possible, it <bcp14>MAY</bcp14> choose any of these which allow for an Unambiguous Round Trip,
otherwise it <bcp14>SHOULD</bcp14> keep the legacy representation.</t>
        <t>If a decoder receives data for a union-typed node, it <bcp14>MUST</bcp14> accept any data type
of the union, even though it may violate additional constraints outside the schema.</t>
      </section>
    </section>
    <section anchor="using-stand-in-tags">
      <name>Using Stand-In Tags</name>
      <section anchor="defining-stand-in-usage-in-schema">
        <name>Defining Stand-In Usage in Schema</name>
        <t>TO DO: formally define the YANG extension</t>
      </section>
      <section anchor="original-stand-ins">
        <name>Original stand-ins</name>
        <t>The simplest situation is when no intermediate encoders and decoders are
involved in the data transfer, therefore the round trip is not legacy.
In this case, no conversions are involved and data is validated using the
schema extension from the previous section.</t>
      </section>
      <section anchor="legacy-round-trip">
        <name>Legacy Round Trip</name>
        <t>Producing a stand-in <bcp14>MUST</bcp14> be triggered by schema usage. Intermediate encoders
<bcp14>MUST NOT</bcp14> encode stand-ins when no schema is available.</t>
        <t>It's generally not recommended to do a legacy round trip where both the encoder
and decoder are converting from and to the legacy representation.</t>
      </section>
    </section>
    <section anchor="negotiation">
      <name>Negotiation</name>
      <t>Introducing stand-in tags in YANG-CBOR requires some form of consent
between the producer and the consumer of YANG-CBOR information:</t>
      <ul spacing="normal">
        <li>
          <t>A producer that creates YANG-CBOR containing stand-in tags needs to
know whether the consumer supports stand-in tags, and, possibly,
which specific stand-in tags it supports.  We speak about the
<em>capability</em> of a consumer to consume stand-in tags.
A producer <bcp14>MUST NOT</bcp14> employ stand-in tags unless it knows about the
capabilities of the consumer.
A consumer <bcp14>SHOULD</bcp14> indicate its capabilities for consuming stand-in tags.</t>
        </li>
        <li>
          <t>A consumer may not want to implement certain legacy text-based
representations where more efficient (and easy to implement)
stand-in tags are available.  This places a <em>requirement</em> on the
producer (which needs to have the <em>capability</em> to produce YANG-CBOR
where those stand-in tags are used, in place of legacy
representations).
A producer <bcp14>MUST NOT</bcp14> employ legacy representations where stand-in
tags are <em>required</em> by the consumer.
A consumer that has requirements for only receiving stand-in tags in
place of legacy representations, <bcp14>MUST</bcp14> indicate this to the producer.</t>
        </li>
      </ul>
      <t>ISSUE: Where do we put those two aspects of negotiation?</t>
      <ul spacing="normal">
        <li>
          <t>NETCONF negotiation</t>
        </li>
        <li>
          <t>yang-library</t>
        </li>
        <li>
          <t>media-type parameters</t>
        </li>
        <li>
          <t>?</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="stand-in-tags-1">
        <name>stand-in tags?</name>
        <t>ISSUE: Do we want to have a separate registry for stand-in tags?</t>
        <t>They already are CBOR tags and thus in the in the registry, but might
get lost in the bulk of that (and are only identified as YANG-CBOR
stand-in Tags in the specification).</t>
      </section>
      <section anchor="media-type-parameters">
        <name>media-type parameters</name>
        <t>ISSUE: Should the use of stand-in tags be mentioned in the various
YANG-CBOR-based media types (as a media type parameter)?
Compare how application/yang-data+cbor can use id=name/id=sid to
indicate another encoding decision.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC9254">
        <front>
          <title>Encoding of Data Modeled with YANG in the Concise Binary Object Representation (CBOR)</title>
          <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
          <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
          <author fullname="A. Pelov" initials="A." surname="Pelov"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <author fullname="M. Richardson" initials="M." surname="Richardson"/>
          <date month="July" year="2022"/>
          <abstract>
            <t>YANG (RFC 7950) is a data modeling language used to model configuration data, state data, parameters and results of Remote Procedure Call (RPC) operations or actions, and notifications.</t>
            <t>This document defines encoding rules for YANG in the Concise Binary Object Representation (CBOR) (RFC 8949).</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9254"/>
        <seriesInfo name="DOI" value="10.17487/RFC9254"/>
      </reference>
      <reference anchor="RFC9164">
        <front>
          <title>Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes</title>
          <author fullname="M. Richardson" initials="M." surname="Richardson"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="December" year="2021"/>
          <abstract>
            <t>This specification defines two Concise Binary Object Representation (CBOR) tags for use with IPv6 and IPv4 addresses and prefixes.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9164"/>
        <seriesInfo name="DOI" value="10.17487/RFC9164"/>
      </reference>
      <reference anchor="I-D.schoenw-netmod-rfc6991-bis">
        <front>
          <title>Common YANG Data Types</title>
          <author fullname="Jürgen Schönwälder" initials="J." surname="Schönwälder">
            <organization>Jacobs University</organization>
          </author>
          <date day="11" month="March" year="2019"/>
          <abstract>
            <t>   This document introduces a collection of common data types to be used
   with the YANG data modeling language.  This document obsoletes RFC
   6991.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-schoenw-netmod-rfc6991-bis-01"/>
      </reference>
      <reference anchor="RFC5952">
        <front>
          <title>A Recommendation for IPv6 Address Text Representation</title>
          <author fullname="S. Kawamura" initials="S." surname="Kawamura"/>
          <author fullname="M. Kawashima" initials="M." surname="Kawashima"/>
          <date month="August" year="2010"/>
          <abstract>
            <t>As IPv6 deployment increases, there will be a dramatic increase in the need to use IPv6 addresses in text. While the IPv6 address architecture in Section 2.2 of RFC 4291 describes a flexible model for text representation of an IPv6 address, this flexibility has been causing problems for operators, system engineers, and users. This document defines a canonical textual representation format. It does not define a format for internal storage, such as within an application or database. It is expected that the canonical format will be followed by humans and systems when representing IPv6 addresses as text, but all implementations must accept and be able to handle any legitimate RFC 4291 format. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5952"/>
        <seriesInfo name="DOI" value="10.17487/RFC5952"/>
      </reference>
      <reference anchor="RFC8943">
        <front>
          <title>Concise Binary Object Representation (CBOR) Tags for Date</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
          <author fullname="J. Richter" initials="J." surname="Richter"/>
          <date month="November" year="2020"/>
          <abstract>
            <t>The Concise Binary Object Representation (CBOR), as specified in RFC 7049, is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation.</t>
            <t>In CBOR, one point of extensibility is the definition of CBOR tags. RFC 7049 defines two tags for time: CBOR tag 0 (date/time string as per RFC 3339) and tag 1 (POSIX "seconds since the epoch"). Since then, additional requirements have become known. This specification defines a CBOR tag for a date text string (as per RFC 3339) for applications needing a textual date representation within the Gregorian calendar without a time. It also defines a CBOR tag for days since the date 1970-01-01 in the Gregorian calendar for applications needing a numeric date representation without a time. This specification is the reference document for IANA registration of the CBOR tags defined.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8943"/>
        <seriesInfo name="DOI" value="10.17487/RFC8943"/>
      </reference>
      <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
      </referencegroup>
      <reference anchor="RFC6021">
        <front>
          <title>Common YANG Data Types</title>
          <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
          <date month="October" year="2010"/>
          <abstract>
            <t>This document introduces a collection of common data types to be used with the YANG data modeling language. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6021"/>
        <seriesInfo name="DOI" value="10.17487/RFC6021"/>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE 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>
    </references>
    <?line 373?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
5Aj/B28vj+FsMQAA

-->

</rfc>
