TOC 
Network Working GroupAL Newton
Internet-DraftVeriSign, Inc.
Expires: January 15, 2002July 17, 2001

XDAP Domain Directory Schema
draft-newton-xdap-domdir-01

Status of this Memo

This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt.

The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html.

This Internet-Draft will expire on January 15, 2002.

Copyright Notice

Copyright (C) The Internet Society (2001). All Rights Reserved.

Abstract

This document describes an XDAP directory namespace and schema for registered DNS information. The schema extends the necessary query and result operations of XDAP to provide a functional equivalent of the whois command syntaxes and results often used by domain registries and registrars.



 TOC 

Table of Contents




 TOC 

1. Introduction

This document describes an Internet address directory using an XML Schema[4] derived from and using the XDAP[5] schema. The query and result types are similar in function to the whois commands and results often used by domain registries/registrars today.

The schema given is this document is specified using the Extensible Markup Language (XML) 1.0 as described in [1], XML Schema notation as described in [3] and [4], and XML Namespaces as described in [2].

It is important to note that XML is case sensitive. XML specifications and examples provided in this document MUST be interpreted in the exact character case presented to develop a conforming implementation.



 TOC 

2. Document Terminology

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC2119[9].

The terms "holder" and sponsor" are taken from the meaning described in [6].



 TOC 

3. Schema Description

The schema for this directory namespace defines no <complexAuthentication> derivative. Applications of this namespace should rely on either the XDAP transport or <simpleAuthentication> for client authentication.

XDAP requires the derivation of both query and result elements by a directory namespace. These descriptions follow.

3.1 Query Derivatives

3.1.1 <lookupDomain> Query

This query does a domain lookup. This lookup is specified either with a handle for the domain or the name of the domain as it would be used in DNS.

3.1.2 <listSponsors> Query

This query returns continuation searches in the directory services of the "down-stream" sponsors of a directory. A search constraint of <base> MAY restrict the list to sponsors only of a particular domain.

3.1.3 <findDomainByHolder> Query

<findDomainByHolder> finds a domain entity by the common name of the domain's holder. A search constraint of <base> MAY restrict the results to domains only underneath the domain specified by its content. The <beginsWith> element MUST be present and specifies the beginning of the common name of the holder. The <endsWith> element is OPTIONAL and MUST contain the end of the common name of the holder.

3.1.4 <findDomainByName> Query

Similar to <findDomainByHolder>, <findDomainByHolder> finds a domain entity by the name of the domain as it is known it DNS. A search constraint of <base> MAY restrict the results to domains only underneath the domain specified by its content. The <beginsWith> element MUST be present and specifies the beginning of the domain name. The <endsWith> element is OPTIONAL and MUST contain the end of the domain name.

3.1.5 <lookupContact> Query

This query does a contact lookup. The lookup is specified with the handle of the contact.

3.1.6 <findContacts> Query

<findContacts> searches for contacts given search constraints. The <beginsWith> element MUST be present and specifies the beginning of the common name of the contact. The <endsWith> element is OPTIONAL and MUST contain the end of the common name of the contact.

The <type> element is OPTIONAL and SHOULD contain a recognized type of contact. Typically the values for this element denote multiplicity of the contact, such as "organization" or "person".

3.1.7 <lookupHost> Query

This is a simple named look up of a name server host. The host MUST be specified by one of the following elements:

3.1.8 <findHostsByDomain> Query

This query does a simple search for the name servers hosting a domain. The search constraint <domainName> MUST be present.

3.2 Result Derivatives

3.2.1 <domain> Result

This is the expected result of a <lookupDomain> query. The children of the <domain> element are as follows:

3.2.2 <domains> Result

This is the expected result of a <findDomainByName> or <findDomainByHolder> query. It MAY be empty, but if it has children, they MUST be <domain> elements.

3.2.3 <sponsors> Result

This element is the expected result of a <listSponsors> query. The children of this element are <searchContinuation> as specified by XDAP.

3.2.4 <hostInfo> Result

The <hostInfo> element is the expected result of a <lookupHost> query. It contains elements for the fully qualified host name of the host, the IP address of the host, and a reference to the host contact.

