<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-cbor-sequence-02" indexInclude="true" ipr="trust200902" number="8742" prepTime="2020-02-19T08:03:51" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-cbor-sequence-02" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8742" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="CBOR Sequences">Concise Binary Object Representation (CBOR) Sequences</title>
    <seriesInfo name="RFC" value="8742" stream="IETF"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization ascii="Universitaet Bremen TZI" showOnFrontPage="true">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>
    <date month="02" year="2020"/>
    <keyword>binary format</keyword>
    <keyword>data interchange format</keyword>
    <keyword>JSON</keyword>
    <abstract pn="section-abstract">
      <t pn="section-abstract-1">This document describes the Concise Binary Object Representation
(CBOR) Sequence format and associated media type
"application/cbor-seq".  A CBOR Sequence consists of any number of
encoded CBOR data items, simply concatenated in sequence.</t>
      <t pn="section-abstract-2">Structured syntax suffixes for media types allow other media types to
build on them and make it explicit that they are built on an existing
media type as their foundation.  This specification defines and
registers "+cbor-seq" as a structured syntax suffix for CBOR
Sequences.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8742" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t pn="section-boilerplate.2-1">
            Copyright (c) 2020 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-conventions-used-in-this-do">Conventions Used in This Document</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-cbor-sequence-format">CBOR Sequence Format</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-the-cbor-seq-structured-syn">The "+cbor-seq" Structured Syntax Suffix</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t keepWithNext="true" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-practical-considerations">Practical Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-specifying-cbor-sequences-i">Specifying CBOR Sequences in Concise Data Definition Language (CDDL)</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-diagnostic-notation">Diagnostic Notation</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t keepWithNext="true" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-optimizing-cbor-sequences-f">Optimizing CBOR Sequences for Skipping Elements</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t keepWithNext="true" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t keepWithNext="true" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-media-type">Media Type</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-coap-content-format-registr">CoAP Content-Format Registration</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.3">
                <t keepWithNext="true" pn="section-toc.1-1.6.2.3.1"><xref derivedContent="6.3" format="counter" sectionFormat="of" target="section-6.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-structured-syntax-suffix">Structured Syntax Suffix</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t keepWithNext="true" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t keepWithNext="true" pn="section-toc.1-1.8.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t keepWithNext="true" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t pn="section-1-1">The Concise Binary Object Representation (CBOR) <xref target="RFC7049" format="default" sectionFormat="of" derivedContent="RFC7049"/> can be used for serialization of
      data in the JSON <xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC8259"/> data model or
      in its own, somewhat expanded, data model.  When serializing a sequence of
      such values, it is sometimes convenient to have a format where these
      sequences can simply be concatenated to obtain a serialization of the
      concatenated sequence of values or to encode a sequence of values that
      might grow at the end by just appending further CBOR data items.</t>
      <t pn="section-1-2">This document describes the concept and format of "CBOR Sequences",
      which are composed of zero or more encoded CBOR data items.  CBOR
      Sequences can be consumed (and produced) incrementally without requiring
      a streaming CBOR parser that is able to deliver substructures of a data
      item incrementally (or a streaming encoder able to encode from
      substructures incrementally).</t>
      <t pn="section-1-3">This document defines and registers the "application/cbor-seq" media
      type in the "Media Types" registry along with a Constrained Application
      Protocol (CoAP) Content-Format identifier.  Media type structured syntax
      suffixes <xref target="RFC6838" format="default" sectionFormat="of" derivedContent="RFC6838"/> were introduced as a
      way for a media type to signal that it is based on another media type as
      its foundation.  CBOR <xref target="RFC7049" format="default" sectionFormat="of" derivedContent="RFC7049"/> defines
      the "+cbor" structured syntax suffix.  This document defines and
      registers the "+cbor-seq" structured syntax suffix in the "Structured
      Syntax Suffix Registry".</t>
      <section anchor="conventions-used-in-this-document" numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-conventions-used-in-this-do">Conventions Used in This Document</name>
        <t pn="section-1.1-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
        <t pn="section-1.1-2">In this specification, the term "byte" is used in its now-customary
