One document matched: draft-ietf-weirds-json-response-01.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "http://xml.resource.org/authoring/rfc2629.dtd"
[
<!ENTITY RFC0791 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.0791.xml'>
<!ENTITY RFC1166 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1166.xml'>
<!ENTITY RFC2616 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2616.xml'>
<!ENTITY RFC3339 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3339.xml'>
<!ENTITY RFC3730 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3730.xml'>
<!ENTITY RFC3912 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3912.xml'>
<!ENTITY RFC3986 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3986.xml'>
<!ENTITY RFC4034 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4034.xml'>
<!ENTITY RFC4343 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4343.xml'>
<!ENTITY RFC4627 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4627.xml'>
<!ENTITY RFC5322 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5322.xml'>
<!ENTITY RFC5396 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5396.xml'>
<!ENTITY RFC5646 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5646.xml'>
<!ENTITY RFC5952 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5952.xml'>
<!ENTITY RFC5988 PUBLIC ''
   'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5988.xml'>
]>
<?rfc toc="true"?>
<rfc category="std" docName="draft-ietf-weirds-json-response-01" ipr="trust200902">
    <front>
        <title abbrev="RDAP JSON RESPONSES">JSON Responses for the Registration Data Access Protocol
            (RDAP)</title>
        <author fullname="Andrew Lee Newton" initials="A.L." surname="Newton">
            <organization abbrev="ARIN">American Registry for Internet Numbers</organization>
            <address>
                <postal>
                    <street>3635 Concorde Parkway</street>
                    <city>Chantilly</city>
                    <region>VA</region>
                    <country>US</country>
                    <code>20151</code>
                </postal>
                <email>andy@arin.net</email>
                <uri>http://www.arin.net</uri>
            </address>
        </author>
        <author initials="S." surname="Hollenbeck" fullname="Scott Hollenbeck">
            <organization>Verisign Labs</organization>
            <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
          <country>US</country>
        </postal>
        <email>shollenbeck@verisign.com</email>
        <uri>http://www.verisignlabs.com/</uri>
      </address>
        </author>



        <date/>
        <abstract>
            <t> This document describes JSON data structures representing registration information
                maintained by Regional Internet Registries (RIRs) and Domain Name Registries (DNRs).
                These data structures are used to form Registration Data Access Protocol (RDAP)
                query responses. </t>
        </abstract>
    </front>
    <middle>
        <section title="Introduction">
            <t> This document describes responses in the <xref target="RFC4627">JSON</xref> format
                for the RESTful web queries as defined by <xref target="I-D.ietf-weirds-rdap-query"
                    >UNIFIED-RDAP-QUERY</xref>. </t>
            <t> The data model for the responses consists of two major categories: responses
                returned by Regional Internet Registries (RIRs) for registrations data related to IP
                addresses, reverse DNS names, and Autonomous System numbers; and responses returned
                by Domain Name Registries (DNRs) for registration data related to forward DNS names.
                Where overlap exists between RIR and DNR response object classes, the RIR object
                classes are a proper subset of the DNR object classes. The current division between
                RIR and DNR object classes is given to illustrate an expectation of what data may be
                expected from an RIR vs a DNR. However, implementers should be aware that RIRs are
                not limited to the data in the RIR object classes (as an example, some RIRs have a
                notion of "status" for entities as defined in the DNR entity object class and may at
                some point start publishing that data). </t>

            <t> Object classes defined in this document do not represent the full range of data that
                any registry may wish to publish. <xref target="json_naming"/> defines a JSON
                extension mechanism that maybe used by registries to insert registry specific data
                values. </t>
        </section>
        <section title="Terminology and Definitions" anchor="terminology_definitions">
            <t>The following list describes terminology and definitions used throughout this
                document: <list style="hanging" hangIndent="18">
                    <t hangText="DNR:">"Domain Name Registry".</t>
                    <t hangText="member:">data found with in an object as defined by <xref
                            target="RFC4627">JSON</xref>.</t>
                    <t hangText="object:">a data structure as defined by <xref target="RFC4627"
                            >JSON</xref>.</t>
                    <t hangText="object class:">the definition of members that may be found in JSON
                        objects described in this document.</t>
                    <t hangText="object instance:">an instantiation or specific instance of an
                        object class.</t>
                    <t hangText="RDAP:">"Registration Data Access Protocol".</t>
                    <t hangText="RIR:">"Regional Internet Registry".</t>
                </list>
            </t>
        </section>
        <section title="Common Data Types" anchor="common_data_types">
            <t><xref target="RFC4627">JSON</xref> defines the data types of a number, character
                string, boolean, array, object and null. This section describes the semantics and/or
                syntax reference for data types used in this document derived from the JSON
                character string.</t>
            <t>
                <list style="hanging">
                    <t hangText="'handle': ">DNRs and RIRs have registry-unique identifiers that may
                        be used to specifically reference an object instance. The semantics of this
                        data type as found in this document is to be a registry-unique reference to
                        the closest enclosing object where the value is found. The data type names
                        'registryId', 'roid', 'nic-handle', 'registrationNo', etc... are terms often
                        synonymous with this data type. In this document, the term 'handle' is used.
                        The term exposed to users by clients is a presentation issue beyond the
                        scope of this document.</t>
                    <t hangText="IPv4 addresses: ">The representation of IPv4 addresses in this
                        document uses the dotted-decimal notation described in <xref
                            target="RFC1166"/>. An example of this textual representation is
                        '192.0.2.0'.</t>
                    <t hangText="IPv6 addresses: ">The representation of IPv6 addresses in this
                        document follow the forms outlined in <xref target="RFC5952"/>. An example
                        of this textual representation is '2001:db8::1:0:0:1'.</t>
                    <t hangText="country codes: ">Where the identity of a geopolitical nation or
                        country is needed, these identities are represented with the alpha-2 or 2
                        character country code designation as defined in <xref
                            target="ISO.3166.1988"/>. The alpha-2 representation is used because it
                        is freely available whereas the alpha-3 and numeric-3 standards are not.</t>
                    <t hangText="domain names: ">Textual representations of DNS names follow the
                        rules set forth in <xref target="RFC4343"/>, specifically the case
                        insensitivity and character escaping rules. Trailing periods are optional
                        for both input and output.</t>
                    <t hangText="email addresses: ">Textual representations of email addresses
                        follow the syntax defined in <xref target="RFC5322"/>.</t>
                    <t hangText="dates and times: ">The syntax for values denoting dates and times
                        is defined in <xref target="RFC3339"/>.</t>
                    <t hangText="URIs: ">The syntax for values denoting a Uniform Resource
                        Identifier (URI) is defined by <xref target="RFC3986"/>.</t>
                </list>
            </t>
            <t> Many of the object classes defined in this document contain values representing
                telephone numbers. Servers are encouraged to provide those telephone numbers in
                    <xref target="E164"/> format, however clients MUST be prepared for telephone
                numbers that do not adhere to the <xref target="E164"/> standard. </t>
            <t> Postal addresses also appear in some of the object classes. This document specifies
                no standard for postal addresses as many registries would have to undergo severe
                data cleanup efforts to meet such standards. </t>
        </section>
        <section title="Use of JSON">
            <section title="Signaling">
                <t> Clients may signal their desire for JSON using the "application/json" media type
                    or the more specific media type "application/rdap" as specified in <xref
                        target="iana_considerations"/>. </t>
            </section>
            <section title="Naming" anchor="json_naming">
                <t> Clients processing <xref target="RFC4627">JSON</xref> responses SHOULD ignore
                    values associated with unrecognized names. Servers MAY insert values signified
                    by names into the JSON responses which are not specified in this document.
                    Insertion of unspecified values into JSON responses SHOULD have names prefixed
                    with a short identifier followed by an underscore followed by a meaningful name.
                    The full JSON name, the prefix plus the underscore plus the meaningful name,
                    SHOULD adhere to the character and name limitations of the prefix registry
                    described in <xref target="I-D.ietf-weirds-using-http"/>.</t>
                <figure anchor="json_example_no_extra_values">
                    <preamble> Consider the following JSON response with JSON names. "handle" and
                        "remarks" are JSON names specified in this document. </preamble>
                    <artwork xml:space="preserve">
{
    "handle" : "ABC123",
    "remarks" : 
    [
      "she sells seas shells",
      "down by the seashore"
    ]
}                        
                </artwork>
                </figure>
                <t> If The Registry of the Moon desires to express information not found in this
                    specification, it might select "lunarNic" as its identifying prefix and insert,
                    as an example, the name "lunarNic_beforeOneSmallStep" to signify registrations
                    occuring before the first moon landing and the name
                    "lunarNic_harshMistressNotes" containing other descriptive text. </t>
                <figure anchor="json_example_with_extra_values">
                    <preamble> Consider the following JSON response with JSON names, some of which
                        should be ignored by clients without knowledge of their meaning. </preamble>
                    <artwork xml:space="preserve">
{
  "handle" : "ABC123",
  "lunarNic_beforeOneSmallStep" : "TRUE THAT!",
  "remarks" : 
  [
    "she sells seas shells",
    "down by the seashore"
  ],
  "lunarNic_harshMistressNotes" : 
  [
    "In space,",
    "nobody can hear you scream."
  ]
}                        
                </artwork>
                </figure>
                <t> Insertion of unrecognized names ignored by clients may also be used for future
                    revisions to this specification. </t>
                <t> Clients processing JSON responses MUST be prepared for values specified in this
                    document to be absent from a response as no JSON value listed is required to
                    appear in a response. In other words, servers MAY remove values as is needed by
                    the policies of the server operator.</t>
            </section>
        </section>

        <section title="Common Data Structures">
            <t> This section defines three common data structures to be used in respones. Each of
                these datatypes MAY appear within any object class of a response, but the intended
                purpose is that they will be mostly used in the top-most object class of a response. </t>
            <section title="RDAP Conformance" anchor="rdap_conformance">
                <t> The first data structure is named "rdapConformance" and is simply an array of
                    strings, each providing a hint as to the specifications used in the construction
                    of the response. </t>
                <figure anchor="rdapConformance">
                    <preamble>An example rdapConformance data structure.</preamble>
                    <artwork xml:space="preserve">