The address elements contain the IP address of the name server, either IP v4 or IP v6, and an OPTIONAL reference to the network which contains the given address.

3.2.5 <hosts> Result

This is the expected result of <findHostsByDomain> query. It MAY be empty, but if it has children, they MUST be <host> elements.

3.2.6 <contactInfo> Result

The <contactInfo> element is the expected result of a <lookupContact> query. The children that MUST be present are <handle>, containing a registry assigned unique identifier, and <commonName>, which holds the common name of the contact. The other children of this element are OPTIONAL and contain Internet, phone, and postal address information.

3.2.7 <contacts> Result

The <contacts> element is the expected result of a <findContacts> query. This element MAY have no children; if it is not empty the children MUST be <contactInfo> elements.

3.3 Global Types

Some of the global types defined by the schema specified in this document are expressed using regular expressions. The regular expressions used for these definitions do not fully represent every allowable syntax for the intended type, but meet a standard of reasonableness for the expression of the types.

3.4 Support for <xdap:lookupEntity>

The following types of named entities are recognized by the <lookupEntity> query of XDAP:



 TOC 

4. Formal XML Syntax

This domain directory is specified in the XML Schema notation. The formal syntax presented here is a complete schema representation suitable for automated validation of an XML instance when combined with the formal schema syntax of XDAP. Due to document formatting restrictions, readers should note that the regular expressions expressed in this schema DO NOT contain whitespace within the quotes containing the regular expression.

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:domdir="urn:iana:xmlns:domdir1"
        xmlns:xdap="urn:iana:xmlns:xdap1"
        targetNamespace="urn:iana:xmlns:domdir1"
        elementFormDefault="qualified" >

  <annotation>
    <documentation>
      Domain directory schema 
      derived from XDAP schema 
    </documentation>
  </annotation>

  <!--             -->
  <!-- Query types -->
  <!--             -->

  <complexType name="lookupDomainType">
    <complexContent>
      <extension base="xdap:queryType">
        <choice>
          <element name="handle" 
            type="domdir:handleType" />
          <element name="domainName"
            type="domdir:domainNameType" />
        </choice>
      </extension>
    </complexContent>
  </complexType>

  <element name="lookupDomain"
    type="domdir:lookupDomainType"
    substitutionGroup="xdap:query" />

  <complexType name="listSponsorsType">
    <complexContent>
      <extension base="xdap:queryType">
        <sequence>
          <element name="base"
            type="domdir:domainNameType" 
            minOccurs="0" maxOccurs="1" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="listSponsors"
    type="domdir:listSponsorsType"
    substitutionGroup="xdap:query" />

  <complexType name="findDomainByHolderType">
    <complexContent>
      <extension base="xdap:queryType">
        <sequence>
          <element name="base"
            type="domdir:domainNameType" 
            minOccurs="0" maxOccurs="1" />
          <element name="beginsWith"
            minOccurs="1" maxOccurs="1">
            <simpleType>
	            <restriction base="token">
	              <minLength value="3"/>
	            </restriction>
            </simpleType>
          </element>
          <element name="endsWith"
            minOccurs="0" maxOccurs="1">
            <simpleType>
	            <restriction base="token">
	              <minLength value="2"/>
	            </restriction>
            </simpleType>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="findDomainByHolder"
    type="domdir:findDomainByHolderType"
    substitutionGroup="xdap:query" />

  <complexType name="findDomainByNameType">
    <complexContent>
      <extension base="xdap:queryType">
        <sequence>
          <element name="base"
            type="domdir:domainNameType" 
            minOccurs="0" maxOccurs="1" />
          <element name="beginsWith"
            minOccurs="1" maxOccurs="1" >
            <simpleType>
	            <restriction base="token">
	              <minLength value="3"/>
	            </restriction>
            </simpleType>
          </element>
          <element name="endsWith"
            minOccurs="0" maxOccurs="1" >
            <simpleType>
	            <restriction base="token">
	              <minLength value="2"/>
	            </restriction>
            </simpleType>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="findDomainByName"
    type="domdir:findDomainByNameType"
    substitutionGroup="xdap:query" />

  <complexType name="lookupContactType">
    <complexContent>
      <extension base="xdap:queryType">
        <sequence>
          <element name="handle" 
            type="domdir:handleType" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="lookupContact"
    type="domdir:lookupContactType"
    substitutionGroup="xdap:query" />

  <complexType name="findContactsType">
    <complexContent>
      <extension base="xdap:queryType">
        <sequence>
          <element name="beginsWith"
            minOccurs="1" maxOccurs="1" >
            <simpleType>
	            <restriction base="token">
	              <minLength value="3"/>
	            </restriction>
            </simpleType>
          </element>
          <element name="endsWith"
            minOccurs="0" maxOccurs="1" >
            <simpleType>
	            <restriction base="token">
	              <minLength value="2"/>
	            </restriction>
            </simpleType>
          </element>
          <element name="type"
            type="token"
            minOccurs="0" maxOccurs="1" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="findContactsType"
    type="domdir:findContactsType"
    substitutionGroup="xdap:query" />

  <complexType name="lookupHostType">
    <complexContent>
      <extension base="xdap:queryType">
        <choice>
          <element name="handle" 
            type="domdir:handleType" />
          <element name="hostName"
            type="domdir:domainNameType" />
          <element name="ipV4Address"
            type="domdir:dotQuadIPv4Type" />
          <element name="ipV6Address"
            type="domdir:textIPv6AddressType" />
        </choice>
      </extension>
    </complexContent>
  </complexType>

  <element name="lookupHost"
    type="domdir:lookupHostType"
    substitutionGroup="xdap:query" />

  <complexType name="findHostsByDomainType">
    <complexContent>
      <extension base="xdap:queryType">
        <sequence>
          <element name="domainName"
            type="domdir:domainNameType" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="findHostsByDomain"
    type="domdir:findHostsByDomainType"
    substitutionGroup="xdap:query" />

  <!--              -->
  <!-- Result types -->
  <!--              -->

  <complexType name="domainType">
    <complexContent>
      <extension base="xdap:resultType">
        <sequence>
          <element name="domainName"
            type="domdir:domainNameType" />
          <element name="domainReference"
            type="anyURI"
            minOccurs="0" maxOccurs="1" />
          <element name="nameServerReference"
            type="anyURI"
            minOccurs="0" maxOccurs="unbounded" />
          <element name="holder"
            type="domdir:contactInfoType"
            minOccurs="0" maxOccurs="1" />
          <element name="contactReference"
            minOccurs="0" maxOccurs="unbounded" >
            <complexType>
              <sequence>
                <element name="entityReference"
                  type="anyURI" />
                <element name="role"
                  type="token" />
              </sequence>
            </complexType>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="domain"
    type="domdir:domainType"
    substitutionGroup="xdap:result" />

  <complexType name="sponsorsType">
    <complexContent>
      <extension base="xdap:resultType">
        <sequence>
          <element name="searchContinuation"
            type="xdap:searchContinuationType"
            minOccurs="0" maxOccurs="unbounded" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="sponsors"
    type="domdir:sponsorsType"
    substitutionGroup="xdap:result" />

  <complexType name="domainsType">
    <complexContent>
      <extension base="xdap:resultType">
        <sequence>
          <element name="domain"
            type="domdir:domainType"
            minOccurs="0" maxOccurs="unbounded" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="domains"
    type="domdir:domainsType"
    substitutionGroup="xdap:result" />

  <complexType name="hostInfoType">
    <complexContent>
      <extension base="xdap:resultType">
        <sequence>
          <element name="handle" 
            type="domdir:handleType" 
            minOccurs="0" maxOccurs="1" />
          <element name="hostName"
            type="domdir:domainNameType" />
          <choice
            minOccurs="1" maxOccurs="unbounded" >
            <element name="ipV4">
              <complexType>
                <sequence>
                  <element name="ipV4Address"
                    type="domdir:dotQuadIPv4Type" />
                  <element name="networkReference"
                    type="anyURI"
                    minOccurs="0" maxOccurs="1" />
                </sequence>
              </complexType>
            </element>
            <element name="ipV6">
              <complexType>
                <sequence>
                  <element name="ipV6Address"
                    type="domdir:textIPv6AddressType" />
                  <element name="networkReference"
                    type="anyURI"
                    minOccurs="0" maxOccurs="1" />
                </sequence>
              </complexType>
            </element>
          </choice>
          <element name="contactReference"
            type="anyURI" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="hostInfo"
    type="domdir:hostInfoType"
    substitutionGroup="xdap:result" />

  <complexType name="hostsType">
    <complexContent>
      <extension base="xdap:resultType">
        <sequence>
          <element name="host"
            type="domdir:hostInfoType"
            minOccurs="0" maxOccurs="unbounded" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="hosts"
    type="domdir:hostsType"
    substitutionGroup="xdap:result" />

  <complexType name="contactInfoType">
    <complexContent>
      <extension base="xdap:resultType">
        <sequence>
          <element name="handle" 
            type="domdir:handleType" />
          <element name="commonName"
            type="normalizedString" />
          <element name="organization"
            type="normalizedString"
            minOccurs="0" maxOccurs="1" />
          <element name="e-mail"
            type="string"
            minOccurs="0" maxOccurs="1" />
          <element name="address"
            type="string"
            minOccurs="0" maxOccurs="1" />
          <element name="city"
            type="string"
            minOccurs="0" maxOccurs="1" />
          <element name="region"
            type="string"
            minOccurs="0" maxOccurs="1" />
          <element name="postalCode"
            type="normalizedString"
            minOccurs="0" maxOccurs="1" />
          <element name="country"
            type="token"
            minOccurs="0" maxOccurs="1" />
          <element name="phone"
            type="normalizedString"
            minOccurs="0" maxOccurs="1" />
          <element name="fax"
            type="normalizedString"
            minOccurs="0" maxOccurs="1" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="contactInfo"
    type="domdir:contactInfoType"
    substitutionGroup="xdap:result" />

  <complexType name="contactsType">
    <complexContent>
      <extension base="xdap:resultType">
        <sequence>
          <element name="contact"
            type="domdir:contactInfoType"
            minOccurs="0" maxOccurs="unbounded" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="contacts"
    type="domdir:contactsType"
    substitutionGroup="xdap:result" />

  <complexType name="hostOrDomainType">
    <complexContent>
      <extension base="xdap:resultType">
        <sequence>
          <element name="nameServerReference"
            type="anyURI" />
          <element name="domainReference"
            type="anyURI" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>

  <element name="hostOrDomain"
    type="domdir:hostOrDomainType"
    substitutionGroup="xdap:result" />

  <!--              -->
  <!-- Global types -->
  <!--              -->

  <simpleType name="domainNameType">
    <restriction base="token">
      <pattern 
        value="([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]\.)*([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])?" />
      <maxLength value="255" />
    </restriction>
  </simpleType>

  <simpleType name="handleType">
    <restriction base="token">
      <pattern value="(host|org|person|role|domain):[A-Za-z0-9-]*" />
      <maxLength value="255" />
    </restriction>
  </simpleType>

  <simpleType name="dotQuadIPv4Type">
    <restriction base="string">
      <pattern value="([\d]{1,3}.){3}[\d]{1,3}" />
      <minLength value="7" />
      <maxLength value="15" />
    </restriction>
  </simpleType>

  <!-- does not support '::' -->
  <simpleType name="textIPv6AddressType">
    <restriction base="string">
      <pattern value="(([\dA-Fa-f]{1,4}:){7}[\dA-Fa-f]{1,4})(:([\d]{1,3}.){3}[\d]{1,3})?"/>
      <minLength value="16"/>
      <maxLength value="39"/>
    </restriction>
  </simpleType>