sense as a synonym for "octet".</t>
      </section>
    </section>
    <section anchor="cbor-sequence-format" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-cbor-sequence-format">CBOR Sequence Format</name>
      <t pn="section-2-1">Formally, a CBOR Sequence is a sequence of bytes that is recursively
defined as either of the following:</t>
      <ul spacing="normal" bare="false" empty="false" pn="section-2-2">
        <li pn="section-2-2.1">an empty (zero-length) sequence of bytes</li>
        <li pn="section-2-2.2">the sequence of bytes making up an encoded CBOR data item <xref target="RFC7049" format="default" sectionFormat="of" derivedContent="RFC7049"/>
followed by a CBOR Sequence.</li>
      </ul>
      <t pn="section-2-3">In short, concatenating zero or more encoded CBOR data items generates
a CBOR Sequence.  (Consequently, concatenating zero or more CBOR
Sequences also results in a CBOR Sequence.)</t>
      <t pn="section-2-4">There is no end-of-sequence indicator.  (If one is desired, CBOR
      encoding an array of the CBOR data model values being encoded, employing
      either a definite or an indefinite length encoding, as a single CBOR
      data item may actually be the more appropriate representation.)</t>
      <t pn="section-2-5">CBOR Sequences, unlike JSON Text Sequences <xref target="RFC7464" format="default" sectionFormat="of" derivedContent="RFC7464"/>, do not use a
marker between items.  This is possible because CBOR-encoded data
items are self delimiting and the end can always be calculated.  (Note
that, while the early object/array-only form of JSON was
self delimiting as well, this stopped being the case when simple
values such as single numbers were made valid JSON documents.)</t>
      <t pn="section-2-6">Decoding a CBOR Sequence works as follows:</t>
      <ul spacing="normal" bare="false" empty="false" pn="section-2-7">
        <li pn="section-2-7.1">If the CBOR Sequence is an empty sequence of bytes, the result is an
empty sequence of CBOR data model values.</li>
        <li pn="section-2-7.2">Otherwise, one must decode a single CBOR data item from the bytes
        of the CBOR Sequence and insert the resulting CBOR data model value at
        the start of the result of repeating this decoding process recursively
        with the remaining bytes.  (A streaming decoder would therefore simply
        deliver zero or more CBOR data model values, each as soon as the bytes
        making it up are available.)</li>
      </ul>
      <t pn="section-2-8">This means that if any data item in the sequence is not well formed,
it is not possible to reliably decode the rest of the sequence.  (An
implementation may be able to recover from some errors in a sequence
of bytes that is almost, but not entirely, a well-formed encoded CBOR
data item.  Handling malformed data is outside the scope of this
specification.)</t>
      <t pn="section-2-9">This also means that the CBOR Sequence format can reliably detect
      truncation of the bytes making up the last CBOR data item in the
      sequence, but it cannot detect entirely missing CBOR data items at the end.  A
      CBOR Sequence decoder that is used for consuming streaming CBOR Sequence
      data may simply pause for more data (e.g., by suspending and later
      resuming decoding) in case a truncated final item is being received.</t>
    </section>
    <section anchor="the-cbor-seq-structured-syntax-suffix" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-the-cbor-seq-structured-syn">The "+cbor-seq" Structured Syntax Suffix</name>
      <t pn="section-3-1">The use case for the "+cbor-seq" structured syntax suffix is
      analogous to that for "+cbor": it <bcp14>SHOULD</bcp14> be used by a
      media type when the result of parsing the bytes of the media type
      object as a CBOR Sequence is meaningful and is at least
      sometimes not just a single CBOR data item.  (Without the qualification
      at the end, this sentence is trivially true for any +cbor media type,
      which of course should continue to use the "+cbor" structured syntax
      suffix.)</t>
      <t pn="section-3-2">Applications encountering a "+cbor-seq" media type can then either simply