"rdapConformance" : 
[
  "rdap_level_0"
]
                </artwork>
                </figure>
                <t>
                    The string literal "rdap_level_0" signifies conformance with this specification.
                    When custom JSON values are inserted into responses, conformance to those custom
                    specifications should use a string prefixed with the appropriate identifier from
                    the IANA prefix identifier registry specified in <xref target="I-D.ietf-weirds-using-http"></xref>.
                    For example, if the fictional Registry of the Moon want to signify that their
                    JSON responses are conformant with their registered extensions, the string used
                    might be "lunarNIC_level_0".
                </t>
                <figure anchor="rdapConformance_lunarNic">
                    <preamble>Example rdapConformance structure with custom extensions noted.</preamble>
                    <artwork xml:space="preserve">
"rdapConformance" : 
[
  "rdap_level_0",
  "lunarNic_level_0"
]
                </artwork>
                </figure>
            </section>
            <section title="Notices" anchor="notices">
                <t> The second data structure is named "notices" and is an array of objects. Each
                    object contains a "title" string representing the title of the notice object, an
                    array of strings named "description" for the purposes of conveying any
                    descriptive text about the notice, and an optional "links" object as described
                    in <xref target="object_class_links"/>. </t>
                <figure anchor="notices_example">
                    <preamble>An exmaple of the notices data structure.</preamble>
                    <artwork xml:space="preserve">
"notices" : 
[
  {
    "title" : "Terms of Use",
    "description" : 
    [
      "This service is subject to The Registry of the Moons",
      "terms of service."
    ],
    "links" : 
    [
      {
        "value" : "http://example.net/entity/XXXX"
        "rel" : "alternate",
        "type" : "text/html",
        "href" : "http://www.example.com/terms_of_use.html"
      }
    ]
  }
]
                </artwork>
                </figure>
            </section>
            <section title="Language Identifier" anchor="language_identifier">
                <t> The third data structure is a simple JSON name/value of "lang" with a string
                    containing a language identifier as described by <xref target="RFC5646"/>. </t>
                <figure anchor="language_example">
                    <artwork xml:space="preserve">