</schema>



 TOC 

5. Internationalization Considerations

The defining schema for this directory namespace is represented in XML, which provides native support for encoding information using the double-byte Unicode character set and its more compact representations including UTF-8. Compliant XML processors are required to understand both UTF-8 and raw Unicode character sets; XML also includes a provision for identifying other character sets through use of an "encoding" attribute in an <?xml?> processing instruction. The complete list of character set encoding identifiers is maintained by IANA and is described in ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets and [7].



 TOC 

6. IANA Considerations

XML schemas require a URI for unique identification. Schemas MUST be registered to ensure URI uniqueness, but the IETF does not currently have a recommended repository for the registration of XML schemas. This document uses URNs to describe XML namespaces and XML schemas. IANA SHOULD maintain a registry of XML namespace and schema URI assignments. Per policies described in [8], URI assignment requests SHOULD be reviewed by a designated expert, and values SHOULD be assigned only as a result of standards action taken by the IESG.



 TOC 

7. Security Considerations

The schema given in this document describes no <complexAuthentication> derivatives nor specifies any authentication mechanism beyond that specified by [5].



 TOC 

References

[1] World Wide Web Consortium, "Extensible Markup Language (XML) 1.0", W3C XML, February 1998.
[2] World Wide Web Consortium, "Namespaces in XML", W3C XML Namespaces, January 1999.
[3] World Wide Web Consortium, "XML Schema Part 2: Datatypes", W3C XML Schema, October 2000.
[4] World Wide Web Consortium, "XML Schema Part 1: Structures", W3C XML Schema, October 2000.
[5] Newton, AL, "eXtensible Directory Access Protocol", Internet Draft, a work in-progress., February 2001.
[6] Rader, R., "Domain Name Whois Data Element and Related Definitions", Internet Draft, a work in-progress., January 2001.
[7] Reynolds, J. and J. Postel, "ASSIGNED NUMBERS", RFC 1700, STD 2, October 1994.
[8] Narten, T. and H.T. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", RFC 2434, BCP 26, October 1998.
[9] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", RFC 2119, BCP 14, March 1997.


 TOC 

