<?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  (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-amsuess-cbor-packed-by-reference-02" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title>Packed CBOR: Table set up by reference</title>
    <seriesInfo name="Internet-Draft" value="draft-amsuess-cbor-packed-by-reference-02"/>
    <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="2024" month="March" day="04"/>
    <workgroup>cbor</workgroup>
    <keyword>cbor</keyword>
    <keyword>packed</keyword>
    <keyword>uri</keyword>
    <keyword>cri</keyword>
    <abstract>
      <t>Packed CBOR is a compression mechanism for Concise Binary Object Representation (CBOR)
that can be used without a decompression step.
This document introduces a means for setting up its tables
by means of dereferencable 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>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>[ See abstract. ]</t>
    </section>
    <section anchor="setting-up-the-tables-by-reference">
      <name>Setting up the tables by reference</name>
      <t>CBOR tag TBD114 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.<tbd114>([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

tbd114 = 114   ; 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 decompress 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 TBD114 should then be used by using a dereferencing stand-in in the source position.</cref>
When the source identifier is dereferencable,
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 priorize 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 - evolutution 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 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>If a protocol has isolated error processing only around some elements,
encoders need to take care
to not use entries in unisolated positions that may be unpopulated at the decoder.
The protocol and source authors need to provide appropriate guidance.</t>
          <t>Protocols that do not support error isolation
need a way to negotiate the understood set of sources and table entries.</t>
          <t>If an implementation does not support any elements with isolated error processing at all,
a receiver of a document may already stop processing the document
when encountering a setup by reference that includes undefined elements.
<!-- Thus the extra severity on the SHOULD on compactness -->
          </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 it 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 avoid the necessity of 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[
114([7, "tag:example.com,2023:books"
    [{"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 TBD114,
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>0: "This class has students with the following names"</li>
          <li>100: "tag:example.com,2023:english-names.txt"</li>
          <li>101: "tag:example.com,2023:german-names.txt"</li>
        </ul>
        <sourcecode type="cbor-diag"><![CDATA[
114([5, 6(42) / outer item 100 /, 114([2, 6(45) / outer item 101, currently item 105 /, [
  simple(11) / outer item 0, currenlty 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>[ TBD ]</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>Tag: 114</li>
          <li>Data item: Array <tt>[count, source, rump]</tt></li>
          <li>Semantics: "Packed CBOR: table setup"</li>
          <li>Reference: This document</li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <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="2" month="March" year="2024"/>
            <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 receiver needs to decompress the compressed
   form to make use of the data.

   This specification describes Packed CBOR, a simple transformation of
   a CBOR data item into another 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 receiver.


   // The present version (-12) updates the IANA "Values for Tag
   // Numbers" table, sorting it and cleaning up the "Data Item" column.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-12"/>
        </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="2" month="March" year="2024"/>
            <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 -03 revision discusses the continuum between entirely
   // relying on the result of dereferencing an identifier and building
   // in knowledge of all expected identifiers, and it mentions further
   // pitfalls of using dereferenceable identifiers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-03"/>
        </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="9" month="January" year="2024"/>
            <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 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 "cref" paragraph will be removed by the RFC editor:) The
   // present revision –14 of this draft picks up comments from the
   // shepherd review and adds sections on CoAP integration and on cri
   // application-oriented literals for the Extended Diagnostic
   // Notation.  This revision still contains open issues and is
   // intended to serve as a snapshot while the processing of the
   // shepherd review is being completed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-href-14"/>
        </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="2" month="March" 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-04"/>
        </reference>
      </references>
      <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>
    <section anchor="change-log">
      <name>Change log</name>
      <t>From -01 to -02:</t>
      <ul spacing="normal">
        <li>Add text on use of unpopulated items, and rationale to count in general.</li>
        <li>Split 4-argument form into its own subsection</li>
        <li>Fix erroneous example</li>
        <li>Augment CDDL with comments and <xref target="I-D.ietf-cbor-update-8610-grammar"/></li>
        <li>Add considerations for splitting between loading and importing through stand-ins</li>
        <li>Write IANA considerations</li>
        <li>Editorial changes</li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>[ TBD ]</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
5G4mxbvJvh8tka3N6L7vpv8L2bdwQYArAAA=

-->

</rfc>
