<?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.14 (Ruby 3.3.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amsuess-cbor-packed-by-reference-04" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title>Packed CBOR: Table set up by reference</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-cbor-packed-by-reference-04"/>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization/>
      <address>
        <postal>
          <country>Austria</country>
        </postal>
        <email>christian@amsuess.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="03"/>
    <workgroup>cbor</workgroup>
    <keyword>cbor</keyword>
    <keyword>packed</keyword>
    <keyword>uri</keyword>
    <keyword>cri</keyword>
    <abstract>
      <?line 38?>

<t>Packed CBOR is a mechanism for transforming Concise Binary Object Representation (CBOR) data
into a more compact form.
This document introduces a means for setting up its tables
by means of dereferenceable identifiers,
and introduces a pattern of using it without sending long identifiers.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://chrysn.codeberg.page/packed-by-reference/draft-amsuess-cbor-packed-by-reference.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-amsuess-cbor-packed-by-reference/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        CBOR 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://codeberg.org/chrysn/packed-by-reference"/>.</t>
    </note>
  </front>
  <middle>
    <?line 46?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Packed CBOR <xref target="I-D.ietf-cbor-packed"/> is a mechanism for transforming Concise Binary Object Representation (CBOR, <xref target="RFC8949"/>) data
into a more compact form
that can be used without a decompression step.</t>
      <t>It depends on packing tables,
which can be set up through different means:
they can come from the CBOR item's context,
be populated in the item itself,
or use newly defined CBOR tags.
This document defines such a tag
that uses dereferenceable identifiers to set up a table,
and introduces a pattern of using it without sending long identifiers.</t>
    </section>
    <section anchor="setting-up-the-tables-by-reference">
      <name>Setting up the tables by reference</name>
      <t>CBOR tag TBD213 is defined with semantics similar to
tags TBD113 and TBD1113 from <xref target="I-D.ietf-cbor-packed"/>
in that it sets up tables around a rump.</t>
      <sourcecode type="cddl"><![CDATA[
Packed-By-Reference = #6.<tbd213>([count, source, rump])
rump = any
source = CRI / ~uri
count = (count-shared-and-argument //    ; similar to tag 113
  count-shared, count-argument )         ; similar to tag 1113

count-shared-and-argument = uint
count-shared = uint
count-argument = uint

tbd213 = 213   ; preliminary value, see IANA considerations
]]></sourcecode>
      <t>The items inserted by the tables are not given explicitly,
but picked out of tables known by their identifier given as <tt>source</tt>.
Such a source needs to represent two lists of CBOR items,
one for each kind of tables (one for shared item, one for arguments).
The tag prepends some number of items out of those source lists
to the tables that are used to unpack the rump.</t>
      <t>The identifier is given as a URI string (as defined in <xref target="RFC3986"/>)
or equivalently as a CRI (as defined in <xref target="I-D.ietf-core-href"/>).
Later iterations of this document may introduce additional options.<cref anchor="or-split-to-standins">If the stand-in concept of <xref target="I-D.bormann-cbor-yang-standin"/> is generalized,
the <tt>source</tt> item may become the raw list of tables,
possibly disallowing the <tt>CRI</tt> and <tt>URI</tt> variants.
Given that tags 113 and 1113 are capable of expressing cases where the source tables are present,
tag TBD213 should then be used by using a dereferencing stand-in in the source position.</cref>
When the source identifier is dereferenceable,
all considerations from <xref target="I-D.bormann-t2trg-deref-id"/> apply.
(Simplifying: No dereferencing at runtime -- the recipient either knows it already or treats it as unknown).</t>
      <t>If the same number of items is prepended to both tables,
their count is given as a single number;
otherwise, the numbers are given separately.</t>
      <t>Encoders SHOULD use the most compact form of count,
and SHOULD pick the lowest count(s) sufficient to encode the items contained in the rump.
When those conflict, they may prioritize either.
If the source supports evolution of sources (see <xref target="evolution"/>),
disregarding that recommendation may pose an interoperability hazard.</t>
      <section anchor="count-vs-content-of-source">
        <name>Count vs. content of source</name>
        <t>The count encoded for the number of table entries
given in a document
will often mismatch with the number of entries the receiver of a document knows to be present in the given source.</t>
        <section anchor="not-all-known-entries-are-used">
          <name>Not all known entries are used</name>
          <t>If the encoded count is less than the number of known entries,
this merely expresses that the originator of the document did not use the higher numbers.
When a document's tables are populated from multiple sources,
encoding the smallest possible count is useful
because the table indices used throughout the document stay small and can thus be encoded concisely.</t>
        </section>
        <section anchor="evolution">
          <name>Unknown entries are used – evolution of sources</name>
          <t>If the encoded count is larger than the number of known entries,
this indicates that the document may contain references that the receiver does not know.
This can happen when a source has been evolved compatibly to contain more entries,
compared to when the receiver learned of the source definition.
Source entries beyond the receiver's knowledge stay unpopulated in the receiver's tables,
but still shift existing entries to higher indices.</t>
          <t>Some CBOR protocols come with elements that support isolation of processing errors.
For example,
a CRI that uses unknown extensions is regarded as "unprocessable"
(<xref section="5.2.1" sectionFormat="of" target="I-D.ietf-core-href"/>).
It cannot be resolved,
is unequal to any other CRI (unless they are identical),
but does not inhibit the processing of its surrounding document.</t>
          <t>In such protocols,
references to unpopulated table entries can be tolerated as described in <xref section="2.1" sectionFormat="of" target="I-D.ietf-cbor-packed"/>.
Care has to be taken around processing tag TBD1112:
If that tag is produced in the course of unpacking,
comparisons for identity are not reliable.
Similarly, if the unpacking mechanism provides access to the serialized form of the unprocessable entity,
identity comparisons are only reliable if the items being compared have the same table setup applied.</t>
          <t><cref anchor="prepop-recommended">Protocols may also pre-populated entries with values that are reserved in the protocol
and specified to be ignored at reception.
Later, when the entries are specified, concrete values take their places.
This has roughly the same effect,
but is harder to describe.
(This paragraph may be removed later unless it is found to be particularly useful).</cref></t>
          <t>Protocols that do not support error isolation
need a way to negotiate the understood set of sources and table entries.</t>
          <section anchor="evolution-beyond-adding-items">
            <name>Evolution beyond adding items</name>
            <t>The content of tables may be altered in more ways than just adding entries that were previously unpopulated.
Such changes are NOT RECOMMENDED,
because while they can be done in a compatible way,
providing criteria for this are out of scope of this document.</t>
            <t><cref anchor="split-standins-evolution">If a later version of this document uses stand-in values more actively,
this section will need to be revisited:
In that case, the tables may be part of the outer source,
and then those would grow internally.</cref></t>
          </section>
        </section>
      </section>
      <section anchor="setup-with-skipped-indices">
        <name>Setup with skipped indices</name>
        <t>If a large number of items at the beginning of the source tables would not be used,
there is an additional four-argument form of <tt>count</tt>
that defines a number of items in the source tables that are skipped
before selecting items into the table.
This allows keeping the indices low and therefore compact.</t>
        <sourcecode type="cddl"><![CDATA[
count //= (
    skip-shared, count-shared, skip-argument, count-argument
    )

skip-shared = uint
skip-argument = uint
]]></sourcecode>
        <t>Source tables should be designed in such a way