Author's Address

  Andrew L. Newton
  VeriSign, Inc.
  505 Huntmar Park Drive
  Herndon, VA 20170
  USA
Phone:  +1 703 948 3382
EMail:  anewton@verisignlabs.com
URI:  http://www.verisignlabs.com/


 TOC 

Appendix A. An Example Request and Response

The following is an example of an XDAP request and response using this directory namespace.

This XML instance is a request to search for domains by the holder's name.

<?xml version="1.0"?>
<xdap xmlns="urn:iana:xmlns:xdap1"
      xmlns:xdap="urn:iana:xmlns:xdap1"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="urn:iana:xmlns:xdap1 xdap.xsd" >

  <request>
    <directorySearch>
      <domdir:findDomainByHolder 
        xmlns:domdir="urn:iana:xmlns:domdir1"
        xsi:schemaLocation="urn:iana:xmlns:domdir1 domdir.xsd" >
        <domdir:base>com</domdir:base>
        <domdir:beginsWith>
          The Cobbler Shoppe
        </domdir:beginsWith>
      </domdir:findDomainByHolder>
    </directorySearch>
  </request>

</xdap>

This XML instance is a response from domdir-request.xml.

<?xml version="1.0"?>
<xdap xmlns="urn:iana:xmlns:xdap1"
      xmlns:xdap="urn:iana:xmlns:xdap1"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="urn:iana:xmlns:xdap1 xdap.xsd" >

  <response>
    <directoryResult>
      <domdir:domains
        xmlns="urn:iana:xmlns:domdir1"
        xmlns:domdir="urn:iana:xmlns:domdir1"
        xsi:schemaLocation="urn:iana:xmlns:domdir1 domdir.xsd" >
        <domain>
          <domainName>thecobblershoppe.com</domainName>
          <nameServerReference>
            xdap://a.host/urn:iana:xmlns:domdir1/host:research7-hst
          </nameServerReference>
          <nameServerReference>
            xdap://a.host/urn:iana:xmlns:domdir1/host:nso1184-hst
          </nameServerReference>
          <holder>
            <handle>person:beb140</handle>
            <commonName>
              Bill Eckels
            </commonName>
            <organization>
              The Cobbler Shoppe
            </organization>
            <e-mail>
              bille@bjmk.com
            </e-mail>
            <address>
              21 North Main Street
            </address>
            <city>
              Britt
            </city>
            <region>
              IA
            </region>
            <postalCode>
              50423
            </postalCode>
            <country>
              US
            </country>
            <phone>
              515-843-3521
            </phone>
          </holder>
        </domain>
      </domdir:domains>
    </directoryResult>
  </response>

</xdap>



 TOC 

Full Copyright Statement

Acknowledgement