<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent" [
]>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="4"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc iprnotified="no"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" consensus="true" docName="draft-gould-regext-rdap-versioning-01" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="4" sortRefs="true" symRefs="true" version="3">
  <front>
    <title abbrev="Versioning in RDAP">Versioning in the Registration Data Access Protocol
    (RDAP)</title>
    <seriesInfo name="Internet-Draft" value="draft-gould-regext-rdap-versioning-01"/>
    <author fullname="James Gould" initials="J.G" surname="Gould">
      <organization>VeriSign, Inc.</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
          <country>US</country>
        </postal>
        <email>jgould@verisign.com</email>
        <uri>http://www.verisigninc.com</uri>
      </address>
    </author>
    <author fullname="Daniel Keathley" initials="D.K" surname="Keathley">
      <organization>VeriSign, Inc.</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
          <country>US</country>
        </postal>
        <email>dkeathley@verisign.com</email>
        <uri>http://www.verisigninc.com</uri>
      </address>
    </author>
    <author fullname="Mario Loffredo" initials="M." surname="Loffredo">
      <organization>IIT-CNR/Registro.it</organization>
      <address>
        <postal>
          <street>Via Moruzzi,1</street>
          <city>Pisa</city>
          <country>IT</country>
          <code>56124</code>
        </postal>
        <email>mario.loffredo@iit.cnr.it</email>
        <uri>http://www.iit.cnr.it</uri>
      </address>
    </author>

    <keyword>Version</keyword>
    <keyword>Versioning</keyword>
    <keyword>Extension</keyword>
    <abstract>
      <t>This document describes an RDAP extension for identifying RDAP extension
versions supported by the server, RDAP extension versions included in an RDAP
response, and enabling a client to specify the  desired RDAP extension
versions to include in an RDAP response using machine-parseable identifiers.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>RDAP supports identifying the RDAP extensions included in an RDAP response
  using the RDAP Conformance, defined in <xref target="RFC9083" section="4.1" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9083#section-4.1" derivedContent="RFC9083"/>.  The RDAP
  Conformance values of RDAP extensions can informally support versioning using
  a machine processable, opaque identifier, but there is no standard mechanism
  defined in <xref target="RFC9083" format="default"/> that exists to support structured, machine-parseable
  version signaling by the server.
  </t>
      <t>This document describes an RDAP extension for identifying RDAP extension