"lang" : "mn-Cyrl-MN"
                </artwork>
                </figure>
            </section>
            <section title="An Example">
                <figure anchor="json_example_with_notices_and_rdapConformance">
                    <preamble> This is an example response with both rdapConformance and notices
                        embedded. </preamble>
                    <artwork xml:space="preserve">                    
{
  "rdapConformance" : 
  [
    "rdap_level_0"
  ]
  "notices" : 
  [
    {
      "title" : "Content Redacted",
      "description" : 
      [
        "Without full authorization, content has been redacted.",
        "Sorry, dude!"
      ],
      "links" : 
      [
        {
          "value" : "http://example.net/ip/192.0.2.0/24"
          "rel" : "alternate",
          "type" : "text/html",
          "href" : "http://www.example.com/redaction_policy.html"
        }
      ]
    }
  ]
  "lang" : "en"
  "startAddress" : "192.0.2.0",
  "endAddress" : "192.0.2.255",
  "handle" : "XXXX-RIR",
  "ipVersion" : 4,
  "name": "NET-RTR-1",
  "description" : [ "A network used for example documentation" ],
  "parentHandle" : "YYYY-RIR",
  "remarks" : 
  [
    "she sells seas shells",
    "down by the seashore"
  ]
}                        
                </artwork>
                </figure>
            </section>
        </section>
        <section title="Object Class Links" anchor="object_class_links">
            <t> Each object class defined in this document may have links to other resources on the
                Internet. The relationship of these links is defined by the IANA registry described
                by <xref target="RFC5988"/>. </t>
            <figure>
                <preamble>The following is an example of the link structure of object
                    classes</preamble>
                <artwork xml:space="preserve">
    {
      "value" : "http://example.com/context_uri",
      "rel" : "self",
      "href" : "http://example.com/target_uri",
      "hreflang" : [ "en, "ch" ],
      "title" : [ "title1", "title2" ],
      "media" : "screen",
      "type" : "application/json"
    }
                </artwork>
            </figure>
            <t> The JSON name/values of "rel", "href", "hreflang", "title", "media", and "type"
                correspond to values found in Section 5 of <xref target="RFC5988"/>. The "value"
                JSON value is the context URI as described by <xref target="RFC5988"/>. The "value",
                "rel", and "href" JSON values MUST be specified. All other JSON values are optional. </t>
            <t> Within an object class, these structures are to be in an array named "links". </t>
            <figure>
                <preamble>This is an example of the "links" array as it might be found in an object
                    class.</preamble>
                <artwork xml:space="preserve">
    "links" :
    [
        {
          "value" : "http://example.com/ip/2001:db8::123",
          "rel" : "self",
          "href" : "http://example.com/ip/2001:db8::123",
        },
        {
          "value" : "http://example.com/ip/2001:db8::123",
          "rel" : "up",
          "href" : "http://example.com/ip/2001:db8::/48",
        }

    ]
                </artwork>
            </figure>
        </section>
        <section title="The Entity Object Class" anchor="entity_object_class">
            <t> The entity object class appears throughout this document and is an appropriate
                response for the /entity/XXXX query defined in <xref
                    target="I-D.ietf-weirds-rdap-query">UNIFIED-RDAP-QUERY</xref>. This object class
                represents the information of organizations, corporations, governments, non-profits,
                clubs, individual persons, and informal groups of people. All of these
                representations are so similar that it is best to represent them in <xref
                    target="RFC4627">JSON</xref> with one construct, the entity object class, to aid
                in the re-use of code by implementers. </t>
            <t> Many of the members of the entity object class are repeated in other object classes
                described later in this document. </t>
            <section title="The RIR Entity Object Class" anchor="rir_entity_object_class">
                <figure>
                    <preamble>The following is an example of an RIR entity:</preamble>
                    <artwork xml:space="preserve">
                    
    {
      "handle" : "XXXX",
      "entityNames": [ "Joe Bob, Inc.", "Bobby Joe Shopping" ],
      "roles" : [ "registrant" ],
      "postalAddress" : 
      [
        "123 Maple Ave",
        "Suite 90001",
        "Vancouver",
        "BC",
        "12393"
      ],
      "emails" : [ "joe@bob.com", "bob@joe.com" ],
      "phones" : 
      {
        "office" : [ "1-958-555-4321", "1-958-555-4322" ],
        "fax" :    [ "1-958-555-4323" ],
        "mobile" : [ "1-958-555-4324" ]  
      },
      "remarks" : 
      [
        "she sells seas shells",
        "down by the seashore"
      ],
      "links" : 
      [
        {
          "value" : "http://example.com/entity/XXXX",
          "rel" : "self",
          "href" : "http://example.com/entity/XXXX"
        },
      ],
      "registrationDate" : "1990-12-31T23:59:60Z",
      "lastChangedDate" : "1990-12-31T23:59:60Z",
      "lastChangedBy" : "joe@bob.com"
    }        
                    
                </artwork>
                </figure>
                <t> This object as the following members. <list style="symbols">
                        <t>handle -- a string representing an registry unique identifier of the
                            entity</t>
                        <t>entityNames -- an array of strings, each signifying the name of the
                            entity</t>
                        <t>roles -- an array of strings, each signifying the relationship an object
                            would have with its closest containing object.</t>
                        <t>postalAddress -- an array of string, each representing a line in a postal
                            address.</t>
                        <t>emails -- an array of strings, each containing an email address for the
                            entity</t>
                        <t>phones -- an object containing telephone information associated with the
                            entity, with the following members: <list style="symbols">
                                <t>office -- an array of strings, each being a telephone number</t>
                                <t>fax -- an array of strings, each being a telephone number</t>
                                <t>mobile -- an array of strings, each being a telephone number</t>
                            </list></t>
                        <t>remarks -- an array of strings, each containing comments about the
                            entity</t>
                        <t>links -- see <xref target="object_class_links"/></t>
                        <t>registrationDate -- a string containing the date the entity was
                            registered</t>
                        <t>lastChangedDate -- a string containing the date of last change made to
                            the entity</t>
                        <t>lastChangedBy -- a string containing an identifier of the party
                            responsible for the last change made to the entity registration</t>
                    </list>
                </t>
            </section>
            <section title="The DNR Entity Object Class" anchor="dnr_entity_object_class">
                <t> The DNR entity object class is a superset of the <xref
                        target="rir_entity_object_class">RIR entity object class</xref>. It has the
                    following additional members: <list style="symbols">
                        <t>registrationBy -- a string containing an identifier of the party
                            responsible for the registration of the entity</t>
                        <t>sponsoredBy -- a string containing an identifier of the party through
                            which the registration was made, such as an IANA approved registrar</t>
                        <t>resoldBy -- a string containing an identifier of the party originating
                            the registration of the entity.</t>
                        <t>status -- an array of strings indicating the state of the entity</t>
                        <t>port43 -- a string containing the fully-qualified host name of the WHOIS
                                <xref target="RFC3912"/> server where the object instance may be
                            found.</t>
                    </list>
                </t>
                <figure>
                    <preamble>The following is an example of a DNR entity:</preamble>
                    <artwork xml:space="preserve">
                    
    {
      "handle" : "XXXX",
      "entityNames": [ "Joe Bob, Inc.", "Bobby Joe Shopping" ],
      "status" : [ "validated", "locked" ],
      "postalAddress" : 
      [
        "123 Maple Ave",
        "Suite 90001",
        "Vancouver",
        "BC",
        "12393"
      ],
      "emails" : [ "joe@bob.com", "bob@joe.com" ],
      "phones" : 
      {
        "office" : [ "1-958-555-4321", "1-958-555-4322" ],
        "fax" :    [ "1-958-555-4323" ],
        "mobile" : [ "1-958-555-4324" ]  
      },
      "remarks" : 
      [
        "she sells seas shells",
        "down by the seashore"
      ],
      "links" : 
      [
        {
          "value" : "http://example.com/entity/XXXX",
          "rel" : "self",
          "href" : "http://example.com/entity/XXXX"
        },
      ],
      "port43" : "whois.example.net",
      "registrationDate" : "1990-12-31T23:59:60Z",
      "registrationBy" : "ABC123",
      "lastChangedDate" : "1990-12-31T23:59:60Z",
      "lastChangedBy" : "ABC123",
      "sponsoredBy" : "SponsorXYZ",
      "resoldBy" : "ResellerPDQ"
    }        
                    
                </artwork>
                </figure>
            </section>
        </section>
        <section title="The Nameserver Object Class" anchor="nameserver_object_class">
            <t> The nameserver object class is used by both RIRs and DNRs. Unlike other object
                classes used by both registries where the RIR object class is a subset of the DNR
                object class, a clear delineation is not made with the nameserver object class
                because some DNRs have the same or a similar registration model as the RIRs. RIRs
                and some DNRs register or expose nameserver information as an attribute of a domain
                name, while other DNRs model nameservers as "first class objects". </t>
            <t> The nameserver object class accommodates both models and degrees of variation in
                between. </t>
            <figure anchor="full_nameserver_example">
                <preamble>The following is an example of a nameserver object.</preamble>
                <artwork xml:space="preserve">
                    
  {
    "handle" : "XXXX",
    "name" : "ns1.example.com",
    "status" : [ "active" ],
    "ipAddresses" : [ "192.0.2.1", "192.0.2.2" ],
    "remarks" : 
    [
      "she sells seas shells",
      "down by the seashore"
    ],
    "links" : 
    [
      {
        "value" : "http://example.net/nameserver/xxxx",
        "rel" : "self",
        "href" : "http://example.net/nameserver/xxxx"
      }
    ],
    "port43" : "whois.example.net",
    "registrationDate" : "1990-12-31T23:59:60Z",
    "registrationBy" : "ABC123",
    "lastChangedDate" : "1990-12-31T23:59:60Z",
    "lastChangedBy" : "ABC123",
    "sponsoredBy" : "SponsorXYZ",
    "resoldBy" : "ResellerPDQ"    
  }
                    
                </artwork>
            </figure>
            <t>
                <xref target="full_nameserver_example"/> is an example of a nameserver object with
                all values given. Registries using a first-class nameserver data model would embed
                this in domain objects as well as allowing references to it with the /nameserver
                query type (all depending on the registry operators policy). Other registries may
                pare back the information as needed. <xref target="simplest_nameserver_example"/> is
                an example of a nameserver object as would be found in RIRs and some DNRs, while
                    <xref target="near_simplest_nameserver_example"/> is an example of a nameserver
                object as would be found in other DNRs. </t>
            <figure anchor="simplest_nameserver_example">
                <preamble>The following is an example of the simplest nameserver object.</preamble>
                <artwork xml:space="preserve">
                    
  {
    "name" : "ns1.example.com"
  }
                    
                </artwork>
            </figure>
            <figure anchor="near_simplest_nameserver_example">
                <preamble>The following is an example of a simple nameserver object that might be
                    commonly used by DNRs.</preamble>
                <artwork xml:space="preserve">
                    
  {
    "name" : "ns1.example.com",
    "ipAddresses" : [ "2001:db8::123", "2001:db8::124" ]
  }
                    
                </artwork>
            </figure>
            <t> The nameserver object class has the following members: <list style="symbols">
                    <t>handle -- a string representing an registry unique identifier of the
                        nameserver</t>
                    <t>name -- a string containing the DNS name of the nameserver</t>
                    <t>ipAddresses -- an array of strings containing IPv4 and/or IPv6 addresses of
                        the nameserver</t>
                </list> The members "status", "remarks", "links", "port43", "sponsoredBy",
                "resoldBy", "registrationBy", "registrationDate", "lastChangedDate", and
                "lastChangedBy" take the same form of the members of the same name of the <xref
                    target="entity_object_class">entity object</xref>. </t>
        </section>
        <section title="The Domain Object Class" anchor="domain_object_class">
            <t> The domain object class represents a DNS name and point of delegation. For RIRs
                these delegation points are in the reverse DNS tree, whereas for DNRs these
                delegation points are in the forward DNS tree. The RIR domain object class is a
                subset of the DNR object class. </t>
            <t> In both cases, the high level structure of the domain object class consists of
                information about the domain registration, nameserver information related to the
                domain name, and entities related to the domain name (e.g. registrant information,
                contacts, etc...). </t>
            <figure>
                <preamble>The following is an elided example of the domain object showing the high
                    level structure.</preamble>
                <artwork xml:space="preserve">
                    
{
  "handle" : "XXX",
  "name" : "blah.example.com",
  ...
  "nameServers" : 
  [
    ...
  ],
  ...
  "entities" : 
  [
    ...
  ]  
}
                    
                </artwork>
            </figure>
            <section title="The RIR Domain Object Class" anchor="rir_domain_object_class">

                <figure>
                    <preamble>The following is an example of a JSON object representing a reverse
                        DNS delegation point or the RIR domain object class.</preamble>
                    <artwork xml:space="preserve">
                    
{
  "handle" : "XXXX",
  "name" : "192.in-addr.arpa",
  "nameServers" : 
  [ 
    { "name" : "ns1.rir.net" }, 
    { "name" : "ns2.rir.net" }
  ],
  "delegationKeys" : 
  [ 
    {
      "algorithm": 7,
      "digest" : "E68C017BD813B9AE2F4DD28E61AD014F859ED44C",
      "digestType" : 1,
      "keyTag" : 53814
    }
  ],
  "remarks" : 
  [
    "she sells seas shells",
    "down by the seashore"
  ],
  "links" : 
  [
    {
      "value": "http://example.net/domain/XXXX",
      "rel" : "self",
      "href" : "http://example.net/domain/XXXXX"
    }
  ],
  "registrationDate" : "1990-12-31T23:59:60Z",
  "lastChangedDate" : "1990-12-31T23:59:60Z",
  "lastChangedBy" : "joe@bob.com",
  "entities" : 
  [
    {
      "handle" : "XXXX",
      "entityNames": [ "Joe Bob, Inc.", "Bobby Joe Shopping" ],
      "roles" : [ "registrant" ],
      "postalAddress" : 
      [
        "123 Maple Ave",
        "Suite 90001",
        "Vancouver",
        "BC",
        "12393"
        ],
      "emails" : [ "joe@bob.com", "bob@joe.com" ],
      "phones" : 
      {
        "office" : [ "1-958-555-4321", "1-958-555-4322" ],
        "fax" :    [ "1-958-555-4323" ],
        "mobile" : [ "1-958-555-4324" ]  
      },
      "remarks" : 
      [
        "she sells seas shells",
        "down by the seashore"
      ],
      "links" : 
      [
        {
          "value": "http://example.net/entity/xxxx"
          "rel" : "self",
          "href" : "http://example.net/entity/xxxx"
        }
      ],
      "registrationDate" : "1990-12-31T23:59:60Z",
      "lastChangedDate" : "1990-12-31T23:59:60Z",
      "lastChangedBy" : "joe@bob.com"
    }        
  ]
} 
                    
                </artwork>
                </figure>
                <t> The following is a description of the members of this object: <list
                        style="symbols">
                        <t>handle -- a string representing a registry unique identifier of the
                            domain object instance</t>
                        <t>name -- a string denoting the DNS zone name, which is a domain name</t>
                        <t>nameservers -- an array of nameserver objects as defined by <xref
                                target="nameserver_object_class"/></t>
                        <t>delegationKeys -- an array of objects, each with the following members:
                                <list style="symbols">
                                <t>algorithm -- an integer as specified by the algorithm field of a
                                    DNS DS record as specified by <xref target="RFC4034">RFC
                                        4034</xref> in presentation format</t>
                                <t>digest -- an string as specified by the digest field of a DNS DS
                                    record as specified by RFC 4034 in presentation format</t>
                                <t>digestType -- an integer as specified by the digest type field of
                                    a DNS DS record as specified by RFC 4034 in presentation
                                    format</t>
                                <t>keyTag -- an integer as specified by the key tag field of a DNS
                                    DS record as specified by RFC 4034 in presentation format</t>
                            </list></t>
                        <t>entities -- an array of entity objects as defined by <xref
                                target="rir_entity_object_class"/>.</t>
                    </list> The members "remarks", "links", "registrationDate", "lastChangedDate",
                    and "lastChangedBy" take the same form of the members of the same name of the
                        <xref target="entity_object_class">entity object</xref>. </t>
            </section>
            <section title="The DNR Domain Object Class" anchor="dnr_domain_object_class">
                <t> The DNR domain object class is a superset of the <xref
                        target="rir_domain_object_class">RIR domain object class</xref> and has the
                    following additional members. <list style="symbols">
                        <t>variants -- an array of objects, each containing the following values:
                                <list style="symbols">
                                <t>relation -- an array of strings, with each string denoting the
                                    relationship between the variants and the containing domain
                                    object.</t>
                                <t>variantNames -- an array of strings, each being a variant domain
                                    of the containing domain object.</t>
                            </list>
                        </t>
                        <t>expirationDate -- a string containing the date and time this domain name
                            registration will expire</t>
                        <t>registrationBy -- a string containing an identifier of the party
                            responsible for the registration of the domain name</t>
                        <t>sponsoredBy -- a string containing an identifier of the party through
                            which the registration was made, such as an IANA approved registrar</t>
                        <t>resoldBy -- a string containing an identifier of the party originating
                            the registration of the domain name</t>
                        <t>status -- an array of strings indicating the state of the domain name</t>
                        <t>transferDate -- a string containing the date and time this domain name
                            was transferred</t>
                        <t>port43 -- a string containing the fully-qualified host name of the WHOIS
                                <xref target="RFC3912"/> server where the object instance may be
                            found.</t>
                    </list>
                </t>
                <figure>
                    <preamble>The following is an example of a JSON object representing a forward
                        DNS delegation point or the DNR domain object class.</preamble>
                    <artwork xml:space="preserve">
                    
{
  "handle" : "XXXX",
  "name" : "blah.example.com",
  "variants" : 
  [
    {
      "relation" : [ "registered", "conjoined" ],
      "variantNames" : [ "blah2.example.com", "blah3.example.com" ]
    },
    {
      "relation" : [ "unregistered", "restrictedRegistration" ],
      "variantNames" : [ "blah3.example.com", "blah4.example.com" ]
    }
  ],
  "status" : [ "locked", "transferProhibited" ],
  "nameServers" : 
  [
    {
      "handle" : "XXXX",
      "name" : "ns1.example.com",
      "status" : [ "active" ],
      "ipAddresses" : 
      [ 
        "2001:db8::123", "2001:db8::124",
        "192.0.2.1", "192.0.2.2"
      ],
      "remarks" : 
      [
        "she sells seas shells",
        "down by the seashore"
      ],
      "links" : 
      [
        {
          "value" : "http://example.net/nameserver/XXXX"
          "rel" : "self",
          "href" : "http://example.net/nameserver/XXXX"
        }
      ],
      "registrationDate" : "1990-12-31T23:59:60Z",
      "registrationBy" : "ABC123",
      "lastChangedDate" : "1990-12-31T23:59:60Z",
      "lastChangedBy" : "ABC123",
      "sponsoredBy" : "SponsorXYZ",
      "resoldBy" : "ResellerPDQ"    
    },
    {
      "handle" : "XXXX",
      "name" : "ns2.example.com",
      "status" : [ "active" ],
      "ipAddresses" : 
      [ 
        "2001:db8::125", "2001:db8::126",
        "192.0.2.3", "192.0.2.4"
      ],
      "remarks" : 
      [
        "she sells seas shells",
        "down by the seashore"
      ],
      "links" : 
      [
        {
          "value" : "http://example.net/nameserver/XXXX",
          "rel" : "self",
          "href" : "http://example.net/nameserver/XXXX"
        }
      ],
      "registrationDate" : "1990-12-31T23:59:60Z",
      "registrationBy" : "ABC123",
      "lastChangedDate" : "1990-12-31T23:59:60Z",
      "lastChangedBy" : "ABC123",
      "sponsoredBy" : "SponsorXYZ",
      "resoldBy" : "ResellerPDQ"    
    }
  ]
  "delegationKeys" : 
  [ 
    {
      "algorithm": 7,
      "digest" : "E68C017BD813B9AE2F4DD28E61AD014F859ED44C",
      "digestType" : 1,
      "keyTag" : 53814
    }
  ],
  "remarks" : 
  [
    "she sells seas shells",
    "down by the seashore"
  ],
  "links" : 
  [
    {
      "value": "http://example.net/domain/XXXX",
      "rel" : "self",
      "href" : "http://example.net/domain/XXXX"
    }
  ],
  "port43" : "whois.example.net",
  "registrationDate" : "1990-12-31T23:59:60Z",
  "registrationBy" : "ABC123",
  "lastChangedDate" : "1990-12-31T23:59:60Z",
  "lastChangedBy" : "ABC123",
  "sponsoredBy" : "SponsorXYZ",
  "resoldBy" : "ResellerPDQ",
  "expirationDate" : "2016-12-31T23:59:60Z",
  "transferDate" : "1990-12-31T23:59:60Z",
  "entities" : 
  [
    {
      "handle" : "XXXX",
      "entityNames": [ "Joe Bob, Inc.", "Bobby Joe Shopping" ],
      "status" : [ "validated", "locked" ],
      "postalAddress" : 
      [
        "123 Maple Ave",
        "Suite 90001",
        "Vancouver",
        "BC",
        "12393"
      ],
      "emails" : [ "joe@bob.com", "bob@joe.com" ],
      "phones" : 
      {
        "office" : [ "1-958-555-4321", "1-958-555-4322" ],
        "fax" :    [ "1-958-555-4323" ],
        "mobile" : [ "1-958-555-4324" ]  
      },
      "remarks" : 
      [
        "she sells seas shells",
        "down by the seashore"
      ],
      "links" : 
      [
        {
          "value" : "http://example.net/entity/xxxx"
          "rel" : "self",
          "href" : "http://example.net/entity/xxxx"
        }
      ],
      "registrationDate" : "1990-12-31T23:59:60Z",
      "registrationBy" : "ABC123",
      "lastChangedDate" : "1990-12-31T23:59:60Z",
      "lastChangedBy" : "ABC123",
      "sponsoredBy" : "SponsorXYZ",
      "resoldBy" : "ResellerPDQ"
    }        
  ]
} 
                    
                </artwork>
                </figure>

            </section>
        </section>
        <section title="The IP Network Object Class" anchor="ip_network_object_class">
            <t> The IP Network object class models IP network registrations found in RIRs and is the
                expected response for the /ip query as defined by <xref
                    target="I-D.ietf-weirds-rdap-query"/>. There is no equivalent object class for
                DNRs. The high level structure of the IP network object class consists of
                information about the network registration and entities related to the IP network
                (e.g. registrant information, contacts, etc...). </t>
            <figure>
                <preamble>The following is an elided example of the IP network object type showing
                    the high level structure.</preamble>
                <artwork xml:space="preserve">
                    
{
  "handle" : "XXX",
  ...
  "entities" : 
  [
    ...
  ]  
}
                    
                </artwork>
            </figure>
            <figure>
                <preamble>The following is an example of the JSON object for the network
                    registration information</preamble>
                <artwork xml:space="preserve">
                        
{
  "handle" : "XXXX-RIR",
  "startAddress" : "2001:db8::0",
  "endAddress" : "2001:db8::0:FFFF:FFFF:FFFF:FFFF:FFFF",
  "ipVersion" : 6,
  "name": "NET-RTR-1",
  "description" : [ "A network used for routing" ],
  "type" : "DIRECT ALLOCATION",
  "country" : "AU",
  "parentHandle" : "YYYY-RIR",
  "remarks" : 
  [
    "she sells seas shells",
    "down by the seashore"
  ],
  "links" : 
  [
    {
      "value" : "http://example.ent/ip/2001:db8::/48",
      "rel" : "self",
      "href" : "http://example.net/ip/2001:db8::/48"
    },
    {
      "value" : "http://example.net/ip/2001:db8::/48",
      "rel" : "up",
      "href" : "http://example.net/ip/2001:C00::/23"
    },
  ],
  "registrationDate" : "20110509",
  "lastChangedDate" : "20110509",
  "lastChangedBy" : "joe@bob.com",
  "entities" : 
  [
    {
      "handle" : "XXXX",
      "entityNames": [ "Joe Bob, Inc.", "Bobby Joe Shopping" ],
      "roles" : [ "registrant" ],
      "postalAddress" : 
      [
        "123 Maple Ave",
        "Suite 90001",
        "Vancouver",
        "BC",
        "12393"
      ],
      "emails" : [ "joe@bob.com", "bob@joe.com" ],
      "phones" : 
      {
        "office" : [ "1-958-555-4321", "1-958-555-4322" ],
        "fax" :    [ "1-958-555-4323" ],
        "mobile" : [ "1-958-555-4324" ]  
      },
      "remarks" : 
      [
        "she sells seas shells",
        "down by the seashore"
      ],
      "links" : 
      [
        {
          "value" : "http://example.net/entity/xxxx",
          "rel" : "self",
          "href" : "http://example.net/entity/xxxx"
        }
      ],
      "registrationDate" : "1990-12-31T23:59:60Z",
      "lastChangedDate" : "1990-12-31T23:59:60Z",
      "lastChangedBy" : "joe@bob.com"
    }        
  ]
}

                    </artwork>
            </figure>
            <t> The following is a description of the members of this object: <list style="symbols">
                    <t>handle -- a string representing an RIR unique identifier of the network
                        registration</t>
                    <t>startAddress -- the starting IP address of the network, either IPv4 or
                        IPv6</t>
                    <t>endAddress -- the ending IP address of the network, either IPv4 or IPv6</t>
                    <t>ipVersion -- an integer signifying the IP protocol version of the network: 4
                        signifying an IPv4 network, 6 signifying an IPv6 network</t>
                    <t>name -- an identifier assigned to the network registration by the
                        registration holder</t>
                    <t>description -- an array of strings containing descriptive text about the
                        network registration</t>
                    <t>type -- a string containing an RIR specific classification of the network</t>
                    <t>country -- a string containing the name of the 2 character country code of
                        the network </t>
                    <t>parentHandle -- a string containing an RIR unique identifier of the parent
                        network of this network registration</t>
                    <t>entities -- an array of entity objects as defined by <xref
                            target="rir_entity_object_class"/>.</t>
                </list> The members "remarks", "links", "registrationDate", "lastChangedDate", and
                "lastChangedBy" take the same form of the members of the same name of the <xref
                    target="rir_entity_object_class">entity object</xref>. </t>
        </section>
        <section title="Autonomous System Number Entity Object Class"
            anchor="as_entity_object_class">
            <t> The Autonomous System Number (autnum) object class models Autonomous System Number
                registrations found in RIRs and represents the expected response to an /autnum query
                as defined by <xref target="I-D.ietf-weirds-rdap-query"/>. There is no equivalent
                object class for DNRs. The high level structure of the autnum object class consists
                of information about the network registration and entities related to the autnum
                registration (e.g. registrant information, contacts, etc...), and is similar to the
                IP Network entity object class.</t>
            <figure>
                <preamble>The following is an example of a JSON object representing an
                    autnum.</preamble>
                <artwork xml:space="preserve">
                        
{
  "handle" : "XXXX-RIR",
  "startAutnum" : "10",
  "endAutnum" : "15",
  "name": "AS-RTR-1",
  "description" : [ "AS for Exchange" ],
  "type" : "DIRECT ALLOCATION",
  "country": "AU",
  "remarks" : 
  [
    "she sells seas shells",
    "down by the seashore"
  ],
  "links" : 
  [
    {
      "value" : "http://example.net/autnum/xxxx",
      "rel" : "self",
      "href" : "http://example.net/autnum/xxxx"
    }
  ],
  "registrationDate" : "20110509",
  "lastChangedDate" : "20110509",
  "lastChangedBy" : "joe@bob.com",
  "entities" : 
  [
    {
      "handle" : "XXXX",
      "entityNames": [ "Joe Bob, Inc.", "Bobby Joe Shopping" ],
      "roles" : [ "registrant" ],
      "postalAddress" : 
      [
        "123 Maple Ave",
        "Suite 90001",
        "Vancouver",
        "BC",
        "12393"
      ],
      "emails" : [ "joe@bob.com", "bob@joe.com" ],
      "phones" : 
      {
        "office" : [ "1-958-555-4321", "1-958-555-4322" ],
        "fax" :    [ "1-958-555-4323" ],
        "mobile" : [ "1-958-555-4324" ]  
      },
      "remarks" : 
      [
        "she sells seas shells",
        "down by the seashore"
      ],
      "links" : 
      [
        {
          "value" : "http://example.net/entity/XXXX",
          "rel" : "self",
          "href" : "http://example.net/entity/XXXX"
        }
      ],
      "registrationDate" : "1990-12-31T23:59:60Z",
      "lastChangedDate" : "1990-12-31T23:59:60Z",
      "lastChangedBy" : "joe@bob.com"
    }        
  ]
}
                        
                    </artwork>
            </figure>
            <t> The following is a description of the members of this object: <list style="symbols">
                    <t>handle -- a string representing an RIR unique identifier of the autnum
                        registration</t>
                    <t>startAutnum -- the <xref target="RFC5396">starting number</xref> in the block
                        of autonomous system numbers</t>
                    <t>endAutnum -- the <xref target="RFC5396">ending number</xref> in the block of
                        autonomous system numbers</t>
                    <t>name -- an identifier assigned to the autnum registration by the registration
                        holder</t>
                    <t>description -- an array of strings containing descriptive text about the
                        autnum registration</t>
                    <t>type -- a string containing an RIR specific classification of the autnum</t>
                    <t>country -- a string containing the name of the 2 character country code of
                        the autnum </t>
                </list> The members "remarks", "links", "registrationDate", "lastChangedDate", and
                "lastChangedBy" take the same form of the members of the same name of the <xref
                    target="rir_entity_object_class">entity object</xref>. </t>
        </section>
        <section title="Error Response Body" anchor="error_body">
            <t> Some non-answer responses may return entity bodies with information that could be
                more descriptive. </t>
            <t> The basic structure of that response is an object class containing an error code
                number (corresponding to the HTTP response code) followed by a string named "title"
                followed by an array of strings named "description". </t>
            <figure anchor="json_error">
                <preamble>This is an example of the JSON version of the common response
                    body.</preamble>
                <artwork xml:space="preserve">                    
{
  "errorCode": 418
  "title": "Your beverage choice is not available",
  "description": 
  [
    "I know coffee has more ummppphhh.",
    "But I cannot provide." 
  ]
}
                </artwork>
            </figure>
            <t> A client MAY simply use the HTTP response code as the server is not required to
                include error data in the response body. However, if a client wishes to parse the
                error data, it SHOULD first check that the Content-Type header contains the
                appropriate media type. </t>
        </section>
        <section title="IANA Considerations" anchor="iana_considerations">
            <t> This specification registers the "application/rdap" media type. <list>
                    <t>Type name: application</t>
                    <t>Subtype name: rdap</t>
                    <t>Required parameters: n/a</t>
                    <t>Optional parameters: level</t>
                    <t>Encoding considerations: n/a</t>
                    <t>Security considerations: n/a</t>
                    <t>Interoperability considerations: n/a</t>
                    <t>Published specification: [[ this document ]]</t>
                    <t>Applications that use this media type: RDAP</t>
                    <t>Additional information: n/a</t>
                    <t>Person & email address to contact for further information: Andy Newton
                        &andy@hxr.us&</t>
                    <t>Intended usage: COMMON</t>
                    <t>Restrictions on usage: none</t>
                    <t>Author: Andy Newton</t>
                    <t>Change controller: IETF</t>
                </list>
            </t>
        </section>
        <section title="Internationalization Considerations"
            anchor="internationalization_considerations">
            <section title="Character Encoding">
                <t> The default text encoding for JSON and XML responses in RDAP is UTF-8, and all
                    servers and clients MUST support UTF-8. Servers and clients MAY optionally
                    support other character encodings. </t>
            </section>
            <section title="URIs and IRIs">
                <t>
                    <xref target="I-D.ietf-weirds-using-http"/> defines the use of URIs and IRIs in
                    RDAP. </t>
            </section>
            <section title="Language Tags">
                <t>
                    <xref target="language_identifier"/> defines the use of language tags in the
                    JSON responses defined in this document. </t>
            </section>
            <section title="Internationalized Domain Names">
                <t>
                    <xref target="idn_query_and_response_model"/> illustrates the model for query
                    and response regarding internationalized domain names (IDNs). </t>
            </section>
        </section>
        <section title="Contributing Authors and Acknowledgements">
            <t> This document is derived from original work on RIR response in JSON by Byron J.
                Ellacott of APNIC, Arturo L. Servin of LACNIC, Kaveh Ranjbar of the RIPE NCC, and
                Andrew L. Newton of ARIN. Additionally, this document incorporates word on DNR
                responses in JSON by Ning Kong, Linlin Zhou, Jiagui Xie, and Sean Shen of CNNIC. </t>
            <t> The components of the DNR object classes are derived from a categorization of WHOIS
                response formats created by Ning Kong, Linlin Zhou, and Guangqing Deng of CNNIC,
                Steve Sheng and Francisco Arias of ICANN, Ray Bellis of Nominet, and Frederico Neves
                of NIC.BR. </t>
        </section>
    </middle>
    <back>
        <references title="Normative References"> &RFC0791; &RFC1166; &RFC2616; &RFC3339; &RFC3986;
            &RFC4034; &RFC4343; &RFC4627; &RFC5322; &RFC5396; &RFC5646; &RFC5952; &RFC5988;
                <reference anchor="ISO.3166.1988">
                <front>
                    <title>Codes for the representation of names of countries, 3rd edition</title>
                    <author>
                        <organization>International Organization for Standardization</organization>
                    </author>
                    <date day="15" month="August" year="1988"/>
                </front>
                <seriesInfo name="ISO" value="Standard 3166"/>
            </reference>
            <reference anchor="I-D.ietf-weirds-rdap-query">
                <front>
                    <title>RDAP Query Format</title>
                    <author initials="A" surname="Newton" fullname="Andrew Newton">
                        <organization/>
                    </author>
                    <author initials="S." surname="Hollenbeck" fullname="Scott Hollenbeck"> </author>
                    <date month="September" day="21" year="2011"/>
                    <abstract>
                        <t>This document describes uniform patterns to construct HTTP URLs that may
                            be used to retrieve registration information from registries (including
                            both Regional Internet Registries (RIRs) and Domain Name Registries
                            (DNRs)) using "RESTful" web access patterns.</t>
                    </abstract>
                </front>
                <seriesInfo name="Internet-Draft" value="draft-ietf-weirds-rdap-query-00"/>
                <format type="TXT"
                    target="http://www.ietf.org/internet-drafts/draft-weirds-rdap-query-00.txt"/>
            </reference>
            <reference anchor="I-D.ietf-weirds-using-http">
                <front>
                    <title>Using HTTP for RESTful Whois Services by Internet Registries</title>

                    <author initials="A" surname="Newton" fullname="Andrew Newton">
                        <organization/>
                    </author>
                    <author initials="B" surname="Ellacott" fullname="Byron Ellacott">
                        <organization/>
                    </author>
                    <author initials="N" surname="Kong" fullname="Ning Kong">
                        <organization/>
                    </author>
                    <date month="May" day="10" year="2012"/>
                    <abstract>
                        <t>This document describes the use of HTTP in Whois services using RESTful
                            web methodologies.</t>
                    </abstract>

                </front>

                <seriesInfo name="Internet-Draft" value="draft-ietf-weirds-using-http-01"/>
                <format type="TXT"
                    target="http://www.ietf.org/internet-drafts/draft-ietf-weirds-using-http-01.txt"
                />
            </reference>
            <reference anchor="E164">
                <front>
                    <title abbrev="E.164">The International Public Telecommunication Number
                        Plan</title>

                    <author>
                        <organization>ITU-T</organization>
                    </author>
                    <date year="1997" month="May"/>
                </front>
                <seriesInfo name="" value="Recommendation E.164"/>
            </reference>
        </references>
        <references title="Informative References"> &RFC3912; &RFC3730; <reference
                anchor="JSON_acendancy">
                <front>
                    <title>The Stealthy Ascendancy of JSON</title>
                    <author surname="MacVittie" fullname="Lori MacVittie">
                        <organization>F5 Dev Central</organization>
                    </author>
                    <date month="04" year="2011"/>
                </front>
                <format type="HTML"
                    target="https://devcentral.f5.com/weblogs/macvittie/archive/2011/04/27/the-stealthy-ascendancy-of-json.aspx"
                />
            </reference>
            <reference anchor="JSON_performance_study">
                <front>
                    <title>Comparison of JSON and XML Data Interchange Formats: A Case Study</title>
                    <author fullname="Nurzhan Nurseitov">
                        <organization>Montana State University - Bozeman</organization>
                    </author>
                    <author fullname="Michael Paulson">
                        <organization>Montana State University - Bozeman</organization>
                    </author>
                    <author fullname="Randall Reynolds">
                        <organization>Montana State University - Bozeman</organization>
                    </author>
                    <author fullname="Clemente Izurieta">
                        <organization>Montana State University - Bozeman</organization>
                    </author>
                    <date year="2009"/>
                </front>
                <format type="PDF" target="http://www.cs.montana.edu/izurieta/pubs/caine2009.pdf"/>
            </reference>
        </references>
        <section title="Suggested Values">
            <t> Due to the wide variation between the hundreds of registry operators and the
                on-going policy refinement by registry communities, values of some data cannot be
                formally standardized. This section lists suggested values for such data but is not
                nor will ever be a complete list of values and their meanings. </t>
            <section title="Status">
                <t> Many of the object classes have a member named 'status'. This member is an array
                    of strings, with each string denoting a status associated with the containing
                    object. The following is a list of suggested values to use in the 'status'
                    array: <list style="symbols">
                        <t>'validated' -- Signifies that the data of the object instance has been
                            found to be accurate. This type of status is usually found on entity
                            object instances to note the validity of identifying contact
                            information.</t>
                        <t>'update prohibited' -- Updates to the object instance are forbidden.</t>
                        <t>'transfer prohibited' -- Transfers of the registration from one registrar
                            to another are forbidden. This type of status normally applies to DNR
                            domain names.</t>
                        <t>'delete prohibited' -- Deletion of the registration of the object
                            instance is forbidden. This type of status normally applies to DNR
                            domain names.</t>
                    </list>
                </t>
            </section>
            <section title="Roles" anchor="suggested_roles">
                <t> Entity object classes have a member named 'roles'. This member is an array of
                    strings, with each string indicating the role or relationship the entity object
                    instance has with a containing object, such as a domain name or IP network. An
                    entity object instance can have more than one type of relationship with a
                    containing object. The following is a list of suggested values to use in the
                    'roles' array: <list style="symbols">
                        <t>'registrant' -- The entity object instance is the registrant of the
                            registration.</t>
                        <t>'tech' -- The entity object instance is a technical contact for the
                            registration.</t>
                        <t>'admin' -- The entity object instance is an administrative contact for
                            the registration.</t>
                        <t>'abuse' -- The entity object instance handles network abuse issues on
                            behalf of the registrant of the registration.</t>
                        <t>'billing' -- The entity object instance handles payment and billing
                            issues on behalf of the registrant of the registration.</t>
                        <t>'registrar' -- The entity object instance represents the authority
                            responsible for the registration in the registry.</t>
                    </list>
                </t>
            </section>
            <section title="Variant Relations" anchor="variant_relations">
                <t>
                    <xref target="dnr_domain_object_class"/> describes a structure for noting
                    variants of domain names and the relationship those variants have with a
                    registered domain name. The following is a list of suggested values to use as
                    the variant relation values: <list style="symbols">
                        <t>'registered' -- the variant names are registered in the registry.</t>
                        <t>'unregistered' -- the variant names are not found in the registry.</t>
                        <t>'restrictedRegistration' -- registration of the variant names is
                            restricted to certain parties or within certain rules.</t>
                        <t>'openRegistration' -- registration of the variant names is available to
                            generally qualified registrants.</t>
                        <t>'conjoined' -- registration of the variant names is conjoined with the
                            registration of the containing domain registration.</t>
                    </list>
                </t>
            </section>
        </section>
        <section title="Suggested Data Modeling with the Entity Object Class">
            <section title="Registrants and Contacts" anchor="suggested_registrant_contact_modeling">
                <t> This document does not provide specific object classes for registrants and
                    contacts. Instead the entity object class may be used to represent a registrant
                    or contact. When the entity object is embedded inside a containing object such
                    as a domain name or IP network, the 'roles' string array can be used to signify
                    the relationship. It is recommended that the values from <xref
                        target="suggested_roles"/> be used. </t>
                <figure>
                    <preamble>The following is an example of an elided containing object with an
                        embedded entity that is both a registrant and admin contact:</preamble>
                    <artwork xml:space="preserve">
                        
{
  ...
  "entities" : 
  [
    {
      "handle" : "XXXX",
      "entityNames": [ "Joe Bob, Inc.", "Bobby Joe Shopping" ],
      "roles" : [ "registrant", "admin" ],
      "postalAddress" : 
      [
        "123 Maple Ave",
        "Suite 90001",
        "Vancouver",
        "BC",
        "12393"
      ],
      "emails" : [ "joe@bob.com", "bob@joe.com" ],
      "phones" : 
      {
        "office" : [ "1-958-555-4321", "1-958-555-4322" ],
        "fax" :    [ "1-958-555-4323" ],
        "mobile" : [ "1-958-555-4324" ]  
      },
      "remarks" : 
      [
        "she sells seas shells",
        "down by the seashore"
      ],
      "registrationDate" : "1990-12-31T23:59:60Z",
      "lastChangedDate" : "1990-12-31T23:59:60Z",
      "lastChangedBy" : "joe@bob.com"
    }        
  ]
}
                    
                </artwork>
                </figure>
            </section>
            <section title="Registrars">
                <t> This document does not provide a specific object class for registrars, but like
                    registrants and contacts (see <xref
                        target="suggested_registrant_contact_modeling"/>) the 'roles' string array
                    maybe used. </t>
                <figure>
                    <preamble>The following is an example of an elided containing object with an
                        embedded entity that is a registrar:</preamble>
                    <artwork xml:space="preserve">
        
{
  ...
  "entities" : 
  [
    {
      "handle" : "XXXX",
      "names": [ "RegistrarsRUS" ],
      "roles" : [ "registrar" ],
      "postalAddress" : 
      [
        "1212 Tulip Ave",
        "Suite 1",
        "Marina Del Rey",
        "CA",
        "12393-2193"
      ],
      "emails" : [ "joe@bob.com", "bob@joe.com" ],
      "phones" : 
      {
        "office" : [ "1-958-555-4321", "1-958-555-4322" ],
        "fax" :    [ "1-958-555-4323" ],
        "mobile" : [ "1-958-555-4324" ]  
      },
      "remarks" : 
      [
        "we registrar for less!"
      ],
      "links" : 
      [
        {
          "value" : "http://example.net/entity/XXXX"
          "rel" : "alternate",
          "type" : "text/html",
          "href" : "http://www.example.com"
        }
      ]
    }        
  ]
}
                    
                </artwork>
                </figure>
            </section>
        </section>
        <section title="IDN Query and Response Model" anchor="idn_query_and_response_model">
            <t> Internationalized Domain Names (IDNs) differ from other types of domain names
                because multiple domain names as would be represented by a name in Master File
                format (see <xref target="RFC4343"/>) may be registered by a single IDN. IDNs are
                based on Unicode, and Unicode can have multiple means for encoding the same word
                depending on the character set and language being used. And the rules for
                determining which IDN encoding maps to a "wire-format" domain name vary from DNR to
                DNR. </t>
            <t> When an IDN maps to multiple domain names, the various mappings are called variants.
                The <xref target="dnr_domain_object_class">DNR Domain object class</xref> represents
                the variants using a string array. </t>
            <figure>
                <preamble>The following is an example of an elided DNR domain object with
                    variants.</preamble>
                <artwork xml:space="preserve">
                    
{
  "handle" : "XXXX",
  "name" : "blah.example.com",
  "variants" : [ "blah2.example.com", "blah3.example.com" ],
  ...
} 
                    
                </artwork>
            </figure>
            <t> Because IDNs can have multiple targets in a mapping and due to the variance in DNR
                mapping rules, it is up to the client to reduce an IDN to a domain name in Master
                File format so as to narrow the lookup of the domain name to the proper subset. A
                query of a DNR using the IDN itself might map across multiple registrations
                depending on the mapping rules of the DNR. </t>
        </section>
        <section title="Postal Addresses vs Location">
            <t> The postal address data listed in the <xref target="entity_object_class">entity
                    object class</xref> does not necessarily represent location. The intent of this
                information is to provide a means to send postal mail to an entity. While in some
                cases it may also be the location of the entity, there is no guarantee that the two
                are the same. </t>
            <t> Additionally, the postal address data represented in this document does not follow
                any specific standard for postal addresses because many registries do not keep
                postal address data in an internationalized standard form. Publication of such data
                in a format that suggests an internationalized standard form when such data is not
                known to be well-formed for that purpose would be misleading. </t>
        </section>
        <section title="Motivations for Using JSON">
            <t> This section addresses a common question regarding the use of JSON over other data
                formats, most notably XML. </t>
            <t> It is often pointed out that many DNRs and one RIR support the <xref
                    target="RFC3730">EPP</xref> standard, which is an XML serialized protocol. The
                logic is that since EPP is a common protocol in the industry it follows that XML
                would be a more natural choice. While EPP does enfluence this specification quite a
                bit, EPP serves a different purpose which is the provisioning of Internet resources
                between registries and accredited registrars and serves a much narrower audience
                than that envisioned for RDAP. </t>
            <t> By contrast, RDAP has a broader audience and is designed for public consumption of
                data. Experience from RIRs with first generation RESTful web services for Whois
                indicate a large percentage of clients operate within browsers and other platforms
                where full-blown XML stacks are not readily available and where JSON is a better
                fit. </t>
            <t> Additionally, while EPP is used in much of the DNR community it is not a unversial
                constant in that industry. And finally, EPP's use of XML predates the specification
                of JSON. If EPP had been defined today, it may very well have used JSON instead of
                XML. </t>
            <t> Beyond the specific DNR and RIR communities, the trend in the broader Internet
                industry is also switching to JSON over XML, especially in the area of RESTful web
                services (see <xref target="JSON_acendancy"/>). Studies have also found that JSON is
                generally less bulky and consequently faster to parse (see <xref
                    target="JSON_performance_study"/>). </t>
        </section>
        <section title="Changelog">
            <t>
                <list style="hanging">
                    <t hangText="Initial -00"> Adopted as working group document 2012-September-18. </t>
                    <t hangText="-01">
                        <list>
                            <t>Minor spelling corrections. Changed "Registry Data" to "Registration
                                Data" for the sake of consistency.</t>
                            <t>Transitioned to RFC 5988 links and relationshipt types from our own
                                custom "uris" structure.</t>
                            <t>Some examples had 'status' as a string. Those have been corrected as
                                'status' is always an array of strings.</t>
                            <t>Domain variants can now have a multi-valued relationship with domain
                                registrations.</t>
                            <t>"names" in the entity object class was changed to "entityNames".</t>
                            <t>Some IP address examples change to IPv6.</t>
                            <t>Change phone number examples and added reference to E.164.</t>
                            <t>Added section on motivations for using JSON.</t>
                            <t>Added error response body section.</t>
                            <t>Added JSON naming section.</t>
                            <t>Added common data structures section.</t>
                            <t>Added the IANA Considerations section and the media type
                                registration.</t>
                            <t>Added 'lang' name/value.</t>
                            <t>Added internationalization considerations section.</t>
                        </list>
                    </t>
                </list>
            </t>
        </section>
    </back>
</rfc>

PAFTECH AB 2003-20262026-04-23 16:19:15