that commonly used items are at the start
to minimize the necessity for the four-argument form.</t>
      </section>
      <section anchor="example">
        <name>Example</name>
        <t>Suppose the URI "tag:example.com,2023:byref" defines the items
<tt>["price", "category", "author", "title", "fiction", 8.95, "isbn"]</tt> in both tables.
Then the example in figure 3 of <xref target="I-D.ietf-cbor-packed"/> can be written as:</t>
        <sourcecode type="cbor-diag"><![CDATA[
213([7, "tag:example.com,2023:byref"
    [{"store": {
       "book": [
         {simple(1): "reference", simple(2): "Nigel Rees",
          simple(3): "Sayings of the Century", simple(0): simple(5)},
         {simple(1): simple(4), simple(2): "Evelyn Waugh",
          simple(3): "Sword of Honour", simple(0): 12.99},
         {simple(1): simple(4), simple(2): "Herman Melville",
          simple(3): "Moby Dick", simple(6): "0-553-21311-3",
          simple(0): simple(5)},
         {simple(1): simple(4), simple(2): "J. R. R. Tolkien",
          simple(3): "The Lord of the Rings",
          simple(6): "0-395-19395-8", simple(0): 22.99}],
       "bicycle": {"color": "red", simple(0): 19.95}}}]])
]]></sourcecode>
        <t>Assuming that the underlying CBOR protocol defines that unknown keys on goods may be ignored,