versions supported by the server, RDAP extension versions included in an RDAP
response, and enabling a client to specify the desired RDAP extension versions
to include in an RDAP response using machine-parseable identifiers.  The RDAP extension versions supported by the server is returned in an extension to the RDAP help response, defined
        in <xref target="RFC9083" section="7" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9083#section-7" derivedContent="RFC9083"/>, using
        the "versioning-help" member <xref target="versioning-help-member" format="default"/>.  The "versioning-help" member includes the list of supported extensions, using the RDAP Conformance identifiers with a list of supported versions, an indication of the default version,
        and optional links to the extension version documentation.  The RDAP extension versions included in an RDAP response are identified using the "versioning" member <xref target="versioning-member" format="default"/>.
        The "versioning" member includes a list of extensions, using the RDAP Conformance identifiers with the extension version included in the RDAP response.
        The client can specify the desired RDAP extension versions to include in the RDAP response with
        the "versioning" query parameter <xref target="versioning-rdap-query" format="default"/>.  The "versioning" query parameter is set with a list of extension version identifiers <xref target="extension-version-identifier" format="default"/>,
        delimeted by a comma (',').
      </t>
    </section>
    <section anchor="conventions" numbered="true" toc="default">
      <name>Conventions Used in This Document</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
      "MAY", and "OPTIONAL" in this document are to be interpreted as
      described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/>
      when, and only when, they
      appear in all capitals, as shown here.</t>
    </section>
    <section anchor="extension-version-identifier" numbered="true" toc="default">
      <name>Extension Version Identifier</name>
      <t>The Extension Version Identifier is the unique versioned extension identifier that is used for extension signaling by the server and by the client.
        The Extension Version Identifier uses the Extension Identifier, defined in <xref target="RFC7480" format="default"/>, along with the Extension Versioning defined in <xref target="extension-versioning" format="default"/>.
        The format of the Extension Version Identifier is defined in <xref target="extension-version-identifier-syntax" format="default"/>.</t>
      <section anchor="extension-versioning" numbered="true" toc="default">
        <name>Extension Versioning</name>
        <t>
          The Extension Versioning uses a subset of the Semantic Versioning <xref target="SemVer" format="default"/> rules, where the patch version, pre-release version, and build metadata are not used.
          RDAP versioning is only associated with changes to the protocol interface that is the public API of <xref target="SemVer" format="default"/>.  Only the <xref target="SemVer" format="default"/>
          major version and minor version are used for Extension Versioning.  The RDAP extension given a version number MAJOR.MINOR, increment the:</t>
          <ol>
            <li>MAJOR version when you make incompatible protocol interface changes</li>
            <li>MINOR version when you add functionality in a backwards compatible manner</li>
          </ol>
          <t>
          The following are the Extension Versioning rules based on modifications to the Semantic Versioning <xref target="SemVer" format="default"/> rules:</t>
          <ol>
            <li>A normal version MUST take the form X.Y where X.Y are non-negative integers, and MUST NOT contain leading zeroes.  X is the major version and Y is the minor version.  Each element MUST increase numerically.
              For instance: 1.1 -> 1.2 -> 1.3.</li>
            <li>Major version zero (0.y) is for initial definition.  Anything MAY change at any time.  The extension interface SHOULD NOT be considered stable.  An extension that is an initial Internet Draft prior to
              Working Group Last Call (WGLC) SHOULD use a zero major version.</li>
            <li>Version 1.0 defines the extension interface.  The way in which the version number is incremented after this is dependent on this extension interface and how it changes.  An extension
            that is an initial Internet Draft that has passed Working Group Last Call (WGLC) SHOULD use version 1.0.</li>
            <li>Minor version Y (x.Y | x > 0) MUST be incremented if new, backwards compatible interface changes are introduced in the extension interface.</li>
            <li>Major version X (X.y | X > 0) MUST be incremented if any backwards incompatible changes are introduced to the extension interface.  It MAY also include minor level changes.
              The minor version MUST be reset to 0 when major version is incremented.</li>
            <li>
              <t>Precedence refers to how versions are compared to each other when ordered.</t>
              <ol>
                <li>Precedence MUST be calculated by seperating the version into major and minor identifiers in that order.</li>
                <li>Precedence is determined by the first difference when comparing each of these identifiers from left to right as follows: Major and minor are always compared numerically.  Example: 1.0 &lt; 2.0 &lt; 2.1.</li>
              </ol>
            </li>
          </ol>
        </section>
      <section anchor="extension-version-identifier-syntax" numbered="true" toc="default">
        <name>Extension Version Identifier Syntax</name>
        <t>The Augmented Backus-Naur Form (ABNF) grammar <xref target="RFC5234" format="default"></xref> format for the Extension Version Identifier is below, with
        the "identifier" rule matching the Extension Identifer in <xref target="RFC7480" format="default"/> and returned in the "rdapConformance" data structure of <xref target="RFC7483" format="default"/>:</t>
        <figure anchor="extension-version-identifier-abnf" align="left" suppress-title="false" pn="figure-1">
        <name>Extension Version Identifier ABNF</name>
        <sourcecode type="abnf">
