<?xml version="1.0" encoding="UTF-8"?>

<!-- draft submitted in xml v3 -->

<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>

<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.14 (Ruby 3.1.2) -->

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-core-problem-details-08" number="9290" submissionType="IETF" category="std" consensus="true" updates="" obsoletes="" tocInclude="true" sortRefs="true" symRefs="true" xml:lang="en" version="3">

  <!-- xml2rfc v2v3 conversion 3.13.0 -->
  <front>


    
    <title abbrev="CoRE Problem Details">Concise Problem Details for Constrained Application Protocol (CoAP) APIs</title>
    <seriesInfo name="RFC" value="9290"/>

    
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization>Arm Limited</organization>
      <address>
        <email>thomas.fossati@arm.com</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2022" month="October"/>
    <area>art</area>
    <workgroup>core</workgroup>
    <keyword>CoAP</keyword>
    <keyword>API</keyword>
    <keyword>Problem Details</keyword>
    <keyword>CBOR Tag</keyword>
    <keyword>Language Tag</keyword>
    <keyword>Bidi</keyword>
    <abstract>
      
      <t>This document defines a concise "problem detail" as a way to carry
machine-readable details of errors in a Representational State Transfer (REST) response to avoid the
need to define new error response formats for REST APIs for
constrained environments.
The format
is inspired by, but intended to be more concise than, the problem
details for HTTP APIs defined in RFC 7807.</t>
    </abstract>
   
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      
      <t>REST response status information such as Constrained Application Protocol (CoAP) response
codes (<xref section="5.9" sectionFormat="of" target="RFC7252"/>) is sometimes not sufficient to convey enough information about
an error to be helpful.  This specification defines a simple and extensible
framework to define Concise Binary Object Representation (CBOR) <xref target="STD94"/> data items to suit this purpose.
This framework is designed to be reused by REST APIs, which can identify distinct
"shapes" of these data items specific to their needs.
Thus, API clients can be informed of both the high-level error class
(using the response code) and the finer-grained details of the problem
(using the vocabulary defined here).
      This pattern of communication is illustrated in <xref target="fig-problem-details"/>.</t>

      
      <figure anchor="fig-problem-details">
        <name>Problem Details: Example with CoAP</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="288" viewBox="0 0 288 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
              <path d="M 48,80 L 48,240" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,80" fill="none" stroke="black"/>
              <path d="M 168,32 L 168,80" fill="none" stroke="black"/>
              <path d="M 200,80 L 200,240" fill="none" stroke="black"/>
              <path d="M 240,32 L 240,80" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 168,32 L 240,32" fill="none" stroke="black"/>
              <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
              <path d="M 168,80 L 240,80" fill="none" stroke="black"/>
              <path d="M 56,128 L 192,128" fill="none" stroke="black"/>
              <path d="M 56,160 L 192,160" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="200,128 188,122.4 188,133.6 " fill="black" transform="rotate(0,192,128)"/>
              <polygon class="arrowhead" points="64,160 52,154.4 52,165.6 " fill="black" transform="rotate(180,56,160)"/>
              <circle cx="48" cy="128" r="6" class="opendot" fill="white" stroke="black"/>
              <circle cx="200" cy="160" r="6" class="opendot" fill="white" stroke="black"/>
              <g class="text">
                <text x="44" y="52">CoAP</text>
                <text x="204" y="52">CoAP</text>
                <text x="44" y="68">Client</text>
                <text x="204" y="68">Server</text>
                <text x="88" y="116">Request</text>
                <text x="248" y="148">(failure)</text>
                <text x="96" y="180">Error</text>
                <text x="156" y="180">Response</text>
                <text x="116" y="196">with</text>
                <text x="144" y="196">a</text>
                <text x="172" y="196">CBOR</text>
                <text x="76" y="212">data</text>
                <text x="116" y="212">item</text>
                <text x="164" y="212">giving</text>
                <text x="96" y="228">Problem</text>
                <text x="160" y="228">Details</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
.--------.          .--------.
|  CoAP  |          |  CoAP  |
| Client |          | Server |
'----+---'          '---+----'
     |                  |
     | Request          |
     o----------------->|
     |                  | (failure)
     |<-----------------o
     |   Error Response |
     |      with a CBOR |
     | data item giving |
     |  Problem Details |
     |                  |
]]></artwork>
        </artset>
      </figure>
      <t>The framework presented is largely inspired by the problem details for HTTP APIs defined in <xref target="RFC7807"/>.
<xref target="comp7807"/> discusses applications where interworking with <xref target="RFC7807"/> is required.</t>
      <section anchor="terminology-and-requirements-language">
        <name>Terminology and Requirements Language</name>
        <t>The terminology from <xref target="RFC7252"/>, <xref target="STD94"/>, and <xref target="RFC8610"/> applies; in particular, CBOR
diagnostic notation is defined in Section <xref section="8" sectionFormat="bare" target="RFC8949"/> of RFC 8949 <xref target="STD94"></xref> and <xref section="G" sectionFormat="of" target="RFC8610"/>.
Readers are also expected to be familiar with the terminology from <xref target="RFC7807"/>.</t>
        <t>In this document, the structure of data is specified in Concise Data Definition Language (CDDL) <xref target="RFC8610"/> <xref target="RFC9165"/>.</t>
        <t>
    The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
    NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
    described in BCP&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
      </section>
    </section>
    <section anchor="basic">
      <name>Basic Problem Details</name>
      <t>A Concise Problem Details data item is a CBOR data item with the following