an older receiver that only knows the first 5 entries of the source tables
could still process the document,
but would be missing all ISBNs and the price of one item.</t>
      </section>
    </section>
    <section anchor="nested-table-setups">
      <name>Nested table setups</name>
      <t>Documents that use tables from multiple sources
can easily spend many bytes on listing source identifiers.
A pattern that reduces the verbosity
while staying unambiguous
are nested table setups,
where the outer tables are extended to contain additional identifiers.</t>
      <t>In this pattern,
tables are set up in two stages:</t>
      <t>The outer stage contains the CRIs or URIs that may later be used as source values.
(It may also contain other items).
The inner stage is set up using tag TBD213,
and the source given is a packed reference.</t>
      <t>All table inputs can be evolved orthogonally as described in <xref target="evolution"/>.
If an unspecified entry is used as a source,
the whole source content is considered unspecified.</t>
      <section anchor="example-of-nested-table-setup">
        <name>Example of nested table setup</name>
        <t>In this example,
the initial table set up is provided by the media type,
and contains these items:</t>
        <ul spacing="normal">
          <li>
            <t>0: "This class has students with the following names"</t>
          </li>
          <li>
            <t>100: "tag:example.com,2023:english-names.txt"</t>
          </li>
          <li>
            <t>101: "tag:example.com,2023:german-names.txt"</t>
          </li>
        </ul>
        <sourcecode type="cbor-diag"><![CDATA[
213([5, 6(42) / outer item 100 /,
     213([2, 6(45) / outer item 101, currently item 105 /,
     [simple(11) / outer item 0, currently item 11,
      "This class has students with the following names" /,
  simple(0) / item 0 of german-names, "Franz" /,
  simple(2) / item 0 of english-names, currently item 2, "George" /,
  simple(1) / item 1 of german-names, "Fritz" /,
  simple(7) / item 5 of english-names, currently item 7, "Jack" /
  ]])])
]]></sourcecode>
        <t>Note that a constrained implementation of a decoder