extension-version-identifier = identifier ["-" major "." minor]
identifier = ALPHA *( ALPHA / DIGIT / "_")
major = numeric-identifer
minor = numeric-identifer
numeric-identifer = "0" / positive-digit *DIGIT
positive-digit = %x31-39 ; 1-9
        </sourcecode>
        </figure>
        <t>Example Extension Version Identifiers:</t>
         <dl newline="true" indent="4">
           <dt>"versioning-0.0"</dt>
           <dd>Initial "versioning" extension version identifier that is not considered stable.</dd>
           <dt>"ext1-1.0"</dt>
           <dd>First stable version of the "ext1" extension.</dd>
           <dt>"ext1-1.1"</dt>
           <dd>Backward compatible change to the "ext1-1.0" extension version identifier.</dd>
           <dt>"ext1-2.0"</dt>
           <dd>Incompatible change to the "ext1-1.0" or "ext1-1.1" extension version identifier.</dd>
         </dl>
      </section>
      <section anchor="profile-extension-versioning-considerations" numbered="true" toc="default">
        <name>Profile Extension Versioning Considerations</name>
        <t>Profile extensions represent existing entries in the RDAP Extensions Registry, defined
          in <xref target="RFC7480" section="8.1" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc7480#section-8.1" derivedContent="RFC7480"/>,
          that embed versioning information to signal policy
          implementation by the server.  The RDAP Extensions Registry was not designed to support versioning, so the profile extensions represent a corner case that can be
          better handled using this extension.  Examples include "icann_rdap_response_profile_0" and "icann_rdap_technical_implementation_guide_0", where
          the version "0" is included as a suffix of the extension identifier.  The goal for the "versioning" extension is to handle the versioning consistently for
          all RDAP extensions, so the Extension Version Identifier MAY duplicate some of the version information included in the extension identifier initially.
          For example, for the extension identifier "icann_rdap_response_profile_0", the recommendation is to set the Extension Version Identifier of the "icann_rdap_response_profile_0"
          extension identifier to "icann_rdap_response_profile_0-1.0" to reflect it as the first stable version.  Similarly, a future "icann_rdap_response_profile_1" extension
          identifier would have the Extension Version Identifier set to "icann_rdap_response_profile_1-2.0".</t>
        <t>The profile extension identifiers can be transitioned to leverage this extension to fully handle the versioning of the extension by removing the versioning information
          from the extension identifiers and consolidating a set of profile extension identifiers with a single profile extension identifier.  For example, the set of profile extension identifiers "icann_rdap_response_profile_0" and "icann_rdap_response_profile_1" can
          be consolidated to the single extension identifier "icann_rdap_response_profile" and the "versioning" extension can include the Extension Version Identifier values of "icann_rdap_response_profile-1.0" and "icann_rdap_response_profile-2.0".
          Embedding of versioning into the extension identifers was the only option available prior to the use of the "versioning" extension, which can be used to signal the versioning of
          all RDAP extensions.</t>
      </section>
    </section>
    <section anchor="versioning-extension-version-identifier" numbered="true" toc="default">
      <name>Versioning Extension Version Indentier</name>
      <t>The <xref target="extension-version-identifier" format="default">Extension Version Identifier</xref> associated with this version of the "versioning" extension is "versioning-0.1".</t>
    </section>
    <section anchor="versioning-rdap-query" numbered="true" toc="default">
      <name>Versioning RDAP Query Parameter</name>
      <t>This specification describes an OPTIONAL "versioning" query parameter for use with RDAP queries
      to specify the version of the RDAP extensions to include in the RDAP response.  The "versioning" query parameter
      is a list of one or more Extension Version Identifiers, as defined in <xref target="extension-version-identifier" format="default"/>, seperated by commas.
      The Augmented Backus-Naur Form (ABNF) grammar <xref target="RFC5234" format="default"></xref> format for the "versioning" query parameter, using the "extension-version-identifier" rule from
      <xref target="extension-version-identifier-abnf" format="default"/>, is:</t>
     <figure anchor="versioning-parameter-syntax" align="left" suppress-title="false" pn="figure-2">
      <name>Versioning Query Parameter ABNF</name>
<sourcecode type="abnf">
versioning = "versioning="
  extension-version-identifier *("," extension-version-identifier)