structure (rules named starting with <tt>tag38</tt> are defined in <xref target="tag38"/>):</t>
      <figure anchor="cddl">
        <name>Structure of Concise Problem Details Data Item</name>
        <sourcecode type="cddl"><![CDATA[
problem-details = non-empty<{
  ? &(title: -1) => oltext
  ? &(detail: -2) => oltext
  ? &(instance: -3) => ~uri
  ? &(response-code: -4) => uint .size 1
  ? &(base-uri: -5) => ~uri
  ? &(base-lang: -6) => tag38-ltag
  ? &(base-rtl: -7) => tag38-direction
  standard-problem-detail-entries
  custom-problem-detail-entries
}>

standard-problem-detail-entries = (
  * nint => any
)

custom-problem-detail-entries = (
  * (uint/~uri) => { + any => any }
)

non-empty<M> = (M) .and ({ + any => any })

oltext = text / tag38

]]></sourcecode>
      </figure>
      <t>(Examples of elaborated Concise Problem Details data items can
be found later in the document, e.g., <xref target="fig-example-custom-with-uri"/>.)</t>
      <t>A number of problem detail entries, the Standard Problem Detail
entries, are predefined (more predefined details can be registered,
see <xref target="new-spdk"/>).</t>
      <t>Note that, unlike <xref target="RFC7807"/>, Concise Problem Details data items have
no explicit "problem type".
Instead, the category (or, one could say, Gestalt) of the problem can
be understood from the shape of the problem details offered. We talk of
a "problem shape" for short.</t>
      <dl newline="true">
        <dt>The title (key -1):</dt>
        <dd>
          <t>A short, human-readable summary of the problem shape.
Beyond the shape of the problem, it is not intended to summarize all
the specific information given with the problem details.
For instance, the summary might include that an account does not
have enough money for a transaction to succeed but not the detailed
information such as the account number, how much money that account
has, and how much would be needed.</t>
        </dd>
        <dt>The detail (key -2):</dt>
        <dd>
          <t>A human-readable explanation specific to this occurrence of the problem.</t>
        </dd>
        <dt>The instance (key -3):</dt>
        <dd>
          <t>A URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.</t>
        </dd>
        <dt>The response-code (key -4):</dt>
        <dd>
          <t>The CoAP response code (Sections <xref target="RFC7252" section="5.9" sectionFormat="bare"/> and <xref target="RFC7252" section="12.1.2" sectionFormat="bare"/> of <xref target="RFC7252"/>) generated by the origin
server for this occurrence of the problem.</t>
        </dd>
        <dt>The base-uri (key -5):</dt>
        <dd>
	  
          <t>The base URI (see Section <xref section="5.1" sectionFormat="bare" target="RFC3986"></xref> of RFC 3986 <xref target="STD66"></xref>) that should be used to resolve
relative URI references embedded in this Concise Problem Details
data item.</t>
        </dd>
        <dt>The base-lang (key -6):</dt>
        <dd>
          <t>The language-tag (tag38-ltag) that applies to the presentation of
unadorned text strings (not using tag 38) in this Concise Problem
Details data item; see <xref target="tag38"/>.</t>
        </dd>
        <dt>The base-rtl (key -7):</dt>
        <dd>
          <t>The writing-direction (tag38-direction) that applies to the
presentation of unadorned text strings (not using tag 38) in this
Concise Problem Details data item; see <xref target="tag38"/>.</t>
        </dd>
      </dl>
      <t>Both "title" and "detail" can use either an unadorned CBOR text string
(<tt>text</tt>) or a language-tagged text string (<tt>tag38</tt>); see <xref target="tag38"/> for
the definition of the latter.
Language tag and writing direction information for unadorned text
strings is intended to be obtained from context; if that context
needs to be saved or forwarded with a Concise Problem Details data
item, "base-lang" and "base-rtl" can be used.
If no such (explicitly saved or implicit) context information is
available, unadorned text is interpreted with language-tag "en" and
writing-direction "false" (ltr).</t>
      <t>The "title" string is advisory and included to give
consumers a shorthand for the category (problem shape) of the error encountered.</t>
      <t>The "detail" member, if present, ought to focus on helping the client
correct the problem rather than giving extensive server-side
debugging information.
Consumers <bcp14>SHOULD NOT</bcp14> parse the "detail" member for information;
extensions (see <xref target="sec-new-attributes"/>) are more suitable and less
error-prone ways to obtain such information.
Note that the "instance" URI reference may be relative; this means
that it must be resolved relative to the representation's base URI, as
per Section <xref section="5" sectionFormat="bare" target="RFC3986"/> of RFC 3986 <xref target="STD66"></xref>.</t>
      <t>The "response-code" member, if present, is only advisory; it conveys
the CoAP response code used for the convenience of the consumer.
Generators <bcp14>MUST</bcp14> use the same response code here as in the actual CoAP
response; the latter is needed to assure that generic CoAP software that
does not understand the problem-details format still behaves
correctly.
Consumers can use the "response-code" member to determine what the
original response code used by the generator was, in cases where it
has been changed (e.g., by an intermediary or cache), and when message
bodies persist without CoAP information (e.g., in an events log or analytics
database).
Generic CoAP software will still use the CoAP response code.
To support the use case of message-body persistence without support by
the problem-details generator, the entity that persists the Concise
Problem Details data item can copy over the CoAP response code
that it received on the CoAP level.
Note that the "response-code" value is a numeric representation of the
actual code (see <xref section="3" sectionFormat="of" target="RFC7252"/>), so it does not take the usual
presentation form that resembles an
HTTP status code: <tt>4.04 Not Found</tt> is represented by the number 132.</t>
      <t>The "base-uri" member is usually not present in the initial
