<?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.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-woodcock-faltstrom-external-registry-rrtypes-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="External-Registry RRTYPEs">External-Registry DNS Resource Record Types: UNECE and ISO</title>
    <seriesInfo name="Internet-Draft" value="draft-woodcock-faltstrom-external-registry-rrtypes-00"/>
    <author initials="B." surname="Woodcock" fullname="Bill Woodcock">
      <organization>PCH</organization>
      <address>
        <email>woody@pch.net</email>
      </address>
    </author>
    <author initials="P." surname="Fältström" fullname="Patrik Fältström">
      <organization ascii="Patrik Faltstrom">Netnod</organization>
      <address>
        <email>paf@netnod.se</email>
      </address>
    </author>
    <date year="2026" month="August" day="14"/>
    <workgroup>Network Working Group</workgroup>
    <abstract>
      <?line 83?>

<t>This document defines two DNS resource record types, UNECE and ISO,
which convey numeric values paired with codes drawn from registries
maintained by external standards organizations: the United Nations
Economic Commission for Europe (UNECE) and the International
Organization for Standardization.  Neither proposed RRTYPE duplicates
the external registries into IANA registries; each carries codes
verbatim and uses the semantics defined by the external maintainer.
The document specifies presentation and wire formats for both types,
requests the assignment of two decimal RRTYPE identifiers under the
Expert Review process of BCP 42, and suggests a common design pattern
that may serve as a model for future RRTYPEs seeking to make external
registries usable from the DNS without duplication.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-woodcock-faltstrom-external-registry-rrtypes/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        DNSOP Working Group mailing list (<eref target="mailto:dnsop@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dnsop/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dnsop/"/>.
      </t>
    </note>
  </front>
  <middle>
    <?line 98?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Many protocols need to convey data whose controlled vocabularies are
defined and maintained outside the IETF, including but not limited to
quantities, countries, languages, locations, and units of measure.
The authoritative registries of these vocabularies are external
standards organizations.  The two referenced in this document are the
United Nations Economic Commission for Europe (UNECE) and the
International Organization for Standardization (ISO).</t>
      <t>The DNS has historically accommodated such data in one of two ways.
Either the external registry is duplicated into an IANA registry,
creating a synchronization burden and a second claimant to authority
over the code space, as the IANA Language Subtag Registry <xref target="BCP47"/>
replicates ISO and UN code lists, and as IANA's IEEE 802 Numbers
registry partially mirrors IEEE Registration Authority assignments;
or the data is carried in TXT records under private convention,
forfeiting type-distinct queries, field structure, and single-RRset
signing.</t>
      <t>This document defines two resource record types which take a
different path: the RDATA carries a discriminator identifying the
registry, an optional numeric value, the registry code point, and an
optional free-text descriptor.  Semantics of the code remain entirely
with the external maintainer; unrecognized codes are carried and
displayed rather than rejected, so that the RRTYPEs track the
external registries without protocol changes or IANA registry
actions.  The approach has precedent in e164.arpa <xref target="RFC6116"/>, whose
ENUM delegations are keyed to ITU-T E.164 country-code assignments
without maintaining a local copy, leaving authority with the external
registry.</t>
      <t>The immediate motivation for these RRTYPEs is the work currently
being done in the DIEM working group on Digital Emblems, which convey
cryptographically signed record-bundles identifying assets marked
under international law.  The proposed RRTYPEs are, however,
general-purpose and intended for use by other applications which need
to represent standardized data formats maintained by external
registries.</t>
      <section anchor="conventions">
        <name>Conventions</name>
        <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&#160;14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="pattern">
      <name>The External Registry Pattern</name>
      <section anchor="roles">
        <name>Roles</name>
        <dl>
          <dt>External Maintainer:</dt>
          <dd>
            <t>The standards organization which defines and revises external
registries.  The code space belongs to the External Maintainer;
nothing in this document, and no issuer of records, creates,
modifies, or retires codes.</t>
          </dd>
          <dt>Issuer:</dt>
          <dd>
            <t>The party publishing records in a DNS zone.</t>
          </dd>
          <dt>Receiver:</dt>
          <dd>
            <t>Any party retrieving or interpreting the resource records.</t>
          </dd>
        </dl>
      </section>
      <section anchor="principles">
        <name>Design Principles</name>
        <t>RRTYPEs following this pattern conform to all of the following.  The
UNECE (<xref target="unece"/>) and ISO (<xref target="iso"/>) types are initial instantiations.</t>
        <dl>
          <dt>One type per maintainer organization:</dt>
          <dd>
            <t>A single RRTYPE covers all of an External Maintainer's registries;
a Discriminator field in the RDATA specifies the particular
registry.  Per-registry RRTYPEs are not defined.</t>
          </dd>
          <dt>Codes verbatim:</dt>
          <dd>
            <t>The Code field carries the code exactly as published by the
External Maintainer, and is compared octet-for-octet, with no case
folding.  Issuers <bcp14>MUST NOT</bcp14> coin codes.  Codes contain no
whitespace: where a maintainer's published rendering separates a
code's components with whitespace, the separator is presentation
rather than part of the code, and the code is the concatenation.</t>
          </dd>
          <dt>Unknown values carried:</dt>
          <dd>
            <t>A Receiver encountering an unrecognized Discriminator <bcp14>MUST</bcp14> carry
and display the record without interpretation.  A Receiver
encountering an unrecognized code within a recognized list <bcp14>MUST</bcp14>
display it uninterpreted and <bcp14>MUST NOT</bcp14> treat the record as invalid.
These rules allow the type to track the external registry without
IANA registry action or protocol changes.</t>
          </dd>
          <dt>Registries must be at a valid stage:</dt>
          <dd>
            <t>An Issuer <bcp14>MUST NOT</bcp14> publish a DNS Resource Record referencing a
registry whose code list is not currently active and publicly
available at no cost and citable at the time of RR publication.
This precludes code lists which have not yet been published as
official work-products of their respective External Maintainer
organizations, code lists which require subscriptions to access or
which carry prohibitive use restrictions, and those which have been
withdrawn or superseded.</t>
          </dd>
          <dt>No mirror registries:</dt>
          <dd>
            <t>IANA action is limited to the RRTYPE code point.  No IANA
subregistry duplicating the external registries is created;
specifications instead cite each external registry as its current
revision or its successor.</t>
          </dd>
          <dt>Common value grammar:</dt>
          <dd>
            <t>The optional numeric Value field uses the shared grammar and
semantics of <xref target="value-field"/>, including its distinction between an
inapplicable quantity and an unknown one.</t>
          </dd>
          <dt>Descriptor as hint:</dt>
          <dd>
            <t>The optional Descriptor field is free text identifying what the
datum describes relative to the subject.  It is a display and
matching hint for human receivers, and <bcp14>MUST NOT</bcp14> be interpreted as
machine semantics.</t>
          </dd>
          <dt>RFC 3597 cleanliness:</dt>
          <dd>
            <t>RDATA contains no domain names, and requires no compression,
rewriting, or additional-section processing, so the RRTYPEs are
fully compatible with unknown-type handling <xref target="RFC3597"/>.</t>
          </dd>
          <dt>Temporal anchoring:</dt>
          <dd>
            <t>Where records appear in DNSSEC-signed zones and historical accuracy
matters, Receivers <bcp14>SHOULD</bcp14> interpret codes against the registry
revision in force at the inception time of the covering RRSIG
<xref target="RFC4034"/> <xref target="RFC9364"/>.  Where an External Maintainer retains
deleted codes in its published lists, as UNECE Recommendation 20
does <xref target="UNECE20"/>, locally cached code tables remain safe.</t>
          </dd>
        </dl>
      </section>
      <section anchor="value-field">
        <name>The Value Field</name>
        <t>If a record utilizes a code which does not require a quantity, the
Value is not applicable (na): empty, zero-length on the wire, the
solitary token "-" in presentation.  This is the same representation
used for an empty Salt field in NSEC3 and NSEC3PARAM <xref target="RFC5155"/>.  A
Value field <bcp14>MUST NOT</bcp14> consist solely of the octet "-"; the zero-length
field is na's only wire encoding.</t>
        <t>Values are represented in US-ASCII in this grammar, using ABNF
<xref target="RFC5234"/> and its core rule DIGIT:</t>
        <sourcecode type="abnf"><![CDATA[
value     = unknown / quantity
unknown   = "?"
quantity  = ( "0" / ["-"] posnum ) [precision]
precision = "(" ( "0" / posnum / "?" ) ")"
posnum    = nzint [ "." frac ] / "0" "." frac
nzint     = %x31-39 *DIGIT
frac      = *DIGIT %x31-39
]]></sourcecode>
        <dl>
          <dt>"?" (unknown):</dt>
          <dd>
            <t>A quantity attaches to this record, but is unknown to the Issuer at
the time of RR creation or signing.</t>
          </dd>
          <dt>quantity:</dt>
          <dd>
            <t>The number, in the units or terms of the code.  The parenthetical
precision is plus-or-minus that amount in the same units; "(?)"
marks the precision unknown.  A precision attached to an unknown
value ("?(n)") is not permitted.</t>
          </dd>
        </dl>
        <t>The grammar admits exactly one representation of each number: leading
zeros, trailing zeros in a fractional part, all-zero fractional
parts, and negative zero cannot be represented.  Non-zero negative
values are permitted.</t>
        <t>A Receiver encountering a nonempty Value which does not match the
grammar <bcp14>MUST</bcp14> display it uninterpreted without deriving a quantity,
and <bcp14>MUST NOT</bcp14> treat the record as invalid.</t>
        <t>The distinction between "-" and "?" is semantic and deliberate: the
former states that no quantity exists to be reported, the latter that
one exists and is unreported.</t>
      </section>
    </section>
    <section anchor="unece">
      <name>The UNECE RRTYPE</name>
      <t>The UNECE RRTYPE conveys a value coded according to a registry
published in the UNECE Recommendations series.</t>
      <section anchor="unece-wire">
        <name>Wire Format</name>
        <t>The wire format of the RDATA field <xref target="RFC1035"/> is as follows:</t>
        <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Rec. Length  |                Recommendation                 /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Value Length  |                     Value                     /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Code Length  |                     Code                      /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                          Descriptor                           /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>Fields marked "/" are variable length.</t>
        <dl>
          <dt>Recommendation Length:</dt>
          <dd>
            <t>an 8-bit unsigned integer, which <bcp14>MUST</bcp14> be nonzero.</t>
          </dd>
          <dt>Recommendation:</dt>
          <dd>
            <t>&lt;Recommendation Length&gt; octets, US-ASCII: a token identifying the
Recommendation from whose code list the Code field is drawn.  The
token is the Recommendation's identifier with the words
"Recommendation No." omitted: "20" for Recommendation No. 20.
Tokens are not necessarily numeric: a future "Recommendation No.
3bis" would yield the token "3bis".  "UNECE" is omitted because the
RRTYPE itself names the organization; edition years, amendments,
and corrigenda are omitted to preserve forward compatibility under
the temporal-anchoring principle of <xref target="principles"/>.  Tokens contain
no whitespace and are compared octet-for-octet with no case
folding.  Issuers <bcp14>MUST</bcp14> use tokens exactly as the rule yields them,
neither coining nor reformatting.</t>
          </dd>
          <dt>Value Length:</dt>
          <dd>
            <t>an 8-bit unsigned integer.</t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>&lt;Value Length&gt; octets, US-ASCII, matching the value grammar of
<xref target="value-field"/>.  A length of zero encodes na, and is its only wire
encoding.</t>
          </dd>
          <dt>Code Length:</dt>
          <dd>
            <t>an 8-bit unsigned integer, which <bcp14>MUST</bcp14> be nonzero.</t>
          </dd>
          <dt>Code:</dt>
          <dd>
            <t>&lt;Code Length&gt; octets, US-ASCII, verbatim from the cited
Recommendation's registry.</t>
          </dd>
          <dt>Descriptor:</dt>
          <dd>
            <t>all remaining octets of the RDATA, UTF-8 <xref target="RFC3629"/>, possibly
empty, but at most 255 octets in total.  A Receiver encountering a
longer Descriptor <bcp14>MUST NOT</bcp14> treat the record as invalid.</t>
          </dd>
        </dl>
      </section>
      <section anchor="unece-presentation">
        <name>Presentation Format</name>
        <t>The presentation format is:</t>
        <artwork><![CDATA[
UNECE <rec> <value> <code> ["<descriptor>"]
]]></artwork>
        <t>where &lt;rec&gt; is the Recommendation token per <xref target="unece-wire"/>; &lt;value&gt;
is the Value token per <xref target="value-field"/>, with the zero-length wire
value presented as "-"; &lt;code&gt; is the Code, unquoted; and the
Descriptor, if present, is a single quoted &lt;character-string&gt; per
<xref section="5.1" sectionFormat="of" target="RFC1035"/>, its embedded quotes, backslashes, and
non-ASCII octets escaped by that section's "\X" and "\DDD"
conventions.</t>
      </section>
      <section anchor="unece-recs">
        <name>Applicable Recommendations</name>
        <t>The applicable Recommendations are those whose registries UNECE
itself publishes <xref target="UNECE-CL"/><xref target="UNECE20"/><xref target="UNECE21"/>.  At the time of
writing, these include:</t>
        <artwork><![CDATA[
16  United Nations Code for Trade and Transport Locations
17  Payment terms abbreviations
19  Codes for modes of transport
20  Codes for units of measure used in international trade
21  Codes for passengers, types of cargo, packages and
    packaging materials
23  Freight cost codes
24  Trade and transport status codes
28  Codes for types of means of transport
]]></artwork>
        <t>A Recommendation 16 code is the five-character concatenation of the
ISO 3166-1 country code and the location code; the space separating
them in UNECE's published tables is not part of the code: "JPTYO",
not "JP TYO".</t>
        <t>UNECE, through its United Nations Centre for Trade Facilitation and
Electronic Business (UN/CEFACT), maintains and publishes these code
lists free of charge <xref target="UNECE-CL"/>.  The code-list Recommendations are
maintained on UN/CEFACT's behalf by its Information Content
Management Group, and the Recommendation 16 code list, UN/LOCODE, is
updated by the UNECE secretariat twice a year.  Deleted and
deprecated code values are marked as such in the published lists
rather than removed, so that a code value, once assigned, remains
permanently attached to its original meaning <xref target="UNECE20"/>.</t>
        <t>Recommendations which adopt externally maintained standards are out
of scope for this type: Recommendation 3 (ISO 3166), Recommendation 9
(ISO 4217; see the ISO RRTYPE, <xref target="iso"/>), and Recommendation 5
(Incoterms, maintained by the International Chamber of Commerce).
Recommendation 10 (ship identification) adopts the IMO Ship
Identification Number Scheme, whose numbers appear as identifiers
rather than as coded values.</t>
      </section>
      <section anchor="unece-examples">
        <name>Examples</name>
        <artwork><![CDATA[
@ IN UNECE 16 - JPTYO "place of inspection"
@ IN UNECE 16 - KENBO "distribution hub"
@ IN UNECE 19 - 1 "mode: maritime"
@ IN UNECE 19 - 4 "mode: air"
@ IN UNECE 20 640 H18 "protected wetland area"
@ IN UNECE 20 12500 MTQ "reservoir volume"
@ IN UNECE 20 5 MGM "active ingredient per dose"
@ IN UNECE 20 8500 E22 "container capacity, TEU"
@ IN UNECE 20 -18 CEL "cold-chain storage temperature"
@ IN UNECE 20 90 DAY "shelf life"
@ IN UNECE 20 24 MON "warranty period"
@ IN UNECE 20 230 VLT "supply voltage"
@ IN UNECE 20 11 KWT "charger output"
@ IN UNECE 20 ? P1 "moisture content, assay pending"
@ IN UNECE 21 12 PX "pallets"
@ IN UNECE 21 2 CR "crates, artworks on loan"
@ IN UNECE 21 3 RL "reels, fibre-optic cable"
@ IN UNECE 21 2 PO "diplomatic pouches"
@ IN UNECE 24 - 219 "status: delivery pending"
]]></artwork>
      </section>
      <section anchor="unece-processing">
        <name>Processing</name>
        <t>Receivers apply the rules of <xref target="principles"/>.  In particular, a
Receiver encountering a Recommendation token it does not recognize
carries and displays the record uninterpreted, and a Receiver
encountering a code it does not recognize displays the code
uninterpreted without treating the record as invalid.</t>
      </section>
    </section>
    <section anchor="iso">
      <name>The ISO RRTYPE</name>
      <t>The ISO RRTYPE conveys a value coded by a registry defined in a
standard of the International Organization for Standardization.</t>
      <section anchor="iso-wire">
        <name>Wire Format</name>
        <t>The wire format of the RDATA field <xref target="RFC1035"/> is as follows:</t>
        <artwork><![CDATA[
                     1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Standard Length|                   Standard                    /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Value Length  |                     Value                     /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Code Length  |                     Code                      /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                          Descriptor                           /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>Fields marked "/" are variable length.</t>
        <dl>
          <dt>Standard Length:</dt>
          <dd>
            <t>an 8-bit unsigned integer, which <bcp14>MUST</bcp14> be nonzero.</t>
          </dd>
          <dt>Standard:</dt>
          <dd>
            <t>&lt;Standard Length&gt; octets, US-ASCII: a token identifying the
standard from whose code list the Code field is drawn.  The token
is the standard's identifier, including any hyphen-joined part and
sub-part identifiers: "3166-1" for ISO 3166-1.  Where the
identifier carries a type prefix (such as TR, TS, PAS, IWA, or
Guide), the prefix is joined with an underscore: for example,
"TR_24028" for ISO/IEC TR 24028, or "Guide_2" for ISO/IEC Guide 2.
"ISO" and "ISO/IEC" are omitted because the RRTYPE itself names the
organization; edition years, amendments, and corrigenda are omitted
to preserve forward compatibility under the temporal-anchoring
principle of <xref target="principles"/>.  Tokens contain no whitespace and are
compared octet-for-octet with no case folding.  Issuers <bcp14>MUST</bcp14> use
tokens exactly as the rule yields them, neither coining nor
reformatting.</t>
          </dd>
          <dt>Value Length:</dt>
          <dd>
            <t>an 8-bit unsigned integer.</t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>&lt;Value Length&gt; octets, US-ASCII, matching the value grammar of
<xref target="value-field"/>.  A length of zero encodes na, and is its only wire
encoding.</t>
          </dd>
          <dt>Code Length:</dt>
          <dd>
            <t>an 8-bit unsigned integer, which <bcp14>MUST</bcp14> be nonzero.</t>
          </dd>
          <dt>Code:</dt>
          <dd>
            <t>&lt;Code Length&gt; octets, US-ASCII, verbatim from the cited standard.
For ISO 3166-1, alpha-2 codes are <bcp14>RECOMMENDED</bcp14>, for consistency with
UNECE Recommendation 3 and general DNS practice.  For ISO 4217, the
alphabetic codes are <bcp14>RECOMMENDED</bcp14> over the numeric, for consistency
with UNECE Recommendation 9.  For ISO 639, two-letter (Set 1)
identifiers are <bcp14>RECOMMENDED</bcp14> where they exist.</t>
          </dd>
          <dt>Descriptor:</dt>
          <dd>
            <t>all remaining octets of the RDATA, UTF-8 <xref target="RFC3629"/>, possibly
empty, but at most 255 octets in total.  A Receiver encountering a
longer Descriptor <bcp14>MUST NOT</bcp14> treat the record as invalid.</t>
          </dd>
        </dl>
      </section>
      <section anchor="iso-presentation">
        <name>Presentation Format</name>
        <t>The presentation format is:</t>
        <artwork><![CDATA[
ISO <standard> <value> <code> ["<descriptor>"]
]]></artwork>
        <t>where &lt;standard&gt; is the Standard token per <xref target="iso-wire"/>; &lt;value&gt; is
the Value token per <xref target="value-field"/>, with the zero-length wire value
presented as "-"; &lt;code&gt; is the Code, unquoted; and the Descriptor,
if present, is a single quoted &lt;character-string&gt; per
<xref section="5.1" sectionFormat="of" target="RFC1035"/>, its embedded quotes, backslashes, and
non-ASCII octets escaped by that section's "\X" and "\DDD"
conventions.</t>
      </section>
      <section anchor="iso-standards">
        <name>Applicable Standards</name>
        <t>Applicable standards are those defining registries of code lists;
initially:</t>
        <artwork><![CDATA[
639     Language codes
3166-1  Country codes
3166-2  Country subdivision codes
4217    Currency codes
]]></artwork>
        <t>ISO permits use of its country, currency, and language codes free of
charge <xref target="ISO4217"/>, and each code list is maintained by a body
designated for its standard: the ISO 3166 Maintenance Agency for
country and subdivision codes <xref target="ISO3166"/>, SIX Financial Information
for currency codes <xref target="ISO4217"/>, and the ISO 639 Maintenance Agency
for language codes <xref target="ISO639"/>.  Retirement practices vary by
registry.  A deleted ISO 3166-1 alpha-2 code element is recorded in
ISO 3166-3 and cannot be reused for fifty years under current policy,
but reassignment has occurred.  Withdrawn ISO 4217 codes are
retained, with their withdrawal dates, in that standard's list of
historic currencies.  Retired ISO 639 identifiers are never
reassigned; they remain in the code set permanently.</t>
        <t>Out of scope: ISO 8601, which defines a format rather than a code
list (temporal data uses a separate mechanism); ISO 6346, whose
container owner codes appear within asset identifiers; and ISO 15924,
whose script codes travel within BCP 47 <xref target="BCP47"/> language tags
inside textual elements.</t>
      </section>
      <section anchor="iso-examples">
        <name>Examples</name>
        <artwork><![CDATA[
@ IN ISO 639 - ar "working language"
@ IN ISO 639 - yue "crew lingua franca"
@ IN ISO 3166-1 - QA "flag state"
@ IN ISO 3166-2 - US-CA "state of incorporation"
@ IN ISO 4217 125000 USD "declared cargo value"
@ IN ISO 4217 2400000(50000) EUR "insured value, hull and machinery"
@ IN ISO 4217 780000(?) CHF "salvage award, assessment ongoing"
@ IN ISO 4217 ? ZAR "customs value pending appraisal"
]]></artwork>
      </section>
      <section anchor="iso-processing">
        <name>Processing</name>
        <t>Receivers apply the rules of <xref target="principles"/>.  In particular, a
Receiver encountering a standard token it does not recognize carries
and displays the record uninterpreted, and a Receiver encountering a
code it does not recognize displays the code uninterpreted without
treating the record as invalid.</t>
      </section>
    </section>
    <section anchor="additional">
      <name>Defining Additional External-Registry RRTYPEs</name>
      <t>This document is intended as the model for future RRTYPEs which make
external registries usable from the DNS without duplicating their
content.  Sections <xref target="unece-recs" format="counter"/> and
<xref target="iso-standards" format="counter"/> record the
corresponding information for the two types defined here.  A
specification defining such a type:</t>
      <ol spacing="normal" type="(%c)"><li>
          <t>identifies the External Maintainer, demonstrates that its
registries are managed with a sufficient level of maturity,
stably published and citable, and states the maintainer's
code-retirement policy (reassignment of retired codes weakens
the temporal-anchoring rule of <xref target="principles"/> and <bcp14>SHOULD</bcp14> be
documented if present);</t>
        </li>
        <li>
          <t>defines a single RRTYPE for the maintainer's whole series,
discriminated by a length-prefixed US-ASCII token
deterministically formed from the External Maintainer's own
identifier for the defining document;</t>
        </li>
        <li>
          <t>reuses the Value field grammar and semantics of <xref target="value-field"/>
verbatim, so that implementations share one parser across all
types following this pattern;</t>
        </li>
        <li>
          <t>carries codes verbatim with octet-for-octet comparison, and
prohibits issuers from coining codes;</t>
        </li>
        <li>
          <t>adopts the unknown-value carriage rules of <xref target="principles"/>
unchanged;</t>
        </li>
        <li>
          <t>requests only an RRTYPE code point from IANA, creating no mirror
subregistry; and</t>
        </li>
        <li>
          <t>keeps domain names out of the RDATA, preserving RFC 3597
compatibility.</t>
        </li>
      </ol>
      <t>One possible additional instantiation is an RRTYPE for the World
Customs Organization registries, carrying Harmonized System
subheadings for the description of goods; the pattern accommodates it
without modification.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Records of these types assert data under the containing zone's DNSSEC
signatures; they confer no authorization, and their trustworthiness
is the same as that of the zone's signing chain.</t>
      <t>Issuers should consider anything published in the DNS to be public
unless specific selective-disclosure measures are taken to constrain
distribution.  Such measures are out of scope for this document.</t>
      <t>Because the code travels verbatim in RDATA, a revision of the
external registry cannot alter published signed data.  It can,
however, change what a Receiver understands a code to mean.  Where
the External Maintainer never reassigns retired codes, cached tables
are safe indefinitely; where that policy is absent, Receivers <bcp14>SHOULD</bcp14>
apply the temporal-anchoring rule of <xref target="principles"/>, interpreting
codes against the registry revision in force at the inception time of
the covering RRSIG.</t>
      <t>The Descriptor is untrusted free text.  Receivers <bcp14>MUST NOT</bcp14> derive
machine behavior from it, and display implementations <bcp14>SHOULD</bcp14> sanitize
it as they would any untrusted text, removing control and other
hazardous characters.</t>
      <t>The "?" token is an assertion of ignorance made under signature.
Relying parties should treat it as exactly that: evidence that the
Issuer disclaimed knowledge at signing time, not as a zero value nor
as an omission.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document requests the assignment of two new decimal RRTYPE
identifiers, following the guidelines of <xref target="RFC6895"/> (BCP 42).</t>
      <section anchor="iana-assignments">
        <name>RRTYPE Assignments</name>
        <t>IANA is requested to add the following entries to the "Resource
Record (RR) TYPEs" registry in the "Domain Name System (DNS)
Parameters" registry group:</t>
        <table>
          <name>RRTYPE assignments requested</name>
          <thead>
            <tr>
              <th align="left">TYPE</th>
              <th align="left">Value</th>
              <th align="left">Meaning</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">UNECE</td>
              <td align="left">TBD1</td>
              <td align="left">Value coded per a UNECE Recommendation</td>
              <td align="left">[this document]</td>
            </tr>
            <tr>
              <td align="left">ISO</td>
              <td align="left">TBD2</td>
              <td align="left">Value coded per an ISO standard</td>
              <td align="left">[this document]</td>
            </tr>
          </tbody>
        </table>
        <t>[RFC Editor: replace TBD1 and TBD2 with the decimal values assigned
by IANA, and remove this note.]</t>
      </section>
      <section anchor="iana-expert-review">
        <name>Expert Review</name>
        <t>RRTYPE identifiers are assigned under the DNS RRTYPE Allocation
Policy of <xref section="3.1" sectionFormat="of" target="RFC6895"/>, an Expert Review process
<xref target="RFC8126"/> conducted on the basis of completed application templates
conforming to the template of <xref target="RFC6895"/>.  Completed templates for
both types defined here have been submitted separately to
dns-rrtype-applications@ietf.org.  Assignment via Expert Review <bcp14>MAY</bcp14>
complete in advance of the publication of this document, in which
case IANA is requested to update the registry references for both
entries to point to this document upon its publication.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC1035">
          <front>
            <title>Domain names - implementation and specification</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1035"/>
          <seriesInfo name="DOI" value="10.17487/RFC1035"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC3597">
          <front>
            <title>Handling of Unknown DNS Resource Record (RR) Types</title>
            <author fullname="A. Gustafsson" initials="A." surname="Gustafsson"/>
            <date month="September" year="2003"/>
            <abstract>
              <t>Extending the Domain Name System (DNS) with new Resource Record (RR) types currently requires changes to name server software. This document specifies the changes necessary to allow future DNS implementations to handle new RR types transparently. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3597"/>
          <seriesInfo name="DOI" value="10.17487/RFC3597"/>
        </reference>
        <reference anchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC6895">
          <front>
            <title>Domain Name System (DNS) IANA Considerations</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>This document specifies Internet Assigned Numbers Authority (IANA) parameter assignment considerations for the allocation of Domain Name System (DNS) resource record types, CLASSes, operation codes, error codes, DNS protocol message header bits, and AFSDB resource record subtypes. It obsoletes RFC 6195 and updates RFCs 1183, 2845, 2930, and 3597.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="42"/>
          <seriesInfo name="RFC" value="6895"/>
          <seriesInfo name="DOI" value="10.17487/RFC6895"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <referencegroup anchor="BCP47" target="https://www.rfc-editor.org/info/bcp47">
          <reference anchor="RFC4647" target="https://www.rfc-editor.org/info/rfc4647">
            <front>
              <title>Matching of Language Tags</title>
              <author fullname="A. Phillips" initials="A." role="editor" surname="Phillips"/>
              <author fullname="M. Davis" initials="M." role="editor" surname="Davis"/>
              <date month="September" year="2006"/>
              <abstract>
                <t>This document describes a syntax, called a "language-range", for specifying items in a user's list of language preferences. It also describes different mechanisms for comparing and matching these to language tags. Two kinds of matching mechanisms, filtering and lookup, are defined. Filtering produces a (potentially empty) set of language tags, whereas lookup produces a single language tag. Possible applications include language negotiation or content selection. This document, in combination with RFC 4646, replaces RFC 3066, which replaced RFC 1766. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="47"/>
            <seriesInfo name="RFC" value="4647"/>
            <seriesInfo name="DOI" value="10.17487/RFC4647"/>
          </reference>
          <reference anchor="RFC5646" target="https://www.rfc-editor.org/info/rfc5646">
            <front>
              <title>Tags for Identifying Languages</title>
              <author fullname="A. Phillips" initials="A." role="editor" surname="Phillips"/>
              <author fullname="M. Davis" initials="M." role="editor" surname="Davis"/>
              <date month="September" year="2009"/>
              <abstract>
                <t>This document describes the structure, content, construction, and semantics of language tags for use in cases where it is desirable to indicate the language used in an information object. It also describes how to register values for use in language tags and the creation of user-defined extensions for private interchange. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="47"/>
            <seriesInfo name="RFC" value="5646"/>
            <seriesInfo name="DOI" value="10.17487/RFC5646"/>
          </reference>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC4034">
          <front>
            <title>Resource Records for the DNS Security Extensions</title>
            <author fullname="R. Arends" initials="R." surname="Arends"/>
            <author fullname="R. Austein" initials="R." surname="Austein"/>
            <author fullname="M. Larson" initials="M." surname="Larson"/>
            <author fullname="D. Massey" initials="D." surname="Massey"/>
            <author fullname="S. Rose" initials="S." surname="Rose"/>
            <date month="March" year="2005"/>
            <abstract>
              <t>This document is part of a family of documents that describe the DNS Security Extensions (DNSSEC). The DNS Security Extensions are a collection of resource records and protocol modifications that provide source authentication for the DNS. This document defines the public key (DNSKEY), delegation signer (DS), resource record digital signature (RRSIG), and authenticated denial of existence (NSEC) resource records. The purpose and format of each resource record is described in detail, and an example of each resource record is given.</t>
              <t>This document obsoletes RFC 2535 and incorporates changes from all updates to RFC 2535. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4034"/>
          <seriesInfo name="DOI" value="10.17487/RFC4034"/>
        </reference>
        <reference anchor="RFC5155">
          <front>
            <title>DNS Security (DNSSEC) Hashed Authenticated Denial of Existence</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="G. Sisson" initials="G." surname="Sisson"/>
            <author fullname="R. Arends" initials="R." surname="Arends"/>
            <author fullname="D. Blacka" initials="D." surname="Blacka"/>
            <date month="March" year="2008"/>
            <abstract>
              <t>The Domain Name System Security (DNSSEC) Extensions introduced the NSEC resource record (RR) for authenticated denial of existence. This document introduces an alternative resource record, NSEC3, which similarly provides authenticated denial of existence. However, it also provides measures against zone enumeration and permits gradual expansion of delegation-centric zones. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5155"/>
          <seriesInfo name="DOI" value="10.17487/RFC5155"/>
        </reference>
        <reference anchor="RFC9364">
          <front>
            <title>DNS Security Extensions (DNSSEC)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="February" year="2023"/>
            <abstract>
              <t>This document describes the DNS Security Extensions (commonly called "DNSSEC") that are specified in RFCs 4033, 4034, and 4035, as well as a handful of others. One purpose is to introduce all of the RFCs in one place so that the reader can understand the many aspects of DNSSEC. This document does not update any of those RFCs. A second purpose is to state that using DNSSEC for origin authentication of DNS data is the best current practice. A third purpose is to provide a single reference for other documents that want to refer to DNSSEC.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="237"/>
          <seriesInfo name="RFC" value="9364"/>
          <seriesInfo name="DOI" value="10.17487/RFC9364"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC6116">
          <front>
            <title>The E.164 to Uniform Resource Identifiers (URI) Dynamic Delegation Discovery System (DDDS) Application (ENUM)</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <author fullname="L. Conroy" initials="L." surname="Conroy"/>
            <author fullname="K. Fujiwara" initials="K." surname="Fujiwara"/>
            <date month="March" year="2011"/>
            <abstract>
              <t>This document discusses the use of the Domain Name System (DNS) for storage of data associated with E.164 numbers, and for resolving those numbers into URIs that can be used (for example) in telephony call setup. This document also describes how the DNS can be used to identify the services associated with an E.164 number. This document obsoletes RFC 3761. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6116"/>
          <seriesInfo name="DOI" value="10.17487/RFC6116"/>
        </reference>
        <reference anchor="UNECE-CL" target="https://unece.org/trade/uncefact/cl-recommendations">
          <front>
            <title>UN/CEFACT Code List Recommendations</title>
            <author>
              <organization>United Nations Economic Commission for Europe</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="UNECE20" target="https://unece.org/trade/uncefact/cl-recommendations">
          <front>
            <title>Recommendation No. 20: Codes for Units of Measure Used in International Trade</title>
            <author>
              <organization>United Nations Economic Commission for Europe</organization>
            </author>
            <date>n.d.</date>
          </front>
          <refcontent>as revised</refcontent>
        </reference>
        <reference anchor="UNECE21" target="https://unece.org/trade/uncefact/cl-recommendations">
          <front>
            <title>Recommendation No. 21: Codes for Passengers, Types of Cargo, Packages and Packaging Materials</title>
            <author>
              <organization>United Nations Economic Commission for Europe</organization>
            </author>
            <date>n.d.</date>
          </front>
          <refcontent>as revised</refcontent>
        </reference>
        <reference anchor="ISO3166" target="https://www.iso.org/iso-3166-country-codes.html">
          <front>
            <title>ISO 3166 -- Country Codes</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date>n.d.</date>
          </front>
          <refcontent>as amended</refcontent>
        </reference>
        <reference anchor="ISO4217" target="https://www.iso.org/iso-4217-currency-codes.html">
          <front>
            <title>ISO 4217 -- Currency Codes</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date>n.d.</date>
          </front>
          <refcontent>as amended</refcontent>
        </reference>
        <reference anchor="ISO639" target="https://www.iso.org/iso-639-language-code">
          <front>
            <title>ISO 639 -- Language Code</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date>n.d.</date>
          </front>
          <refcontent>as amended</refcontent>
        </reference>
      </references>
    </references>
  </back>
</rfc>