</sourcecode>
     </figure>
     <t>To bootstrap the use of the "versioning" extension, the client SHOULD use the "versioning" query parameter with the desired version of the "versioning" extension; otherwise it will be up to
       server policy what version of the "versioning" extension to return in the RDAP response.</t>

    <t>Example RDAP queries using the "versioning" query parameter:</t>
     <dl newline="true" indent="4">
       <dt>https://example.com/rdap/help?versioning=versioning-0.0</dt>
       <dd>Help query using extension "versioning-0.0".  The response can be found in figure <xref target="help-response-versioning-0.0"/>.</dd>
       <dt>https://example.com/rdap/domain/versioning.example?versioning=ext1-0.1</dt>
       <dd>Domain query using extension "ext1-0.1".   The response can be found in figure <xref target="domain-response-ext1-0.1"/>.</dd>
       <dt>https://example.com/rdap/domain/versioning.example?versioning=ext1-0.1,versioning-0.0</dt>
       <dd>Domain query using extensions "ext1-0.1" and "versioning-0.0".   The response can be found in figure <xref target="domain-response-ext1-0.1-and-versioning-0.0"/>.</dd>
     </dl>


    </section>
    <section anchor="versioning-rdap-response" numbered="true" toc="default">
      <name>Versioning RDAP Response</name>
      <section anchor="rdap-conformance" numbered="true" toc="default">
        <name>RDAP Conformance</name>
        <t>RDAP responses that contain values described in this document MUST
           indicate conformance with this specification by including an
           &quot;rdapConformance&quot; (<xref target="RFC9083" format="default"/>) value of &quot;versioning&quot;.
           The &quot;versioning&quot; extension identifier is described in <xref target="rdap-extensions-registry" format="default"/>.</t>
           <t>Example &quot;rdapConformance&quot; member with the versioning extension:</t>
<figure anchor="rdapConformance-with-versioning" align="left" suppress-title="false" pn="figure-3">
  <name>&quot;rdapConformance&quot; with Versioning Extension</name>
  <sourcecode type="json" markers="false">
"rdapConformance": [
  "rdap_level_0",
  "versioning"
]
  </sourcecode>
</figure>
      </section>
      <section anchor="versioning-help-member" numbered="true" toc="default">
        <name>&quot;versioning-help&quot; Member</name>
        <t>The &quot;versioning-help&quot; member MUST be added to a response of a RDAP help query, defined in <xref target="RFC9082" format="default"/>, to indicate the RDAP extensions that are supported by the server.
          The &quot;versioning-help&quot; member contains an array of extension objects with the following child members:</t>
        <dl newline="false" indent="4">
          <dt>"extension":</dt>
          <dd>The Extension Identifer, defined in <xref target="RFC7480" format="default"/>, and returned in the "rdapConformance" data structure of <xref target="RFC7483" format="default"/>.  An example is the "versioning" extension identifier.</dd>
          <dt>"versions":</dt>
          <dd>
              <t>An array of extension version objects with the following child members:</t>
              <dl newline="false" indent="4">
                <dt>"version:"</dt>
                <dd>The Extension Version Identifier, defined in <xref target="extension-version-identifier" format="default"/>.
                An example is the "versioning-0.1" extension version identifier.</dd>
                <dt>"default:"</dt>
                <dd>OPTIONAL boolean value indicating which of the extension version objects is the default returned by the server
                  when the client doesn't specify the version using the "versioning" query parameter, defined in <xref target="versioning-rdap-query" format="default"/>.
                  When there is a single extension version object, then the "default" member value is true by default.  When there is more than one extension version object,
                  the server MUST include one extension version object with the "default" member set to true, and the remaining extension version objects "default" member value
                  is false by default.</dd>
                <dt>"start:"</dt>
                <dd>OPTIONAL date and time that the extension version will be supported.  When the member is not included, the extension version object is supported.
                  Once the date and time has passed, the "start" member MUST be removed.  The syntax for the date and time is defined in <xref target="RFC3339" format="default"/>.</dd>
                <dt>"end:"</dt>
                <dd>OPTIONAL date and time that the extension version will stop being supported.  When the member is not included, the extension version object has no planned support expiry.
                  Once the date and time has passed, the extension version object MUST be removed and the extension object MUST be removed if the last extension version object is removed.
                  The syntax for the date and time is defined in <xref target="RFC3339" format="default"/>.</dd>
                <dt>"links:"</dt>
                <dd>
                    <t>OPTIONAL "links" array to extension version documentation.  The relationship of these links is defined by the IANA registry described in <xref target="RFC8288" format="default"/>.
                    The JSON name/values of "rel", "href", "hreflang", "title", "media", and "type" correspond to values found in <xref target="RFC8288" section="3" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8288#section-3" derivedContent="RFC8288"/>.
                    The "value", "rel", and "href" JSON values MUST be specified.  All other JSON values are OPTIONAL.</t>
                    <t>Example "links" member for the "ext2-0.1" extension version identifier:</t>
                    <figure anchor="links-example" align="left" suppress-title="false" pn="figure-7">
                      <name>Example of "links" Member</name>
                      <sourcecode type="json" markers="false">