use generic processing if all they need is a generic view of the CBOR
Sequence or use generic CBOR Sequence tools for
initial parsing and then implement their own specific processing on
top of that generic parsing tool.</t>
    </section>
    <section anchor="practical-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-practical-considerations">Practical Considerations</name>
      <section anchor="specifying-cbor-sequences-in-cddl" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-specifying-cbor-sequences-i">Specifying CBOR Sequences in Concise Data Definition Language (CDDL)</name>
        <t pn="section-4.1-1">In Concise Data Definition Language (CDDL) <xref target="RFC8610" format="default" sectionFormat="of" derivedContent="RFC8610"/>, CBOR Sequences are already supported as contents
        of byte strings using the <tt>.cborseq</tt> control operator (<xref target="RFC8610" sectionFormat="of" section="3.8.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8610#section-3.8.4" derivedContent="RFC8610"/>) by employing an
        array as the controller type:</t>
        <sourcecode type="cddl" markers="false" pn="section-4.1-2">my-embedded-cbor-seq = bytes .cborseq my-array
my-array = [* my-element]
my-element = my-foo / my-bar
</sourcecode>
        <t pn="section-4.1-3">Currently, CDDL does not provide for unadorned CBOR Sequences as a
        top-level subject of a specification.

 For now, the suggestion is to use an array for the top-level rule, as is used
 for the <tt>.cborseq</tt> control operator, and add English text that
 explains that the specification is really about a CBOR Sequence with the
 elements of the array:</t>
        <sourcecode type="cddl" markers="false" pn="section-4.1-4">; This defines an array, the elements of which are to be used