request-response communication as it can be inferred as per Section <xref section="5.1.3" sectionFormat="bare" target="RFC3986"/> of RFC 3986 <xref target="STD66"></xref>.
An entity that stores a Concise Problem Details data item or otherwise
makes it available for consumers without this context might add in a
"base-uri" member to allow those consumers to perform resolution of any
relative URI references embedded in the data item.</t>
    </section>
    <section anchor="sec-new-attributes">
      <name>Extending Concise Problem Details</name>
      <t>This specification defines a generic problem-details container with only a
minimal set of attributes to make it usable.</t>
      <t>It is expected that applications will extend the base format by defining new
attributes.</t>
      <t>These new attributes fall into two categories: generic and application
specific.</t>
      <t>Generic attributes will be allocated in the <tt>standard-problem-detail-entries</tt>
slot according to the registration procedure defined in <xref target="new-spdk"/>.</t>
      <t>Application-specific attributes will be allocated in the
<tt>custom-problem-detail-entries</tt> slot according to the procedure described in
<xref target="new-cpdk"/>.</t>
      <t anchor="ignore-unknown">Consumers of a Concise Problem Details data item <bcp14>MUST</bcp14> ignore any
Standard Problem Detail entries or Custom Problem Detail entries, or keys inside the Custom
Problem Detail entries, that they do not recognize ("ignore-unknown
rule"); this allows problem details to evolve.  When storing the data item for future use or forwarding it to other
consumers, it is strongly <bcp14>RECOMMENDED</bcp14> to retain the unrecognized
entries; exceptions might be when storage or forwarding occurs in a
different format/protocol that cannot accommodate them or when the
storage or forwarding function needs to filter out privacy-sensitive
information and for that needs to assume unrecognized entries might be
privacy-sensitive.</t>
      <section anchor="new-spdk">
        <name>Standard Problem Detail Entries</name>
        <t>Beyond the Standard Problem Detail keys defined in <xref target="cddl"/>, additional
Standard Problem Detail keys can be registered for use in the
<tt>standard-problem-detail-entries</tt> slot (see <xref target="iana-spdk"/>).</t>
        <t>Standard Problem Detail keys are negative integers, so they can never
conflict with Custom Problem Detail keys defined for a specific
application domain
(which are unsigned integers or URIs.)</t>
        <t>In summary, the keys for Standard Problem Detail entries are in a
global namespace that is not specific to a particular application domain.</t>
        <section anchor="uco">
          <name>Standard Problem Detail Entry: Unprocessed CoAP Option</name>
          <t><xref target="basic"/> provides a number of generally applicable Standard Problem
Detail entries.  The present section both registers another useful
Standard Problem Detail entry and serves as an example of a Standard
Problem Detail Entry registration, in the registration template format
that would be ready for registration.</t>

            <dl newline="true" spacing="compact">
              <dt>Key value:</dt>
              <dd>
                <t>-8</t>
              </dd>
              <dt>Name:</dt>
              <dd>
                <t>unprocessed-coap-option</t>
              </dd>
              <dt>CDDL type:</dt>
              <dd>
                <t><tt>one-or-more&lt;uint&gt;</tt>, where
</t>
                <sourcecode type=""><![CDATA[
one-or-more<T> = T / [ 2* T ]
]]></sourcecode>
              </dd>
              <dt>Brief description:</dt>
              <dd>
                <t>Option number(s) of CoAP option(s) that were not understood</t>
              </dd>
              <dt>Specification reference:</dt>
              <dd>
                <t><xref target="uco"/> of RFC 9290</t>
              </dd>
            </dl>
 
          <t>The specification of the Standard Problem Detail entry referenced by
the above registration template follows:</t>
          <t>The Standard Problem Detail entry <tt>unprocessed-coap-option</tt> provides
the option number or numbers of any CoAP options present in the request that
could not be processed by the server.</t>
          <t>This may be a critical option that the server is unaware of, or an
option the server is aware of but could not process (and chose not
to, or was not allowed to, ignore it).</t>
          <t>The Concise Problem Details data item including this Standard
Problem Detail Entry can be used in fulfillment of the "<bcp14>SHOULD</bcp14>"
requirement in <xref section="5.4.1" sectionFormat="of" target="RFC7252"/>.</t>
          <t>Several option numbers may be given in a list (in no particular order),
without any guarantee that the list is a complete representation of
all the problems in the request (as the server might
have stopped processing already at one of the problematic options).
If an option with the given number was repeated, there is no
indication which of the values caused the error.</t>
          <t>Clients need to expect to see options in the list that they did not send
in the request; this can happen if the request traversed a proxy
that added the option but did not act on the problem-details
response being returned by the origin server.</t>
          <t>For a few special values of unprocessed CoAP
options (such as Accept or Proxy-Uri), note that there are special response
codes (4.06 Not Acceptable, 5.05 Proxying Not Supported,
respectively) to be sent instead of 4.02 Bad Option.</t>
        </section>
      </section>
      <section anchor="new-cpdk">
        <name>Custom Problem Detail Entries</name>
        <t>Applications may extend the Concise Problem Details data item with
additional entries to convey additional, application-specific information.</t>
        <t>Such new entries are allocated in the <tt>custom-problem-detail-entries</tt> slot and
carry a nested map specific to that application.  The map key can be either
an (absolute!) URI (under control of the entity defining this extension)
or an unsigned integer.
Only the latter needs to be registered (<xref target="iana-cpdk"/>).</t>
        <t>Within the nested map, any number of attributes can be given for a
single extension.
The semantics of each custom attribute <bcp14>MUST</bcp14> be described in the
documentation for the extension; for extensions that are registered
(i.e., are identified by an unsigned int), that documentation goes
along with the registration.</t>
        <t>The unsigned integer form allows a more compact representation.
In
exchange, authors are expected to comply with the required
registration and documentation process.
In comparison, the URI form is less space efficient but requires no
registration.  Therefore, it is useful for experimenting during the development
cycle and for applications deployed in environments where producers and
consumers of Concise Problem Details are more tightly integrated.
(Thus, the URI form covers the potential need we might otherwise have for a "Private Use" range for the unsigned integers.)</t>


        <t anchor="no-dereference">Note that the URI given for the extension is for identification
purposes only and, even if dereferenceable in principle, it <bcp14>MUST NOT</bcp14> be
dereferenced in the normal course of handling problem details (i.e., outside
diagnostic or debugging procedures involving humans).</t>
        <t><xref target="fig-example-custom-with-uri"/> shows an example (in CBOR diagnostic notation)
of a custom extension using a (made-up) URI as the <tt>custom-problem-detail-entries</tt> key.</t>
        <figure anchor="fig-example-custom-with-uri">
          <name>Example Extension with URI Key</name>
          <sourcecode type="cbor-diag"><![CDATA[
{
  / title /         -1: "title of the error",
  / detail /        -2: "detailed information about the error",
  / instance /      -3: "coaps://pd.example/FA317434",
  / response-code / -4: 128, / 4.00 /

  "tag:3gpp.org,2022-03:TS29112": {
    / cause /  0: "machine-readable error cause",
    / invalidParams / 1: [
      [
        / param / "first parameter name",
        / reason / "must be a positive integer"
      ],
      [
        / param / "second parameter name"
      ]
    ],
    / supportedFeatures / 2: "d34db33f"
  }
}
]]></sourcecode>
        </figure>
        <t>Obviously, a Standards Development Organization (SDO) like 3GPP can also easily register such a Custom
Problem Detail entry to receive a more efficient unsigned integer key;
<xref target="fig-example-custom-with-uint"/> shows how
the same example would look using a (made-up) registered unsigned int as the
<tt>custom-problem-detail-entries</tt> key:</t>
        <figure anchor="fig-example-custom-with-uint">
          <name>Example Extension with Unsigned Int (Registered) Key</name>
          <sourcecode type="cbor-diag"><![CDATA[
{
  / title /         -1: "title of the error",
  / detail /        -2: "detailed information about the error",
  / instance /      -3: "coaps://pd.example/FA317434",
  / response-code / -4: 128, / 4.00 /

  /4711 is made-up example key that is not actually registered:/
  4711: {
    / cause /  0: "machine-readable error cause",
    / invalidParams / 1: [
      [
        / param / "first parameter name",
        / reason / "must be a positive integer"
      ],
      [
        / param / "second parameter name"
      ]
    ],
    / supportedFeatures / 2: "d34db33f"
  }
}
]]></sourcecode>
        </figure>	
        <t>In summary, the keys for the maps used inside Custom Problem Detail
entries are defined specifically for use with the identifier of that Custom
Problem Detail entry, the documentation of which defines these
internal entries, typically chosen to address a given application
domain.</t>
        <t>When there is a need to evolve a Custom Problem Detail entry definition, the
"ignore-unknown rule" discussed in <xref target="sec-new-attributes"/> provides an easy way to include additional information.
The assumption is that this is done in a backward- and forward-compatible way.
Sometimes, Custom Problem Detail entries may need to evolve in a way where
forward compatibility by applying the "ignore-unknown rule" would not
be appropriate: for example, when adding a "must-understand" member,
which can only
be ignored at the peril of misunderstanding the Concise Problem
Details data item ("false interoperability").
In this case, a new Custom Problem Detail key can simply be
registered for this case, keeping the old key backward and
forward compatible.</t>
      </section>
    </section>
    <section anchor="privcons">
      <name>Privacy Considerations</name>
      <t>Problem details may unintentionally disclose information.
This can lead to both privacy and security problems.
See <xref target="seccons"/> for more details that apply to both domains; particular
attention needs to be given to unintentionally disclosing Personally
Identifiable Information (PII).</t>
    </section>
    <section anchor="seccons">
      <name>Security Considerations</name>
      <t>Concise Problem Details can contain URIs that are not intended to be
dereferenced (<xref target="no-dereference"/>).  One reason is that dereferencing
these can lead to information disclosure (tracking).
Information disclosure can also be caused by URIs in problem details
that <em>are</em> intended for dereferencing, e.g., the "instance" URI.
Implementations need to consider which component of a client should
perform the dereferencing and which servers are trusted with serving
them.
In any case, the security considerations of Section <xref section="7" sectionFormat="bare" target="RFC3986"/> of RFC 3986 <xref target="STD66"></xref> apply.</t>
<t>The security and privacy considerations outlined in <xref section="5" sectionFormat="of" target="RFC7807"/> apply in full.

While these are phrased in terms of security considerations for new RFC 7807 problem types, they equally apply to the problem detail
entry definitions used here (<xref target="sec-new-attributes"/>). In summary, both
when defining new detail entries and when actually using them to generate a
Concise Problem Details data item, care needs to be taken that they do
not leak sensitive information.
Entities storing or forwarding Concise Problem Details data items need
to consider whether this leads to information being transferred out of
the context within which access to sensitive information was acceptable.
See also <xref target="ignore-unknown"/> (the last paragraph of the introduction to
that section).
Privacy-sensitive information in the problem details <bcp14>SHOULD
NOT</bcp14> be obscured in ways that might lead to misclassification as
non-sensitive (e.g., by base64-encoding).</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="iana-spdk">
        <name>Standard Problem Detail Keys Registry</name>
        <!-- {{content-formats (CoAP Content-Formats)<IANA.core-parameters}} -->

<t>This specification defines a new subregistry titled "Standard Problem
Detail Keys" in the "Constrained RESTful Environments (CoRE) Parameters" registry <xref target="IANA.core-parameters"/>,
with "Specification Required" as the Registration Procedure (<xref section="4.6" sectionFormat="of" target="RFC8126"/>).</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Key Value:</dt>
          <dd>
            <t>a negative integer to be used as the value of the key</t>
          </dd>
          <dt>Name:</dt>
          <dd>
            <t>a name that could be used in implementations for the key</t>
          </dd>
          <dt>CDDL Type:</dt>
          <dd>
            <t>type of the data associated with the key in CDDL notation</t>
          </dd>
          <dt>Brief Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
	  <dt>Reference:</dt>
	  <dd>
	    <t>a reference document</t>
	  </dd>
	  
          <dt>Change Controller:</dt>
          <dd>
            <t>(see <xref section="2.3" sectionFormat="of" target="RFC8126"/>)</t>
	  </dd>
        </dl>
	
        <t>The designated expert is requested to assign the shortest key values (1+0 and
1+1 encoding) to registrations that are likely to enjoy wide use and
can benefit from short encodings.</t>
        <t>To be immediately useful in CDDL and programming-language contexts, a
name consists of a lowercase ASCII letter (a-z) and zero or more
additional ASCII characters that are either lowercase letters,
digits, or a hyphen-minus, i.e., it matches <tt>[a-z][-a-z0-9]*</tt>.
As with the key values, names need to be unique.</t>
        <t>The specification in the reference document needs to provide a
description of the Standard Problem Detail entry, replicating the CDDL
description in "CDDL Type", and describing the semantics of the
presence of this entry and the semantics of the value given with it.</t>
<t>Initial entries in this subregistry are as follows:</t>

        <table anchor="spdk">
          <name>Initial Entries in the Standard Problem Detail Keys Registry</name>
          <thead>
            <tr>
              <th align="left">Key Value</th>
              <th align="left">Name</th>
              <th align="left">CDDL Type</th>
              <th align="left">Brief Description</th>
              <th align="left">Reference</th>
	      <th align="left">Change Controller</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">-1</td>
              <td align="left">title</td>
              <td align="left">
                <tt>text / tag38</tt></td>
              <td align="left">Short, human-readable summary of the problem shape</td>
              <td align="left">RFC 9290</td>
	      <td align="left">IETF</td>
            </tr>
            <tr>
              <td align="left">-2</td>
              <td align="left">detail</td>
              <td align="left">
                <tt>text / tag38</tt></td>
              <td align="left">Human-readable explanation specific to this occurrence of the problem</td>
              <td align="left">RFC 9290</td>
	       <td align="left">IETF</td>
            </tr>
            <tr>
              <td align="left">-3</td>
              <td align="left">instance</td>
              <td align="left">
                <tt>~uri</tt></td>
              <td align="left">URI reference identifying specific occurrence of the problem</td>
              <td align="left">RFC 9290</td>
	       <td align="left">IETF</td>
            </tr>
            <tr>
              <td align="left">-4</td>
              <td align="left">response-code</td>
              <td align="left">
                <tt>uint .size 1</tt></td>
              <td align="left">CoAP response code</td>
              <td align="left">RFC 9290</td>
	       <td align="left">IETF</td>
            </tr>
            <tr>
              <td align="left">-5</td>
              <td align="left">base-uri</td>
              <td align="left">
                <tt>~uri</tt></td>
              <td align="left">Base URI</td>
              <td align="left">RFC 9290</td>
	       <td align="left">IETF</td>
            </tr>
            <tr>
              <td align="left">-6</td>
              <td align="left">base-lang</td>
              <td align="left">
                <tt>tag38-ltag</tt></td>
              <td align="left">Base language tag (see <xref target="tag38"/>)</td>
              <td align="left">RFC 9290</td>
	       <td align="left">IETF</td>
            </tr>
            <tr>
              <td align="left">-7</td>
              <td align="left">base-rtl</td>
              <td align="left">
                <tt>tag38-direction</tt></td>
              <td align="left">Base writing direction (see <xref target="tag38"/>)</td>
              <td align="left">RFC 9290</td>
	       <td align="left">IETF</td>
            </tr>
            <tr>
              <td align="left">-8</td>
              <td align="left">unprocessed-coap-option</td>
              <td align="left">
                <tt>one-or-more&lt;uint&gt;</tt></td>
              <td align="left">Option number(s) of CoAP option(s) that were not understood</td>
              <td align="left">RFC 9290, <xref target="uco"/></td>
	       <td align="left">IETF</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-cpdk">
        <name>Custom Problem Detail Keys Registry</name>
        <t>This specification defines a new subregistry titled "Custom Problem
Detail Keys" in the "Constrained RESTful Environments (CoRE) Parameters" registry <xref target="IANA.core-parameters"/>,
	with as "Expert Review" as the Registration Procedure (<xref section="4.5" sectionFormat="of" target="RFC8126"/>).</t>
	
	
        <t>The designated expert is instructed to attempt making the registration experience
as close to First Come First Served as reasonably achievable, but
checking that the reference document does provide a description as set
out below.
(This requirement is a relaxed version of "Specification Required" as
defined in <xref section="4.6" sectionFormat="of" target="RFC8126"/>.)</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Key Value:</dt>
          <dd>
            <t>an unsigned integer to be used as the value of the key</t>
          </dd>
          <dt>Name:</dt>
          <dd>
            <t>a name that could be used in implementations for the key</t>
          </dd>
          <dt>Brief Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the map,
including a CDDL description, that describes all inside keys and
values</t>
          </dd><dt>Change Controller</dt>
	            <dd>
            <t>(see <xref section="2.3" sectionFormat="of" target="RFC8126"/>)</t>
          </dd>
        </dl>
	
        <t>The designated expert is requested to assign the shortest key values (1+0 and
1+1 encoding) to registrations that are likely to enjoy wide use and
can benefit from short encodings.</t>
        <t>To be immediately useful in CDDL and programming-language contexts, a
name consists of a lowercase ASCII letter (a-z) and zero or more
additional ASCII characters that are either lowercase letters,
digits, or a hyphen-minus, i.e., it matches <tt>[a-z][-a-z0-9]*</tt>.
As with the key values, names need to be unique.</t>
        <t>Initial entries in this subregistry are as follows:</t>
        <table anchor="cpdk">
          <name>Initial Entries in the Custom Problem Detail Key Registry</name>
          <thead>
            <tr>
              <th align="left">Key Value</th>
              <th align="left">Name</th>
              <th align="left">Brief Description</th>
              <th align="left">Reference</th>
	      <th align="left">Change Controller</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">7807</td>
              <td align="left">tunnel-7807</td>
              <td align="left">Carry RFC 7807 problem details in a Concise Problem Details data item</td>
              <td align="left">RFC 9290, <xref target="comp7807"/></td>
	       <td align="left">IETF</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA has added the following media type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table align="left" anchor="new-media-type">
          <name>New Media Type 'application/concise-problem-details+cbor'</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">concise-problem-details+cbor</td>
              <td align="left">application/concise-problem-details+cbor</td>
              <td align="left">RFC 9290, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>concise-problem-details+cbor</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (CBOR data item)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC 9290</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC 9290</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Clients and servers in the Internet of Things</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC 9290, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>


   <dt>Additional information:</dt><dd>
   <t><br/></t>
   <dl spacing="compact">
     <dt>Deprecated alias names for this type:</dt><dd>N/A</dd>
     <dt>Magic number(s):</dt><dd>N/A</dd>
     <dt>File extension(s):</dt><dd>N/A</dd>
     <dt>Macintosh file type code(s):</dt><dd>N/A</dd>
   </dl>
 </dd>
	  
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CoRE WG mailing list (core@ietf.org)
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>

	
        <t>IANA has registered a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.core-parameters"/>
subregistry, within the "Constrained RESTful Environments (CoRE)
Parameters" registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table align="left">
          <name>Content-Format Registration</name>
          <thead>
            <tr>
              <th align="left">Media Type</th>
              <th align="left">Encoding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/concise-problem-details+cbor</td>
              <td align="left">-</td>
              <td align="left">257</td>
              <td align="left">RFC 9290</td>
            </tr>
          </tbody>
        </table>
      
      </section>
      <section anchor="iana-tag38">
        <name>CBOR Tag 38</name>
        <t>In the registry "<xref section="CBOR Tags" relative="#cbor-tags" sectionFormat="bare" target="IANA.cbor-tags"/>" <xref target="IANA.cbor-tags"/>,
	IANA has registered CBOR tag 38.

	
IANA has updated the reference for CBOR tag 38 to point to RFC 9290, <xref target="tag38"/>.</t>
      </section>
    </section>
  </middle>
  <back>



    <displayreference target="I-D.ietf-httpapi-rfc7807bis" to="HTTPAPI"/>

    
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>


	    <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
	      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8949.xml"/>
	    </referencegroup>


	    <referencegroup anchor="STD66" target="https://www.rfc-editor.org/info/std66">
	      <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml"/>
	    </referencegroup>
	



<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7252.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7807.xml"/>



        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization abbrev="IANA">Internet Assigned Numbers Authority</organization>
            </author>
            <date></date>
          </front>
        </reference>

<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5646.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4647.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8610.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.9165.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8126.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>


        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization abbrev="IANA">Internet Assigned Numbers Authority</organization>
            </author>
            <date></date>
          </front>
        </reference>

        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/provisional-standard-media-types">
          <front>
            <title>Provisional Standard Media Type Registry</title>
            <author>
              <organization abbrev="IANA">Internet Assigned Numbers Authority</organization>
            </author>
            <date></date>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>

<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml"/>

<!-- [I-D.ietf-httpapi-rfc7807bis] IESG state I-D Exists -->

<xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-httpapi-rfc7807bis.xml"/>



        <reference anchor="RDF" target="http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/">
          <front>
            <title>RDF 1.1 Concepts and Abstract Syntax</title>
            <author initials="R." surname="Cyganiak" fullname="Richard Cyganiak">
              <organization/>
            </author>
            <author initials="D." surname="Wood" fullname="David Wood">
              <organization/>
            </author>
            <author initials="M." surname="Lanthaler" fullname="Markus Lanthaler">
              <organization/>
            </author>
            <date year="2014" month="February" day="25"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
        </reference>

<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6082.xml"/>


        <reference anchor="Unicode-14.0.0" target="https://www.unicode.org/versions/Unicode14.0.0/">
          <front>
            <title>The Unicode Standard, Version 14.0.0</title>
            <author>
              <organization>The Unicode Consortium</organization>
            </author>
            <date year="2021" month="September"/>
          </front>
          <seriesInfo name="ISBN" value="978-1-936213-29-0"/>
          <refcontent>Mountain View: The Unicode Consortium</refcontent>
        </reference>

        <reference anchor="Unicode-14.0.0-bidi" target="https://www.unicode.org/reports/tr9/#Markup_And_Formatting">
          <front>
            <title>Unicode Standard Annex #9 --- Unicode Bidirectional Algorithm</title>
            <author>
              <organization>The Unicode Consortium</organization>
            </author>
            <date year="2021" month="August" day="27"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="tag38">
      <name>Language-Tagged Strings</name>
      <t>This appendix serves as the archival documentation for CBOR tag 38, a
tag for serializing language-tagged text strings in CBOR.
The text of this appendix is adapted from the specification text
supplied for its initial registration.
It has been extended to allow supplementing the language tag by a
direction indication.</t>
      <t>As with any IANA-registered item, a specification that further updates this
registration needs to update the reference column of the IANA registry (see
<xref target="iana-tag38"/>).
Future specifications may update this appendix, other parts of this document,
or both.
(When updating this appendix, keep in mind that applications beyond
Concise Problem Details data items may adopt the tag defined here.)
Users of this tag are advised to consult the registry to obtain the
most recent update for this appendix.</t>
      <section anchor="introduction-1">
        <name>Introduction</name>
        <t>In some cases, it is useful to specify the natural language of a text
string.  This specification defines a tag that does just that.  One
technology that supports language-tagged strings is the Resource
Description Framework (RDF) <xref target="RDF"/>.</t>
      </section>
      <section anchor="detailed-semantics">
        <name>Detailed Semantics</name>
        <t>A language-tagged text string in CBOR has the tag 38 and consists of an array
with a length of 2 or 3.</t>
        <t>The first element is a well-formed language tag described in BCP 47 (<xref target="RFC5646"/> and <xref target="RFC4647"/>), represented as a UTF-8 text
string (major type 3).</t>
        <t>The second element is an arbitrary UTF-8 text string (major type
3). Both the language tag and the arbitrary string can optionally be
annotated with CBOR tags; this is not shown in the CDDL below.</t>
        <t>The optional third element, if present, represents a ternary value that
indicates a direction, as follows:</t>
        <ul spacing="normal">
          <li>
            <tt>false</tt>: left-to-right direction ("ltr").
The text is expected to be displayed with left-to-right base
direction if standalone and isolated with left-to-right direction
(as if enclosed in LRI ... PDI or equivalent, see <xref target="Unicode-14.0.0-bidi"/>) in the
context of a longer string or text.</li>
          <li>
            <tt>true</tt>: right-to-left direction ("rtl").
The text is expected to be displayed with right-to-left base
direction if standalone and isolated with right-to-left direction
(as if enclosed in RLI ... PDI or equivalent, see <xref target="Unicode-14.0.0-bidi"/>) in the context
of a longer string or text.</li>
<li>
  
            <tt>null:</tt> indicates that no indication is made about the direction
("auto"), enabling an internationalization library to make an auto-detection
decision such as treating the string as if enclosed in FSI ... PDI
or equivalent, see <xref target="Unicode-14.0.0-bidi"/>.</li>
        </ul>
        <t>If the third element is absent, directionality context may be applied
(e.g., base-directionality information for an entire CBOR message or
part thereof).  If there is no directionality context applied, the
default interpretation is the same as for <tt>null</tt> ("auto").</t>
        <t>In CDDL:</t>
        <sourcecode type="cddl"><![CDATA[
tag38 = #6.38([tag38-ltag, text, ?tag38-direction])
tag38-ltag = text .regexp "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"
tag38-direction = &(ltr: false, rtl: true, auto: null)
]]></sourcecode>
        <!-- RUBY_THREAD_VM_STACK_SIZE=5000000 cddl ... -->


<t>NOTE: Language tags of any combination of case are allowed. But
<xref section="2.1.1" sectionFormat="of" target="RFC5646"/>, part of BCP 47,
recommends a case combination for language tags that encoders that
support tag 38 may wish to follow when generating language tags.</t>
        <t>Data items with tag 38 that do not meet the criteria above are not valid
(see Section <xref section="5.3.2" sectionFormat="bare" target="RFC8949"/> of RFC 8949 <xref target="STD94"></xref>).</t>
        <t>NOTE: The Unicode Standard <xref target="Unicode-14.0.0"/> includes a set of characters
designed for tagging text (including language tagging) in the range
U+E0000 to U+E007F. Although many applications, including RDF,
do not disallow these characters in text strings, the Unicode Consortium
has deprecated these characters and recommends annotating language via a
higher-level protocol instead. See the section "Deprecated Tag
Characters" in Section 23.9 of <xref target="Unicode-14.0.0"/> as well as <xref target="RFC6082"/>.</t>

<t>NOTE: while this document references a version of Unicode that was
              recent at the time of writing, the statements made based
              on this version are expected to remain valid for future
              versions.</t>
      </section>
      <section anchor="examples">
        <name>Examples</name>
        <t>Examples in this section are given in CBOR diagnostic notation first and then
as a pretty-printed hexadecimal representation of the encoded item.</t>
        <t>The following example shows how the English-language string "Hello" is
represented.</t>
        <sourcecode type="cbor-diag"><![CDATA[
38(["en", "Hello"])
]]></sourcecode>
        <sourcecode type="cbor-pretty"><![CDATA[
D8 26               # tag(38)
   82               # array(2)
      62            # text(2)
         656E       # "en"
      65            # text(5)
         48656C6C6F # "Hello"
]]></sourcecode>
        <t>The following example shows how the French-language string "Bonjour" is
represented.</t>
        <sourcecode type="cbor-diag"><![CDATA[
38(["fr", "Bonjour"])
]]></sourcecode>
        <sourcecode type="cbor-pretty"><![CDATA[
D8 26                   # tag(38)
   82                   # array(2)
      62                # text(2)
         6672           # "fr"
      67                # text(7)
         426F6E6A6F7572 # "Bonjour"
]]></sourcecode>
        <t>The following example uses right-to-left (RTL) script, which in the context of this specification may be rendered differently by different document presentation environments.  The descriptive text may be more reliable to follow than the necessarily device- and application-specific rendering.
The example shows how the Hebrew-language string</t>
<artwork>
שלום
</artwork>

<t>is represented, where in direction of reading, the sequence of characters is: 
<u>ש</u>,
<u>ל</u>,
<u>ו</u>,
<u>ם</u>.
Note the <tt>rtl</tt> direction expressed by setting the third element in the array to "true".</t>

        <sourcecode type="cbor-diag"><![CDATA[
38(["he", "שלום", true])
]]></sourcecode>
        <sourcecode type="cbor-pretty"><![CDATA[
D8 26                     # tag(38)
   83                     # array(3)
      62                  # text(2)
         6865             # "he"
      68                  # text(8)
         D7A9D79CD795D79D # "שלום"
      F5                  # primitive(21)
]]></sourcecode>
      </section>
    </section>
    <section anchor="comp7807">
      <name>Interworking with RFC 7807</name>
      <t>On certain occasions, it will be necessary to carry ("tunnel")
<xref target="RFC7807"/> problem details in a Concise Problem Details data item.</t>
      <t>This appendix defines a Custom Problem Detail entry for that purpose.
This is assigned Custom Problem Detail key 7807 in <xref target="iana-cpdk"/>.
Its structure is:</t>
      <sourcecode type="cddl"><![CDATA[
tunnel-7807 = {
  ? &(type: 0) => ~uri
  ? &(status: 1) => 0..999
  * text => any
}
]]></sourcecode>
      <t>To carry an <xref target="RFC7807"/> problem details JSON object in a Concise Problem
Details data item, first convert the JSON object to CBOR as per Section <xref section="6.2" sectionFormat="bare" target="RFC8949"/> of RFC 8949 <xref target="STD94"></xref>.  Create an empty Concise Problem Details data item.</t>
      <t>Move the values for "title", "detail", and "instance", if present,
from the <xref target="RFC7807"/> problem details to the equivalent Standard Problem
Detail entries.
Create a Custom Problem Detail entry with key 7807.
Move the values for "type" and "status", if present, to the equivalent
keys 0 and 1 of the Custom Problem Detail entry.
Move all remaining key/value pairs (additional members as per <xref section="3.2" sectionFormat="of" target="RFC7807"/>) in the converted <xref target="RFC7807"/> problem
details object to the Custom Problem Detail map unchanged.</t>
      <t>The inverse direction, carrying Concise Problem Details in an RFC 7807 problem
details JSON object requires the additional support provided by
<xref target="I-D.ietf-httpapi-rfc7807bis"/>, which is planned to create the HTTP Problem Types
Registry.  An HTTP Problem Type can then be registered that extracts
top-level items from the Concise Problem Details data item in a similar way
to the conversion described above and that carries the rest of the
Concise Problem Details data item in an additional member via base64url
encoding without padding (<xref section="5" sectionFormat="of" target="RFC4648"/>).  Details can be defined
in a separate document when the work on <xref target="I-D.ietf-httpapi-rfc7807bis"/> is completed.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank <contact fullname="Mark Nottingham"/> and <contact fullname="Erik Wilde"/>, the authors of RFC 7807;  <contact fullname="Klaus Hartke"/> and <contact fullname="Jaime Jiménez"/>, the coauthors of an earlier draft version of this
specification;  <contact fullname="Christian Amsüss"/>, <contact fullname="Marco Tiloca"/>, <contact fullname="Ari Keränen"/>,
and <contact fullname="Michael Richardson"/> for review and comments on this document.
<contact fullname="Francesca Palombini"/> for her review (and support) as responsible AD,
and <contact fullname="Joel Jaeggli"/> for his OPSDIR review, both of which brought
significant additional considerations to this document.</t>
      <t>For <xref target="tag38"/>, <contact fullname="John Cowan"/> and <contact fullname="Doug Ewell"/> are also to be acknowledged.
The content of an earlier draft version of this appendix was also discussed
in the "apps-discuss@ietf.org" and "ltru@ietf.org" mailing
lists.
More recently, the authors initiated a discussion about the handling
of writing direction information in conjunction with language tags.
That led to discussions within the W3C Internationalization Core
Working Group.
The authors would like to acknowledge that cross-organization
cooperation and particular contributions from <contact fullname="John Klensin"/> and
<contact fullname="Addison Phillips"/> and specific text proposals by <contact fullname="Martin Dürst"/>.</t>

</section>
<section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
  
      <name>Contributors</name>
      <contact initials="P." surname="Occil" fullname="Peter Occil">
        <organization/>
        <address>
          <email>poccil14@gmail.com</email>
          <uri>http://peteroupc.github.io/CBOR/</uri>
        </address>
      </contact>
      <t>Peter defined CBOR tag 38, basis of <xref target="tag38"/>.</t>
      <contact initials="C." surname="Amsüss" fullname="Christian Amsüss">
        <organization/>
        <address>
          <email>christian@amsuess.com</email>
        </address>
      </contact>
      <t>Christian contributed what became <xref target="uco"/>.</t>
</section>
  </back>
</rfc>