"links": [
  {
    "value": "https://ext2.example/doc/html/ext2-01.txt",
    "rel": "describedby",
    "href": "https://ext2.example/doc/html/ext2-01.txt",
    "type": "text/plain"
  }
]
                      </sourcecode>
                    </figure>
                </dd>
              </dl>
          </dd>
        </dl>

<t>Example help response with "versioning-help" and "versioning" members and no client specified versioning
  in the help query "https://example.com/rdap/help":</t>
<figure anchor="help-response-default" align="left" suppress-title="false" pn="figure-8">
  <name>RDAP Help Response with No Client Specified Versioning</name>
  <sourcecode type="json" markers="false">
{
  "rdapConformance": [
    "rdap_level_0",
    "versioning"
  ],
  "versioning-help": [
    {
      "extension": "versioning",
      "versions": [
        {
          "version": "versioning-0.0"
        },
        {
          "version": "versioning-0.1",
          "default": true
        }
      ]
    },
    {
      "extension": "ext1",
      "versions": [
        {
          "version": "ext1-0.1",
          "end": "2022-12-31T23:59:59Z"
        },
        {
          "version": "ext1-1.0",
          "default": true
        },
        {
          "version": "ext1-1.1",
          "start": "2022-12-31T23:59:59Z"
        }
      ]
    },
    {
      "extension": "ext2",
      "versions": [
        {
          "version": "ext2-0.1",
          "end": "2022-12-31T23:59:59Z",
          "links": [
            {
              "value": "https://ext2.example/doc/html/ext2-01.txt",
              "rel": "describedby",
              "href": "https://ext2.example/doc/html/ext2-01.txt",
              "type": "text/plain"
            }
          ]
        }
      ]
    },
    {
      "extension": "ext3",
      "versions": [
        {
          "version": "ext3-1.0",
          "start": "2022-12-31T23:59:59Z"
        }
      ]
    }
  ],
  "versioning": [
    {
      "extension": "versioning",
      "version": "versioning-0.1"
    }
  ]
}
  </sourcecode>
</figure>


<t>Example help response with the "versioning-help" and "versioning" members and client specified "versioning-0.0" extension version
  in the help query "https://example.com/rdap/help?versioning=versioning-0.0".  The "versioning-0.0" extension version does
  not include support for the "default" member and uses the "ext" member instead of the "extension" member.</t>
<figure anchor="help-response-versioning-0.0" align="left" suppress-title="false" pn="figure-9">
  <name>RDAP Help Response with "versioning-0.0" Extension Version</name>
  <sourcecode type="json" markers="false">
{
  "rdapConformance": [
    "rdap_level_0",
    "versioning"
  ],
  "versioning-help": [
    {
      "ext": "versioning",
      "versions": [
        {
          "version": "versioning-0.0"
        },
        {
          "version": "versioning-0.1"
        }
      ]
    },
    {
      "ext": "ext1",
      "versions": [
        {
          "version": "ext1-0.1",
          "end": "2022-12-31T23:59:59Z"
        },
        {
          "version": "ext1-1.0"
        },
        {
          "version": "ext1-1.1",
          "start": "2022-12-31T23:59:59Z"
        }
      ]
    },
    {
      "ext": "ext2",
      "versions": [
        {
          "version": "ext2-0.1",
          "end": "2022-12-31T23:59:59Z",
          "links": [
            {
              "value": "https://ext2.example/doc/html/ext2-01.txt",
              "rel": "describedby",
              "href": "https://ext2.example/doc/html/ext2-01.txt",
              "type": "text/plain"
            }
          ]
        }
      ]
    },
    {
      "ext": "ext3",
      "versions": [
        {
          "version": "ext3-1.0",
          "start": "2022-12-31T23:59:59Z"
        }
      ]
    }
  ],
  "versioning": [
    {
      "ext": "versioning",
      "version": "versioning-0.0"
    }
  ]
}
  </sourcecode>