may not even have the fully expanded form of the URIs or CRIs available;
it may only be capable of using these table entries in the source position
and then find the shipped source lists.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>General security considerations from <xref target="I-D.ietf-cbor-packed"/> and <xref target="I-D.bormann-t2trg-deref-id"/> apply.
In particular, any security implications of different applications disagreeing about what tables are implied by a media type
apply likewise to situations when different applications disagree about the tables from a specified source.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="cbor-tags-registry">
        <name>CBOR Tags Registry</name>
        <t>In the registry "CBOR Tags", IANA is requested to allocate one tag:</t>
        <ul spacing="normal">
          <li>
            <t>Tag: 213</t>
          </li>
          <li>
            <t>Data item: Array <tt>[count(s), source, rump]</tt></t>
          </li>
          <li>
            <t>Semantics: "Packed CBOR: table setup"</t>
          </li>
          <li>
            <t>Reference: This document</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-cbor-packed">
          <front>
            <title>Packed CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Mikolai Gütschow" initials="M." surname="Gütschow">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949 == STD 94)
   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.

   CBOR does not provide any forms of data compression.  CBOR data
   items, in particular when generated from legacy data models, often
   allow considerable gains in compactness when applying data
   compression.  While traditional data compression techniques such as
   DEFLATE (RFC 1951) can work well for CBOR encoded data items, their
   disadvantage is that the recipient needs to decompress the compressed
   form to make use of the data.

   This specification describes Packed CBOR, a set of CBOR tags and
   simple values that enable a simple transformation of an original CBOR
   data item into a Packed CBOR data item that is almost as easy to
   consume as the original CBOR data item.  A separate decompression
   step is therefore often not required at the recipient.


   // The present version (-14) adds additional stand-in items to the
   // previously updated implementation draft -13, with minor editorial
   // improvements.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-14"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-deref-id">
          <front>
            <title>The "dereferenceable identifier" pattern</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="3" month="March" year="2025"/>
            <abstract>
              <t>   In a protocol or an application environment, it is often important to
   be able to create unambiguous identifiers for some meaning (concept
   or some entity).

   Due to the simplicity of creating URIs, these have become popular for
   this purpose.  Beyond the purpose of identifiers to be uniquely
   associated with a meaning, some of these URIs are in principle
   _dereferenceable_, so something can be placed that can be retrieved
   when encountering such a URI.


   // The present revision -04 includes a few clarifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-05"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="I-D.ietf-core-href">
          <front>
            <title>Constrained Resource Identifiers</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="3" month="February" year="2025"/>
            <abstract>
              <t>   The Constrained Resource Identifier (CRI) is a complement to the
   Uniform Resource Identifier (URI) that represents the URI components
   in Concise Binary Object Representation (CBOR) instead of in a
   sequence of characters.  This simplifies parsing, comparison, and
   reference resolution in environments with severe limitations on
   processing power, code size, and memory size.

   This RFC updates RFC 7595 to add a note on how the URI Schemes
   registry RFC 7595 describes cooperates with the CRI Scheme Numbers
   registry created by the present RFC.


   // (This "cref" paragraph will be removed by the RFC editor:) The
   // present revision –18 integrates two small changes from the CoRE
   // interim on 2025-01-29 and should be ready for WGLC.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-18"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-update-8610-grammar">
          <front>
            <title>Updates to the CDDL grammar of RFC 8610</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="24" month="June" year="2024"/>
            <abstract>
              <t>   The Concise Data Definition Language (CDDL), as defined in RFC 8610
   and RFC 9165, provides an easy and unambiguous way to express
   structures for protocol messages and data formats that are
   represented in CBOR or JSON.

   The present document updates RFC 8610 by addressing errata and making
   other small fixes for the ABNF grammar defined for CDDL there.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-update-8610-grammar-06"/>
        </reference>
        <reference anchor="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.bormann-cbor-yang-standin">
          <front>
            <title>Stand-in Tags for YANG-CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Maria Matějka" initials="M." surname="Matějka">
              <organization>CZ.NIC</organization>
            </author>
            <date day="21" month="February" year="2024"/>
            <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.

   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.

   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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-yang-standin-00"/>
        </reference>
      </references>
    </references>
    <?line 296?>

<section anchor="change-log">
      <name>Change log</name>
      <t>From -03 to -04:</t>
      <ul spacing="normal">
        <li>
          <t>Aligned terminolgoy with latest Packed CBOR.</t>
        </li>
      </ul>
      <t>From -02 to -03:</t>
      <ul spacing="normal">
        <li>
          <t>Switched from CPA114 to CPA213 to stay out of Carsten's dangerous ASCII region.</t>
        </li>
        <li>
          <t>Add security considerations.</t>
        </li>
        <li>
          <t>Provide an actual introduction.</t>
        </li>
        <li>
          <t>Minor simplifications.</t>
        </li>
      </ul>
      <t>From -01 to -02:</t>
      <ul spacing="normal">
        <li>
          <t>Add text on use of unpopulated items, and rationale to count in general.</t>
        </li>
        <li>
          <t>Split 4-argument form into its own subsection</t>
        </li>
        <li>
          <t>Fix erroneous example</t>
        </li>
        <li>
          <t>Augment CDDL with comments and <xref target="I-D.ietf-cbor-update-8610-grammar"/></t>
        </li>
        <li>
          <t>Add considerations for splitting between loading and importing through stand-ins</t>
        </li>
        <li>
          <t>Write IANA considerations</t>
        </li>
        <li>
          <t>Editorial changes</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>[ TBD ]</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
/tmK0cktAAA=

-->

</rfc>