; in a CBOR Sequence:
my-sequence = [* my-element]
my-element = my-foo / my-bar
</sourcecode>
        <t pn="section-4.1-5">(Future versions of CDDL may provide a notation for top-level CBOR
Sequences, e.g., by using a group as the top-level rule in a CDDL
specification.)</t>
      </section>
      <section anchor="diagnostic-notation" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-diagnostic-notation">Diagnostic Notation</name>
        <t pn="section-4.2-1">CBOR diagnostic notation (see <xref target="RFC7049" sectionFormat="of" section="6" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7049#section-6" derivedContent="RFC7049"/>) or extended
diagnostic notation (<xref target="RFC8610" sectionFormat="of" section="G" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8610#appendix-G" derivedContent="RFC8610"/>) also does not provide
for unadorned CBOR Sequences at this time (the latter does provide for
CBOR Sequences embedded in a byte string as per <xref target="RFC8610" sectionFormat="of" section="G.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8610#appendix-G.3" derivedContent="RFC8610"/>).</t>
        <t pn="section-4.2-2">In a similar spirit to the recommendation for CDDL above, this
specification recommends enclosing the CBOR data items in an array.
In a more informal setting, where the boundaries within which the
notation is used are obvious, it is also possible to leave off the
outer brackets for this array, as shown in these two examples:</t>
        <artwork type="CBORdiag" name="" align="left" alt="" pn="section-4.2-3">
[1, 2, 3]

1, 2, 3
</artwork>
        <t pn="section-4.2-4">Note that it is somewhat difficult to discuss zero-length CBOR
Sequences in the latter form.</t>
      </section>
      <section anchor="optimizing-cbor-sequences-for-skipping-elements" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-optimizing-cbor-sequences-f">Optimizing CBOR Sequences for Skipping Elements</name>
        <t pn="section-4.3-1">In certain applications, being able to efficiently skip an element
without the need for decoding its substructure, or efficiently fanning
out elements to multi-threaded decoding processes, is of the utmost
importance.  For these applications, byte strings
(which carry length information in bytes) containing embedded CBOR can
be used as the elements of a CBOR Sequence:</t>
        <sourcecode type="cddl" markers="false" pn="section-4.3-2">; This defines an array of CBOR byte strings, the elements of which
; are to be used in a CBOR Sequence:
my-sequence = [* my-element]
my-element = bytes .cbor my-element-structure
my-element-structure = my-foo / my-bar
</sourcecode>
        <t pn="section-4.3-3">Within limits, this may also enable recovering from elements that
internally are not well formed; the limitation is that the sequence
of byte strings does need to be well formed as such.</t>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t pn="section-5-1">The security considerations of CBOR <xref target="RFC7049" format="default" sectionFormat="of" derivedContent="RFC7049"/> apply.  This format
provides no cryptographic integrity protection of any kind but can be
combined with security specifications such as CBOR Object Signing and
Encryption (COSE) <xref target="RFC8152" format="default" sectionFormat="of" derivedContent="RFC8152"/> to do so.
(COSE protections can be applied to an entire CBOR Sequence or to each
of the elements of the sequence independently; in the latter case,
additional effort may be required if there is a need to protect the
relationship of the elements in the sequence.)</t>
      <t pn="section-5-2">As usual, decoders must operate on input that is assumed to be
untrusted.  This means that decoders <bcp14>MUST</bcp14> fail gracefully in the face
of malicious inputs.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section anchor="media-type" numbered="true" toc="include" removeInRFC="false" pn="section-6.1">
        <name slugifiedName="name-media-type">Media Type</name>
        <t pn="section-6.1-1">Media types are registered in the "Media Types" registry
	<xref target="IANA-MEDIA-TYPES" format="default" sectionFormat="of" derivedContent="IANA-MEDIA-TYPES"/>.
	
IANA has registered the media type for CBOR Sequence,
application/cbor-seq, as follows:</t>
        <t pn="section-6.1-2">Type name: application</t>
        <t pn="section-6.1-3">Subtype name: cbor-seq</t>
        <t pn="section-6.1-4">Required parameters: N/A</t>
        <t pn="section-6.1-5">Optional parameters: N/A</t>
        <t pn="section-6.1-6">Encoding considerations: binary</t>
        <t pn="section-6.1-7">Security considerations: See RFC 8742, <xref target="security-considerations" format="default" sectionFormat="of" derivedContent="Section 5"/>.</t>
        <t pn="section-6.1-8">Interoperability considerations: Described herein.</t>
        <t pn="section-6.1-9">Published specification: RFC 8742.</t>
        <t pn="section-6.1-10">Applications that use this media type: Data serialization and deserialization.</t>
        <t pn="section-6.1-11">Fragment identifier considerations: N/A</t>
        <t pn="section-6.1-12">Additional information:</t>
        <ul spacing="normal" bare="false" empty="false" pn="section-6.1-13">
          <li pn="section-6.1-13.1">Deprecated alias names for this type: N/A</li>
          <li pn="section-6.1-13.2">Magic number(s): N/A</li>
          <li pn="section-6.1-13.3">File extension(s): N/A</li>
          <li pn="section-6.1-13.4">Macintosh file type code(s): N/A</li>
        </ul>
        <dl newline="false" spacing="normal" pn="section-6.1-14">
          <dt pn="section-6.1-14.1">Person &amp; email address to contact for further information:</dt>
          <dd pn="section-6.1-14.2">
  cbor@ietf.org</dd>
        </dl>
        <t pn="section-6.1-15">Intended usage: COMMON</t>
        <t pn="section-6.1-16">Author: Carsten Bormann (cabo@tzi.org)</t>
        <t pn="section-6.1-17">Change controller: IETF</t>
      </section>
      <section anchor="coap-content-format-registration" numbered="true" toc="include" removeInRFC="false" pn="section-6.2">
        <name slugifiedName="name-coap-content-format-registr">CoAP Content-Format Registration</name>
        <t pn="section-6.2-1">IANA has assigned a CoAP Content-Format ID for the media
type "application/cbor-seq", within the "CoAP Content-Formats" subregistry
of the "Constrained RESTful Environments (CoRE) Parameters" registry
<xref target="IANA-CORE-PARAMETERS" format="default" sectionFormat="of" derivedContent="IANA-CORE-PARAMETERS"/>, from the "Expert Review" (0-255)
range (<xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>).  The assigned ID is shown in <xref target="tbl-coap-content-formats" format="default" sectionFormat="of" derivedContent="Table 1"/>.</t>
        <table anchor="tbl-coap-content-formats" align="center" pn="table-1">
          <name slugifiedName="name-coap-content-format-id">CoAP Content-Format ID</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Media type</th>
              <th align="left" colspan="1" rowspan="1">Encoding</th>
              <th align="left" colspan="1" rowspan="1">ID</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">application/cbor-seq</td>
              <td align="left" colspan="1" rowspan="1">-</td>
              <td align="left" colspan="1" rowspan="1">63</td>
              <td align="left" colspan="1" rowspan="1">RFC 8742</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="structured-syntax-suffix" numbered="true" toc="include" removeInRFC="false" pn="section-6.3">
        <name slugifiedName="name-structured-syntax-suffix">Structured Syntax Suffix</name>
        <t pn="section-6.3-1">Structured Syntax Suffixes are registered within the "Structured
Syntax Suffix Registry" maintained at <xref target="IANA-STRUCTURED-SYNTAX-SUFFIX" format="default" sectionFormat="of" derivedContent="IANA-STRUCTURED-SYNTAX-SUFFIX"/>.  IANA has
registered the "+cbor-seq" structured syntax suffix in accordance with
<xref target="RFC6838" format="default" sectionFormat="of" derivedContent="RFC6838"/> as follows:</t>
        <ul empty="true" spacing="normal" bare="false" pn="section-6.3-2">
          <li pn="section-6.3-2.1">Name: CBOR Sequence</li>
        </ul>
        <ul empty="true" spacing="normal" bare="false" pn="section-6.3-3">
          <li pn="section-6.3-3.1">+suffix: +cbor-seq</li>
        </ul>
        <ul empty="true" spacing="normal" bare="false" pn="section-6.3-4">
          <li pn="section-6.3-4.1">References: RFC 8742</li>
        </ul>
        <ul empty="true" spacing="normal" bare="false" pn="section-6.3-5">
          <li pn="section-6.3-5.1">Encoding considerations: binary</li>
        </ul>
        <ul empty="true" spacing="normal" bare="false" pn="section-6.3-6">
          <li pn="section-6.3-6.1">Fragment identifier considerations: The syntax and semantics of
fragment identifiers specified for +cbor-seq <bcp14>SHOULD</bcp14> be the same
as that specified for "application/cbor-seq".  (At the time  of publication of this
document, there is no fragment identification syntax defined for
 "application/cbor-seq".)</li>
        </ul>
        <ul empty="true" spacing="normal" bare="false" pn="section-6.3-7">
          <li pn="section-6.3-7.1">
            <ul empty="true" spacing="normal" bare="false" pn="section-6.3-7.1.1">
              <li pn="section-6.3-7.1.1.1">The syntax and semantics for fragment identifiers for a
specific "xxx/yyy+cbor-seq" <bcp14>SHOULD</bcp14> be processed as follows:</li>
              <li pn="section-6.3-7.1.1.2">
                <ul spacing="normal" bare="false" empty="false" pn="section-6.3-7.1.1.2.1">
                  <li pn="section-6.3-7.1.1.2.1.1">For cases defined in +cbor-seq, if the fragment
identifier resolves per the +cbor-seq rules, then process as
specified in +cbor-seq.</li>
                  <li pn="section-6.3-7.1.1.2.1.2">For cases defined in +cbor-seq, if the fragment
identifier does not resolve per the +cbor-seq rules, then
process as specified in "xxx/yyy+cbor-seq".</li>
                  <li pn="section-6.3-7.1.1.2.1.3">For cases not defined in +cbor-seq, process as
specified in "xxx/yyy+cbor-seq".</li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true" spacing="normal" bare="false" pn="section-6.3-8">
          <li pn="section-6.3-8.1">Interoperability considerations: n/a</li>
        </ul>
        <ul empty="true" spacing="normal" bare="false" pn="section-6.3-9">
          <li pn="section-6.3-9.1">Security considerations: See RFC 8742, <xref target="security-considerations" format="default" sectionFormat="of" derivedContent="Section 5"/></li>
        </ul>
        <ul empty="true" spacing="normal" bare="false" pn="section-6.3-10">
          <li pn="section-6.3-10.1">Contact: CBOR WG mailing list (cbor@ietf.org), or any IESG-designated successor.</li>
        </ul>
        <ul empty="true" spacing="normal" bare="false" pn="section-6.3-11">
          <li pn="section-6.3-11.1">Author/Change controller: IETF</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references pn="section-7">
      <name slugifiedName="name-references">References</name>
      <references pn="section-7.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="IANA-CORE-PARAMETERS" target="https://www.iana.org/assignments/core-parameters" quoteTitle="true" derivedAnchor="IANA-CORE-PARAMETERS">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA-MEDIA-TYPES" target="https://www.iana.org/assignments/media-types" quoteTitle="true" derivedAnchor="IANA-MEDIA-TYPES">
          <front>
            <title>Media Types</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA-STRUCTURED-SYNTAX-SUFFIX" target="https://www.iana.org/assignments/media-type-structured-suffix" quoteTitle="true" derivedAnchor="IANA-STRUCTURED-SYNTAX-SUFFIX">
          <front>
            <title>Structured Syntax Suffix Registry</title>
            <author>
              <organization showOnFrontPage="true">IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <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="RFC7049" target="https://www.rfc-editor.org/info/rfc7049" quoteTitle="true" derivedAnchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2013" month="October"/>
            <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>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <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>
      <references pn="section-7.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838" quoteTitle="true" derivedAnchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author initials="N." surname="Freed" fullname="N. Freed">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Klensin" fullname="J. Klensin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Hansen" fullname="T. Hansen">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2013" month="January"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols.  This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC7464" target="https://www.rfc-editor.org/info/rfc7464" quoteTitle="true" derivedAnchor="RFC7464">
          <front>
            <title>JavaScript Object Notation (JSON) Text Sequences</title>
            <author initials="N." surname="Williams" fullname="N. Williams">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2015" month="February"/>
            <abstract>
              <t>This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type "application/json-seq".  A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7464"/>
          <seriesInfo name="DOI" value="10.17487/RFC7464"/>
        </reference>
        <reference anchor="RFC8091" target="https://www.rfc-editor.org/info/rfc8091" quoteTitle="true" derivedAnchor="RFC8091">
          <front>
            <title>A Media Type Structured Syntax Suffix for JSON Text Sequences</title>
            <author initials="E." surname="Wilde" fullname="E. Wilde">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="February"/>
            <abstract>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation.  This specification defines and registers "+json-seq" as a structured syntax suffix for JSON text sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8091"/>
          <seriesInfo name="DOI" value="10.17487/RFC8091"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author initials="M." surname="Cotton" fullname="M. Cotton">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="June"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8152" target="https://www.rfc-editor.org/info/rfc8152" quoteTitle="true" derivedAnchor="RFC8152">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author initials="J." surname="Schaad" fullname="J. Schaad">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="July"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size.  There is a need for the ability to have basic security services defined for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol.  This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization.  This specification additionally describes how to represent cryptographic keys using CBOR.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8152"/>
          <seriesInfo name="DOI" value="10.17487/RFC8152"/>
        </reference>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259" quoteTitle="true" derivedAnchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author initials="T." surname="Bray" fullname="T. Bray" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="December"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610" quoteTitle="true" derivedAnchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author initials="H." surname="Birkholz" fullname="H. Birkholz">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Vigano" fullname="C. Vigano">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="C." surname="Bormann" fullname="C. Bormann">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2019" month="June"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgements" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t pn="section-appendix.a-1">This document has mostly been generated from <xref target="RFC7464" format="default" sectionFormat="of" derivedContent="RFC7464"/> by <contact fullname="Nico Williams"/>
and <xref target="RFC8091" format="default" sectionFormat="of" derivedContent="RFC8091"/> by <contact fullname="Erik Wilde"/>, which do a similar but slightly more
complicated exercise for JSON <xref target="RFC8259" format="default" sectionFormat="of" derivedContent="RFC8259"/>.  <contact fullname="Laurence Lundblade"/> raised an
issue on the CBOR mailing list that pointed out the need for this
document.  <contact fullname="Jim Schaad"/> and <contact fullname="John Mattsson"/> provided helpful comments.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="C." surname="Bormann" fullname="Carsten Bormann">
        <organization ascii="Universitaet Bremen TZI" showOnFrontPage="true">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>
    </section>
  </back>
</rfc>