</figure>

      </section>
      <section anchor="versioning-member" numbered="true" toc="default">
        <name>&quot;versioning&quot; Member</name>
        <t>The &quot;versioning&quot; member MUST be added to the RDAP response when
        there is one or more RDAP extension fields.  The &quot;versioning&quot; member is included as a member of the object class in a lookup response, such as the object classes defined in <xref target="RFC9083" format="default"/>, and
        as a member of the object instances in a search response, such as the object instances defined in <xref target="RFC9083" format="default"/>.  The &quot;versioning&quot; member contains an array
        of versioning objects with the following child members:</t>
        <dl newline="false" indent="4">
          <dt>"extension":</dt>
          <dd>The Extension Identifer, defined in <xref target="RFC7480" format="default"/>, and returned in the "rdapConformance" data structure of <xref target="RFC7483" format="default"/>.  An example is the "versioning" extension identifier.</dd>
          <dt>"version":</dt>
          <dd>The Extension Version Identifier, defined in <xref target="extension-version-identifier" format="default"/>, that is included in the response.  An example is the "versioning-0.1" extension version identifier.</dd>
        </dl>

<t>Example domain lookup response with "versioning" member and no client specified versioning
  in the lookup query "https://example.com/rdap/domain/versioning.example":</t>
<figure anchor="domain-response-default" align="left" suppress-title="false" pn="figure-4">
  <name>RDAP Domain Lookup Response with No Client Specified Versioning</name>
  <sourcecode type="json" markers="false">
{
  "rdapConformance": [
    "rdap_level_0",
    "versioning",
    "ext1",
    "ext2"
  ],
  "objectClassName": "domain",
  "handle": "XXXX",
  "ldhName": "versioning.example",
  "links": [
    {
      "value": "https://example.net/domain/versioning.example",
      "rel": "self",
      "href": "https://example.net/domain/versioning.example",
      "type": "application/rdap+json"
    }
  ],
  "status": [
    "ok"
  ],
  "events": [
    {
      "eventAction": "registration",
      "eventDate": "1990-12-31T23:59:59Z"
    },
    {
      "eventAction": "expiration",
      "eventDate": "2023-12-31T23:59:59Z"
    }
  ],
  "ext1": {
    "value": "example 1",
    "newoptionalstring": "new value"
  },
  "ext2": {
    "name": "example 2"
  },
  "versioning": [
    {
      "extension": "versioning",
      "version": "versioning-0.1"
    },
    {
      "extension": "ext1",
      "version": "ext1-1.0"
    },
    {
      "extension": "ext2",
      "version": "ext2-0.1"
    }
  ]
}
  </sourcecode>
</figure>

<t>Example domain lookup response with "versioning" member and client specified "ext1-0.1" extension version
  in the lookup query "https://example.com/rdap/domain/versioning.example?versioning=ext1-0.1":</t>
<figure anchor="domain-response-ext1-0.1" align="left" suppress-title="false" pn="figure-5">
  <name>RDAP Domain Lookup Response with "ext1-0.1" Extension Version</name>
  <sourcecode type="json" markers="false">
{
  "rdapConformance": [
    "rdap_level_0",
    "versioning",
    "ext1",
    "ext2"
  ],
  "objectClassName": "domain",
  "handle": "XXXX",
  "ldhName": "versioning.example",
  "links": [
    {
      "value": "https://example.net/domain/versioning.example",
      "rel": "self",
      "href": "https://example.net/domain/versioning.example",
      "type": "application/rdap+json"
    }
  ],
  "status": [
    "ok"
  ],
  "events": [
    {
      "eventAction": "registration",
      "eventDate": "1990-12-31T23:59:59Z"
    },
    {
      "eventAction": "expiration",
      "eventDate": "2023-12-31T23:59:59Z"
    }
  ],
  "ext1": {
    "value": "example 1"
  },
  "ext2": {
    "name": "example 2"
  },
  "versioning": [
    {
      "extension": "versioning",
      "version": "versioning-0.1"
    },
    {
      "extension": "ext1",
      "version": "ext1-0.1"
    },
    {
      "extension": "ext2",
      "version": "ext2-0.1"
    }
  ]
}
  </sourcecode>
</figure>

<t>Example domain lookup response with "versioning" member and client specified "ext1-0.1" and "versioning-0.0" extension versions
  in the lookup query "https://example.com/rdap/domain/versioning.example?versioning=ext1-0.1,versioning-0.0":</t>
<figure anchor="domain-response-ext1-0.1-and-versioning-0.0" align="left" suppress-title="false" pn="figure-6">
  <name>RDAP Domain Lookup Response with "ext1-0.1" and "versioning-0.0" Extension Versions</name>
  <sourcecode type="json" markers="false">
{
  "rdapConformance": [
    "rdap_level_0",
    "versioning",
    "ext1",
    "ext2"
  ],
  "objectClassName": "domain",
  "handle": "XXXX",
  "ldhName": "versioning.example",
  "links": [
    {
      "value": "https://example.net/domain/versioning.example",
      "rel": "self",
      "href": "https://example.net/domain/versioning.example",
      "type": "application/rdap+json"
    }
  ],
  "status": [
    "ok"
  ],
  "events": [
    {
      "eventAction": "registration",
      "eventDate": "1990-12-31T23:59:59Z"
    },
    {
      "eventAction": "expiration",
      "eventDate": "2023-12-31T23:59:59Z"
    }
  ],
  "ext1": {
    "value": "example 1"
  },
  "ext2": {
    "name": "example 2"
  },
  "versioning": [
    {
      "ext": "versioning",
      "version": "versioning-0.0"
    },
    {
      "ext": "ext1",
      "version": "ext1-0.1"
    },
    {
      "ext": "ext2",
      "version": "ext2-0.1"
    }
  ]
}
  </sourcecode>
</figure>

      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="rdap-extensions-registry" numbered="true" toc="default">
        <name>RDAP Extensions Registry</name>
        <t>IANA is requested to register the following value in the RDAP
           Extensions Registry:</t>
        <dl newline="false" spacing="compact">
          <dt>Extension identifier:</dt>
      	  <dd>versioning</dd>
          <dt>Registry operator:</dt>
      	  <dd>Any</dd>
          <dt>Published specification:</dt>
      	  <dd>This document.</dd>
          <dt>Contact:</dt>
      	  <dd>IESG &lt;iesg@ietf.org&gt;</dd>
          <dt>Intended usage:</dt>
      	  <dd>This extension identifies RDAP extension versioning.</dd>
        </dl>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The RDAP extensions available to clients can be subject to server disclosure and authorization
      policies.  Inclusion of available RDAP extensions and their available versions in the "versioning-help" member,
      defined in <xref target="versioning-help-member" format="default"/>, of the RDAP help response and inclusion
      of the RDAP extensions in the RDAP response with the "versioning" member,
      defined in <xref target="versioning-member" format="default"/>,
      can be dependent on authentication and authorization of the client by the server.
    </t>
    </section>
    <section anchor="Acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>The authors wish to thank the following persons for their feedback and suggestions:
        <contact fullname="Scott Hollenbeck"/>,
        <contact fullname="Andy Newton"/>,
        and <contact fullname="Jasdip Singh"/>.
      </t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>

      <references>
        <name>Normative References</name>
          <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
          <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml"/>
          <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml"/>
          <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7480.xml"/>
          <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7483.xml"/>
          <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
          <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8288.xml"/>
          <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9082.xml"/>
          <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.9083.xml"/>
      </references>

      <references>
        <name>Informative References</name>

        <reference anchor='SemVer'
                   target='https://github.com/semver/semver/blob/8b2e8eec394948632957639dfa99fc7ec6286911/semver.md'>
          <front>
            <title>Semantic Versioning 2.0.0 (text from June 19, 2020)</title>
            <author/>
           <date/>
          </front>
        </reference>

      </references>

    </references>
    <section numbered="true" toc="default">
      <name>Change History</name>
      <section anchor="change-00-to-01" numbered="true" toc="default">
        <name>Change from 00 to 01</name>
         <ol spacing="compact" type="1">
          <li>Updated the Abstract to reference the use of machine-parseable identifiers.</li>
          <li>Updated the Introduction to reference the informal support for versioning in RFC9083.</li>
          <li>Removed rule "An extension using Extension Versioning MUST declare the extension in a specification." from Section 3.1 "Extension Versioning".</li>
        </ol>
     </section>
    </section>
  </back>
</rfc>
