<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc symrefs="yes"?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' [
    <!ENTITY rfc1035 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1035.xml'>
    <!ENTITY rfc1123 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1123.xml'>
    <!ENTITY rfc2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
    <!ENTITY rfc2181 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2181.xml'>
    <!ENTITY rfc4880 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4880.xml'>
    <!ENTITY rfc2616 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2616.xml'>
    <!ENTITY rfc2818 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2818.xml'>
    <!ENTITY rfc3912 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3912.xml'>
    <!ENTITY rfc4291 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4291.xml'>
    <!ENTITY rfc3375 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3375.xml'>
    <!ENTITY rfc3629 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3629.xml'>
    <!ENTITY w3cRECxml PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml2/reference.W3C.REC-xml.xml'>
    <!ENTITY iso3166 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml2/reference.ISO.3166.1988.xml'>
]>
<!--
  ==
  == System for Managing a Shared Domain Registry
  ==
  -->
<rfc category="std" ipr="full3978" docName="draft-nzrs-srs-01">
    <front>
        <title abbrev="SRS">System for Managing a Shared Domain
            Registry</title>
        <author initials="M." surname="Hunt" fullname="Matthew Hunt">
            <organization>New Zealand Registry Services</organization>
            <address>
                <postal>
                    <street>Level 9</street>
                    <street>Exchange Place</street>
                    <street>5-7 Willeston Street</street>
                    <city>Wellington</city>
                    <country>New Zealand</country>
                </postal>
                <email>matt@nzrs.net.nz</email>
                <uri>http://www.nzrs.net.nz/</uri>
            </address>
        </author>

        <date day="30" month="November" year="2008" />

        <abstract>
            <t>This document describes the typical usage and
                communication protocol of a client/server shared
                registry system for management of domain name
                registrations.  The system described is a "thick
                registry" system, providing support for the storage and
                management of both the technical and the registrant
                contact information concerning domain registrations.
                The system relies on the existing HTTP and HTTPS
                infrastructure for transport and secure transfer to
                avoid having to implement a dedicated protocol and
                server environment.  A bespoke XML format is used to
                communicate between clients and the SRS server.</t>
            <t>Comments are solicited and should be addressed to the
                mailing list at srsstandards-l@nzrs.net.nz and/or the
                author.  The mailing list management page can be found
                at
                <eref
                    target="https://mailman.nzrs.net.nz/cgi-bin/mailman/listinfo/srsstandards-l"></eref>.</t>
        </abstract>
    </front>

    <middle>
        <section title="Introduction">
            <t>This document describes the Shared Registry System (SRS),
                a system for managing a shared domain name registry.
                This system broadly satisfies the requirements for a
                generic registry-registrar protocol as defined in <xref
                target="RFC3375">RFC 3375</xref>.  As this system only
                addresses the issue of managing a shared registry
                service and uses <xref target="RFC2616">HTTP</xref> as
                its transport layer, implementations are expected to be
                relatively easy.</t>
            <t>This document also describes the communication protocol
                used by the SRS system.  This protocol uses messages in
                an XML format for system requests and responses.  The
                DTD for the SRS protocol is provided in its entirety as
                <xref target="dtd">an appendix</xref> to this document,
                and individual parts of the protocol are covered in
                depth throughout the document.</t>
            <t>The SRS works in a connection-oriented fashion with no
                session state.  The registrar sends a request document
                to the registry containing commands to be executed by
                the SRS and the result of processing these commands is
                returned as the response.  Each registrar request
                document receives a response document containing the
                result of processing all of the requests in a single
                request document.</t>
            <t>Public Key Infrastructure (PKI) is used to manage issues
                of security, authentication of requests and
                non-repudiation of actions.  Exchange of keys between
                the registry and registrars is outside the scope of this
                document.</t>
            <t>A system built using this protocol is used by .nz
                Registry Services (NZRS) and a <eref
                    target="http://sourceforge.net/projects/dnrs/">sample
                    implementation</eref> consisting of client and
                server software is available from the Sourceforge web
                site.</t>
        </section>

        <section title="Conventions used in this Document" anchor="conventions">
            <t>The definitions of Registry, Registrar, and Registrant
                from <xref target="RFC3375">RFC 3375</xref> are
                used in this document and are included below.</t>
            <t>
                <list style="hanging">
                    <t hangText="SRS:"> a software implementation of the
                        shared registry system described here.</t>

                    <t hangText="Registry:"> An entity that provides
                        back-end domain name registration services to
                        registrars, managing a central repository of
                        information associated with domain name
                        delegations.  A registry is typically
                        responsible for publication and distribution of
                        zone files used by the Domain Name System.</t>

                    <t hangText="Registrar:"> An entity that provides
                        front-end domain name registration services to
                        registrants, providing a public interface to
                        registry services.</t>

                    <t hangText="Registrant:">An entity that registers
                        domain names in a registry through the services
                        provided by a registrar.  Registrants include
                        individuals, organizations, and
                        corporations.</t>

                    <t hangText="UDAI:">The Unique Domain Authentication
                        Identifier (UDAI) is a domain code that is
                        generated by the SRS and stored by the registrar
                        and registrant to restrict updates to domain
                        details.  The value of the UDAI is not stored
                        within the SRS, but a message digest of the
                        value is kept to check the integrity of domain
                        update and transfer requests.  The UDAI SHOULD
                        be an <xref target="US-ASCII">ASCII</xref> encoded
                        character string.</t>
                </list>
            </t>

            <section title="Terminology">
                <t>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 <xref target="RFC2119">RFC 2119</xref>.</t>
            </section>
        </section>

        <section title="System Description">
            <t>The SRS provides the functions required to support all of
                the usual business functions of a domain registration
                service, including:
                <list style="symbols">
                    <t>creation, maintenance, querying and deletion of
                        domain details</t>
                    <t>querying of public details of a domain - to
                        support a public WHOIS service</t>
                    <t>transfer of domains between registrars</t>
                    <t>creation, maintenance, querying and deletion of
                        registrar details</t>
                    <t>regular zone file creation for domains delegated
                        to appear in the domain name system (DNS)</t>
                    <t>registrar account query, maintenance, and message
                        polling</t>
                    <t>creation and cancellation of scheduled jobs in
                        the SRS to support business functions (such as
                        building zone files and releasing and renewing
                        domains)</t>
                    <t>management and configuration of the SRS by the
                        registry</t>
                    <t>billing and accounting functions to work with the
                        registry's accounting system</t>
                </list>
            </t>
            <t>Direct and indirect interactions with the SRS may be
                split into three main groups:
                <list style="symbols">
                    <t>the public (including registrants),</t>
                    <t>registrars,</t>
                    <t>and the registry.</t>
                </list>
                Their interactions with the SRS are summarized below.
            </t>
            <figure>
                <artwork src="srs_interactions.png" width="567"
                    height="378" type="image/png"><![CDATA[
                  +-----------+
                  |  Public/  |
                  |registrants|
                  |           |                   Public
                  +-----------+
                    ^   ^   ^
              WHOIS |   |   | DNS queries
      +-------------+   |   +-------------+
      |                 v                 |
      |           +-----------+           |
      |           |Registrar  |           |
      |           |service    |           |
      |           |           |           |       Registrars
      |           +-----------+           |
      |                 ^                 |
      |                 | HTTP/HTTPS      |
      |                 | (SRS protocol)  |
      v                 v                 v
+-----------+     +-----------+     +-----------+
|Whois      |     |SRS        |     |DNS        |
|server     |<--->|           |---->|           |
|           |     |           |     |           | Registry
+-----------+     +-----------+     +-----------+]]></artwork>
            </figure>
            <section title="The Public">
                <t>The public (and registrants - the domain registering
                    public) have no direct access to the SRS server.
                    They interact with the system through:
                    <list style="symbols">
                        <t>querying domain ownership details in the
                            public WHOIS system,</t>
                        <t>performing hostname lookups to access
                            services hosted on the internet,</t>
                        <t>registering domains by establishing a
                            business relationship with a registrar,</t>
                        <t>transferring their registered domains between
                            registrars,</t>
                        <t>and maintaining their own domain details
                            through systems provided by a registrar.</t>
                    </list>
                </t>
            </section>
            <section title="Registrars">
                <t>Registrars generate most of the work that the SRS
                    server handles.  They are expected to maintain their
                    own registrar details within the SRS as an aspect of
                    their business relationship with the registry.  They
                    also offer services to the public, or a restricted
                    section of the public, to manage domain
                    registrations.  These public services are likely to
                    include:
                    <list style="symbols">
                        <t>checking availability of domain names,</t>
                        <t>registering domain names,</t>
                        <t>transferring domain names from another
                            registrar,</t>
                        <t>cancelling domain registrations,</t>
                        <t>billing for domain registrations,</t>
                        <t>and providing a service to allow registrants
                            to maintaining domain details.</t>
                    </list>
                </t>
                <t>In addition to their customer services, registrars
                    are expected to regularly poll the SRS server using
                    the <xref target="get_messages">GetMessages</xref>
                    request, to retrieve details of actions relevant to
                    their business with the registry that they have not
                    initiated directly (for instance,
                    registrant-initiated transfers of domains from them
                    to another registrar, and actions performed by the
                    registry on their behalf).</t>
            </section>
            <section title="The Registry">
                <t>Generally the registry will be responsible for
                    maintaining all of the information associated with
                    domain name registrations (including both the
                    technical information required to produce zone files
                    and the contact information for registrars and
                    registrants), running the SRS service to support
                    registrars' and its own maintenance of domains,
                    running a public WHOIS service compliant with <xref
                        target="RFC3912">RFC 3912</xref>, regular
                    backups, data security, and running name servers for
                    their domains.</t>
                <t>By running a "thick registry" system, the registry
                    provides security, stability and backup of the
                    registry information, and ensures that registrants
                    are protected against registrar failures.</t>
                <t>The information for the public WHOIS service and the
                    name server zone files is derived from the data held
                    in the SRS server.  Most registered domains will be
                    delegated to other nameservers.</t>
            </section>
            <section title="The Domain Registration Cycle">
                <t>Registrants may register domains through registrars
                    according to the limitations of the available
                    subdomains allowed by the registry, and any policy
                    decisions that the registry applies to domain
                    naming.</t>
                <t>Registries are encouraged to apply a system of grace
                    periods to the registration cycle of domains once
                    they have initially been registered.  The .nz
                    Registry Service applies the following grace
                    periods:
                    <list style="symbols">
                        <t>registration grace period</t>
                        <t>renewal grace period</t>
                        <t>auto-renew grace period</t>
                        <t>redemption grace period</t>
                    </list>
                    Each grace period exists for a specific period of
                    time that is typically measured in days.  The
                    duration of each grace period is a matter of
                    registry operational policy that is not addressed in
                    this document.</t>
                <section title="Registration Grace Period">
                    <t>The registration grace period applies after the
                        initial registration of a domain name.  If the
                        domain name is cancelled by the registrar during
                        this period, all registrar account transactions
                        (billing) for the domain will also be cancelled.
                        The domain name is released back to the
                        available pool of names.  A registrant may not
                        transfer the management of a domain to another
                        registrar during this period.</t>
                    <t>The registry MAY restrict domain cancellations in
                        this term to prevent a single registrar from
                        cancelling a particular domain more than once
                        during the registration grace period.</t>
                </section>
                <section title="Renewal Grace Period">
                    <t>The renewal grace period applies after a domain
                        name registration period is explicitly extended
                        (renewed) by the registrar.  If the domain name
                        is cancelled by the registrar during this
                        period, the registrar account transaction for
                        the renewal will also be cancelled and the
                        BilledUntil date of the domain rolled back to
                        the previous value.</t>
                </section>
                <section title="Auto-renew Grace Period">
                    <t>The auto-renew grace period applies after a
                        domain name registration period expires and is
                        extended (renewed) automatically by the
                        registry.  If the domain name is cancelled by
                        the registrar during this period, the registrar
                        account transaction for the renewal will also be
                        cancelled and the BilledUntil date of the domain
                        rolled back to the previous value.</t>
                </section>
                <section title="Redemption Grace Period">
                    <t>The redemption grace period applies after a domain
                        registration is cancelled by a registrant.  It
                        defines the length of time that a domain will
                        stay in the cancelled state ("PendingRelease"
                        status).  After this time expires, the registry
                        will release the domain name back to the
                        available pool of names.</t>
                </section>
            </section>
        </section>

        <section title="Authentication, Security and Authorization">
            <section title="Authentication">
                <t>A two factor authentication system is used to
                    establish the identity of the user that makes a
                    request:
                    <list style="symbols">
                        <t>A unique numeric identifier issued to each
                            registrar by the registry</t>
                        <t>An OpenPGP-compatible signature of the
                            request body</t>
                    </list>
                </t>

                <t>Registrars are issued with a unique numeric
                    identifier when their account is first created in
                    the SRS.  This registrar identifier MUST be included
                    on client requests to allow the SRS server to
                    identify the client.  Failure to provide a correct
                    identifier as part of the request SHALL result in
                    the SRS server returning an error response.</t>

                <t>The registrar must also maintain at least one public,
                    private OpenPGP-compatible key pair for
                    authentication.  One or more public keys are
                    provided to the registry when the registrar account
                    is first created and the registrar MUST sign
                    requests using one of its registered private keys.
                    This information is used for authentication and to
                    ensure non-repudiation of requests.  The registrar
                    may provide multiple public keys to ease the process
                    of expiring old or revoked keys without interrupting
                    the work of the registrar.</t>
                    
                <t>If a request does not have a signature, or the
                    signature does not confirm that the identity of the
                    registrar that signed the request matches the
                    registrar identifier attached to the request, then
                    the SRS server SHALL return an error response.</t>

                <t>Responses from the SRS server MUST also be signed.
                    Responses are signed by the registry using the
                    registry's private key.  The registry public key
                    MUST be made easily available to registrars to allow
                    authentication of response messages.  This ensures
                    that registrars can be confident that the responses
                    to their requests are authentic, and have not been
                    altered in transit.</t>
            </section>

            <section title="Security">
                <t>The request and response signature mechanism provides
                    a means of ensuring that messages have not been
                    tampered with in transit.  In addition to this, all
                    requests for private data (data that cannot be
                    retrieved using the public WHOIS system) MUST use an
                    encrypted HTTP connection (HTTPS) for data security.
                    If a request for private data is received via an
                    unencrypted HTTP connection, the SRS server SHALL
                    return an error response.</t>

                <t>Only the <xref target="whois">Whois</xref> request
                    may be issued over an unencrypted HTTP
                    connection.</t>
            </section>

            <section title="Authorization">
                <t>SRS implementations SHOULD impose a permissions model
                    to restrict the SRS requests that users are allowed
                    to access.  Action and role types are defined in the
                    protocol definition for this purpose.  If the
                    originating user does not possess all of the
                    permissions required to complete a request, the
                    server SHOULD reject the transaction.</t>

                <t>Transactions sent to the server MUST identify the
                    registrar making the request.  Registrars SHALL NOT
                    be permitted to perform functions using an effective
                    registrar other than their own.  Any such requests
                    received by the registry SHALL be rejected.</t>

                <t>The registry SHOULD only access the SRS server
                    through the same interface provided to registrars
                    and SHOULD have one or more well-known registrar
                    identifiers allocated to itself for the purpose of
                    maintaining the registry.  No changes should be made
                    to public or private data in the SRS using other
                    means of access that the registry may have available
                    (for example, direct access to a database
                    store).</t>

                <t>The registry MAY perform SRS functions using an arbitrary
                    effective registrar value.</t>

                <t>Registrants and the public have no direct access to
                    the SRS.</t>
            </section>
        </section>

        <section title="Communication">
            <t>All communication with the SRS is performed using <xref
                    target="W3C.REC-xml">XML</xref> documents encoded in
                <xref target="RFC3629">UTF-8</xref> and sent using <xref
                    target="RFC2616">HTTP</xref> or <xref
                    target="RFC2818">HTTPS</xref>.  The request body MAY
                contain multiple independent requests to be performed on
                the SRS.  The response MAY include a response to each
                request in the XML document, or a single error response.
                The SRS SHOULD process the requests in the order that
                they are received in the request body.</t>

            <t>The user should ensure that:
                <list style="symbols">
                    <t>requests in an XML document are ordered logically
                        to prevent errors due to sequencing (for
                        example, attempting to update a domain record
                        before creating it)</t>
                    <t>the number of requests per XML document is
                        limited to ensure acceptable processing time and
                        response size</t>
                </list>
            </t>

            <t>Both request and response messages MUST be accompanied by
                a digital signature of the complete XML request body
                (the value of the r parameter to the HTTP messages
                detailed below).  The digital signature authentication
                method follows the specification in section 2.2 of <xref
                    target="RFC4880">OpenPGP Message Format</xref> and
                MUST be encoded in ASCII Armor (see section 6.2 of <xref
                    target="RFC4880"/>) for inclusion in the HTTP
                request.  The SRS protocol is a signature-only
                application of OpenPGP.</t>

            <t>SRS implementations MAY define a limit on the response
                size to support service level agreements on response
                time.  SRS implementations MAY reject requests in an XML
                document if they would otherwise exceed a defined limit
                on the response size or response time.</t>

            <t>The VerMajor and VerMinor attributes are required in the
                first element of each request and response to allow
                clients and servers to modify their behaviour dependent
                on the version of the protocol that they support.  The
                meaning of the two fields is:
                <list style="hanging">
                    <t hangText="VerMajor:">Major version number of the
                        protocol.  This number only changes when major
                        changes are made to the system that are not
                        backward compatible with previous versions; for
                        example, client/server interface changes
                        (changes to the protocol DTD).</t>
                    <t hangText="VerMinor:">Minor version number of the
                        protocol.  This number changes for minor updates
                        to the protocol that are backward compatible
                        with previous versions with the same major
                        version number.</t>
                </list>
            </t>

            <t>An SRS server MUST reject any request made with a major
                version number that is greater than the SRS server's own
                supported version.  SRS server implementations MAY
                support requests made with a major version number that
                is less than the SRS server's own supported version.</t>

            <section anchor="nzsrs_request" title="Request Format">
                <t>Requests MUST include three parameters in the HTTP
                    POST request:</t>
                <texttable>
                    <ttcol align="left">Parameter</ttcol>
                    <ttcol align="left">Description</ttcol>
                    <c>n</c>
                    <c>The registry-assigned registrar identifier.</c>
                    <c>r</c>
                    <c>The XML request, encoded in UTF-8.</c>
                    <c>s</c>
                    <c>An OpenPGP-compatible signature of the XML
                        request document, signed with the registrar's
                        private key.  Presented in ASCII armored format
                        and encoded in UTF-8.</c>
                </texttable>
                <t>The XML request document MUST be formatted using the
                    NZSRSRequest element.  The NZSRSRequest element MAY
                    contain one or more requests.  Valid requests names
                    are defined by the <xref
                        target="entity_action">Action</xref> entity.</t>
                <figure>
                    <preamble>Syntax:</preamble>
                    <artwork><![CDATA[
<!ELEMENT NZSRSRequest ((%Action;)+)>
<!ATTLIST NZSRSRequest
        VerMajor    (1|2)         #REQUIRED
        VerMinor    %Number;      #REQUIRED
        RegistrarId %RegistrarId; #IMPLIED>]]></artwork>
                </figure>
                <figure>
                    <preamble>Example of a request body prior to
                        encoding:</preamble>
                    <artwork><![CDATA[
n=50041&r=
<NZSRSRequest VerMajor="2" VerMinor="47" RegistrarId="50041">
    <Whois DomainName="example.org" />
</NZSRSRequest>&s=-----BEGIN PGP SIGNATURE-----...]]></artwork>
                </figure>
            </section>

            <section anchor="nzsrs_response" title="Response Format">
                <t>The body of the SRS server response MUST include two
                    parameters:</t>
                <texttable>
                    <ttcol align="left">Parameter</ttcol>
                    <ttcol align="left">Description</ttcol>
                    <c>r</c>
                    <c>The XML response, encoded in UTF-8.</c>
                    <c>s</c>
                    <c>An OpenPGP-compatible signature of the XML
                        response document, signed with the registry's
                        private key.  Presented in ASCII armored format
                        and encoded in UTF-8.</c>
                </texttable>
                <t>The XML response document MUST be formatted using the
                    NZSRSResponse element.  The NZSRSResponse element
                    MAY contain one or more <xref
                        target="response">Response</xref> elements or an
                    <xref target="error">Error</xref> element.</t>
                <figure>
                    <preamble>Syntax:</preamble>
                    <artwork><![CDATA[
<!ELEMENT NZSRSResponse (Response+|Error)>
<!ATTLIST NZSRSResponse
        VerMajor    (2)           #REQUIRED
        VerMinor    %Number;      #REQUIRED
        RegistrarId %RegistrarId; #IMPLIED>]]></artwork>
                </figure>

                <figure>
                    <preamble>Example of a decoded response message:</preamble>
                    <artwork><![CDATA[
r=<?xml version="1.0" encoding="utf-8"?>
<NZSRSResponse VerMajor="2" VerMinor="47" RegistrarId="50041">
    <Response Action="Whois" FeId="4" FeSeq="137"
      OrigRegistrarId="50041" RecipientRegistrarId="50041" Rows="1">
        <FeTimeStamp Year="2007" Month="10" Day="19" Hour="14"
           Minute="7" Second="51" TimeZoneOffset="+13:00" />
        <Domain DomainName="example.org">...</Domain>
    </Response>
</NZSRSResponse>&s=-----BEGIN PGP SIGNATURE-----...]]></artwork>
                </figure>

                <section anchor="response" title="Response">
                    <t>The response element acts as a container for all
                        response types, including errors to individual
                        requests in an XML document.  If an error is
                        encountered in parsing the request, or the
                        client specified a major protocol version higher
                        than that supported by the server, the SRS
                        server MUST return the <xref
                            target="error">Error</xref> element with no
                        Response container.</t>

                    <t>The response element may contain any of the
                        following:
                
                        <list style="symbols">
                            <t>multiple responses in response to a <xref
                                    target="get_messages">GetMessages</xref>
                                request, or</t>
                            <t>a single <xref
                                    target="entity_action_response">action
                                    response</xref> specific to the type
                                of action request.</t>
                        </list>
                    </t>

                    <t>The Response element must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>Action</c>
                        <c>The name of the <xref
                                target="entity_action">request
                                action</xref> that this is a response
                            to.</c>
                        <c>FeId</c>
                        <c>The unique identifier of the SRS server that
                            handled the request.</c>
                        <c>FeSeq</c>
                        <c>The unique identifier for the request on the
                            server that handled the request.</c>
                        <c>OrigRegistrarId</c>
                        <c>The unique identifier for the user that
                            submitted the request to the SRS server.</c>
                    </texttable>

                    <t>The Response element may also specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>TransId</c>
                        <c>The identifier (either an ActionId or a
                            QryId) for the transaction submitted by the
                            user that originated the request.</c>
                        <c>Rows</c>
                        <c>The number of results returned in the current
                            response body.</c>
                        <c>Count</c>
                        <c>The total number of matches found in the SRS
                            that satisfied the request query
                            conditions.</c>
                        <c>MoreRowsAvailable</c>
                        <c>A boolean value indicating whether this
                            response was truncated by an SRS limit on
                            the number of results returned.</c>
                        <c>RecipientRegistrarId</c>
                        <c>The unique identifier for the user that the
                            response is returned to.</c>
                    </texttable>

                    <t>The Response element MUST contain an <xref
                            target="timestamp">FeTimeStamp</xref>
                        element, which shows the time and date that the
                        request was processed by the SRS server, and
                        also MAY contain one of the <xref
                            target="response_types">SRS response
                        types</xref>.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT Response (FeTimeStamp,
                    (Response*|%ActionResponse;)?
                   )>
<!ATTLIST Response
        Action (%Action;|UnknownTransaction|DomainTransfer) #REQUIRED
        FeId                 %Number;      #REQUIRED
        FeSeq                %Number;      #REQUIRED
        OrigRegistrarId      %RegistrarId; #REQUIRED
        TransId              %UID;         #IMPLIED
        Rows                 %Number;      #IMPLIED
        Count                %Number;      #IMPLIED
        MoreRowsAvailable    %Boolean;     #IMPLIED
        RecipientRegistrarId %RegistrarId; #IMPLIED>]]></artwork>
                    </figure>
                </section>

                <section title="Error">
                    <t>An Error response may be returned for a whole
                        request - for instance, when the request body
                        failed validation or incorrect authentication
                        was provided - or for one or more requests from
                        the XML document body.  In either case, the
                        Error element will be used.</t>
                    <t>This document does not specify the error codes
                        and situations.  All SRS server errors SHOULD be
                        treated as a failed request by the client and
                        the SRS server MUST NOT change any stored
                        details if it returns an error to the client
                        request.</t>
                </section>
            </section>
        </section>

        <section title="SRS Requests">
            <t>The SRS defines request elements that support the running
                of the shared domain registry from both a technical and
                a business perspective.  Implementations SHOULD ensure
                that access to requests and data is restricted to comply
                with legal obligations and the registry's own business
                requirements.</t>

            <t>To support the implementation of a flexible permissions
                model for SRS users, the requests are grouped into five
                major categories:
                <list style="hanging">
                    <t hangText="Domain query:">requests that allow
                        users to query domain related information stored
                        in the SRS</t>
                    <t hangText="Domain write:">requests that allow
                        users to create and update domain related
                        information in the SRS</t>
                    <t hangText="Registrar query:">requests that allow
                        users to query registrar related information
                        stored in the SRS</t>
                    <t hangText="Registrar write:">requests that allow
                        users to create and update registrar related
                        information in the SRS</t>
                    <t hangText="Registry:">requests that support
                        registry business functions, SRS system
                        settings, running jobs on the SRS, and billing
                        functions</t>
                </list>
            </t>

            <t>Typically, registrars will have access to the domain
                query, domain write and registrar query requests, as
                well as the ability to maintain their own registrar
                information within the SRS.  Administrative users will
                be able to create registrars and run registry requests -
                normally this will be restricted to the registry
                itself.</t>

            <t>All requests that result in an update to data held by the
                SRS server MUST provide an ActionId to identify the
                request.  The combination of RegistrarId and ActionId
                for a request MUST be unique.  This allows requests to
                be fully identified by the user that made the request
                and the ActionId that the user assigned to it.  SRS
                server implementations SHOULD maintain a full audit
                trail by logging all update requests and their
                outcomes.</t>

            <t>If the SRS server receives a request with the same
                RegistrarId and ActionId as a previous request, but
                different request details, it MUST return an <xref
                    target="error">Error</xref> response.  If the SRS
                server receives a request with the same
                RegistrarId and ActionId as a previous request, and
                identical request details, it MUST respond by returning
                the response that was sent to the original request.</t>

            <section title="Domain Query Actions">
                <t>The domain query requests are:</t>
                <texttable>
                    <ttcol align="left">Action</ttcol>
                    <ttcol align="left">Description</ttcol>
                    <c>ActionDetailsQry</c>
                    <c>Retrieve the XML content and signature for a
                        previous SRS request and the response that it
                        received.</c>
                    <c>DomainDetailsQry</c>
                    <c>Retrieve the current stored details for a
                        domain.</c>
                    <c>UDAIValidQry</c>
                    <c>Check the validity of a UDAI code for a
                        domain.</c>
                    <c>Whois</c>
                    <c>Retrieve the public WHOIS data for a domain.</c>
                </texttable>

                <section title="ActionDetailsQry">
                    <t>The ActionDetailsQry request allows the user to
                        retrieve the original XML document and signature
                        for a previous request to the SRS, and also the
                        XML document and signature for the response that
                        was returned.  The user must supply the correct
                        ActionId of the original request.  Registrars
                        SHOULD be restricted to only retrieving the
                        details of requests that they were the
                        originating registrar for.</t>
                
                    <section title="Request">
                        <t>The ActionDetailsQry request is an empty
                            element that must specify:</t>
                        <texttable>
                            <ttcol align="left">Attribute</ttcol>
                            <ttcol align="left">Description</ttcol>
                            <c>ActionId</c>
                            <c>An action identifier.  This is the action
                                identifier for a previous request to the
                                SRS.</c>
                        </texttable>

                        <t>Additionally, the request may specify:</t>
                        <texttable>
                            <ttcol align="left">Attribute</ttcol>
                            <ttcol align="left">Description</ttcol>
                            <c>QryId</c>
                            <c>A query identifier.  This has no meaning
                                within the SRS; if provided, it will be
                                returned in the response to this
                                request.</c>
                            <c>OriginatingRegistrarId</c>
                            <c>A user identifier.  The identifier of the
                                registrar that originally requested the
                                action that matches the provided
                                ActionId.</c>
                        </texttable>
                        <figure>
                            <preamble>Syntax:</preamble>
                            <artwork><![CDATA[
<!ELEMENT ActionDetailsQry EMPTY>
<!ATTLIST ActionDetailsQry
        QryId                  %UID; #IMPLIED
        ActionId               %UID; #REQUIRED
        OriginatingRegistrarId %UID; #IMPLIED>]]></artwork>
                        </figure>
                    </section>
                    <section title="Response">
                        <t>The response to an ActionDetailsQry request
                            will be either an <xref
                                target="error">Error</xref> element or a
                            <xref
                                target="rawrequest_rawresponse">RawRequest
                                and a RawResponse</xref> element
                            containing the XML and the registrar
                            signature of the original request and
                            response.  If a QryId was provided in the
                            request, it is returned in the TransId
                            attribute of the Response element.</t>
                    </section>
                </section>

                <section anchor="domain_details_qry"
                    title="DomainDetailsQry">
                    <t>The DomainDetailsQry request allows the user to
                        retrieve the stored details (including details
                        that will not be shown for a public WHOIS query)
                        for one or more domains.  The request can be
                        used to view historical details for a domain and
                        may return a full update history for a
                        domain.</t>

                    <t>Registrars are expected to only request
                        information on domains that they currently
                        manage.  SRS implementations SHOULD restrict
                        access to non-public domain information to the
                        managing registrar.  If historical data is
                        requested for a period when the registrar did
                        not manage a particular domain - for example, in
                        the case of domain transfers - then only the
                        public details as returned by the <xref
                            target="whois">Whois</xref> request shall be
                        returned for this time.</t>

                    <section title="Request">
                        <t>The DomainDetailsQry request may specify:</t>
                        <texttable>
                            <ttcol align="left">Attribute</ttcol>
                            <ttcol align="left">Description</ttcol>
                            <c>QryId</c>
                            <c>A query identifier.  This has no meaning
                                within the SRS; if provided, it will be
                                returned in the response to this
                                request.</c>
                            <c>Status</c>
                            <c>A text filter.  Matched against the
                                registration status of domains.  Valid
                                values are "Active" and
                                "PendingRelease".</c>
                            <c>Delegate</c>
                            <c>A boolean value.  Matched against the
                                delegation status of domains.</c>
                            <c>Term</c>
                            <c>A numeric value.  Matched against the
                                billing term for domains.</c>
                            <c>RegistrantRef</c>
                            <c>A text filter. Matched against the
                                registrar-provided customer reference of
                                a domain's registrant.</c>
                            <c>MaxResults</c>
                            <c>A numeric value.  Used to specify the
                                maximum number of domain records to
                                return.  If not specified, the default
                                defined by the server implementation
                                will be used.</c>
                            <c>SkipResults</c>
                            <c>A numeric value that defaults to 0.  Used
                                to specify the number of records at the
                                start of a results set to be skipped
                                before returning domain results.  Can be
                                used with MaxResults to retrieve a large
                                result set in pages.</c>
                            <c>CountResults</c>
                            <c>A boolean value that defaults to false.
                                If true, the response should only return
                                the number of matches for the query and
                                no specific domain details.  If
                                MaxResults or SkipResults is defined and
                                CountResults is true then the server
                                SHALL return an error response.</c>
                        </texttable>

                        <t>For the optional Status, Delegate, Term, and
                            RegistrantRef filters, if the attribute is
                            not specified, then the results will not be
                            filtered on these fields.</t>

                        <t>The request may also include elements to
                            specify other filters to limit the results
                            returned by the SRS server and to change the
                            list of fields that are returned in the
                            results.  All of the filters are optional
                            and, with the exception of the
                            DomainNameFilter, may only occur once in the
                            request.  The DomainNameFilter may occur
                            multiple times in the request and details of
                            domains that match any of the provided
                            filters will be returned in the results.</t>
                        
                        <t>The elements that can be included in the
                            DomainDetailsQry request are:

                            <list style="symbols">
                                <t><xref
                                        target="domain_name_filter">DomainNameFilter</xref></t>
                                <t><xref
                                        target="name_server_filter">NameServerFilter</xref></t>
                                <t><xref
                                        target="contact_details_filter">RegistrantContactFilter</xref></t>
                                <t><xref
                                        target="contact_details_filter">AdminContactFilter</xref></t>
                                <t><xref
                                        target="contact_details_filter">TechnicalContactFilter</xref></t>
                                <t><xref
                                        target="date_range">ResultDateRange</xref></t>
                                <t><xref
                                        target="date_range">SearchDateRange</xref></t>
                                <t><xref
                                        target="date_range">ChangedInDateRange</xref></t>
                                <t><xref
                                        target="date_range">RegisteredDateRange</xref></t>
                                <t><xref
                                        target="date_range">LockedDateRange</xref></t>
                                <t><xref
                                        target="date_range">CancelledDateRange</xref></t>
                                <t><xref
                                        target="date_range">BilledUntilDateRange</xref></t>
                                <t><xref
                                        target="audit_text_filter">AuditTextFilter</xref></t>
                                <t><xref
                                        target="action_id_filter">ActionIdFilter</xref></t>
                                <t><xref
                                        target="field_list">FieldList</xref></t>
                            </list>
                        </t>

                        <t>The FieldList element specifies the fields to
                            be returned for each domain in the result
                            set.  If no FieldList is specified, the SRS
                            server will only return the DomainName and
                            Status for each domain.</t>

                        <figure>
                            <preamble>Syntax:</preamble>
                            <artwork><![CDATA[
<!ELEMENT DomainDetailsQry (DomainNameFilter*,NameServerFilter?,
                           RegistrantContactFilter?,
                           AdminContactFilter?,
                           TechnicalContactFilter?,
                           ResultDateRange?,SearchDateRange?,
                           ChangedInDateRange?,
                           RegisteredDateRange?,LockedDateRange?,
                           CancelledDateRange?,
                           BilledUntilDateRange?,
                           AuditTextFilter?,ActionIdFilter?,
                           FieldList?)>
<!ATTLIST DomainDetailsQry
        QryId         %UID;               #IMPLIED
        Status        (%RegDomainStatus;) #IMPLIED
        Delegate      %Boolean;           #IMPLIED
        Term          %Term;              #IMPLIED
        RegistrantRef %UID;               #IMPLIED
        MaxResults    %Number;            #IMPLIED
        SkipResults   %Number;            #IMPLIED
        CountResults  %Boolean;           "0">]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a DomainDetailsQry request will
                        be either an <xref target="error">Error </xref>
                        element, or zero or more <xref
                            target="domain">Domain</xref> elements that
                        matched the filters specified in the request.
                        If a QryId was provided in the request, it is
                        returned in the TransId attribute of the
                        Response element.</t>

                    <t>If a FieldList was specified in the request, the
                        fields provided in any returned Domain elements
                        will match the list provided unless restricted
                        due to ownership by a registrar other than the
                        registrar making the request - in such cases
                        only the public Whois information shall be
                        returned.  DomainName will always be returned
                        for all matched domains.</t>

                    <t>By default, only the DomainName and Status
                        details shall be returned for each Domain.</t>

                    <t>The ResultDateRange element in a DomainDetailsQry
                        request has a number of affects on the response:
                        
                        <list style="symbols">
                            <t>the results shall be extracted by first
                                selecting all of the domains that were
                                managed by the requesting registrar
                                during the given date range and then
                                applying the other filters to this new
                                result set to produce the final
                                response</t>

                            <t>the EffectiveDateRange will also be
                                returned for each result domain,
                                regardless of whether it was specified
                                by a FieldList attribute</t>

                            <t>the MaxResults and SkipResults elements
                                in the request (if specified) are
                                treated as a maximum number of distinct
                                domains and a number of distinct domains
                                to skip - the actual number of results
                                returned may exceed MaxResults due to
                                having multiple entries for each domain
                                returned with different effective date
                                ranges</t>
                        </list>
                    </t>

                </section>
            </section>

            <section title="UDAIValidQry">
                <t>The UDAIValidQry request allows users to check a UDAI
                    strings against the details stored by the SRS for a
                    domain.  Changes to domains may only be made with a
                    valid UDAI.</t>

                <section title="Request">
                    <t>The UDAIValidQry request is an empty element
                        that must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>DomainName</c>
                        <c>A text string.  The name of the domain to
                            check.</c>
                        <c>UDAI</c>
                        <c>A text string.  The UDAI to be checked.</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this request.</c>
                    </texttable>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT UDAIValidQry EMPTY>
<!ATTLIST UDAIValidQry
        QryId      %UID;        #IMPLIED
        DomainName %DomainName; #REQUIRED
        UDAI       %UID;        #REQUIRED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a UDAIValidQry request will be a
                        <xref target="udaivalid">UDAIValid</xref>
                        element.  If a QryId was provided in the
                        request, it is returned in the TransId attribute
                        of the Response element.</t>
                </section>
            </section>

            <section anchor="whois" title="Whois">
                <t>The Whois request allows users to retrieve the public
                    information stored on domains.  The details
                    requested may be the full public details, or a
                    simple check of the status of the domain.</t>
                <section title="Request">
                    <t>The Whois request is an empty element that must
                        specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>DomainName</c>
                        <c>A text string.  The domain name for which the
                            details are requested.</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this
                            request.</c>
                        <c>FullResult</c>
                        <c>A boolean value.  Indicates whether the full
                            domain details should be returned.  If
                            false, only the status of the domain shall
                            be returned.  Defaults to true.</c>
                        <c>SourceIP</c>
                        <c>An IP address.  The source IP address of the
                            request.  This may be used to monitor and
                            limit Whois requests.</c>
                    </texttable>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT Whois EMPTY>
<!ATTLIST Whois
        QryId      %UID;        #IMPLIED
        FullResult %Boolean;    "1" 
        SourceIP   CDATA        #IMPLIED
        DomainName %DomainName; #REQUIRED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a Whois request will be either an
                        <xref target="error">Error</xref> element, or a
                        <xref target="domain">Domain</xref> element.  If
                        a QryId was provided in the request, it is
                        returned in the TransId attribute of the
                        Response element.</t>
                        
                    <t>The amount of detail returned for matched domains
                        will depend on the request details and the
                        domain status:
                        <list style="symbols">
                            <t>if the domain is not currently
                                registered, only the domain's name and
                                status ("Available") will be
                                returned,</t>
                            <t>if the request is not for a full result,
                                only the domain status will be
                                returned,</t>
                            <t>otherwise, the Domain element will be
                                returned with any of the public details
                                for which the SRS server has a value
                                stored</t>
                        </list>
                        The public details for a domain should be set by
                        the registry's policy.  For the .nz registry,
                        the public details are:
                        <list style="symbols">
                            <t>DomainName</t>
                            <t>Status</t>
                            <t>RegisteredDate</t>
                            <t>CancelledDate</t>
                            <t>LockedDate</t>
                            <t>BilledUntil</t>
                            <t>EffectiveFrom</t>
                            <t>Delegate</t>
                            <t>RegistrarPublicContact</t>
                            <t>RegistrantContact</t>
                            <t>AdminContact</t>
                            <t>TechnicalContact</t>
                            <t>NameServers</t>
                            <t>AuditDetails</t>
                        </list>
                    </t>
                </section>
            </section>
        </section>

        <section title="Domain Write Actions">
            <t>The domain write requests are:</t>
            <texttable>
                <ttcol align="left">Request</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>DomainCreate</c>
                <c>Register a new domain in the SRS.</c>
                <c>DomainUpdate</c>
                <c>Update the stored details of an existing domain in
                    the SRS.</c>
            </texttable>

            <section title="DomainCreate">
                <t>The DomainCreate request allows users to request the
                    creation of a new domain in the SRS.  The domain
                    created will be managed by the registrar that makes
                    the request - or by the effective registrar for the
                    request, if the request is made by the registry.
                    This request will only be successful if the domain
                    name is available.</t>

                <section title="Request">
                    <t>The DomainCreate request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                        <c>DomainName</c>
                        <c>A text string.  The domain name to be
                            created.  Must conform to the format and
                            syntax in <xref target="RFC1035">RFC
                                1035</xref>, <xref target="RFC1123">RFC
                                1123</xref>, and <xref
                                target="RFC2181">RFC 2181</xref>.</c>
                        <c>Term</c>
                        <c>A numeric value.  The number of months to
                            bill when the domain is registered or
                            renewed.</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>RegistrantRef</c>
                        <c>A customer identifier.  Assigned to the
                            registrant by the registrar.</c>
                        <c>Delegate</c>
                        <c>A boolean value that defaults to true.
                            Indicates whether the domain should be
                            delegated to appear in the DNS.  Requires
                            details of name servers to be provided with
                            the domain creation request.</c>
                    </texttable>

                    <t>The request must also include a <xref
                            target="contact_details">RegistrantContact</xref>
                        details element for the domain, and may include
                        elements defining the <xref
                            target="contact_details">AdminContact</xref>,
                        <xref
                            target="contact_details">TechnicalContact</xref>,
                        and <xref
                            target="name_servers">NameServers</xref> for
                        the domain, and also <xref
                            target="audit_text">AuditText</xref> for the
                        transaction.</t>

                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT DomainCreate (RegistrantContact,AdminContact?,
                       TechnicalContact?,NameServers?,AuditText?)>
<!ATTLIST DomainCreate
        ActionId      %UID;        #REQUIRED
        DomainName    %DomainName; #REQUIRED
        RegistrantRef %UID;        #IMPLIED
        Term          %Term;       #REQUIRED
        Delegate      %Boolean;    "1">]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a DomainCreate request will be
                        either an <xref target="error">Error</xref>
                        element, or a full <xref
                            target="domain">Domain</xref> element.  The
                        Domain element will only be returned if the
                        domain creation is successful.</t>
                </section>
            </section>

            <section title="DomainUpdate">
                <t>The DomainUpdate request allows users to update the
                    details of existing domains and to perform various
                    update functions, including:
                    <list style="symbols">
                        <t>transferring a domain</t>
                        <t>cancelling a domain</t>
                        <t>un-cancelling a domain</t>
                        <t>renewing a domain</t>
                        <t>changing the delegation status of a domain</t>
                        <t>requesting a new domain UDAI</t>
                    </list>
                </t>
                <t>Domain details may be updated individually or
                    combined in a single request that updates multiple
                    parts of the domain information.</t>
                <t>In the absence of a valid UDAI, domain updates are
                    restricted to the registrar that currently manages a
                    domain, or to suitably authorized registry users.
                    If a registrant provides the UDAI for their domain
                    to a registrar other than the one that currently
                    manages the domain, the other registrar will be able
                    to perform an update to the domain.  If the UDAI is
                    valid, then the new registrar may make any required
                    updates to the domain details and the SRS server
                    will automatically initiate a domain transfer as
                    part of processing the request.</t>
                <t>A domain can be transferred regardless of the status
                    of the domain (that is, the status of the domain can
                    be "Active" or "PendingRelease" at the time of the
                    transfer), however, the domain MUST NOT be locked.
                    A locked domain cannot be transferred until it is
                    unlocked.  Registrants SHOULD have access to the
                    UDAI for their domains to allow them to transfer
                    their domains freely between registrars.</t>
                <section title="Request">
                    <t>The DomainUpdate request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                    </texttable>

                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>UDAI</c>
                        <c>A text string.  The UDAI for the domain.</c>
                        <c>NewUDAI</c>
                        <c>A boolean value.  Allows the user to request
                            generation of a new UDAI for the domain.
                            The server MAY provide a new UDAI value
                            regardless of the value of this
                            parameter.</c>
                        <c>RegistrantRef</c>
                        <c>A customer identifier.  Assigned to the
                            registrant by the registrar.</c>
                        <c>Term</c>
                        <c>A numeric value.  The number of months to
                            bill when the domain is registered or
                            renewed.</c>
                        <c>Delegate</c>
                        <c>A boolean value.  Indicates whether the
                            domain should be delegated to appear in the
                            DNS.  Requires details of name servers to be
                            available to the SRS server.</c>
                        <c>Renew</c>
                        <c>A boolean value.  Indicates that the domain
                            should be billed for a further billing
                            period immediately, rather than waiting for
                            it to expire.</c>
                        <c>NoAutoRenew</c>
                        <c>A boolean value.  Indicates that the domain
                            should not automatically renew at the expiry
                            date.  Only the registry can change the
                            automatic renewal status for a domain.</c>
                        <c>Lock</c>
                        <c>A boolean value.  Specifies the lock status
                            of the domain.  Locked domains cannot be
                            updated until they are unlocked by the
                            registry.  If the attribute is not
                            specified, the current lock setting will
                            remain unchanged.  SRS implementations
                            MAY allow registrars to change the lock
                            status of domains.</c>
                        <c>Cancel</c>
                        <c>A boolean value.  Specifies a request to
                            change the status of a domain.  If true, a
                            domain in "Active" status will change to
                            "PendingRelease"; domains in any other
                            status will remain unchanged.  If false, a
                            domain in "PendingRelease" status will
                            change to "Active"; domains in any other
                            status will remain unchanged. If the
                            attribute is not specified, the current
                            status will remain unchanged.</c>
                        <c>Release</c>
                        <c>A boolean value.  Specifies that the domain
                            should become "Available" after the
                            cancellation grace period expires.</c>
                        <c>FullResult</c>
                        <c>A boolean value.  Specifies that a full
                            domain result is required (if true), or only
                            the changed fields (if false).  Defaults to
                            true.</c>
                    </texttable>

                    <t>For the boolean attributes, if the attribute is
                        not specified in the update request, then no
                        change will be made to the related domain
                        details.</t>

                    <t>The DomainUpdate request must also include a
                        <xref
                            target="domain_name_filter">DomainNameFilter</xref>
                        element to identify the domain(s) to be updated
                        and may include elements defining the new
                        details for <xref
                            target="contact_details">RegistrantContact</xref>,
                        <xref
                            target="contact_details">AdminContact</xref>,
                        <xref
                            target="contact_details">TechnicalContact</xref>,
                        and <xref
                            target="name_servers">NameServers</xref> for
                        the domain, and also <xref
                            target="audit_text">AuditText</xref> for the
                        transaction.</t>

                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT DomainUpdate (DomainNameFilter+,RegistrantContact?,
                       AdminContact?,TechnicalContact?,
                       NameServers?,AuditText?)>
<!ATTLIST DomainUpdate
        ActionId      %UID;     #REQUIRED
        UDAI          %UID;     #IMPLIED
        NewUDAI       %Boolean; #IMPLIED
        RegistrantRef %UID;     #IMPLIED
        Term          %Term;    #IMPLIED
        Delegate      %Boolean; #IMPLIED
        Renew         %Boolean; #IMPLIED
        NoAutoRenew   %Boolean; #IMPLIED
        Lock          %Boolean; #IMPLIED
        Cancel        %Boolean; #IMPLIED
        Release       %Boolean; #IMPLIED
        FullResult    %Boolean; "1">]]></artwork>
                    </figure>
                </section>

                <section title="Response">
                    <t>The response to a DomainUpdate request will be
                        either an <xref target="error">Error</xref>
                        element, or a <xref
                            target="domain">Domain</xref> element.  By
                        default the Domain element returned will include
                        the following fields:

                        <list style="symbols">
                            <t>DomainName</t>
                            <t>AuditDetails</t>
                            <t>Status</t>
                            <t>Delegate</t>
                            <t>Term</t>
                            <t>NameServers</t>
                            <t>RegistrantRef</t>
                            <t>RegistrarId</t>
                            <t>RegistrantContact</t>
                            <t>AdminContact</t>
                            <t>TechnicalContact</t>
                            <t>BilledUntil</t>
                            <t>RegisteredDate</t>
                            <t>CancelledDate</t>
                            <t>LockedDate</t>
                        </list>

                        If the FullResult parameter in the request is
                        false, the DomainName and AuditDetails fields
                        will be returned along with any of the other
                        fields above that have been updated by the
                        transaction.</t>
                </section>
            </section>
        </section>

        <section title="Registrar Query Actions">
            <t>The registrar query requests are:</t>
            <texttable>
                <ttcol align="left">Request</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>GetMessages</c>
                <c>Retrieve responses generated by the SRS server for a
                    registrar.</c>
                <c>RegistrarAccountQry</c>
                <c>Request details of transactions in the account of a
                    registrar.</c>
                <c>RegistrarDetailsQry</c>
                <c>Request the registrar details stored by the SRS
                    server.</c>
            </texttable>

            <section anchor="get_messages" title="GetMessages">
                <t>The GetMessages request allows the user to retrieve
                    messages that they may have been unaware of, or to
                    confirm the status of a specific transaction that
                    had been sent previously.  Messages that registrars
                    may miss are likely to include requests that are
                    made by the registry on the registrar's behalf, and
                    domain transfer requests issued by other registrars
                    transferring domains at the request of a
                    registrant.</t>

                <t>The GetMessages request MUST NOT be accompanied by
                    any other requests within a request document.</t>
            
                <section title="Request">
                    <t>The GetMessages request that may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this
                            request.</c>
                        <c>OriginatingRegistrarId</c>
                        <c>A user identifier.  The identifier of the
                            registrar that originally requested the
                            action.  Also accepts the special <xref
                                target="entity_registrar_id_or_others">"other
                                registrar"</xref> value.</c>
                        <c>ActionId</c>
                        <c>An action identifier.  This is the action
                            identifier for a previous request to the
                            SRS.</c>
                        <c>RecipientRegistrarId</c>
                        <c>A user identifier.  The registrar
                            identifier of the registrar that the
                            messages retrieved were intended for.  Only
                            registry users can retrieve messages
                            intended for a user other than themselves.</c>
                        <c>MaxResults</c>
                        <c>A numeric value.  Used to specify the maximum
                            number of messages to return.  If not
                            specified, the default defined by the server
                            implementation will be used.</c>
                        <c>SkipResults</c>
                        <c>A numeric value.  Used to specify the number
                            of records at the start of a results set to
                            be skipped before returning domain results.
                            Can be used with MaxResults to retrieve a
                            large result set in pages.</c>
                        <c>CountResults</c>
                        <c>A boolean value that defaults to false.  If
                            true, the response should only return the
                            number of matches for the query and no
                            messages.  If MaxResults or SkipResults is
                            defined and CountResults is true then the
                            server SHALL return an error response.</c>
                    </texttable>

                    <t>The GetMessages request may also include a <xref
                            target="date_range">TransDateRange</xref>
                        element and an <xref
                            target="audit_text_filter">AuditTextFilter</xref>
                        element.</t>

                    <t>Either an ActionId or a TransDateRange MUST be
                        specified in order for the request to succeed.</t>

                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT GetMessages (TransDateRange?,AuditTextFilter?)>
<!ATTLIST GetMessages
        QryId                  %UID;                 #IMPLIED
        OriginatingRegistrarId %RegistrarIdOrOTHERS; #IMPLIED
        ActionId               %UID;                 #IMPLIED
        RecipientRegistrarId   %RegistrarId;         #IMPLIED
        MaxResults             %Number;              #IMPLIED
        SkipResults            %Number;              #IMPLIED
        CountResults           %Boolean;             "0">]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a GetMessages request will be
                        either an <xref target="error">Error</xref>
                        element or one or more <xref
                            target="response">Response</xref> elements
                        containing the details of messages that match
                        the request specification.</t>
                </section>
            </section>

            <section anchor="registrar_account_qry" title="RegistrarAccountQry">
                <t>The RegistrarAccountQry request allows the user to
                    retrieve the details of billing transactions made in
                    the account of a registrar.</t>

                <section title="Request">
                    <t>The request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this
                            request.</c>
                        <c>RegistrantRef</c>
                        <c>A text filter.  Matched against the
                            registrar-provided customer reference of a
                            registrant.</c>
                        <c>DomainName</c>
                        <c>A text filter.  Matched against the domain
                            name that billing amounts relate to.</c>
                        <c>InvoiceId</c>
                        <c>An invoice identifier.  Used to match billing
                            records that have been associated with an
                            invoice.</c>
                        <c>MaxResults</c>
                        <c>A numeric value.  Used to specify the maximum
                            number of messages to return.  If not
                            specified, the default defined by the server
                            implementation will be used.</c>
                        <c>SkipResults</c>
                        <c>A numeric value.  Used to specify the number
                            of records at the start of a results set to
                            be skipped before returning domain results.
                            Can be used with MaxResults to retrieve a
                            large result set in pages.</c>
                        <c>TransStatus</c>
                        <c>A <xref
                                target="entity_bill_status">BillStatus</xref>
                            value.  Used to filter on the bill status of
                            billing amounts.</c>
                        <c>CountResults</c>
                        <c>A boolean value that defaults to false.  If
                            true, the response should only return the
                            number of matches for the query and no
                            messages.  If MaxResults or SkipResults is
                            defined and CountResults is true then the
                            server SHALL return an error response.</c>
                    </texttable>

                    <t>The RegistrarAccountQry request may also include
                        a <xref
                            target="date_range">TransDateRange</xref>
                        element and an <xref
                            target="date_range">InvoiceDateRange</xref>
                        element.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT RegistrarAccountQry (TransDateRange?,InvoiceDateRange?)>
<!ATTLIST RegistrarAccountQry
        QryId         %UID;          #IMPLIED
        RegistrantRef %UID;          #IMPLIED
        DomainName    %DomainName;   #IMPLIED
        InvoiceId     %UID;          #IMPLIED
        MaxResults    %Number;       #IMPLIED
        SkipResults   %Number;       #IMPLIED
        TransStatus   (%BillStatus;) #IMPLIED
        CountResults  %Boolean;      "0">]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a RegistrarAccountQry request
                        will be either an <xref
                            target="error">Error</xref> element or a
                        set of <xref
                            target="billingtrans">BillingTrans</xref>
                        elements.</t>
                </section>
            </section>

            <section anchor="registrar_details_qry" title="RegistrarDetailsQry">
                <t>The RegistrarDetailsQry request allows the user
                    to retrieve the stored details for a registrar
                    account.  Registrars SHOULD be restricted to only
                    retrieving details of their own account.  The
                    registry may retrieve information about any
                    registrar.</t>

                <section title="Request">
                    <t>The request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this request.</c>
                        <c>RegistrarId</c>
                        <c>A user identifier.  The registrar
                            identifier of the registrar to retrieve
                            stored details for.</c>
                        <c>NameFilter</c>
                        <c>A text filter.  Matched against the registrar
                            names stored in the SRS server.</c>
                    </texttable>

                    <t>The RegistrarDetailsQry request may also include a <xref
                            target="date_range">ResultDateRange</xref>
                        element.</t>

                    <t>If the ResultDateRange element is supplied, it
                        will cause the server to return multiple records
                        for each registrar, describing all the changes
                        that the registrar went through during the given
                        period.  Otherwise, if it is not specified, only
                        the latest data for each registrar that matches
                        the filters will be returned. When a
                        ResultDateRange is requested, the Allowed2LDs
                        and the Roles are not returned (there is no
                        historical data available for these fields).</t>

                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT RegistrarDetailsQry (ResultDateRange?)>
<!ATTLIST RegistrarDetailsQry
        QryId       %UID;         #IMPLIED
        RegistrarId %RegistrarId; #IMPLIED
        NameFilter  CDATA         #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a RegistrarDetailsQry request
                        will be either an <xref
                            target="error">Error</xref> element or one
                        or more <xref
                            target="registrar">Registrar</xref>
                        elements matching the provided filter details.</t>
                </section>
            </section>
        </section>

        <section title="Registrar Write Actions">
            <t>Registrar's typically only have access to a single
                requests for the maintenance of their details stored at
                the SRS:</t>
            <texttable>
                <ttcol align="left">Request</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>RegistrarUpdate</c>
                <c>Updates the details stored about a registrar.</c>
            </texttable>

            <section anchor="registrar_update" title="RegistrarUpdate">
                <t>The RegistrarUpdate request allows the user to update
                    their own account details and allows the registry to
                    maintain registrar information for any registrar.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier. This is a unique
                            identifier for the request to the SRS
                            server.</c>
                    </texttable>

                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>Name</c>
                        <c>A text string.  The registrar's identifier in
                            the registry's accounting system.</c>
                        <c>AccRef</c>
                        <c>A text string.  The registrar's identifier in
                            the registry's accounting system.</c>
                        <c>URL</c>
                        <c>A text string.  The registrar's public web
                            site address.</c>
                    </texttable>

                    <t>The RegistrarUpdate request may also include new
                        details for any of the related registrar
                        information elements:
                        <list style="symbols">
                            <t><xref
                                    target="contact_details">RegistrarPublicContact</xref></t>
                            <t><xref
                                    target="contact_details">RegistrarSRSContact</xref></t>
                            <t><xref
                                    target="contact_details">DefaultTechnicalContact</xref></t>
                            <t><xref
                                    target="encrypt_keys">EncryptKeys</xref></t>
                            <t><xref
                                    target="allowed2lds">Allowed2LDs</xref></t>
                            <t><xref target="roles">Roles</xref></t>
                            <t><xref
                                    target="audit_text">AuditText</xref></t>
                        </list>
                    </t>

                    <t>If an attribute or element is not provided in the
                        request, then the related details SHALL NOT be
                        updated by the SRS server.</t>

                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT RegistrarUpdate (RegistrarPublicContact?,
                           RegistrarSRSContact?,
                           DefaultTechnicalContact?,
                           EncryptKeys?,
                           Allowed2LDs?,
                           Roles?,
                           AuditText?)>
<!ATTLIST RegistrarUpdate
        ActionId %UID; #REQUIRED
        Name     CDATA #IMPLIED
        AccRef   CDATA #IMPLIED
        URL      CDATA #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a RegistrarUpdate request will be
                        either an <xref target="error">Error</xref>
                        element or a <xref
                            target="registrar">Registrar</xref> element
                        showing the updated state of the user details.</t>
                </section>
            </section>
        </section>

        <section title="Registry Actions">
            <t>The registry requests are used by the registry to manage
                the business functions of the SRS.  Registrars MUST NOT
                have access to these functions.</t>

            <t>The registry requests are:</t>
            <texttable>
                <ttcol align="left">Request</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>AccessControlListAdd</c>
                <c>Adds one or more entries to the registry's access
                    control list.</c>
                <c>AccessControlListQry</c>
                <c>Queries the registry's access control list.</c>
                <c>AccessControlListRemove</c>
                <c>Removes one or more entries from the registry's
                    access control list.</c>
                <c>AdjustRegistrarAccount</c>
                <c>Creates billing transactions in order to adjust the
                    details of a registrar's account with the registry.</c>
                <c>BilledUntilAdjustment</c>
                <c>Adjusts the end date of billing for a domain name.</c>
                <c>BillingExtract</c>
                <c>Extracts, and potentially adds invoice details to,
                    set of billing transactions.</c>
                <c>BuildDnsZoneFiles</c>
                <c>Builds the registry's DNS zone files including
                    details of all of the currently delegated
                    domain.</c>
                <c>DeferredIncomeDetailQry</c>
                <c>Reports on the billing transactions that contribute
                    to an amount of deferred income for an income month.</c>
                <c>DeferredIncomeSummaryQry</c>
                <c>Reports on all deferred income for an income month.</c>
                <c>GenerateDomainReport</c>
                <c>Generates a report on all of the domains registered
                    in the SRS.</c>
                <c>QryBillingAmount</c>
                <c>Queries the per-term charge for domain registration
                    over time.</c>
                <c>RegistrarCreate</c>
                <c>Creates a new registrar in the SRS and assigns
                    initial details to the record.</c>
                <c>RunLogCreate</c>
                <c>Creates an entry in the SRS server log.</c>
                <c>RunLogQry</c>
                <c>Queries details of entries in the SRS server log.</c>
                <c>ScheduleCancel</c>
                <c>Cancels a scheduled process in the SRS server.</c>
                <c>ScheduleCreate</c>
                <c>Creates a scheduled process in the SRS server.</c>
                <c>ScheduleQry</c>
                <c>Queries details of a scheduled process in the SRS
                    server.</c>
                <c>ScheduleUpdate</c>
                <c>Updates the details of a scheduled process in the SRS
                    server.</c>
                <c>SetBillingAmount</c>
                <c>Inserts a new per-term charge for domain
                    registrations.</c>
                <c>SysParamsQry</c>
                <c>Queries the details of configurable system parameters
                    in the SRS server.</c>
                <c>SysParamsUpdate</c>
                <c>Updates the details of configurable system parameters
                    in the SRS server.</c>
            </texttable>

            <section anchor="access_control_list_add"
                title="AccessControlListAdd">
                <t>The AccessControlListAdd request allows the registry
                    to add entries to its access control lists.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                        <c>Resource</c>
                        <c>A text string.  An identifier for the system
                            or resource to which the access control list
                            entries should be added.  For example, this
                            might specify a service name such as
                            "whoisd".</c>
                        <c>Type</c>
                        <c>A text string.  A description of the function
                            of the access control list to which the
                            access control lists should be added.  For
                            example, "allow" or "deny".</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>FullResult</c>
                        <c>A boolean value.  Indicates whether the
                            result returned should contain full details
                            of entries in the modified access control
                            lists.</c>
                    </texttable>
                    <t>The AccessControlListAdd request must also
                        include one or more <xref
                            target="access_control_list_entry">AccessControlListEntry</xref>
                        elements to specify the entries to be added to
                        the access control lists, and an <xref
                            target="audit_text">AuditText</xref> element
                        giving a description for the addition.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT AccessControlListAdd (AccessControlListEntry+,
                                AuditText)>
<!ATTLIST AccessControlListAdd
        Resource   CDATA     #REQUIRED
        Type       CDATA     #REQUIRED
        ActionId   %UID;     #REQUIRED
        FullResult %Boolean; "1">
        ]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to an AccessControlListAdd request
                        will be either an <xref
                            target="error">Error</xref> or one or more
                        <xref
                            target="accesscontrollist">AccessControlList</xref>
                        elements. If FullResult was specified in the
                        query, then the returned AccessControlList
                        elements will contain all of the
                        AccessControlListEntry elements belonging to the
                        modified access control lists.</t>
                </section>
            </section>

            <section anchor="access_control_list_qry" title="AccessControlListQry">
                <t>The AccessControlListQry request allows the registry
                    to retrieve details of the current state of access
                    control lists.</t>
                <section title="Request">
                    <t>The request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>Resource</c>
                        <c>A text string.  Used to match the system or
                            resource name of the access control
                            list.</c>
                        <c>Type</c>
                        <c>A text string.  Used to match the type of the
                            access control list.</c>
                        <c>FullResult</c>
                        <c>A boolean value.  Indicates whether the
                            result returned should contain full details
                            of entries in the matched access control
                            lists.</c>
                    </texttable>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT AccessControlListQry EMPTY>
<!ATTLIST AccessControlListQry
        Resource   CDATA     #IMPLIED
        Type       CDATA     #IMPLIED
        FullResult %Boolean; "0">
        ]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to an AccessControlListQry request
                        will be either an <xref
                            target="error">Error</xref> element or zero
                        or more <xref
                            target="accesscontrollist">AccessControlList</xref>
                        elements - dependent on the number of access
                        control lists that matched the query
                        specification.</t>
                    <t>The effect of the FullResult, Resource, and Type
                        parameters on the results is illustrated by the
                        following table:</t>
                    <texttable>
                        <ttcol align="left">FullResult</ttcol>
                        <ttcol align="left">Resource and/or Type</ttcol>
                        <ttcol align="left">Results</ttcol>
                        <c>Unspecified</c>
                        <c>Unspecified</c>
                        <c>AccessControlList elements for all lists.</c>
                        <c>Specified</c>
                        <c>Unspecified</c>
                        <c>AccessControlList elements and
                            AccessControlListEntry elements for all
                            lists.</c>
                        <c>Unspecified</c>
                        <c>Specified</c>
                        <c>AccessControlList elements and
                            AccessControlListEntry elements for matched
                            lists (no EffectiveDate elements for
                            entries).</c>
                        <c>Specified</c>
                        <c>Specified</c>
                        <c>AccessControlList elements and
                            AccessControlListEntry elements with
                            their EffectiveDate elements for matched
                            lists.</c>
                    </texttable>
                </section>
            </section>

            <section anchor="access_control_list_remove"
                title="AccessControlListRemove">
                <t>The AccessControlListRemove request allows the
                    registry to remove entries from access control
                    lists.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                        <c>Resource</c>
                        <c>A text string.  An identifier for the system
                            or resource of the access control list from
                            which the entries should be removed.</c>
                        <c>Type</c>
                        <c>A text string.  A description of the function
                            of the access control list from which the
                            entries should be removed.</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>FullResult</c>
                        <c>A boolean value.  Indicates whether the
                            result returned should contain full details
                            of entries in the modified access control
                            lists.</c>
                    </texttable>
                    <t>The AccessControlListRemove request must also
                        include one or more <xref
                            target="access_control_list_entry">AccessControlListEntry</xref>
                        elements to specify the entries to be removed
                        from the access control lists, and an <xref
                            target="audit_text">AuditText</xref> element
                        giving a description for the removal.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT AccessControlListRemove (AccessControlListEntry+,
                                   AuditText)>
<!ATTLIST AccessControlListRemove
        Resource   CDATA     #REQUIRED
        Type       CDATA     #REQUIRED
        ActionId   %UID;     #REQUIRED
        FullResult %Boolean; "1">
        ]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to an AccessControlListRemove request
                        will be either an <xref
                            target="error">Error</xref> element or one
                        or more <xref
                            target="accesscontrollist">AccessControlList</xref>
                        elements.  If FullResult was specified in the
                        query, then the returned AccessControlList
                        elements will contain all of the
                        AccessControlListEntry elements belonging to the
                        access control lists.</t>
                </section>
            </section>

            <section anchor="adjust_registrar_account" title="AdjustRegistrarAccount">
                <t>The AdjustRegistrarAccount request allows the
                    registry to adjust the account of a registrar by
                    creating a billing transaction in the registrar's
                    name.  This allows the registry to make adjustments
                    by crediting or debiting the registrar account, for
                    instance, in the case of a refunded payment.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                        <c>RegistrarId</c>
                        <c>A user identifier.  The identifier of the
                            registrar whose account is to be
                            adjusted.</c>
                        <c>DomainName</c>
                        <c>A text string.  The name of the domain for
                            which the registrar's account is being
                            adjusted.</c>
                        <c>Months</c>
                        <c>An integer.  The number of months of payment
                            to credit to, or debit from the registrar's
                            account for the specified domain.</c>
                        <c>ActionType</c>
                        <c>A text string.  A valid accounting action;
                            either 'Credit' or 'Debit'.</c>
                    </texttable>
                    <t>The AdjustRegistrarAccount request must also
                        include the date details for the billing
                        transaction as a <xref
                            target="timestamp">TransactionDate</xref>
                        element, a <xref
                            target="timestamp">BillPeriodStart</xref>
                        element, and a <xref
                            target="timestamp">BillPeriodEnd</xref>
                        element, and also an <xref
                            target="audit_text">AuditText</xref> element
                        providing audit details for the adjustment.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT AdjustRegistrarAccount (TransactionDate,
                                  BillPeriodStart,
                                  BillPeriodEnd,
                                  AuditText)>
<!ATTLIST AdjustRegistrarAccount
        RegistrarId %RegistrarId;        #REQUIRED
        DomainName  %DomainName;         #REQUIRED
        ActionId    %UID;                #REQUIRED
        Months      %Number;             #REQUIRED
        ActionType  (%AccountingAction;) #REQUIRED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a AdjustRegistrarAccount request
                        will be either an <xref
                            target="error">Error</xref> element or a
                        <xref target="billingtrans">BillingTrans</xref>
                        element for the new transaction details
                        provided.</t> </section>
            </section>

            <section anchor="billed_until_adjustment" title="BilledUntilAdjustment">
                <t>The BilledUntilAdjustment request allows the registry
                    to change the date that a domain has been billed
                    until, for example, when a domain is renewed by the
                    registrar before the automatic renewal date
                    arrives.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>DomainName</c>
                        <c>A text string.  The name of the domain to
                            adjust the billed until date for.</c>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                    </texttable>
                    <t>The BilledUntilAdjustment request must also
                        include a <xref
                            target="timestamp">NewBilledUntilDate</xref>
                        element providing the new date for the domain
                        billed until record, and an <xref
                            target="audit_text">AuditText</xref> element
                        describing the reason for the change.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT BilledUntilAdjustment (NewBilledUntilDate,AuditText)>
<!ATTLIST BilledUntilAdjustment
        DomainName %DomainName; #REQUIRED
        ActionId   %UID;        #REQUIRED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a BilledUntilAdjustment request
                        will be either an <xref
                            target="error">Error</xref> element or a
                        full <xref target="domain">Domain</xref> element
                        showing all details for the updated domain,
                        including the new BilledUntil date.</t>
                </section>
            </section>

            <section title="BillingExtract">
                <t>The BillingExtract request allows the registry to
                    retrieve details of billing transactions and to
                    assign invoice numbers and dates to groups of
                    billing transactions.</t>
                
                <t>This transaction is expected to support the
                    registry's customer invoicing and accounting
                    systems.  The registry first extracts the details of
                    fees that have been incurred through domain
                    registrations and renewals for a period.  These
                    transactions may be entered into the registry's
                    accounting system to be issued as an invoice to the
                    registrar concerned.  Once the invoice has been
                    issued, the BillingExtract may be run again as an
                    invoice extract to assign the accounting system
                    invoice number and maybe the invoice date to the
                    requests and mark the transactions as having been
                    billed.</t>

                <t>The registry may use this request to retrieve details
                    of billing transactions for any registrar.</t>

                <section title="Request">
                    <t>The BillingExtract request must specify:</t>
                    
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                    </texttable>

                    <t>Additionally, the request may also include:</t>

                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>RegistrarId</c>
                        <c>A user identifier.  The registrar identifier
                            of the registrar that incurred the billing
                            transactions to be retrieved.</c>
                        <c>ConfirmedTrans</c>
                        <c>A boolean value.  Indicates that the SRS
                            should only extract details of confirmed
                            billing transactions.</c>
                        <c>InsideGracePeriod</c>
                        <c>A boolean value.  Indicates whether the SRS
                            should extract details of billing
                            transactions that have been issued for
                            domains that are within their registration
                            or renewal grace period.</c>
                        <c>InvoiceExtract</c>
                        <c>A boolean value.  Indicates whether the
                            request should apply the supplied invoice
                            identifier, and an invoice date if one is
                            provided, to the matching transactions.</c>
                        <c>InvoiceId</c>
                        <c>An invoice identifier.  The identifier from
                            the registry's accounting system to be
                            applied to the extracted billing
                            transactions.</c>
                    </texttable>

                    <t>The request must also include a <xref
                            target="date_range">TransDateRange</xref>
                        element and may include an <xref
                            target="timestamp">InvoiceDate</xref>
                        element.  The TransDateRange element specifies
                        the start date and end date to be included in
                        the billing extract.  The <xref
                            target="timestamp">InvoiceDate</xref>
                        element, if provided, specifies a date to be
                        applied to the extracted invoice details - this
                        date is only applied to the extracted details if
                        the InvoiceExtract attribute was provided with a
                        true value.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT BillingExtract (TransDateRange,InvoiceDate?)>
<!ATTLIST BillingExtract
        ActionId          %UID;     #REQUIRED
        InvoiceExtract    %Boolean; #IMPLIED
        RegistrarId       %UID;     #IMPLIED
        ConfirmedTrans    %Boolean; #IMPLIED
        InsideGracePeriod %Boolean; #IMPLIED
        InvoiceId         CDATA     #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a BillingExtract request will be
                        either an <xref target="error">Error</xref>
                        element or a set of <xref
                            target="billingtrans">BillingTrans</xref>
                        elements that matched the request terms.</t>
                    <t>If an invoice extract was requested, the returned
                        transactions will be marked with the provided
                        invoice identifier and maybe the optional
                        invoice date.</t>
                </section>
            </section>

            <section anchor="build_dns_zone_files" title="BuildDnsZoneFiles">
                <t>The BuildDnsZoneFiles request allows the registry to
                    initiate the creation of DNS zone and configuration
                    files for all registered domains that have been set
                    to delegate.  The SRS server SHALL generate a
                    run-log entry for this request recording the final
                    status and MAY include statistics on the domains
                    exported to the DNS.</t>
                <t>The SRS server MUST NOT allow multiple instances of
                    this request to run simultaneously.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                    </texttable>
                    <t>The BuildDnsZoneFiles request may also include a <xref
                            target="timestamp">RunDate</xref>
                        element to specify the date and time to run the
                        zone build process.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT BuildDnsZoneFiles (RunDate)>
<!ATTLIST BuildDnsZoneFiles
        ActionId %UID; #REQUIRED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a BuildDnsZoneFiles request will be
                        either an <xref target="error">Error</xref>
                        element or a <xref target="runlog">RunLog</xref>
                        element containing details produced by the zone
                        file build process.</t>
                </section>
            </section>

            <section anchor="deferred_income_detail_qry" title="DeferredIncomeDetailQry">
                <t>The DeferredIncomeDetailQry request allows the
                    registry to obtain a report of billing transactions
                    that contribute to an amount of deferred income (for
                    example, to provide a breakdown of the billing
                    transactions that make up an amount of deferred
                    income reported by the <xref
                        target="deferred_income_summary_qry">DeferredIncomeSummaryQry</xref>
                    request).</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>BaseMonth</c>
                        <c>An integer.  The latest month (January = 1,
                            December = 12) of the base year to consider
                            billing transactions for when calculating
                            deferred income.  Billing transactions up
                            to, and including, this month will be
                            included.</c>
                        <c>BaseYear</c>
                        <c>An integer.  The latest year to consider
                            billing transactions for when calculating
                            deferred income.</c>
                        <c>IncomeMonth</c>
                        <c>An integer.  The month (January = 1, December
                            = 12) of the income year to calculate
                            deferred income for.</c>
                        <c>IncomeYear</c>
                        <c>An integer.  The year to calculate deferred
                            income for.</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this request.</c>
                    </texttable>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT DeferredIncomeDetailQry EMPTY>
<!ATTLIST DeferredIncomeDetailQry
        BaseMonth   CDATA #REQUIRED
        BaseYear    CDATA #REQUIRED
        IncomeMonth CDATA #REQUIRED
        IncomeYear  CDATA #REQUIRED
        QryId       %UID; #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a DeferredIncomeDetailQry request
                        will be either an <xref
                            target="error">Error</xref> element or a set
                        of <xref
                            target="billingtrans">BillingTrans</xref>
                        elements consisting of all of the billing
                        transactions that contributed to deferred income
                        for the specified period.</t>
                </section>
            </section>

            <section anchor="deferred_income_summary_qry" title="DeferredIncomeSummaryQry">
                <t>The DeferredIncomeSummaryQry request allows the
                    registry to generate a report on the amount of
                    deferred income that can be realised in any given
                    month for the period provided in the request.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>BaseMonth</c>
                        <c>An integer.  The latest month (January = 1,
                            December = 12) of the base year to consider
                            billing transactions for when calculating
                            deferred income.  Billing transactions up
                            to, and including, this month will be
                            included.</c>
                        <c>BaseYear</c>
                        <c>An integer.  The latest year to consider
                            billing transactions for when calculating
                            deferred income.</c>
                        <c>IncomeMonth</c>
                        <c>An integer.  The month (January = 1, December
                            = 12) of the income year to calculate
                            deferred income for.</c>
                        <c>IncomeYear</c>
                        <c>An integer.  The year to calculate deferred
                            income for.</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this request.</c>
                    </texttable>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT DeferredIncomeSummaryQry EMPTY>
<!ATTLIST DeferredIncomeSummaryQry
        BaseMonth   CDATA #REQUIRED
        BaseYear    CDATA #REQUIRED
        IncomeMonth CDATA #REQUIRED
        IncomeYear  CDATA #REQUIRED
        QryId       %UID; #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a DeferredIncomeSummaryQry
                        request will be either an <xref
                            target="error">Error</xref> element or a set
                        of <xref
                            target="deferredregistrarincome">DeferredRegistrarIncome</xref>
                        elements containing the deferred income
                        contribution for each registrar for the
                        specified period.</t>
                </section>
            </section>

            <section anchor="generate_domain_report" title="GenerateDomainReport">
                <t>The GenerateDomainReport request allows the registry
                    to initiate the creation of a domain report
                    containing details of the domains registered in the
                    SRS system.  SRS implementations may vary in the
                    information that they include in this report.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                    </texttable>
                    <t>The GenerateDomainReport request must also
                        include a <xref
                            target="timestamp">RunDate</xref>
                        element providing the date and time at which the
                        domain report creation process should run.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT GenerateDomainReport (RunDate)>
<!ATTLIST GenerateDomainReport
        ActionId %UID; #REQUIRED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a GenerateDomainReport request
                        will be either an <xref
                            target="error">Error</xref> element or a
                        <xref target="runlog">RunLog</xref> element
                        containing details produced by the domain report
                        creation process.</t>
                </section>
            </section>

            <section title="QryBillingAmount">
                <t>The QryBillingAmount request allows the registry to
                    query all of the billing amounts in the system
                    (including all historical billing amounts, the
                    current effective billing amount and any future
                    billing amounts).  It does not set a new billing
                    amount.</t>
                <section title="Request">
                    <t>The QryBillingAmount request has no required
                        parameters.  The request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this
                            request.</c>
                    </texttable>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT QryBillingAmount EMPTY>
<!ATTLIST QryBillingAmount
        QryId %UID; #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The QryBillingAmount response will either be
                        an <xref target="error">Error</xref> element or
                        a set of <xref
                            target="billingamount">BillingAmount</xref>
                        elements.  If a QryId was provided with the
                        request, this will be returned in the TransId
                        attribute of the <xref
                            target="response">Response</xref>
                        element.</t>
                </section>
            </section>

            <section anchor="registrar_create" title="RegistrarCreate">
                <t>The RegistrarCreate request allows the user to create
                    a new registrar user account in the SRS server and
                    to provide details for it.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                        <c>Name</c>
                        <c>A text string.  The name of the
                            registrar.</c>
                        <c>AccRef</c>
                        <c>A text string.  The registrar's identifier in
                            the registry's accounting system.</c>
                        <c>RegistrarId</c>
                        <c>A user identifier.  The unique number to
                            be assigned to the new registrar.</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>URL</c>
                        <c>A text string.  The registrar's public web
                            site address.</c>
                    </texttable>

                    <t>The RegistrarCreate request must also include a
                        <xref
                            target="contact_details">RegistrarPublicContact</xref>
                        element specifying the public contact details
                        for the registrar, a <xref
                            target="contact_details">RegistrarSRSContact</xref>
                        element specifying the contact details for the
                        registry's use, a <xref
                            target="contact_details">DefaultTechnicalContact</xref>
                        element which will be applied to domains
                        registered through the registrar if no other
                        technical contact is specified, and an <xref
                            target="encrypt_keys">EncryptKeys</xref>
                        element providing one or more public keys that
                        the registrar will use.</t>

                    <t>The RegistrarCreate request may also include the
                        <xref target="allowed2lds">Allowed2LDs</xref>
                        element specifying the domains in which the
                        registrar may manage domain registrations, a
                        <xref target="roles">Roles</xref> element
                        defining system access roles for the registrar,
                        and the <xref
                            target="audit_text">AuditText</xref> element
                        to provide details on the addition of the new
                        registrar account.</t>

                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT RegistrarCreate (RegistrarPublicContact,
                           RegistrarSRSContact,
                           DefaultTechnicalContact,
                           EncryptKeys,
                           Allowed2LDs?,
                           Roles?,
                           AuditText?)>
<!ATTLIST RegistrarCreate
        ActionId    %UID;         #REQUIRED
        Name        CDATA         #REQUIRED
        AccRef      CDATA         #REQUIRED
        RegistrarId %RegistrarId; #REQUIRED
        URL         CDATA         #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a RegistrarCreate request will be
                        either an <xref target="error">Error</xref>
                        element or a <xref
                            target="registrar">Registrar</xref> element
                        showing the details for the new registrar
                        account.</t>
                </section>
            </section>

            <section anchor="run_log_create" title="RunLogCreate">
                <t>The RunLogCreate request allows the registry to
                    request creation of a log entry in the SRS server's
                    run log.  This is useful for allowing batch
                    processes that interface with the SRS server to log
                    messages to a standard location.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                    </texttable>

                    <t>The RunLogCreate request must also include a <xref
                            target="timestamp">FirstRunDate</xref>
                        element specifying the date at which the process
                        was initiated, and a <xref
                            target="runlog">RunLog</xref> element
                        containing the details of the log entry to be
                        created.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT RunLogCreate (FirstRunDate,RunLog)>
<!ATTLIST RunLogCreate
        ActionId %UID; #REQUIRED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a RunLogCreate request will be
                        either an <xref target="error">Error</xref>
                        element or a <xref target="runlog">RunLog</xref>
                        element containing the details of the log entry
                        that was created.</t>
                </section>
            </section>

            <section anchor="run_log_qry" title="RunLogQry">
                <t>The RunLogQry request allows the registry to query
                    the SRS server for details of log entries created by
                    processes that interact with the SRS server.</t>
                <section title="Request">
                    <t>The request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this
                            request.</c>
                        <c>ProcessName</c>
                        <c>A text string.  The name of a scheduled job
                            process that created the run log.  This will
                            be matched against existing run log entries
                            to limit the results returned.</c>
                        <c>Parameters</c>
                        <c>A text string.  The parameters with which a
                            process was called.  This will be matched
                            against existing run log entries to limit
                            the results returned.</c>
                    </texttable>

                    <t>The RunLogQry request may also include a <xref
                            target="date_range">LogDateRange</xref>
                        element defining the period for which to return
                        run log entry details.</t>
                    <t>If no limiting terms are specified, the SRS
                        server will return all run log entries.  The
                        server MAY impose a limit on the number of
                        entries that are returned in a single
                        response.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT RunLogQry (LogDateRange?)>
<!ATTLIST RunLogQry
        QryId       %UID; #IMPLIED
        ProcessName CDATA #IMPLIED
        Parameters  CDATA #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a RunLogQry request will be
                        either an <xref target="error">Error</xref>
                        element or a set of <xref
                            target="runlog">RunLog</xref> elements
                        matching the provided terms.</t>
                </section>
            </section>

            <section anchor="schedule_cancel" title="ScheduleCancel">
                <t>The ScheduleCancel request allows the registry to
                    cancel a scheduled process that has been registered
                    in the SRS server using the <xref
                        target="schedule_create">ScheduleCreate</xref>
                    request.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                        <c>ProcessName</c>
                        <c>A text string.  The name of a scheduled job
                            process to be cancelled.</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>Parameters</c>
                        <c>A text string.  The parameters with which a
                            process to be cancelled was called.</c>
                    </texttable>
                    <t>The ScheduleCancel request must also include a
                        <xref target="timestamp">FirstRunDate</xref>
                        element identifying the first run date of the
                        scheduled job process to be cancelled, and may
                        include a <xref
                            target="audit_text">AuditText</xref> element
                        providing the reasons for the job
                        cancellation.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT ScheduleCancel (FirstRunDate,AuditText?)>
<!ATTLIST ScheduleCancel
        ActionId    %UID;            #REQUIRED
        ProcessName (%ScheduledJob;) #REQUIRED
        Parameters  CDATA            #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a ScheduleCancel request will be
                        either an <xref target="error">Error</xref>
                        element or a <xref
                            target="schedule">Schedule</xref> element
                        giving the details of the cancelled job,
                        including the new cancellation date.</t>
                </section>
            </section>

            <section anchor="schedule_create" title="ScheduleCreate">
                <t>The ScheduleCreate request allows the registry to
                    insert a scheduled job entry into the SRS server to
                    be run at a specified time, and possibly at
                    regular intervals after that time.  This may be used
                    to set times for running processes that support the
                    day-to-day work of the registry.  These processes
                    are defined by the <xref
                        target="entity_scheduled_job">ScheduledJob</xref>
                    entity.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                        <c>ProcessName</c>
                        <c>A text string.  The name of the process to be
                            executed at the designated time.</c>
                        <c>Frequency</c>
                        <c>An text string.  The delay between repeat
                            executions of the process, after the initial
                            run date.  The format for this is
                            implementation dependent but it is
                            recommended that a simple text description
                            be used; as examples: "15 minutes", "1
                            hour", "1 day".  Registries should ensure
                            that the frequency is not shorter than the
                            run-time for the process.</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>Parameters</c>
                        <c>A text string.  The parameters to be passed
                            to the process when it is executed.</c>
                    </texttable>
                    <t>The ScheduleCreate request must also include a
                        <xref target="timestamp">FirstRunDate</xref>
                        element providing the date and time at which the
                        process should first be executed.  The request
                        may also include a <xref
                            target="timestamp">FinalRunDate</xref>
                        element providing the last date and time at
                        which a repeating process should be executed,
                        and an <xref
                            target="audit_text">AuditText</xref> element
                        providing details about the process creation
                        request.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT ScheduleCreate (FirstRunDate,FinalRunDate?,AuditText?)>
<!ATTLIST ScheduleCreate
        ProcessName (%ScheduledJob;) #REQUIRED
        Frequency   CDATA            #REQUIRED
        Parameters  CDATA            #IMPLIED
        ActionId    %UID;            #REQUIRED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a ScheduleCreate request will be
                        either an <xref target="error">Error</xref>
                        element or a <xref
                            target="schedule">Schedule</xref> element
                        with the newly created scheduled job
                        details.</t>
                </section>
            </section>

            <section anchor="schedule_qry" title="ScheduleQry">
                <t>The ScheduleQry request allows the registry to query
                    details of scheduled jobs in the SRS system.  The
                    results may be filtered to return only scheduled
                    events with particular characteristics.</t>
                <section title="Request">
                    <t>The request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this
                            request.</c>
                        <c>ProcessName</c>
                        <c>A text string.  Used to match against the
                            name of a scheduled process.</c>
                        <c>Parameters</c>
                        <c>A text string.  Used to match against the
                            parameters specified for a scheduled
                            process.</c>
                    </texttable>
                    <t>The ScheduleQry request may also include an <xref
                            target="timestamp">ActiveOn</xref> element
                        providing a date and time at which a process
                        must have been active (between the first run
                        date and the last run date of a repeating
                        process), and a <xref
                            target="timestamp">FirstRunDate</xref>
                        element to match against the first run dates of
                        scheduled jobs.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT ScheduleQry (ActiveOn?,FirstRunDate?)>
<!ATTLIST ScheduleQry
        QryId       %UID; #IMPLIED
        ProcessName CDATA #IMPLIED
        Parameters  CDATA #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a ScheduleQry request will be
                        either an <xref target="error">Error</xref>
                        element or a set of <xref
                            target="schedule">Schedule</xref> elements,
                        one for each schedule that matched the request
                        parameters.</t>
                </section>
            </section>

            <section anchor="schedule_update" title="ScheduleUpdate">
                <t>The ScheduleUpdate request allows the registry to
                    amend the details for an existing <xref
                        target="schedule">Schedule</xref> entry in the
                    SRS server.</t>
                <section title="Request">
                    <t>The request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                        <c>ProcessName</c>
                        <c>A text string.  The name of the process to be
                            executed at the designated time.</c>
                    </texttable>
                    <t>Additionally, the request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>Parameters</c>
                        <c>A text string.  The parameters to be passed
                            to the process when it is executed.</c>
                    </texttable>
                    <t>The ScheduleUpdate request must also include a <xref
                            target="timestamp">FirstRunDate</xref>
                        element to specify the new first run date for
                        the process.  The request may include a <xref
                            target="timestamp">LastRunDate</xref>
                        element to specify the most recent date at which
                        a repeating process ran and an <xref
                            target="audit_text">AuditText</xref> element
                        providing details about the schedule update
                        request.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT ScheduleUpdate (FirstRunDate,LastRunDate?,AuditText?)>
<!ATTLIST ScheduleUpdate
        ActionId    %UID;            #REQUIRED
        Parameters  CDATA            #IMPLIED
        ProcessName (%ScheduledJob;) #REQUIRED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a ScheduleUpdate request will be
                        either an <xref target="error">Error</xref>
                        element or a <xref
                            target="schedule">Schedule</xref> element
                        with the new scheduled job details.</t>
                </section>
            </section>

            <section title="SetBillingAmount">
                <t>The SetBillingAmount request allows the registry to
                    set a new per-domain monthly charge for registered
                    domains within the SRS.</t>

                <t>Each change to the monthly charge MUST also include a
                    date that the new charge will become effective.  SRS
                    implementations SHOULD ensure that the effective
                    date is not in the past (that is, charges should not
                    be altered retroactively).  Future billing amount
                    changes may be amended by issuing a new
                    SetBillingAmount request with the same effective
                    date.</t>

                <t>If the request succeeds, the response will provide a
                    list of all stored billing amounts and their
                    effective dates.  On failure an error response is
                    returned.</t>

                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                    </texttable>
                    <t>The SetBillingAmount request must also include a
                        <xref
                            target="billingamount">BillingAmount</xref>
                        element specifying the new per-domain monthly
                        charge and the effective date for the new
                        charge.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT SetBillingAmount (BillingAmount)>
<!ATTLIST SetBillingAmount
        ActionId %UID; #REQUIRED>]]></artwork>
                    </figure>
                    <figure>
                        <preamble>Example:</preamble>
                        <artwork><![CDATA[
<SetBillingAmount ActionId="000000123">
   <BillingAmount Amount="7.50">
       <EffectiveDate Year="2007" Month="11" Day="19" Hour="12"
          Minute="00" Second="00" TimeZoneOffset="+13:00" />
   </BillingAmount>
</SetBillingAmount>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a SetBillingAmount request will
                        be either an <xref target="error">Error</xref>
                        element or a set of <xref
                            target="billingamount">BillingAmount</xref>
                        elements, one for each billing amount in the
                        history of the SRS server and the new value.</t>
                    <figure>
                        <preamble>Example:</preamble>
                        <artwork><![CDATA[
<Response Action="SetBillingAmount" FeId="4" FeSeq="214"
  OrigRegistrarId="50041">
   <BillingAmount Amount="6.00">
       <EffectiveDate Year="2004" Month="01" Day="01" Hour="04"
          Minute="00" Second="00" TimeZoneOffset="+13:00" />
   </BillingAmount>
   <BillingAmount Amount="4.00">
       <EffectiveDate Year="2005" Month="01" Day="01" Hour="04"
          Minute="00" Second="00" TimeZoneOffset="+13:00" />
   </BillingAmount>
   <BillingAmount Amount="4.50">
       <EffectiveDate Year="2006" Month="01" Day="01" Hour="04"
          Minute="00" Second="00" TimeZoneOffset="+13:00" />
   </BillingAmount>
   <BillingAmount Amount="7.50">
       <EffectiveDate Year="2007" Month="11" Day="19" Hour="12"
          Minute="00" Second="00" TimeZoneOffset="+13:00" />
   </BillingAmount>
</Response>]]></artwork>
                    </figure>
                </section>
            </section>

            <section anchor="sys_params_qry" title="SysParamsQry">
                <t>The SysParamsQry request allows the registry to obtain a
                    list of the current state of the SRS server's
                    configurable parameters.</t>
                <section title="Request">
                    <t>The request may specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>QryId</c>
                        <c>A query identifier.  This has no meaning
                            within the SRS; if provided, it will be
                            returned in the response to this request.</c>
                    </texttable>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT SysParamsQry EMPTY>
<!ATTLIST SysParamsQry
        QryId %UID; #IMPLIED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a SysParamsQry request will be
                        either an <xref target="error">Error</xref>
                        element or a set of <xref
                            target="sys_param">SysParam</xref> elements,
                        one for each user-configurable system parameter
                        in the SRS server implementation.</t>
                </section>
            </section>

            <section anchor="sysparams_update" title="SysParamsUpdate">
                <t>The SysParamsUpdate request allows the registry to update
                    the value of any user configurable parameters in the
                    SRS server implementation.</t>
                <section title="Request">
                    <t>The request must specify:</t>
                    <texttable>
                        <ttcol align="left">Attribute</ttcol>
                        <ttcol align="left">Description</ttcol>
                        <c>ActionId</c>
                        <c>An action identifier.  This is a unique
                            identifier for the request to the SRS
                            server.</c>
                    </texttable>

                    <t>The SysParamsUpdate request must include one or
                        more <xref
                            target="sys_param">SysParam</xref>
                        elements containing the new parameter details.</t>

                    <t>The SysParamsUpdate request may also include an
                        <xref target="audit_text">AuditText</xref>
                        element giving further details of the
                        configuration changes.</t>
                    <figure>
                        <preamble>Syntax:</preamble>
                        <artwork><![CDATA[
<!ELEMENT SysParamsUpdate (SysParam+,AuditText?)>
<!ATTLIST SysParamsUpdate
        ActionId %UID; #REQUIRED>]]></artwork>
                    </figure>
                </section>
                <section title="Response">
                    <t>The response to a SysParamsUpdate request will be
                        either an <xref target="error">Error</xref>
                        element or a set of <xref
                            target="sys_param">SysParam</xref> elements,
                        one for each changed system parameter, showing
                        the new value.</t>
                </section>
            </section>
        </section>
    </section>

    <section title="SRS Response Types" anchor="response_types">
        <section anchor="accesscontrollist" title="AccessControlList">
            <t>The AccessControlList element is used by the SRS to return
                details of the registry's access control lists.</t>
            <t>The AccessControlList element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>ActionId</c>
                <c>An action identifier.  The unique identifier for the
                    request to the SRS server that prompted return of
                    access control list details.</c>
                <c>Resource</c>
                <c>A text string.  The system that the access control
                    list is intended to be applied to.</c>
                <c>Type</c>
                <c>A text string.  The type of access control list that
                    is being returned.  Registries may maintain
                    different lists for different purposes, for example,
                    blacklists and whitelists for controlling
                    access.</c>
            </texttable>
            <t>The AccessControlList element may include one or more <xref
                    target="access_control_list_entry">AccessControlListEntry</xref>
                elements.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT AccessControlList (AccessControlListEntry*)>
<!ATTLIST AccessControlList
        Resource CDATA #REQUIRED
        Type     CDATA #REQUIRED>]]></artwork>
            </figure>
            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<AccessControlList Resource="whoisd" Type="blacklist">
    <AccessControlListEntry Address="192.0.2.5", "Blacklisted for
        abuse." />
    <AccessControlListEntry Address="192.0.2.9", "Blacklisted for
        abuse." />
    <AccessControlListEntry Address="192.0.2.237", "Blacklisted at
        owner's request" />
</AccessControlList>]]></artwork>
            </figure>
        </section>

        <section anchor="billingamount" title="BillingAmount">
            <t>The BillingAmount element is used by the SRS to return
                details of the amount charged for registered domains and
                the date that the amount became effective in the
                SRS.</t>
            <t>The element content consists of an Amount attribute
                containing the charge in the registry's chosen currency,
                and may also include an <xref
                    target="timestamp">EffectiveDate</xref> element
                containing the date and time that the charge became (or
                will become, for future changes) effective.  The Amount
                value should be validated as an acceptable
                currency value.</t>
            <t>The BillingAmount element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>Amount</c>
                <c>A numeric currency value.  The amount charged
                    per-term for domain registration and renewal.</c>
            </texttable>
            <t>The BillingAmount element may also include an <xref
                    target="timestamp">EffectiveDate</xref> element.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT BillingAmount (EffectiveDate?)>
<!ATTLIST BillingAmount
        Amount %Dollars; #REQUIRED>]]></artwork>
            </figure>
            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<BillingAmount Amount="9.95">
    <EffectiveDate Year="2004" Month="01" Day="01" Hour="04"
        Minute="00" Second="00" TimeZoneOffset="+13:00" />
</BillingAmount>]]></artwork>
            </figure>
        </section>

        <section anchor="billingtrans" title="BillingTrans">
            <t>The BillingTrans element is used by the SRS to return
                details of charges that have been incurred by registrars
                over a given billing period.</t>
            <t>The BillingTrans element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>RegistrarId</c>
                <c>A user identifier.  The identifier of the registrar
                    that manages the domain that the billing amount
                    relates to.</c>
                <c>Type</c>
                <c>A text string.  The type of transaction that the
                    billing amount relates to, for instance, "Create" or
                    "Renew" a domain.</c>
                <c>TransStatus</c>
                <c>A text string.  The status of the billing
                    transaction; valid values are defined by the <xref
                        target="entity_bill_status">BillStatus</xref>
                    entity.</c>
                <c>DomainName</c>
                <c>A text string.  The domain name that the billing
                    transaction relates to.</c>
                <c>BillingTerm</c>
                <c>An integer.  The number of months of payment for
                    which the billing transaction was issued.</c>
                <c>Amount</c>
                <c>A numeric currency value.  The amount of money
                    attached to the billing transaction.</c>
            </texttable>
            <t>The BillingTrans element may also specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>RegistrantRef</c>
                <c>A customer identifier.  A reference assigned to the
                    registrant by the registrar.</c>
                <c>InvoiceId</c>
                <c>An invoice identifier.  The identifier from the
                    registry's accounting system that relates to the
                    billing transaction.</c>
            </texttable>
            <t>The BillingTrans element must also include a <xref
                    target="timestamp">TransDate</xref> element
                containing the date on which the billing transaction
                (domain creation, renewal, etc.) occurred, a <xref
                    target="timestamp">BillPeriodStart</xref> and a
                <xref target="timestamp">BillPeriodEnd</xref> element
                containing the start and end of the billing period to
                which the transaction belongs.  The element may include
                an <xref target="timestamp">InvoiceDate</xref> element
                containing the date of the invoice to which the billing
                transaction has been assigned.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT BillingTrans (InvoiceDate?,TransDate,BillPeriodStart,
                       BillPeriodEnd)>
<!ATTLIST BillingTrans
        RegistrarId   %RegistrarId;  #REQUIRED
        Type          CDATA          #REQUIRED
        TransStatus   (%BillStatus;) #REQUIRED
        DomainName    %DomainName;   #REQUIRED
        RegistrantRef %UID;          #IMPLIED
        BillingTerm   %Term;         #REQUIRED
        InvoiceId     %UID;          #IMPLIED
        Amount        %Dollars;      #REQUIRED>]]></artwork>
            </figure>
            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<BillingTrans Amount="1.50" BillingTerm="1" DomainName="example.org"
            RegistrantRef="Example registrant" RegistrarId="50041"
            TransStatus="PendingConfirmation" Type="Create">
    <TransDate Day="21" Hour="17" Minute="08" Month="2"
             Second="31" TimeZoneOffset="+13:00" Year="2008" />
    <BillPeriodStart Day="21" Hour="17" Minute="08" Month="2"
             Second="31" TimeZoneOffset="+13:00" Year="2008" />
    <BillPeriodEnd Day="21" Hour="17" Minute="08" Month="3"
             Second="31" TimeZoneOffset="+13:00" Year="2008" />
</BillingTrans>]]></artwork>
            </figure>
        </section>

        <section anchor="deferredregistrarincome"
            title="DeferredRegistrarIncome">
            <t>The DeferredRegistrarIncome element allows the SRS server
                to return details of deferred income that may be
                realised in a particular month by considering the domain
                registration payments that have been made by a
                registrar up to and including a base month.</t>
            <t>The DeferredRegistrarIncome element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>RegistrarId</c>
                <c>A user identifier.  The identifier of the registrar
                    that the deferred income amount relates to.</c>
                <c>BilledAmount</c>
                <c>A numeric currency value.  The amount of a billed
                    amount that can be realised in the income month,
                    considering all billing transactions up to and
                    including the base month.</c>
                <c>BilledCount</c>
                <c></c>
            </texttable>
            <t>The DeferredRegistrarIncome element must also include
                <xref target="base_month">BaseMonth</xref> and <xref
                    target="base_year">BaseYear</xref> element to define
                the last month of billing transactions to include for
                calculating deferred income amounts, and <xref
                    target="income_month">IncomeMonth</xref> and <xref
                    target="income_year">IncomeYear</xref> elements to
                define the month to calculate realised deferred income
                for.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT DeferredRegistrarIncome (BaseMonth,BaseYear,IncomeMonth,
                                  IncomeYear)>
<!ATTLIST DeferredRegistrarIncome
        RegistrarId  %RegistrarId; #REQUIRED
        BilledAmount %Dollars;     #REQUIRED
        BilledCount  %Number;      #REQUIRED>]]></artwork>
            </figure>
        </section>

        <section anchor="domain" title="Domain">
            <t>The Domain element can contain full details of a domain
                and its status within the SRS server and is used for
                creating and updating domains, as well as for reporting
                the current domain details.</t>
            <t>The Domain element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>DomainName</c>
                <c>A text string.  The domain name.  Must conform to the
                    format and syntax in <xref target="RFC1035">RFC
                        1035</xref>, <xref target="RFC1123">RFC
                        1123</xref>, and <xref target="RFC2181">RFC
                        2181</xref>.</c>
            </texttable>
            <t>The Domain element may also specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>Delegate</c>
                <c>A boolean value.  Indicates whether the domain should
                    be delegated to appear in the DNS.</c>
                <c>RegistrantRef</c>
                <c>A customer identifier.  Assigned to the registrant by
                    the registrar.</c>
                <c>RegistrarId</c>
                <c>A user identifier.  The unique identifier for the
                    registrar that manages the domain.</c>
                <c>RegistrarName</c>
                <c>A text string.  The name of the registrar that
                    manages the domain.</c>
                <c>Status</c>
                <c>A text string.  The registration status of the
                    domain.  Valid values are defined by the <xref
                        target="entity_reg_domain_status">RegDomainStatus</xref>
                    entity.</c>
                <c>Term</c>
                <c>A numeric value.  The number of months to bill when
                    the domain is renewed.</c>
                <c>UDAI</c>
                <c>A text string.  The UDAI to be checked.</c>
            </texttable>
            <t>The Domain element may also include elements to define
                the contact details, name servers for the domain and
                various dates relating to the registration.  These
                optional elements are:
                <list style="symbols">
                    <t><xref target="name_servers">NameServers</xref></t>
                    <t><xref target="contact_details">RegistrantContact</xref></t>
                    <t><xref target="contact_details">RegistrarPublicContact</xref></t>
                    <t><xref target="contact_details">AdminContact</xref></t>
                    <t><xref target="contact_details">TechnicalContact</xref></t>
                    <t><xref target="timestamp">BilledUntil</xref></t>
                    <t><xref target="timestamp">RegisteredDate</xref></t>
                    <t><xref target="timestamp">CancelledDate</xref></t>
                    <t><xref target="timestamp">LockedDate</xref></t>
                    <t><xref target="audit_details">AuditDetails</xref></t>
                </list>
            </t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT Domain (NameServers?,RegistrantContact?,
                 RegistrarPublicContact?,AdminContact?,
                 TechnicalContact?,BilledUntil?,
                 RegisteredDate?,CancelledDate?,
                 LockedDate?,AuditDetails?)>
<!ATTLIST Domain
        DomainName    %DomainName;     #REQUIRED
        RegistrantRef %UID;            #IMPLIED
        RegistrarName CDATA            #IMPLIED
        Status        (%DomainStatus;) #IMPLIED
        Delegate      %Boolean;        #IMPLIED
        Term          %Term;           #IMPLIED
        RegistrarId   %RegistrarId;    #IMPLIED
        UDAI          %UID;            #IMPLIED>]]></artwork>
            </figure>
            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<Domain Delegate="1" DomainName="mydomain.example.org"
      RegistrantRef="RS1001" RegistrarId="50041" Status="Active"
      Term="1" UDAI="ke783oe9">
    <NameServers>
        <Server FQDN="ns1.mydomain.example.org" />
        <Server FQDN="ns2.mydomain.example.org" />
    </NameServers>
    <RegistrantContact Name="John Smith"
        Email="j.smith@mydomain.example.org">
        <PostalAddress Address1="14 Rural Street" Address2="Suburbia"
            City="Wellington" CountryCode="NZ" PostalCode="6135" />
        <Phone AreaCode="4" CountryCode="64" LocalNumber="111234" />
        <Fax AreaCode="4" CountryCode="64" LocalNumber="111235" />
    </RegistrantContact>
    <AdminContact Name="ISP Administrator"
        Email="admin@myisp.example.org">
        <PostalAddress Address1="1 Main Road" Address2="Central"
            City="Wellington" CountryCode="NZ" PostalCode="6001" />
        <Phone AreaCode="4" CountryCode="64" LocalNumber="111123" />
        <Fax AreaCode="4" CountryCode="64" LocalNumber="111124" />
    </AdminContact>
    <TechnicalContact Name="ISP Technician"
        Email="tech@myisp.example.org">
        <PostalAddress Address1="1 Main Road" Address2="Central"
            City="Wellington" CountryCode="NZ" PostalCode="6001" />
        <Phone AreaCode="4" CountryCode="64" LocalNumber="111125" />
        <Fax AreaCode="4" CountryCode="64" LocalNumber="111126" />
    </TechnicalContact>
    <BilledUntil Hour="10" Minute="00" Second="00"
        Day="1" Month="2" Year="2009" TimeZoneOffset="+13:00" />
    <RegisteredDate Hour="10" Minute="00" Second="00"
        Day="1" Month="2" Year="2008" TimeZoneOffset="+13:00" />
    <AuditDetails ActionId="Domain create for mydomain.example.org"
        RegistrarId="50041">
        <AuditTime>
            <From Hour="10" Minute="00" Second="00" Day="1"
                Month="2" Year="2008" TimeZoneOffset="+13:00" />
        </AuditTime>
        <AuditText>Domain created for John Smith, RS8974</AuditText>
    </AuditDetails>
</Domain>]]></artwork>
            </figure>
        </section>

        <section anchor="domain_transfer" title="DomainTransfer">
            <t>The DomainTransfer element is used by the SRS to inform a
                registrar of the transfer of one of the domains that
                they were the managing registrar for.  This element will
                be returned in response to a <xref
                    target="get_messages">GetMessages</xref>
                request.</t>
            <t>The DomainTransfer element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>RegistrarName</c>
                <c>A text string.  The name of the registrar that the
                    domain has been transferred to.</c>
                <c>Minute</c>
                <c>An integer value.  The minute in which the domain
                    transfer occurred.</c>
                <c>Hour</c>
                <c>An integer value.  The hour in which the domain
                    transfer occurred.</c>
                <c>Day</c>
                <c>An integer value.  The day in which the domain
                    transfer occurred.</c>
                <c>Month</c>
                <c>An integer value.  The month in which the domain
                    transfer occurred.</c>
                <c>Year</c>
                <c>An integer value.  The year in which the domain
                    transfer occurred.</c>
            </texttable>
            <t>The DomainTransfer element may also specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>Second</c>
                <c>An integer value.  The second in which the domain
                    transfer occurred.</c>
                <c>TimeZoneOffset</c>
                <c>An integer value.  The TimeZoneOffset from UTC of the
                    SRS server that processed the domain transfer.</c>
            </texttable>
            <t>The DomainTransfer element must also include one or more
                <xref
                    target="transferred_domain">TransferredDomain</xref>
                elements to define the domain names that have been
                transferred to another registrar.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT DomainTransfer (TransferredDomain+)>
<!ATTLIST DomainTransfer
        RegistrarName CDATA #REQUIRED
        %TimeStamp;>]]></artwork>
            </figure>
            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<DomainTransfer RegistrarName="My ISP" Hour="10" Minute="00"
    Second="00" Day="1" Month="4" Year="2008" TimeZoneOffset="+13" />
    <TransferredDomain>domain.co.example</TransferredDomain>
</DomainTransfer>]]></artwork>
            </figure>
        </section>

        <section anchor="error" title="Error">
            <t>The Error element may be used to present details of
            errors that occur when processing individual requests or
            a whole transaction.</t>
            <t>The Error element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>ErrorId</c>
                <c>SRS system identifier for the error that occurred.</c>
                <c>Severity</c>
                <c>Indicative severity level for the error.</c>
                <c>Hint</c>
                <c>SRS server hint for addressing the error.</c>
            </texttable>

            <t>The Error element also contains a <xref
                    target="description">Description</xref> element
                and may also provide <xref
                    target="error_details">ErrorDetails</xref>
                elements with extra description of the error.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT Error (Description, ErrorDetails*)>
<!ATTLIST Error
        ErrorId      %UID;    #REQUIRED
        Severity     %Number; #REQUIRED
        Hint         %UID;    #REQUIRED>]]></artwork>
            </figure>
            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<Error Hint="MALFORMED_REQUEST_ERROR" ErrorId="INVALID_FIELD"
     Severity="er">
<Description>Invalid value in field</Description>
<ErrorDetails>DomainName</ErrorDetails>
</Error>]]></artwork>
            </figure>
        </section>

        <section anchor="rawrequest_rawresponse" title="RawRequest and RawResponse">
            <t>The RawRequest and RawResponse elements allow the SRS
                server to return the details of a previous request and
                response.  The details are returned as <xref
                    target="xml">XML</xref> and <xref
                    target="signature">Signature</xref> elements with
                content encoded as parsed character data.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT RawRequest (XML,Signature)>

<!ELEMENT RawResponse (XML,Signature)>]]></artwork>
            </figure>
            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<Response Action="ActionDetailsQry" FeId="4" FeSeq="137"
  OrigRegistrarId="50041">
    <RawRequest>
        <XML>&lt;NZSRSRequest VerMajor="2" ...</XML>
        <Signature>-----BEGIN PGP SIGNATURE-----...</Signature>
    </RawRequest>
    <RawResponse>
        <XML>&lt;NZSRSResponse VerMajor="2" ...</XML>
        <Signature>-----BEGIN PGP SIGNATURE-----...</Signature>
    </RawResponse>
</Response>]]></artwork>
            </figure>
        </section>

        <section anchor="registrar" title="Registrar">
            <t>The Registrar element is used to contain the details for
                a registrar.</t>
            <t>The Registrar element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>RegistrarId</c>
                <c>A user identifier.  The unique number to be assigned
                    to the new registrar.</c>
                <c>Name</c>
                <c>A text string.  The name of the registrar.</c>
                <c>AccRef</c>
                <c>A text string.  The registrar's identifier in the
                    registry's accounting system.</c>
            </texttable>
            <t>The Registrar element may also specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>URL</c>
                <c>A text string.  The public web site address for the
                    registrar.</c>
            </texttable>
            <t>The Registrar element must also include a <xref
                    target="contact_details">RegistrarPublicContact</xref>
                element specifying the public contact details for the
                registrar, a <xref
                    target="contact_details">RegistrarSRSContact</xref>
                element specifying the contact details for the
                registry's use, a <xref
                    target="contact_details">DefaultTechnicalContact</xref>
                element which will be applied to domains registered
                through the registrar if no other technical contact is
                specified, and an <xref
                    target="encrypt_keys">EncryptKeys</xref> element
                providing one or more public keys that the registrar
                will use.</t>
            <t>The Registrar element may also include the <xref
                    target="allowed2lds">Allowed2LDs</xref> element
                specifying the subdomains managed by the registry in
                which the registrar may manage domain registrations, a
                <xref target="roles">Roles</xref> element defining
                system access roles for the registrar, and the <xref
                    target="audit_text">AuditText</xref> element to
                provide details on the addition of the new registrar
                account.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT Registrar (RegistrarPublicContact,RegistrarSRSContact,
                    DefaultTechnicalContact,EncryptKeys,
                    Allowed2LDs?,Roles?,AuditDetails?)>
<!ATTLIST Registrar
        RegistrarId %RegistrarId; #REQUIRED
        Name        CDATA         #REQUIRED
        AccRef      CDATA         #REQUIRED
        URL         CDATA         #IMPLIED>]]></artwork>
            </figure>
            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<Registrar AccRef="Reg8974" Name="My ISP" RegistrarId="50041">
    <RegistrarPublicContact Name="Customer Service"
        Email="custserv@myisp.example.org">
        <PostalAddress Address1="1 Main Road" Address2="Central"
            City="Wellington" CountryCode="NZ" PostalCode="6001" />
        <Phone AreaCode="4" CountryCode="64" LocalNumber="111123" />
        <Fax AreaCode="4" CountryCode="64" LocalNumber="111124" />
    </RegistrarPublicContact>
    <RegistrarSRSContact Name="Admin"
        Email="admin@myisp.example.org">
        <PostalAddress Address1="1 Main Road" Address2="Central"
            City="Wellington" CountryCode="NZ" PostalCode="6001" />
        <Phone AreaCode="4" CountryCode="64" LocalNumber="111125" />
        <Fax AreaCode="4" CountryCode="64" LocalNumber="111126" />
    </RegistrarSRSContact>
    <DefaultTechnicalContact Name="ISP Technician"
        Email="tech@myisp.example.org">
        <PostalAddress Address1="1 Main Road" Address2="Central"
            City="Wellington" CountryCode="NZ" PostalCode="6001" />
        <Phone AreaCode="4" CountryCode="64" LocalNumber="111123" />
        <Fax AreaCode="4" CountryCode="64" LocalNumber="111124" />
    </DefaultTechnicalContact>
    <EncryptKeys>
        <EncryptKey>-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.6 (GNU/Linux)

mQGiBEfpmesRBADBkcApvlyH67pTIDObNgUm40u5WuLMkBvP8a9RWJNACdbUjMj+
...
=nDaR
-----END PGP PUBLIC KEY BLOCK-----</EncryptKey>
    </EncryptKeys>
    <Allowed2LDs>
        <SecondLD DomainName="co.example" />
        <SecondLD DomainName="org.example" />
    </Allowed2LDs>
    <Roles>
        <Role RoleName="CancelDomain" />
        <Role RoleName="Connect" />
        <Role RoleName="CreateDomain" />
        <Role RoleName="Query" />
        <Role RoleName="Registrar" />
        <Role RoleName="TransferDomain" />
        <Role RoleName="UncancelDomain" />
        <Role RoleName="UpdateDomain" />
        <Role RoleName="UpdateRegistrar" />
        <Role RoleName="Whois" />
    </Roles>
    <AuditDetails ActionId="Registrar update My ISP"
        RegistrarId="50041">
        <AuditTime>
            <From Hour="17" Minute="09" Second="10" Day="21"
                Month="2" Year="2008" TimeZoneOffset="+13:00" />
        </AuditTime>
        <AuditText>Update contact details</AuditText>
    </AuditDetails>
</Registrar>]]></artwork>
            </figure>
        </section>

        <section anchor="runlog" title="RunLog">
            <t>The RunLog element is used to provide details of log
                messages from processes, such as batch processes, that
                interact with the SRS server.  This includes the
                scheduled job processes that support the running of the
                registry, as well as any other systems that wish to log
                messages in the SRS server log.</t>
            <t>The RunLog element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>ActionStatus</c>
                <c>A text string.  The status of the process that
                    created the log.</c>
                <c>ProcessName</c>
                <c>A text string.  The name of the process that
                    created the run log entry.</c>
            </texttable>
            <t>The RunLog element may also specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>Parameters</c>
                <c>A text string.  The parameters with which the process
                    was called.</c>
                <c>Control</c>
                <c>A text string.  A free-text field for storing extra
                    information about the process run.  For example, SRS
                    server implementations may store the name of the
                    server that executed the process and the completion
                    time of the process here.</c>
            </texttable>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT RunLog (RunLogTimeStamp,RunLogDetails?)>
<!ATTLIST RunLog
        ProcessName  CDATA #REQUIRED
        Parameters   CDATA #IMPLIED
        ActionStatus CDATA #REQUIRED
        Control      CDATA #IMPLIED>]]></artwork>
            </figure>
        </section>

        <section anchor="schedule" title="Schedule">
            <t>The Schedule element is used to return details of
            scheduled events within the SRS system.</t>
            <t>The Schedule element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>ProcessName</c>
                <c>A text string.  The name of the scheduled job
                    process.</c>
                <c>Frequency</c>
                <c>An text string.  The delay between repeat executions
                    of the process, after the initial run date.</c>
                <c>CreateByRegistrarId</c>
                <c>A user identifier.  The registry's registrar identifier
                    that was used to create the scheduled job.</c>
                <c>CreateActionId</c>
                <c>An action identifier.  This is the unique identifier
                    for the request to the SRS server that created the
                    scheduled job.</c>
            </texttable>
            <t>The Schedule element may also specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>Parameters</c>
                <c>A text string.  The parameters to be passed to the
                    process when it is executed.</c>
                <c>CancelByRegistrarId</c>
                <c>A user identifier.  The registry's registrar identifier
                    that was used to cancel the scheduled job.</c>
                <c>CancelActionId</c>
                <c>An action identifier.  This is the unique identifier
                    for the request to the SRS server that cancelled the
                    scheduled job.</c>
            </texttable>
            <t>The Schedule element must also include a <xref
                    target="timestamp">FirstRunDate</xref> element
                specifying the first date and time at which the process
                should be executed, and may also include a <xref
                    target="timestamp">FinalRunDate</xref> element
                specifying the last time at which the process should run
                (for a repeating process), a <xref
                    target="create_audit_text">CreateAuditText</xref>
                element providing details on the creation of the
                scheduled job entry, and a <xref
                    target="cancel_audit_text">CancelAuditText</xref>
                element providing details on the cancellation of the
                scheduled job entry.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT Schedule (FirstRunDate,FinalRunDate?,CreateAuditText?,
                   CancelAuditText?)>
<!ATTLIST Schedule
        ProcessName         (%ScheduledJob;) #REQUIRED
        Frequency           CDATA            #REQUIRED
        Parameters          CDATA            #IMPLIED
        CreateByRegistrarId %UID;            #REQUIRED
        CreateActionId      %UID;            #REQUIRED
        CancelByRegistrarId %UID;            #IMPLIED
        CancelActionId      %UID;            #IMPLIED>]]></artwork>
            </figure>
            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<Schedule CreateActionId="BUILDZONES-20060601"
          CreateByRegistrarId="50001" Frequency="01:00:00"
          Parameters="" ProcessName="BuildDnsZoneFiles">
    <FirstRunDate Day="21" Hour="17" Minute="10" Month="2"
                  Second="30" TimeZoneOffset="+13:00" Year="2008" />
    <CreateAuditText>Registry regular zone build</CreateAuditText>
</Schedule>]]></artwork>
            </figure>
        </section>

        <section anchor="sys_param" title="SysParam">
            <t>The SysParam element is used to return details of system
                settings and any audit details relating to them.</t>
            <t>The SysParam element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>Name</c>
                <c>A text string.  The name of the system parameter.</c>
            </texttable>
            <t>The SysParam element must include a <xref
                    target="param_value">ParamValue</xref> element
                containing the value of the system parameter, and may
                include an <xref
                    target="audit_details">AuditDetails</xref> element
                containing details about the most recent change to the
                parameter.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT SysParam (ParamValue, AuditDetails?)>
<!ATTLIST SysParam
        Name CDATA #REQUIRED>]]></artwork>
            </figure>
        </section>

        <section anchor="udaivalid" title="UDAIValid">
            <t>The UDAIValid response element is used to return the
                result of checking the validity of a UDAI string for
                a given DomainName.  The element has a single
                boolean attribute containing the result of the UDAI
                validation.</t>
            <t>The UDAIValid element must specify:</t>
            <texttable>
                <ttcol align="left">Attribute</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>Valid</c>
                <c>A boolean value.  The validity status of the tested
                    UDAI value.</c>
            </texttable>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT UDAIValid EMPTY>
<!ATTLIST UDAIValid
        Valid %Boolean; #REQUIRED>]]></artwork>
            </figure>
            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<UDAIValid Valid="1" />]]></artwork>
            </figure>
        </section>

    </section>

    <section title="Information Elements">
        <t>This section documents elements from the XML DTD that are
            not used as request or response elements.  These
            information elements contain data passed between the
            client and server during normal registry usage.  The
            elements are used by requests and responses throughout
            the system.</t>

        <section anchor="access_control_list_entry" title="AccessControlListEntry">
            <t>The AccessControlListEntry contains details for a single
                entry in the registry's access control list and may also
                include an <xref target="timestamp">EffectiveDate</xref>
                element containing the date and time that the access
                control list entry became effective.
                It has two attributes:
                <list style="hanging">
                    <t hangText="Address:">An identifier to be used to
                        match and control client access to network
                        services (for example, an IP address or
                        a range of IP addresses).</t>
                    <t hangText="Comment:">A brief comment giving the
                        reason for entry in the access control list.</t>
                </list>
                The Address is a required element and should contain a
                value that can be used to control access to network
                services.  For example, a range of IPv4 addresses in the
                format: 192.0.2.0/24.
            </t>
            <t>The Comment is an optional element which can be used to
                maintain a record of the reason that Addresses were
                added to the access control list.</t>
            <t>The AccessControlListEntry element is used by the <xref
                    target="accesscontrollist">AccessControlList</xref>
                element to return details of access control lists, and
                by the <xref
                    target="access_control_list_add">AccessControlListAdd</xref>
                and  <xref
                    target="access_control_list_remove">AccessControlListRemove</xref>
                queries to specify entries to add to and remove from
                access control lists.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT AccessControlListEntry (EffectiveDate?)>
<!ATTLIST AccessControlListEntry
        Address CDATA #REQUIRED
        Comment CDATA #IMPLIED>]]></artwork>
            </figure>
        </section>

        <section anchor="action_id_filter" title="ActionIdFilter">
            <t>The ActionIdFilter element contains a pattern match
                string to match against the stored action
                identifiers of previous requests made to the SRS.
                The content should be a valid <xref
                    target="text_filter">text filter</xref>.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT ActionIdFilter (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="allowed2lds" title="Allowed2LDs">
            <t>The Allowed2LDs element contains zero or more <xref
                    target="second_ld">SecondLD</xref> elements and
                is used to hold a list of the subdomains managed by the
                registry for which a registrar may manage domain
                registrations.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT Allowed2LDs (SecondLD*)>]]></artwork>
            </figure>
        </section>

        <section anchor="audit_details" title="AuditDetails">
            <t>The AuditDetails element contains the registrar and
                action identifiers of actions for system auditing
                purposes.  The element may also contain details of
                the time of the action in an <xref
                    target="timestamp">AuditTime</xref> element and
                a text description in an <xref
                    target="audit_text">AuditText</xref>
                element.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT AuditDetails (AuditTime?,AuditText?)>
<!ATTLIST AuditDetails
        RegistrarId CDATA #IMPLIED
        ActionId    %UID; #IMPLIED>]]></artwork>
            </figure>
        </section>

        <section anchor="audit_text" title="AuditText">
            <t>The AuditText element is a simple element that
                contains parsed character data that describes an
                action in the SRS.  For instance, it may contain a
                text description of the purpose of a request.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT AuditText (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="audit_text_filter" title="AuditTextFilter">
            <t>The AuditTextFilter element is a simple element that
                contains parsed character data.  The content of this
                element is used as a pattern match string to match
                against audit text for previous transactions made to
                the SRS.  The content should be a valid <xref
                    target="text_filter">text filter</xref>.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT AuditTextFilter (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="cancel_audit_text" title="CancelAuditText">
            <t>The CancelAuditText element is a simple element that
                contains parsed character data.  The content of this
                element is used to hold the text of an audit message
                provided during cancellation of a scheduled process
                in the SRS.  It is used by the <xref
                    target="schedule">Schedule</xref> response
                element.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT CancelAuditText (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="base_month" title="BaseMonth">
            <t>The BaseMonth element is an empty element.  It has a
                single attribute, Month, that must contain a valid
                month value in the range 1 to 12.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT BaseMonth EMPTY>
<!ATTLIST BaseMonth
        Month %Number; #REQUIRED>]]></artwork>
            </figure>
        </section>

        <section anchor="base_year" title="BaseYear">
            <t>The BaseYear element is an empty element.  It has a
                single attribute, Year, that must contain a valid
                year value.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT BaseYear EMPTY>
<!ATTLIST BaseYear
        Year %Number; #REQUIRED>]]></artwork>
            </figure>
        </section>

        <section anchor="contact_details" title="Contact Details Elements">
            <t>The SRS protocol employs many contact details elements
                that all share a common definition. The contact
                details elements are:
                <list style="symbols">
                    <t>AdminContact</t>
                    <t>DefaultTechnicalContact</t>
                    <t>RegistrantContact</t>
                    <t>RegistrarPublicContact</t>
                    <t>RegistrarSRSContact</t>
                    <t>TechnicalContact</t>
                </list>
            </t>
            <t>The contact details elements are defined using the
                <xref target="entity_contact">Contact</xref> entity
                definition for the element content, and the <xref
                    target="entity_contact_attr">ContactAttr</xref>
                entity for the element attribute definitions.</t>
            <t>The contact details elements have Name and Email
                attributes to store the contact name and email
                address; either attribute may be omitted where
                appropriate.  The contact details elements may also
                include elements for <xref
                    target="postal_address">PostalAddress</xref>,
                <xref target="phone">Phone</xref>, and <xref
                    target="phone">Fax</xref> details.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT AdminContact (%Contact;)>
<!ATTLIST AdminContact %ContactAttr;>

<!ELEMENT DefaultTechnicalContact (%Contact;)>
<!ATTLIST DefaultTechnicalContact %ContactAttr;>

<!ELEMENT RegistrantContact (%Contact;)>
<!ATTLIST RegistrantContact %ContactAttr;>

<!ELEMENT RegistrarPublicContact (%Contact;)>
<!ATTLIST RegistrarPublicContact %ContactAttr;>

<!ELEMENT RegistrarSRSContact (%Contact;)>
<!ATTLIST RegistrarSRSContact %ContactAttr;>

<!ELEMENT TechnicalContact (%Contact;)>
<!ATTLIST TechnicalContact %ContactAttr;>]]></artwork>
            </figure>

            <figure>
                <preamble>Example:</preamble>
                <artwork><![CDATA[
<AdminContact Name="John Doe" Email="john_doe@example.org">
    <PostalAddress Address1="1 Example Street" Address2=""
        City="Example" CountryCode="NZ" PostalCode="99001"
        Province="" />
    <Phone CountryCode="99" AreaCode="8" LocalNumber="555-5678"/>
    <Fax CountryCode="99" AreaCode="8" LocalNumber="555-5679"/>
</AdminContact>]]></artwork>
            </figure>
        </section>

        <section anchor="contact_details_filter" title="Contact Details
            Search Filters">
            <t>The contact details search filter elements all share
                a common definition referenced from the <xref
                    target="entity_contact_filter">ContactFilter</xref>
                entity definition for the element content, and the
                <xref
                    target="entity_contact_filter_attr">ContactFilterAttr</xref>
                entity for the element attribute definitions.  The
                contact details filters are used to provide fields
                for matching against stored contact details when
                using the <xref
                    target="domain_details_qry">DomainDetailsQry</xref>
                request.  Only the details provided in the filter
                are used to match against stored values in the SRS,
                this enables general matches, for instance, to
                select all domains with a particular administrative
                contact name.</t>
            <t>The contact details filter elements have the same
                structure as the contact details elements.  Name and
                Email attributes specify the match values for
                contact name and email address; either attribute may
                be omitted where appropriate.  The contact details
                filter elements may also include filter details
                elements for <xref
                    target="postal_address_filter">PostalAddress</xref>,
                <xref target="phone">Phone</xref>, and <xref
                    target="phone">Fax</xref> details.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT AdminContactFilter (%ContactFilter;)>
<!ATTLIST AdminContactFilter %ContactAttrFilter;>

<!ELEMENT RegistrantContactFilter (%ContactFilter;)>
<!ATTLIST RegistrantContactFilter %ContactAttrFilter;>

<!ELEMENT TechnicalContactFilter (%ContactFilter;)>
<!ATTLIST TechnicalContactFilter %ContactAttrFilter;>]]></artwork>
            </figure>
        </section>

        <section anchor="create_audit_text" title="CreateAuditText">
            <t>The CreateAuditText element is a simple element that
                contains parsed character data.  The content of this
                element is used to hold the text of an audit message
                provided during creation of a scheduled process in
                the SRS.  It is used by the <xref
                    target="schedule">Schedule</xref> response
                element.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT CreateAuditText (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="date_range" title="Date Range Elements">
            <t>The SRS protocol employs many date range elements
                that all share a common definition.  The date range
                elements are:

                <list style="symbols">
                    <t>AuditTime</t>
                    <t>BilledUntilDateRange</t>
                    <t>CancelledDateRange</t>
                    <t>ChangedInDateRange</t>
                    <t>InvoiceDateRange</t>
                    <t>LockedDateRange</t>
                    <t>LogDateRange</t>
                    <t>RegisteredDateRange</t>
                    <t>ResultDateRange</t>
                    <t>SearchDateRange</t>
                    <t>TransDateRange</t>
                </list>
            </t>

            <t>The content of the date range elements is defined
                using the <xref
                    target="entity_date_range">DateRange</xref>
                entity.  The date range elements can contain two
                optional elements, a <xref
                    target="timestamp">From</xref> date and a <xref
                    target="timestamp">To</xref> date, that define
                the start and end of a range of dates.</t>

            <t>If the From date is omitted, SRS implementations
                SHOULD use the earliest action in the system as the
                From date value.  If the To date is omitted, SRS
                implementation SHOULD use the current date as the To
                date value.</t>

            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT AuditTime            (%DateRange;)>

<!ELEMENT BilledUntilDateRange (%DateRange;)>

<!ELEMENT CancelledDateRange   (%DateRange;)>

<!ELEMENT ChangedInDateRange   (%DateRange;)>

<!ELEMENT InvoiceDateRange     (%DateRange;)>

<!ELEMENT LockedDateRange      (%DateRange;)>

<!ELEMENT LogDateRange         (%DateRange;)>

<!ELEMENT RegisteredDateRange  (%DateRange;)>

<!ELEMENT ResultDateRange      (%DateRange;)>

<!ELEMENT SearchDateRange      (%DateRange;)>

<!ELEMENT TransDateRange       (%DateRange;)>]]></artwork>
            </figure>
            <figure>
                <preamble>Example of a ResultDateRange element:</preamble>
                <artwork><![CDATA[
<ResultDateRange>
    <From Year="2008" Month="01" Day="01" Hour="00"
        Minute="00" Second="00" TimeZoneOffset="+13:00" />
    <To Year="2008" Month="01" Day="31" Hour="23"
        Minute="59" Second="59" TimeZoneOffset="+13:00" />
</ResultDateRange>]]></artwork>
            </figure>
        </section>

        <section anchor="description" title="Description">
            <t>The Description element is a simple element that
                contains parsed character data. The content of this
                element is a text description of an error condition.
                It is used by the <xref target="error">Error</xref>
                element.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT Description (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="domain_name_filter" title="DomainNameFilter">
            <t>The DomainNameFilter element is a simple element that
                contains parsed character data. The content of this
                element is used as a pattern match string to match
                against the names of domains registered in the SRS.
                The content should be a valid <xref
                    target="text_filter">text filter</xref> for
                matching against domain names.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT DomainNameFilter (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="encrypt_key" title="EncryptKey">
            <t>The EncryptKey element is a simple element that contains
                parsed character data.  The content of this element will
                be an ASCII armored copy of a registrar's
                OpenPGP-compatible public key.  It is used by the <xref
                    target="encrypt_keys">EncryptKeys</xref>
                element.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT EncryptKey (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="encrypt_keys" title="EncryptKeys">
            <t>The EncryptKeys element is a simple simple container
                for <xref target="encrypt_key">EncryptKey</xref>
                elements.  It is used when creating and updating
                registrars and when the SRS returns details of
                registrars.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT EncryptKeys (EncryptKey*)>]]></artwork>
            </figure>
        </section>

        <section anchor="error_details" title="ErrorDetails">
            <t>The ErrorDetails element is a simple element that
                contains parsed character data. The content of this
                element is a text description providing further
                details about an error condition.  It is used by the
                <xref target="error">Error</xref> element.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT ErrorDetails (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="field_list" title="FieldList">
            <t>The FieldList element is an empty element with a set
                of <xref target="entity_boolean">Boolean</xref>
                attributes.  It is used in the <xref
                    target="domain_details_qry">DomainDetailsQry</xref>
                request to specify the domain details to return for
                matching domains in the SRS.</t>

            <t>The domain details that may be requested and their
                FieldList attributes are:
                    <list style="hanging">
                        <t hangText="Status:">The registration
                            status of the domain ("Active" or
                            "PendingRelease").</t>
                        <t hangText="NameServers:">The list of name
                            servers that the domain is delegated
                            to.</t>
                        <t hangText="RegisteredDate:">The date and
                            time that the domain was registered.</t>
                        <t hangText="AdminContact:">The domain's
                            administrative contact details.</t>
                        <t hangText="RegistrantContact:">The
                            domain's registrant contact details.</t>
                        <t hangText="TechnicalContact:">The domain's
                            technical contact details.</t>
                        <t hangText="LockedDate:">The date that a
                            locked domain was locked.</t>
                        <t hangText="Delegate:">Whether the domain
                            is delegated in the DNS system.</t>
                        <t hangText="RegistrarId:">The
                            registry-assigned registrar number.</t>
                        <t hangText="RegistrarName:">The name of the
                            registrar that manages the domain.</t>
                        <t hangText="RegistrantRef:">The personal
                            reference for the registrant of the
                            domain.</t>
                        <t hangText="LastActionId:">The unique
                            identifier for the last transaction that
                            amended the domain details in the
                            SRS.</t>
                        <t
                            hangText="ChangedByRegistrarId:">The
                            identifier of the registrar that last
                            updated the domain.</t>
                        <t hangText="Term:">The billing term for the
                            domain registration.</t>
                        <t hangText="BilledUntil:">The date and time
                            that the domain has been billed
                            until.</t>
                        <t hangText="CancelledDate:">The date that a
                            cancelled domain registration was
                            cancelled.</t>
                        <t hangText="AuditText:">The audit text for
                            changes to the domain.  This is an
                            optional reference for the user.</t>
                        <t hangText="EffectiveFrom:">The date that
                            this domain record was replaced.</t>
                    </list>
                </t>

            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT FieldList EMPTY>
<!ATTLIST FieldList
        Status               %Boolean; #IMPLIED
        NameServers          %Boolean; #IMPLIED
        RegistrantContact    %Boolean; #IMPLIED
        RegisteredDate       %Boolean; #IMPLIED
        AdminContact         %Boolean; #IMPLIED
        TechnicalContact     %Boolean; #IMPLIED
        LockedDate           %Boolean; #IMPLIED
        Delegate             %Boolean; #IMPLIED
        RegistrarId          %Boolean; #IMPLIED
        RegistrarName        %Boolean; #IMPLIED
        RegistrantRef        %Boolean; #IMPLIED
        LastActionId         %Boolean; #IMPLIED
        ChangedByRegistrarId %Boolean; #IMPLIED
        Term                 %Boolean; #IMPLIED
        BilledUntil          %Boolean; #IMPLIED
        CancelledDate        %Boolean; #IMPLIED
        AuditText            %Boolean; #IMPLIED
        EffectiveFrom        %Boolean; #IMPLIED>]]></artwork>
            </figure>
        </section>

        <section anchor="income_month" title="IncomeMonth">
            <t>The IncomeMonth element is an empty element.  It has a
                single attribute, Month, that must contain a valid
                month value in the range 1 to 12.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT IncomeMonth EMPTY>
<!ATTLIST IncomeMonth
        Month %Number; #REQUIRED>]]></artwork>
            </figure>
        </section>

        <section anchor="income_year" title="IncomeYear">
            <t>The IncomeYear element is an empty element.  It has a
                single attribute, Year, that must contain a valid
                year value.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT IncomeYear EMPTY>
<!ATTLIST IncomeYear
        Year %Number; #REQUIRED>]]></artwork>
            </figure>
        </section>

        <section anchor="name_servers" title="NameServers">
            <t>The NameServers element is a simple container
                for <xref target="server">Server</xref> elements.
                It is used when creating and updating domains and
                when the SRS returns details of the name servers for
                domains.  SRS implementations MAY set a limit on the
                number of server elements that can be provided.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT NameServers (Server*)>]]></artwork>
            </figure>
        </section>

        <section anchor="name_server_filter" title="NameServerFilter">
            <t>The NameServerFilter element is a simple container
                for <xref target="server_filter">ServerFilter</xref>
                elements.  It is used in the <xref
                    target="domain_details_qry">DomainDetailsQry</xref>
                request to specify name server details to match
                against the details of domains in the SRS.</t>
            <t>If multiple ServerFilter elements are provided, the
                SRS should return domain results that match any of
                the provided filters (assuming that other filter
                restrictions are also met).</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT NameServerFilter (ServerFilter+)>]]></artwork>
            </figure>
        </section>

        <section anchor="param_value" title="ParamValue">
            <t>The ParamValue element is a simple element that
                contains parsed character data.  The content of this
                element is the value of an SRS system parameter.  It
                is used by the <xref
                    target="sys_param">SysParam</xref> element.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT ParamValue       (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="postal_address" title="PostalAddress">
            <t>The PostalAddress element is an empty element with
                attributes for describing postal address details.
                SRS implementations SHOULD validate the CountryCode
                as a valid <xref target="ISO.3166.1988">ISO 3166</xref>
                two-letter country code.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT PostalAddress EMPTY>
<!ATTLIST PostalAddress
        Address1    CDATA #IMPLIED
        Address2    CDATA #IMPLIED
        City        CDATA #IMPLIED
        Province    CDATA #IMPLIED
        CountryCode CDATA #IMPLIED
        PostalCode  CDATA #IMPLIED>]]></artwork>
            </figure>
        </section>

        <section anchor="postal_address_filter" title="PostalAddressFilter">
            <t>The PostalAddressFilter element is an empty element
                with attributes for describing postal address
                details to match against details held by the SRS.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT PostalAddressFilter EMPTY>
<!ATTLIST PostalAddressFilter
        Address1    CDATA #IMPLIED
        Address2    CDATA #IMPLIED
        City        CDATA #IMPLIED
        Province    CDATA #IMPLIED
        CountryCode CDATA #IMPLIED
        PostalCode  CDATA #IMPLIED>]]></artwork>
            </figure>
        </section>

        <section anchor="phone" title="Telephone Number Details">
            <t>There are two telephone number details elements that
                share a common definition:
                <list style="symbols">
                    <t>Fax</t>
                    <t>Phone</t>
                </list>
            </t>
            <t>The telephone number details elements are empty
                elements that use the <xref
                    target="entity_phone_attr">PhoneAttr</xref>
                entity for attribute declarations.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT Fax EMPTY>
<!ATTLIST Fax %PhoneAttr;>

<!ELEMENT Phone EMPTY>
<!ATTLIST Phone %PhoneAttr;>]]></artwork>
            </figure>
        </section>

        <section anchor="role" title="Role">
            <t>The Role element is an empty element.  It has a
                single attribute, RoleName, that must contain a
                value as defined by the <xref
                    target="entity_role">Role</xref> entity.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT Role EMPTY>
<!ATTLIST Role
        RoleName (%Role;) #REQUIRED>]]></artwork>
            </figure>
        </section>

        <section anchor="roles" title="Roles">
            <t>The Roles element is a simple container for <xref
                    target="role">Role</xref> elements.  It is used
                when creating and updating registrars and when the
                SRS returns details of registrars.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT Roles (Role*)>]]></artwork>
            </figure>
        </section>

        <section anchor="run_log_details" title="RunLogDetails">
            <t>The RunLogDetails element is a simple element that
                contains parsed character data.  The content of this
                element is the value of an SRS system parameter.  It
                is used by the <xref
                    target="sys_param">SysParam</xref> element and
                contains process data to be stored in the SRS log.</t>
            <t></t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT RunLogDetails (#PCDATA)>]]></artwork>
            </figure>
        </section>

        <section anchor="second_ld" title="SecondLD">
            <t>The SecondLD element is an empty element.  It has a
                single attribute, DomainName, that will contain a
                subdomain for which a given registrar has domain
                registration privileges.  It is used by the <xref
                    target="allowed2lds">Allowed2LDs</xref> element.</t>
            <t>The SecondLD element MAY contain subdomains at any level
                in the domain name system hierarchy that the registry
                supports registrations for.  It is not technically
                restricted to second level domains.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT SecondLD EMPTY>
<!ATTLIST SecondLD
        DomainName %DomainName; #REQUIRED>]]></artwork>
            </figure>
        </section>

        <section anchor="server" title="Server">
            <t>The Server element is an empty element.  It has three
                attributes:
                <list style="hanging">
                    <t hangText="FQDN:">The fully qualified domain
                        name of the server.</t>
                    <t hangText="IP4Addr:">The IPv4 address of the
                        server.</t>
                    <t hangText="IP6Addr:">The IPv6 address of the
                        server.</t>
                </list>
                The fully qualified domain name is a required
                attribute.  The IP address fields should only be
                included if the fully qualified domain name is
                within the domain that the server is a name server
                for.</t>
            <t>The IP4Addr value should be given in standard
                dotted-decimal notation, for example,
                192.0.2.14</t>
            <t>The IP6Addr value should be given in any of the
                formats described in <xref target="RFC4291">RFC
                    4291</xref>, for example:
                <list style="hanging">
                    <t hangText="Fully specified (preferred
                        form):">2001:DB8:0:0:0:0:C000:20E</t>
                    <t hangText="Compressed form:">2001:DB8::C000:20E</t>
                    <t hangText="Alternative
                        form:">2001:DB8:0:0:0:0:192.0.2.14 (or
                        2001:DB8::192.0.2.14)</t>
                </list>
            </t>
            <t>The Server element is used by the <xref
                    target="name_servers">NameServers</xref> element
                to specify name server details.</t>
            <figure>
                <preamble>Syntax:</preamble>
                <artwork><![CDATA[
<!ELEMENT Server EMPTY>
<!ATTLIST Server
        FQDN    CDATA #REQUIRED
        IP4Addr CDATA #IMPLIED
        IP6Addr CDATA #IMPLIED>]]></artwork>
            </figure>
        </section>

            <section anchor="server_filter" title="ServerFilter">
                <t>The ServerFilter element is an empty element.  It has
                    the same attributes as the <xref
                        target="server">Server</xref> element, however
                    all of the attributes are optional in the
                    ServerFilter element.  The content of the
                    ServerFilter attributes is used to match against
                    name server details held by the SRS.</t>
                <t>The ServerFilter element is used by the <xref
                        target="name_server_filter">NameServerFilter</xref>
                    element to specify the server details to match.</t>
                <figure>
                    <preamble>Syntax:</preamble>
                    <artwork><![CDATA[
<!ELEMENT ServerFilter EMPTY>
<!ATTLIST ServerFilter
        FQDN    CDATA #IMPLIED
        IP4Addr CDATA #IMPLIED
        IP6Addr CDATA #IMPLIED>]]></artwork>
                </figure>
            </section>

            <section anchor="signature" title="Signature">
                <t>The Signature element is a simple element that
                    contains parsed character data. The content of this
                    element is the OpenPGP-compatible signature of a
                    request message in ASCII armored format and encoded
                    in UTF-8.  It is used by the <xref
                        target="rawrequest_rawresponse">RawRequest and
                        RawResponse</xref> elements when returning
                    details of previous SRS transactions.</t>
                <figure>
                    <preamble>Syntax:</preamble>
                    <artwork><![CDATA[
<!ELEMENT Signature (#PCDATA)>]]></artwork>
                </figure>
            </section>

            <section anchor="timestamp" title="Timestamp Elements">
                <t>The SRS protocol employs many timestamp elements that
                    all share a common definition.  The timestamp
                    elements are:
                    <list style="symbols">
                        <t>ActiveOn</t>
                        <t>BilledUntil</t>
                        <t>BillPeriodEnd</t>
                        <t>BillPeriodStart</t>
                        <t>CancelledDate</t>
                        <t>EffectiveDate</t>
                        <t>FeTimeStamp</t>
                        <t>FinalRunDate</t>
                        <t>FirstRunDate</t>
                        <t>From</t>
                        <t>InvoiceDate</t>
                        <t>LastRunDate</t>
                        <t>LockedDate</t>
                        <t>NewBilledUntilDate</t>
                        <t>RegisteredDate</t>
                        <t>RunDate</t>
                        <t>RunLogTimeStamp</t>
                        <t>To</t>
                        <t>TransactionDate</t>
                        <t>TransDate</t>
                    </list>
                </t>

                <t>The timestamp elements are empty elements that use
                    the <xref target="entity_time_stamp">TimeStamp</xref>
                    entity for attribute declarations.</t>

                <figure>
                    <preamble>Syntax:</preamble>
                    <artwork><![CDATA[
<!ELEMENT ActiveOn           EMPTY>
<!ATTLIST ActiveOn           %TimeStamp;>

<!ELEMENT BilledUntil        EMPTY>
<!ATTLIST BilledUntil        %TimeStamp;>

<!ELEMENT BillPeriodEnd      EMPTY>
<!ATTLIST BillPeriodEnd      %TimeStamp;>

<!ELEMENT BillPeriodStart    EMPTY>
<!ATTLIST BillPeriodStart    %TimeStamp;>

<!ELEMENT CancelledDate      EMPTY>
<!ATTLIST CancelledDate      %TimeStamp;>

<!ELEMENT EffectiveDate      EMPTY>
<!ATTLIST EffectiveDate      %TimeStamp;>

<!ELEMENT FeTimestamp        EMPTY>
<!ATTLIST FeTimestamp        %TimeStamp;>

<!ELEMENT FinalRunDate       EMPTY>
<!ATTLIST FinalRunDate       %TimeStamp;>

<!ELEMENT FirstRunDate       EMPTY>
<!ATTLIST FirstRunDate       %TimeStamp;>

<!ELEMENT From               EMPTY>
<!ATTLIST From               %TimeStamp;>

<!ELEMENT InvoiceDate        EMPTY>
<!ATTLIST InvoiceDate        %TimeStamp;>

<!ELEMENT LastRunDate        EMPTY>
<!ATTLIST LastRunDate        %TimeStamp;>

<!ELEMENT LockedDate         EMPTY>
<!ATTLIST LockedDate         %TimeStamp;>

<!ELEMENT NewBilledUntilDate EMPTY>
<!ATTLIST NewBilledUntilDate %TimeStamp;>

<!ELEMENT RegisteredDate     EMPTY>
<!ATTLIST RegisteredDate     %TimeStamp;>

<!ELEMENT RunDate            EMPTY>
<!ATTLIST RunDate            %TimeStamp;>

<!ELEMENT RunLogTimeStamp    EMPTY>
<!ATTLIST RunLogTimeStamp    %TimeStamp;>

<!ELEMENT To                 EMPTY>
<!ATTLIST To                 %TimeStamp;>

<!ELEMENT TransactionDate    EMPTY>
<!ATTLIST TransactionDate    %TimeStamp;>

<!ELEMENT TransDate          EMPTY>
<!ATTLIST TransDate          %TimeStamp;>]]></artwork>
                </figure>
                <figure>
                    <preamble>Example of an EffectiveDate element:</preamble>
                    <artwork><![CDATA[
<EffectiveDate Year="2007" Month="11" Day="19" Hour="12"
    Minute="00" Second="00" TimeZoneOffset="+13:00" />]]></artwork>
                </figure>
            </section>

            <section anchor="transferred_domain" title="TransferredDomain">
                <t>The TransferredDomain element is a simple element
                    that contains parsed character data.  The content of
                    the element is the domain name of a domain that has
                    been transferred from one registrar to another.  It
                    is used by the <xref
                        target="domain_transfer">DomainTransfer</xref>
                    element.</t>
                <figure>
                    <preamble>Syntax:</preamble>
                    <artwork><![CDATA[
<!ELEMENT TransferredDomain (#PCDATA)>]]></artwork>
                </figure>
            </section>

            <section anchor="xml" title="XML">
                <t>The XML element is a simple element that contains
                    parsed character data.  The content of this element
                    is the XML content of a request or response message
                    encoded in UTF-8.  It is used by the <xref
                        target="rawrequest_rawresponse">RawRequest and
                        RawResponse</xref> elements when returning
                    details of previous SRS transactions.</t>
                <figure>
                    <preamble>Syntax:</preamble>
                    <artwork><![CDATA[
<!ELEMENT XML (#PCDATA)>]]></artwork>
                </figure>
            </section>
        </section>

        <section title="Internal Entities" anchor="internal_entities">
            <t>The XML DTD for the SRS communications protocol uses
                internal entities to provide common definitions in the
                DTD.  These entities also enhance the readability of the
                DTD.</t>

            <section title="Actions">
                <section anchor="entity_domain_write_action" title="DomainWriteAction">
                    <t>The DomainWriteAction entity defines the valid
                        values for attributes that hold the name of a
                        domain write request.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % DomainWriteAction "DomainCreate|
                              DomainUpdate">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_domain_query_action" title="DomainQueryAction">
                    <t>The DomainQueryAction entity defines the valid
                        values for attributes that hold the name of a
                        domain query request.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % DomainQueryAction "Whois|
                              DomainDetailsQry|
                              ActionDetailsQry|
                              UDAIValidQry">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_registrar_write_action" title="RegistrarWriteAction">
                    <t>The RegistrarWriteAction entity defines the valid
                        values for attributes that hold the name of a
                        registrar write request.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % RegistrarWriteAction "RegistrarCreate|
                                 RegistrarUpdate">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_registrar_query_action" title="RegistrarQueryAction">
                    <t>The RegistrarQueryAction entity defines the valid
                        values for attributes that hold the name of a
                        registrar query request.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % RegistrarQueryAction "RegistrarDetailsQry|
                                 RegistrarAccountQry|
                                 GetMessages">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_registry_action" title="RegistryAction">
                    <t>The RegistryAction entity defines the valid
                        values for attributes that hold the name of a
                        registry request.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % RegistryAction "SysParamsUpdate|
                           SysParamsQry|
                           RunLogCreate|
                           RunLogQry|
                           ScheduleCreate|
                           ScheduleCancel|
                           ScheduleQry|
                           ScheduleUpdate|
                           BillingExtract|
                           SetBillingAmount|
                           QryBillingAmount|
                           DeferredIncomeSummaryQry|
                           DeferredIncomeDetailQry|
                           BilledUntilAdjustment|
                           BuildDnsZoneFiles|
                           GenerateDomainReport|
                           AdjustRegistrarAccount|
                           AccessControlListQry|
                           AccessControlListAdd|
                           AccessControlListRemove">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_action" title="Action">
                    <t>The Action entity defines the valid values for
                        attributes that hold the name of an SRS request.
                        It is defined in terms of the various action
                        entity definitions.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % Action "%DomainWriteAction;|
                   %DomainQueryAction;|
                   %RegistrarWriteAction;|
                   %RegistrarQueryAction;|
                   %RegistryAction;"]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="Accounts">
                <section anchor="entity_accounting_action" title="AccountingAction">
                    <t>The AccountingAction entity defines the valid
                        values for attributes that hold the name of an
                        accounting action type.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % AccountingAction "Credit|
                             Debit>]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_bill_status" title="BillStatus">
                    <t>The BillStatus entity defines the valid values
                        for attributes that hold the name of a billing
                        status.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % BillStatus "PendingConfirmation|
                       Confirmed">]]></artwork>
                    </figure>
                </section>

            </section>

            <section title="Booleans">
                <section anchor="entity_true" title="True">
                    <t>The True entity defines a fixed integer value for
                        true boolean values in the SRS protocol.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % True "1">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_false" title="False">
                    <t>The False entity defines a fixed integer value
                        for false boolean values in the SRS
                        protocol.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % False "0">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_boolean" title="Boolean">
                    <t>The Boolean entity defines the valid values for
                        attributes that hold a boolean value.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % Boolean "(%False;|%True;)">]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="Contact Details">
                <section anchor="entity_contact" title="Contact">
                    <t>The Contact entity defines a content model for
                        elements that contain contact details.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % Contact "PostalAddress?,Phone?,Fax?">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_contact_attr" title="ContactAttr">
                    <t>The ContactAttr entity defines the attribute
                        specification for elements that contain contact
                        details.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % ContactAttr "Name  CDATA #IMPLIED
                        Email CDATA #IMPLIED">]]></artwork>
                    </figure>
                </section>

            </section>

            <section title="Contact Details Filters">
                <section anchor="entity_contact_filter" title="ContactFilter">
                    <t>The ContactFilter entity defines a content model
                        for elements that contain contact filter
                        details.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % ContactFilter "PostalAddressFilter?,Phone?,Fax?">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_contact_filter_attr" title="ContactFilterAttr">
                    <t>The ContactFilterAttr entity defines the
                        attribute specification for elements that
                        contain contact filter details.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % ContactAttrFilter "Name  CDATA #IMPLIED
                              Email CDATA #IMPLIED">]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="Currency">
                <section anchor="entity_dollars" title="Dollars">
                    <t>The Dollars entity defines a value definition for
                        attributes that contain currency values.  SRS
                        implementations SHOULD ensure that values given
                        and received in attributes of this type conform
                        to valid values in their registry's working
                        currency.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % Dollars "CDATA">]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="Dates And Times">
                <section anchor="entity_date" title="Date">
                    <t>The Date entity defines the attribute
                        specification for elements that contain date
                        details.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % Date "Year  %Number; #REQUIRED
                 Month %Number; #REQUIRED
                 Day   %Number; #REQUIRED">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_time" title="Time">
                    <t>The Time entity defines the attribute
                        specification for elements that contain time
                        details.  SRS implementations MAY use their
                        local timezone offset from UTC as a default
                        value for TimeZoneOffset if this field is not
                        populated.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % Time "Hour           %Number; #REQUIRED
                 Minute         %Number; #REQUIRED
                 Second         %Number; #IMPLIED
                 TimeZoneOffset CDATA    #IMPLIED">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_time_stamp" title="TimeStamp">
                    <t>The TimeStamp entity defines a composite
                        attribute specification for elements that
                        contain a combined date and time value.  It is
                        defined in terms of the <xref
                            target="entity_date">Date</xref> and <xref
                            target="entity_time">Time</xref>
                        entities.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % TimeStamp "%Date; %Time;">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_date_range" title="DateRange">
                    <t>The DateRange entity defines a content model for
                        elements that contain a start date and time and
                        an end date and time.  Such elements consist of
                        an optional <xref target="timestamp">From</xref>
                        element and an optional <xref
                            target="timestamp">To</xref> element.  Both the
                        From and To element are empty elements with
                        attributes as defined in the <xref
                            target="entity_time_stamp">TimeStamp</xref>
                        entity.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % DateRange "From?,To?">]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="Domain Names">
                <section anchor="entity_domain_name" title="DomainName">
                    <t>The DomainName entity defines the valid value
                        definition for attributes that hold a domain
                        name.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % DomainName "CDATA">]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="Domain Status">
                <section anchor="entity_reg_domain_status" title="RegDomainStatus">
                    <t>The RegDomainStatus entity defines the valid
                        values for attributes that hold the status of
                        registered domains.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % RegDomainStatus "Active|
                            PendingRelease">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_domain_status" title="DomainStatus">
                    <t>The DomainStatus entity defines the valid values
                        for attributes that hold the status of both
                        registered and unregistered domains.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % DomainStatus "%RegDomainStatus;|
                         Available">]]></artwork>
                    </figure>
                </section>

            </section>

            <section title="Duration">
                <section anchor="entity_term" title="Term">
                    <t>The Term entity defines the valid value
                        definition for attributes that hold a timespan.
                        Generally this will be an integer number of
                        months representing the registry's billing cycle
                        for registered domains.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % Term "%Number;">]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="Numeric">
                <section anchor="entity_number" title="Number">
                    <t>The Number entity defines the valid value
                        definition for attributes that hold a number.
                        SRS implementations SHOULD ensure that data
                        provided in such attributes is numeric.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % Number "CDATA">]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="Registrar Identifiers">
                <section anchor="entity_registrar_id" title="RegistrarId">
                    <t>The RegistrarId entity defines the valid value
                        definition for attributes that hold a registrar
                        identifier.  Registrar identifiers in the SRS
                        are numeric and this entity is defined in terms
                        of the <xref
                            target="entity_number">Number</xref>
                        entity.</t>
                    <t>Registrar identifiers are assigned to registrars
                        for performing registrar functions and to the
                        registry for performing registry functions.</t>
                    <t>The registry may have more than one identity,
                        with each identity having separate roles and
                        permissions in the system.  The registry's
                        registrar identifiers should be known to
                        registrars so that registrars can identify
                        actions performed by the registry.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % RegistrarId "%Number;">]]></artwork>
                    </figure>
                </section>

                <section anchor="entity_registrar_id_or_others" title="RegistrarIdOrOTHERS">
                    <t>The RegistrarIdOrOTHERS entity defines the valid
                        value definition for attributes that hold a
                        registrar identifier or the special value
                        "OTHERS".  SRS Implementations SHOULD ensure
                        that data provided in such attributes is either
                        a valid registrar identifier or the string
                        "OTHERS".  The value "OTHERS" may be used
                        instead of a registrar identifier in some cases,
                        for example when using the <xref
                            target="get_messages">GetMessages</xref>
                        request, to specify a registrar identifier other
                        than the registrar making the request.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % RegistrarIdOrOTHERS "CDATA">]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="Responses">
                <section anchor="entity_action_response" title="ActionResponse">
                    <t>The ActionResponse entity defines the valid
                        values for attributes that hold the name of an
                        action response type.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % ActionResponse "Error|
                           Domain*|
                           UDAIValid|
                           DomainTransfer|
                           BillingTrans*|
                           DeferredRegistrarIncome*|
                           Registrar*|
                           SysParam*|
                           RunLog*|
                           Schedule*|
                           AccessControlList*|
                           (RawRequest,RawResponse)|
                           BillingAmount*">]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="System Roles">
                <section anchor="entity_role" title="Role">
                    <t>The Role entity defines the valid values for
                        attributes that hold the name of a system role
                        type.  Roles may be used by implementations to
                        restrict the requests that users (typically
                        registrars) have access to.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % Role "Registrar|
                 Registry|
                 Whois|
                 Query|
                 CreateDomain|
                 UpdateDomain|
                 TransferDomain|
                 CancelDomain|
                 UncancelDomain|
                 UpdateRegistrar|
                 Administer|
                 Supervisor|
                 Connect|
                 ReleaseDomain|
                 QueryACL|
                 UpdateACL">]]></artwork>
                    </figure>
                </section>

            </section>

            <section title="Scheduled Processes">
                <section anchor="entity_scheduled_job" title="ScheduledJob">
                    <t>The ScheduledJob entity defines the valid values
                        for attributes that hold the name of a scheduled
                        job type.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % ScheduledJob "BuildDnsZoneFiles|
                         ReleaseDomains|
                         RenewDomains|
                         GenerateDomainReport|
                         GenerateStatsReport"]]></artwork>
                    </figure>
                </section>

            </section>

            <section title="Telephone Numbers">
                <section anchor="entity_phone_attr" title="PhoneAttr">
                    <t>The PhoneAttr entity defines the attribute
                        specification for elements that telephone or
                        fax number details.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % PhoneAttr "CountryCode %NumberFilter; #IMPLIED
                      AreaCode    %NumberFilter; #IMPLIED
                      LocalNumber %NumberFilter; #IMPLIED">]]></artwork>
                    </figure>
                </section>
            </section>

            <section title="Unique Identifiers">
                <section anchor="entity_uid" title="UID">
                    <t>The UID entity defines a value definition for
                        attributes that contain unique identifier
                        values.</t>
                    <figure>
                        <preamble>Definition:</preamble>
                        <artwork><![CDATA[
<!ENTITY % UID "CDATA">]]></artwork>
                    </figure>
                </section>

            </section>
        </section>

        <section anchor="text_filter" title="Text Filter">

            <t>The text filter provides support for case-insensitive
                matching of a character string against information held
                in the SRS.  Two wildcard characters are supported:</t>

            <texttable>
                <ttcol align="left">Wildcard</ttcol>
                <ttcol align="left">Description</ttcol>
                <c>?</c>
                <c>matches any single character</c>
                <c>*</c>
                <c>matches zero or more characters</c>
            </texttable>

            <t>Note: when a text filter pattern is used for matching
                against domain names, the wildcard characters will not
                match the dot-separator character.  The only exception
                to this is when the * wildcard is used at the start of
                the text filter pattern, in this case the wildcard may
                match any characters, as shown in the examples
                below.</t>

            <texttable>
                <preamble>Text filter pattern matching examples for
                    domain names:</preamble>
                <ttcol align="left">Text filter pattern</ttcol>
                <ttcol align="left">Domain</ttcol>
                <ttcol align="left">Result</ttcol>
                <c>alpha.*.org</c>
                <c>alpha.example.org</c>
                <c>Match</c>
                <c>alpha.*.org</c>
                <c>alpha.beta.example.org</c>
                <c>No match</c>
                <c>*.example.org</c>
                <c>alpha.example.org</c>
                <c>Match</c>
                <c>*.example.org</c>
                <c>alpha.beta.example.org</c>
                <c>Match</c>
                <c>*.example.org</c>
                <c>example.org</c>
                <c>No match</c>
                <c>alpha.*</c>
                <c>alpha.example</c>
                <c>Match</c>
                <c>alpha.*</c>
                <c>alpha.co.example</c>
                <c>No match</c>
                <c>*</c>
                <c>any.example.org</c>
                <c>Match (* on its own will match all domains in the
                    SRS)</c>
            </texttable>
        </section>

        <section title='Security Considerations'>
            <t>Care should be taken to ensure that no private data is
                sent over any unsecured transport.  HTTPS MUST be used
                for all transactions involving private data - that is,
                data that cannot be retrieved using the public WHOIS
                system.</t>

            <t>The exchange of public keys between registry and
                registrar when a new registrar is created in the SRS
                SHOULD be handled in a secure way with careful identity
                verification by both parties.</t>

            <t>Storage of private keys by the registry and the registrar
                must be handled carefully to avoid compromise.  Keys
                should be changed on an occasional basis, according to
                current best practice, to ensure that the SRS remains
                secure.  The registrar may provide the registry with
                more than one valid public key to support migration from
                one key to another and the expiration of old keys.</t>

            <t>Registrars MUST be restricted to only viewing data that
                is publicly available (that is, data that can be
                retrieved using the public WHOIS system), and data that
                they manage.  Registrars MUST NOT be able to access
                through the SRS registry information that is managed by
                other registrars and is not available through the public
                WHOIS system.</t>

            <t>The registry SHOULD access all requests and data through
                the SRS system.  This allows the implementation to
                ensure that there is only a single way to access the
                system functions and data.</t>
        </section>

        <section title='IANA Considerations'>
            <t>This document has no actions for IANA.</t>
        </section>
    </middle>

    <back>
        <references title="Normative References">
            &rfc1035;
            &rfc1123;
            &rfc2119;
            &rfc2181;
            &rfc4880;
            &rfc2616;
            &rfc2818;
            &rfc3629;
            &w3cRECxml;
            &iso3166;
        </references>
        <references title="Informative References">
            &rfc3912;
            &rfc4291;
            &rfc3375;
            <reference anchor="US-ASCII">
                <front>
                    <title>Coded Character Set - 7-bit American Standard
                        Code for Information Interchange</title>
                    <author>
                        <organization abbrev="ANSI">American National
                            Standards Institute
                        </organization>
                    </author>
                    <date year="1968"/>
                </front>
                <seriesInfo name="ANSI" value="X3.4, 1986"/>
            </reference>
        </references>

        <section title="Example">
            <t>This example shows a typical request and response
                document.  The example does not show the full format of
                the multipart request body that must be sent to the
                server for a request.</t>
            <section title="Whois request">
                <figure>
                    <preamble>Example of a Whois request (formatted for
                        readability):</preamble>
                    <artwork><![CDATA[
C: n=50041&r=<!DOCTYPE NZSRSRequest SYSTEM "protocol.dtd">
C: <NZSRSRequest VerMajor="2" VerMinor="0" RegistrarId="500411">
C:    <Whois FullResult="0" DomainName="example.org"/>
C: </NZSRSRequest>
C: &s=-----BEGIN PGP SIGNATURE-----
C: Version: Crypt::OpenPGP 1.03
C: 
C: iQBGBAARAgAGBQJHtLqmAAoJECvUc6XZCUibvs4An2qp5xHugp7tOjO4pmxTqb3k
C: N63OAJ44F+/O3bsRhIGoqrCjvg1hlFAK0A==
C: =5C/k
C: -----END PGP SIGNATURE-----

S: r=<?xml version="1.0"?>
S: <!DOCTYPE NZSRSResponse SYSTEM "protocol.dtd">
S: <NZSRSResponse VerMajor="2" VerMinor="0" RegistrarId="1">
S:    <Response Action="Whois" FeId="7" FeSeq="1996051"
S:        OrigRegistrarId="1" RecipientRegistrarId="1">
S:       <FeTimeStamp Day="15" Hour="11" Minute="03" Month="2"
S:              Second="18" TimeZoneOffset=" 13:00" Year="2008"/>
S:       <Domain DomainName="example.org" Status="Active"/>
S:    </Response>
S: </NZSRSResponse>
S: &s=-----BEGIN PGP SIGNATURE-----
S: Version: Crypt::OpenPGP 1.03
S: 
S: iQBGBAARAgAGBQJHtLqmAAoJENi/K6P6QHemSbgAn2W3SQFFZzI1GKbGbiJZtq4w
S: k7SxAJ491nPIkU/8kJvJ+No+Ysiph19Whw==
S: =r5Vn
S: -----END PGP SIGNATURE-----
]]></artwork>
                </figure>
            </section>
        </section>

        <section title="Acknowledgements">
            <t>The author would like to thank the following groups and
                individuals for reviewing this document in draft format
                and providing very helpful comments and advice.</t>
            <t><list style="symbols">
                    <t>The SRS Implementation Team at Catalyst IT
                        Limited - Steven Craig, Evan Giles, John Praill,
                        Andrew Ruthven, and Sam Vilain.</t>
                    <t>Dave Baker of .nz Registry Services</t>
                </list>
            </t>
        </section>

        <section title="DTD" anchor="dtd">
            <figure>
                <preamble>Complete DTD for the SRS protocol:</preamble>
                <artwork>
<![CDATA[
<!-- DTD for NZ Shared Registry System Protocol -->

<!-- Entity declarations -->

<!ENTITY % Number "CDATA">

<!ENTITY % NumberFilter "CDATA">

<!ENTITY % Dollars "CDATA">

<!ENTITY % True "1">

<!ENTITY % False "0">

<!ENTITY % Boolean "(%False;|%True;)">

<!ENTITY % Date "Year  %Number; #REQUIRED
        Month %Number; #REQUIRED
        Day   %Number; #REQUIRED">

<!ENTITY % Time "Hour           %Number; #REQUIRED
                 Minute         %Number; #REQUIRED
                 Second         %Number; #IMPLIED
                 TimeZoneOffset CDATA    #IMPLIED">

<!ENTITY % TimeStamp "%Date; %Time;">

<!ENTITY % DomainName "CDATA">

<!ENTITY % UID "CDATA">

<!ENTITY % Term "%Number;">

<!ENTITY % RegistrarId "%Number;">

<!ENTITY % RegistrarIdOrOTHERS "CDATA">

<!ENTITY % DomainWriteAction "DomainCreate|DomainUpdate">

<!ENTITY % DomainQueryAction "Whois|DomainDetailsQry|
                              ActionDetailsQry|UDAIValidQry">

<!ENTITY % RegistrarWriteAction "RegistrarCreate|RegistrarUpdate">

<!ENTITY % RegistrarQueryAction "RegistrarDetailsQry|
                                 RegistrarAccountQry|GetMessages">

<!ENTITY % RegistryAction "SysParamsUpdate|SysParamsQry|
                           RunLogCreate|RunLogQry|
                           ScheduleCreate|ScheduleCancel|
                           ScheduleQry|ScheduleUpdate|
                           BillingExtract|SetBillingAmount|
                           QryBillingAmount|
                           DeferredIncomeSummaryQry|
                           DeferredIncomeDetailQry|
                           BilledUntilAdjustment|
                           BuildDnsZoneFiles|
                           GenerateDomainReport|
                           AdjustRegistrarAccount|
                           AccessControlListQry|
                           AccessControlListAdd|
                           AccessControlListRemove">

<!ENTITY % Action "%DomainWriteAction;|%DomainQueryAction;|
        %RegistrarWriteAction;|%RegistrarQueryAction;|
        %RegistryAction;">

<!ENTITY % ActionResponse "Error|Domain*|UDAIValid|DomainTransfer|
                           BillingTrans*|DeferredRegistrarIncome*|
                           Registrar*|SysParam*|RunLog*|Schedule*|
                           AccessControlList*|
                           (RawRequest,RawResponse)|
                           BillingAmount*">

<!ENTITY % RegDomainStatus "Active|PendingRelease">

<!ENTITY % DomainStatus "%RegDomainStatus;|Available">

<!ENTITY % BillStatus "PendingConfirmation|Confirmed">

<!ENTITY % ScheduledJob "BuildDnsZoneFiles|ReleaseDomains|
                         RenewDomains|GenerateDomainReport|
                         GenerateStatsReport">

<!ENTITY % Contact "PostalAddress?,Phone?,Fax?">

<!ENTITY % ContactAttr "Name  CDATA #IMPLIED
                        Email CDATA #IMPLIED">

<!ENTITY % ContactFilter "PostalAddressFilter?,Phone?,Fax?">

<!ENTITY % ContactAttrFilter "Name  CDATA #IMPLIED
                              Email CDATA #IMPLIED">

<!ENTITY % PhoneAttr "CountryCode %NumberFilter; #IMPLIED
                      AreaCode    %NumberFilter; #IMPLIED
                      LocalNumber %NumberFilter; #IMPLIED">

<!ENTITY % Role "Registrar|Registry|Whois|Query|CreateDomain|
                 UpdateDomain|TransferDomain|CancelDomain|
                 UncancelDomain|UpdateRegistrar|Administer|
                 Supervisor|Connect|ReleaseDomain|QueryACL|
                 UpdateACL">

<!ENTITY % DateRange "From?,To?">

<!ENTITY % AccountingAction "Credit|Debit">

<!-- DATA ELEMENTS -->

<!-- Parsed character data elements -->

<!ELEMENT ActionIdFilter (#PCDATA)>

<!ELEMENT AuditText (#PCDATA)>

<!ELEMENT AuditTextFilter (#PCDATA)>

<!ELEMENT CancelAuditText (#PCDATA)>

<!ELEMENT CreateAuditText (#PCDATA)>

<!ELEMENT Description (#PCDATA)>

<!ELEMENT DomainNameFilter (#PCDATA)>

<!ELEMENT EncryptKey (#PCDATA)>

<!ELEMENT ErrorDetails (#PCDATA)>

<!ELEMENT ParamValue (#PCDATA)>

<!ELEMENT RunLogDetails (#PCDATA)>

<!ELEMENT Signature (#PCDATA)>

<!ELEMENT TransferredDomain (#PCDATA)>

<!ELEMENT XML (#PCDATA)>

<!-- Contact information: for registrant, admin, technical  -->
<!ELEMENT RegistrantContact       (%Contact;)>
<!ATTLIST RegistrantContact       %ContactAttr;>

<!ELEMENT RegistrantContactFilter (%ContactFilter;)>
<!ATTLIST RegistrantContactFilter %ContactAttrFilter;>

<!ELEMENT AdminContact            (%Contact;)>
<!ATTLIST AdminContact            %ContactAttr;>

<!ELEMENT AdminContactFilter      (%ContactFilter;)>
<!ATTLIST AdminContactFilter      %ContactAttrFilter;>

<!ELEMENT TechnicalContact        (%Contact;)>
<!ATTLIST TechnicalContact        %ContactAttr;>

<!ELEMENT TechnicalContactFilter  (%ContactFilter;)>
<!ATTLIST TechnicalContactFilter  %ContactAttrFilter;>

<!ELEMENT RegistrarPublicContact  (%Contact;)>
<!ATTLIST RegistrarPublicContact  %ContactAttr;>

<!ELEMENT DefaultTechnicalContact (%Contact;)>
<!ATTLIST DefaultTechnicalContact %ContactAttr;>

<!ELEMENT RegistrarSRSContact     (%Contact;)>
<!ATTLIST RegistrarSRSContact     %ContactAttr;>

<!-- Postal address -->
<!ELEMENT PostalAddress EMPTY>
<!ATTLIST PostalAddress
        Address1    CDATA #IMPLIED
        Address2    CDATA #IMPLIED
        City        CDATA #IMPLIED
        Province    CDATA #IMPLIED
        CountryCode CDATA #IMPLIED
        PostalCode  CDATA #IMPLIED>

<!-- Postal address filter -->
<!ELEMENT PostalAddressFilter EMPTY>
<!ATTLIST PostalAddressFilter
        Address1    CDATA #IMPLIED
        Address2    CDATA #IMPLIED
        City        CDATA #IMPLIED
        Province    CDATA #IMPLIED
        CountryCode CDATA #IMPLIED
        PostalCode  CDATA #IMPLIED>

<!-- Telephone numbers -->
<!ELEMENT Phone            EMPTY>
<!ATTLIST Phone            %PhoneAttr;>

<!ELEMENT Fax              EMPTY>
<!ATTLIST Fax              %PhoneAttr;>

<!-- Time stamps (date and time) -->
<!ELEMENT ActiveOn EMPTY>
<!ATTLIST ActiveOn %TimeStamp;>

<!ELEMENT BillPeriodEnd EMPTY>
<!ATTLIST BillPeriodEnd %TimeStamp;>

<!ELEMENT BillPeriodStart EMPTY>
<!ATTLIST BillPeriodStart %TimeStamp;>

<!ELEMENT BilledUntil EMPTY>
<!ATTLIST BilledUntil %TimeStamp;>

<!ELEMENT EffectiveDate EMPTY>
<!ATTLIST EffectiveDate %TimeStamp;>

<!ELEMENT FeTimeStamp EMPTY>
<!ATTLIST FeTimeStamp %TimeStamp;>

<!ELEMENT FinalRunDate EMPTY>
<!ATTLIST FinalRunDate %TimeStamp;>

<!ELEMENT FirstRunDate EMPTY>
<!ATTLIST FirstRunDate %TimeStamp;>

<!ELEMENT From EMPTY>
<!ATTLIST From %TimeStamp;>

<!ELEMENT InvoiceDate EMPTY>
<!ATTLIST InvoiceDate %TimeStamp;>

<!ELEMENT LastRunDate EMPTY>
<!ATTLIST LastRunDate %TimeStamp;>

<!ELEMENT NewBilledUntilDate EMPTY>
<!ATTLIST NewBilledUntilDate %TimeStamp;>

<!ELEMENT RunDate EMPTY>
<!ATTLIST RunDate %TimeStamp;>

<!ELEMENT RunLogTimeStamp EMPTY>
<!ATTLIST RunLogTimeStamp %TimeStamp;>

<!ELEMENT LockedDate EMPTY>
<!ATTLIST LockedDate %TimeStamp;>

<!ELEMENT RegisteredDate EMPTY>
<!ATTLIST RegisteredDate %TimeStamp;>

<!ELEMENT CancelledDate  EMPTY>
<!ATTLIST CancelledDate  %TimeStamp;>

<!ELEMENT To EMPTY>
<!ATTLIST To %TimeStamp;>

<!ELEMENT TransDate EMPTY>
<!ATTLIST TransDate %TimeStamp;>

<!ELEMENT TransactionDate EMPTY>
<!ATTLIST TransactionDate %TimeStamp;>

<!-- Date ranges  -->
<!ELEMENT AuditTime (%DateRange;)>

<!ELEMENT BilledUntilDateRange (%DateRange;)>

<!ELEMENT CancelledDateRange (%DateRange;)>

<!ELEMENT ChangedInDateRange (%DateRange;)>

<!ELEMENT LockedDateRange (%DateRange;)>

<!ELEMENT LogDateRange (%DateRange;)>

<!ELEMENT InvoiceDateRange (%DateRange;)>

<!ELEMENT RegisteredDateRange (%DateRange;)>

<!ELEMENT ResultDateRange (%DateRange;)>

<!ELEMENT SearchDateRange (%DateRange;)>

<!ELEMENT TransDateRange (%DateRange;)>

<!-- Base month for deferred income calculations -->
<!ELEMENT BaseMonth EMPTY>
<!ATTLIST BaseMonth
        Month %Number; #REQUIRED>

<!-- Base year for deferred income calculations -->
<!ELEMENT BaseYear EMPTY>
<!ATTLIST BaseYear
        Year %Number; #REQUIRED>

<!-- Income month for deferred income calculations -->
<!ELEMENT IncomeMonth EMPTY>
<!ATTLIST IncomeMonth
        Month %Number; #REQUIRED>

<!-- Income year for deferred income calculations -->
<!ELEMENT IncomeYear EMPTY>
<!ATTLIST IncomeYear
        Year %Number; #REQUIRED>

<!-- Name server container -->
<!ELEMENT NameServers (Server*)>

<!-- Server -->
<!ELEMENT Server EMPTY>
<!ATTLIST Server
        FQDN    CDATA #REQUIRED
        IP4Addr CDATA #IMPLIED 
        IP6Addr CDATA #IMPLIED>

<!-- Name server filter -->
<!ELEMENT NameServerFilter    (ServerFilter+)>

<!-- Server filter -->
<!ELEMENT ServerFilter EMPTY>
<!ATTLIST ServerFilter
        FQDN    CDATA #IMPLIED
        IP4Addr CDATA #IMPLIED
        IP6Addr CDATA #IMPLIED>

<!-- Domain registration permission list -->
<!ELEMENT Allowed2LDs (SecondLD*)>
<!ELEMENT SecondLD EMPTY>
<!ATTLIST SecondLD
        DomainName %DomainName; #REQUIRED>

<!-- Registrar/user role definition -->
<!ELEMENT Roles (Role*)>
<!ELEMENT Role EMPTY>
<!ATTLIST Role
        RoleName (%Role;) #REQUIRED>

<!-- Encryption keys -->
<!ELEMENT EncryptKeys (EncryptKey*)>

<!-- Audit details element -->
<!ELEMENT AuditDetails (AuditTime?,AuditText?)>
<!ATTLIST AuditDetails
        RegistrarId CDATA #IMPLIED
        ActionId    %UID; #IMPLIED>

<!-- Access control list element -->
<!ELEMENT AccessControlList (AccessControlListEntry*)>
<!ATTLIST AccessControlList
        Resource CDATA #REQUIRED
        Type     CDATA #REQUIRED>

<!-- Access control list entry element -->
<!ELEMENT AccessControlListEntry (EffectiveDate?)>
<!ATTLIST AccessControlListEntry
        Address                CDATA                 #REQUIRED
        Comment                CDATA                 #IMPLIED>

<!-- Query field list -->
<!ELEMENT FieldList EMPTY>
<!ATTLIST FieldList
        Status               %Boolean; #IMPLIED
        NameServers          %Boolean; #IMPLIED
        RegistrantContact    %Boolean; #IMPLIED
        RegisteredDate       %Boolean; #IMPLIED
        AdminContact         %Boolean; #IMPLIED
        TechnicalContact     %Boolean; #IMPLIED
        LockedDate           %Boolean; #IMPLIED
        Delegate             %Boolean; #IMPLIED
        RegistrarId          %Boolean; #IMPLIED
        RegistrarName        %Boolean; #IMPLIED
        RegistrantRef        %Boolean; #IMPLIED
        LastActionId         %Boolean; #IMPLIED
        ChangedByRegistrarId %Boolean; #IMPLIED
        Term                 %Boolean; #IMPLIED
        BilledUntil          %Boolean; #IMPLIED
        CancelledDate        %Boolean; #IMPLIED
        AuditText            %Boolean; #IMPLIED
        EffectiveFrom        %Boolean; #IMPLIED>

<!-- REQUEST AND RESPONSE ROOT ELEMENTS -->

<!-- Root request element -->
<!ELEMENT NZSRSRequest ((%Action;)+)>
<!ATTLIST NZSRSRequest
        VerMajor    (1|2)         #REQUIRED
        VerMinor    %Number;      #REQUIRED
        RegistrarId %RegistrarId; #IMPLIED>

<!-- Root response element -->
<!ELEMENT NZSRSResponse (Response+|Error)>
<!ATTLIST NZSRSResponse
        VerMajor    (2)           #REQUIRED
        VerMinor    %Number;      #REQUIRED
        RegistrarId %RegistrarId; #IMPLIED>

<!-- SUCCESS RESPONSE CONTAINER -->
<!-- Response -->
<!ELEMENT Response (FeTimeStamp, (Response*|%ActionResponse;)?)>
<!ATTLIST Response
        Action               (%Action;|UnknownTransaction|
                              DomainTransfer)     #REQUIRED
        FeId                 %Number;             #REQUIRED
        FeSeq                %Number;             #REQUIRED
        OrigRegistrarId      %RegistrarId;        #REQUIRED
        TransId              %UID;                #IMPLIED
        Rows                 %Number;             #IMPLIED
        Count                %Number;             #IMPLIED
        MoreRowsAvailable    %Boolean;            #IMPLIED
        RecipientRegistrarId %RegistrarId;        #IMPLIED>

<!-- REQUEST ELEMENTS -->

<!-- Query previous request and response details
     Response: ((RawRequest,RawResponse)|Error) -->
<!ELEMENT ActionDetailsQry EMPTY>
<!ATTLIST ActionDetailsQry
        QryId                  %UID; #IMPLIED
        ActionId               %UID; #REQUIRED
        OriginatingRegistrarId %UID; #IMPLIED>

<!-- Query domain details
     Response: (Domain*|Error) -->
<!ELEMENT DomainDetailsQry (DomainNameFilter*,NameServerFilter?,
        RegistrantContactFilter?,
        AdminContactFilter?,TechnicalContactFilter?,
        ResultDateRange?,SearchDateRange?,
        ChangedInDateRange?,
        RegisteredDateRange?,LockedDateRange?,
        CancelledDateRange?,BilledUntilDateRange?,
        AuditTextFilter?,ActionIdFilter?,FieldList?)>
<!ATTLIST DomainDetailsQry
        QryId         %UID;               #IMPLIED
        Status        (%RegDomainStatus;) #IMPLIED
        Delegate      %Boolean;           #IMPLIED
        Term          %Term;              #IMPLIED
        RegistrantRef %UID;               #IMPLIED
        MaxResults    %Number;            #IMPLIED
        SkipResults   %Number;            #IMPLIED
        CountResults  %Boolean;           "0">

<!-- Query if the given UDAI matches the UDAI for a domain
     Response: (UDAIValid) -->
<!ELEMENT UDAIValidQry EMPTY>
<!ATTLIST UDAIValidQry
        QryId      %UID;        #IMPLIED
        DomainName %DomainName; #REQUIRED
        UDAI       %UID;        #REQUIRED>

<!-- Retrieve public details for a domain (WHOIS)
     Response: (Domain|Error) -->
<!ELEMENT Whois EMPTY>
<!ATTLIST Whois
        QryId      %UID;        #IMPLIED
        FullResult %Boolean;    "1" 
        SourceIP   CDATA        #IMPLIED
        DomainName %DomainName; #REQUIRED>

<!-- Create new domain record
     Response: (Domain|Error) -->
<!ELEMENT DomainCreate (RegistrantContact,
        AdminContact?,
        TechnicalContact?,
        NameServers?,
        AuditText?)>
<!ATTLIST DomainCreate
        ActionId      %UID;        #REQUIRED
        DomainName    %DomainName; #REQUIRED
        RegistrantRef %UID;        #IMPLIED
        Term          %Term;       #REQUIRED
        Delegate      %Boolean;    "1">

<!-- Update domain record(s)
     Response: (Domain+|Error) -->
<!ELEMENT DomainUpdate (DomainNameFilter+,RegistrantContact?,
                        AdminContact?,TechnicalContact?,
                        NameServers?,AuditText?)>
<!ATTLIST DomainUpdate
        ActionId      %UID;     #REQUIRED
        UDAI          %UID;     #IMPLIED
        NewUDAI       %Boolean; #IMPLIED
        RegistrantRef %UID;     #IMPLIED
        Term          %Term;    #IMPLIED
        Delegate      %Boolean; #IMPLIED
        Renew         %Boolean; #IMPLIED
        NoAutoRenew   %Boolean; #IMPLIED
        Lock          %Boolean; #IMPLIED
        Cancel        %Boolean; #IMPLIED
        Release       %Boolean; #IMPLIED
        FullResult    %Boolean; "1">

<!-- Query access control list entries
     Response: (AccessControlList*|Error) -->
<!ELEMENT AccessControlListQry EMPTY>
<!ATTLIST AccessControlListQry
        Resource   CDATA     #IMPLIED
        Type       CDATA     #IMPLIED
        FullResult %Boolean; "0">

<!-- Remove access control list entries
     Response: (AccessControlList+|Error) -->
<!ELEMENT AccessControlListRemove (AccessControlListEntry+,
                                   AuditText)>
<!ATTLIST AccessControlListRemove
        Resource   CDATA     #REQUIRED
        Type       CDATA     #REQUIRED
        ActionId   %UID;     #REQUIRED
        FullResult %Boolean; "1">

<!-- Add access control list entries
     Response: (AccessControlList*|Error) -->
<!ELEMENT AccessControlListAdd (AccessControlListEntry+,
                                AuditText)>
<!ATTLIST AccessControlListAdd
        Resource   CDATA     #REQUIRED
        Type       CDATA     #REQUIRED
        ActionId   %UID;     #REQUIRED
        FullResult %Boolean; "1">

<!-- Get SRS generated messages for a registrar
     Response: (Response|Error) -->
<!ELEMENT GetMessages (TransDateRange?,AuditTextFilter?)>
<!ATTLIST GetMessages
        QryId                  %UID;                 #IMPLIED
        OriginatingRegistrarId %RegistrarIdOrOTHERS; #IMPLIED
        ActionId               %UID;                 #IMPLIED
        RecipientRegistrarId   %RegistrarId;         #IMPLIED
        MaxResults             %Number;              #IMPLIED
        SkipResults            %Number;              #IMPLIED
        CountResults           %Boolean;             "0">

<!-- Query registrar details
     Response: (Registrar*|Error) -->
<!ELEMENT RegistrarDetailsQry (ResultDateRange?)>
<!ATTLIST RegistrarDetailsQry
        QryId       %UID;         #IMPLIED
        RegistrarId %RegistrarId; #IMPLIED
        NameFilter  CDATA         #IMPLIED>

<!-- Query registrar account (obtain billing records)
     Response: (BillingTrans*|Error) -->
<!ELEMENT RegistrarAccountQry (TransDateRange?,InvoiceDateRange?)>
<!ATTLIST RegistrarAccountQry
        QryId         %UID;          #IMPLIED
        RegistrantRef %UID;          #IMPLIED
        DomainName    %DomainName;   #IMPLIED
        InvoiceId     %UID;          #IMPLIED
        MaxResults    %Number;       #IMPLIED
        SkipResults   %Number;       #IMPLIED
        TransStatus   (%BillStatus;) #IMPLIED
        CountResults  %Boolean;      "0">

<!-- Insert details for a new registrar
     Response: (Registrar|Error) -->
<!ELEMENT RegistrarCreate (RegistrarPublicContact,
                           RegistrarSRSContact,
                           DefaultTechnicalContact,EncryptKeys,
                           Allowed2LDs?,Roles?,AuditText?)>
<!ATTLIST RegistrarCreate
        ActionId    %UID;         #REQUIRED
        Name        CDATA         #REQUIRED
        AccRef      CDATA         #REQUIRED
        RegistrarId %RegistrarId; #REQUIRED
        URL         CDATA         #IMPLIED>

<!-- Update existing registrar details
     Response: (Registrar|Error) -->
<!ELEMENT RegistrarUpdate (RegistrarPublicContact?,
                           RegistrarSRSContact?,
                           DefaultTechnicalContact?,EncryptKeys?,
                           Allowed2LDs?,Roles?,AuditText?)>
<!ATTLIST RegistrarUpdate
        ActionId %UID; #REQUIRED
        Name     CDATA #IMPLIED
        AccRef   CDATA #IMPLIED
        URL      CDATA #IMPLIED>

<!-- Adjust a registrar's account by adding billing transactions
     Response: (BillingTrans|Error) -->
<!ELEMENT AdjustRegistrarAccount (TransactionDate,BillPeriodStart,
                                  BillPeriodEnd,AuditText)>
<!ATTLIST AdjustRegistrarAccount
        RegistrarId %RegistrarId;        #REQUIRED
        DomainName  %DomainName;         #REQUIRED
        ActionId    %UID;                #REQUIRED
        Months      %Number;             #REQUIRED
        ActionType  (%AccountingAction;) #REQUIRED>

<!-- Adjust the billed until date for a domain
     Response: (Domain|Error) -->
<!ELEMENT BilledUntilAdjustment (NewBilledUntilDate,AuditText)>
<!ATTLIST BilledUntilAdjustment
        DomainName %DomainName; #REQUIRED
        ActionId   %UID;        #REQUIRED>

<!-- Obtain billing records (optionally assign them to an invoice)
     Response: (BillingTrans*|Error) -->
<!ELEMENT BillingExtract (TransDateRange,InvoiceDate?)>
<!ATTLIST BillingExtract
        ActionId          %UID;     #REQUIRED
        InvoiceExtract    %Boolean; #IMPLIED
        RegistrarId       %UID;     #IMPLIED
        ConfirmedTrans    %Boolean; #IMPLIED
        InsideGracePeriod %Boolean; #IMPLIED
        InvoiceId         CDATA     #IMPLIED>

<!-- Initiate process to rebuild the DNS zone files
     Response: (RunLog|Error) -->
<!ELEMENT BuildDnsZoneFiles (RunDate)>
<!ATTLIST BuildDnsZoneFiles
        ActionId %UID; #REQUIRED>

<!-- Query billing transaction details of deferred income
     Response: (BillingTrans*|Error) -->
<!ELEMENT DeferredIncomeDetailQry EMPTY>
<!ATTLIST DeferredIncomeDetailQry
        BaseMonth   CDATA #REQUIRED
        BaseYear    CDATA #REQUIRED
        IncomeMonth CDATA #REQUIRED
        IncomeYear  CDATA #REQUIRED
        QryId       %UID; #IMPLIED>

<!-- Query summary details of deferred income
     Response: (BillingTrans*|Error) -->
<!ELEMENT DeferredIncomeSummaryQry EMPTY>
<!ATTLIST DeferredIncomeSummaryQry
        BaseMonth   CDATA #REQUIRED
        BaseYear    CDATA #REQUIRED
        IncomeMonth CDATA #REQUIRED
        IncomeYear  CDATA #REQUIRED
        QryId       %UID; #IMPLIED>

<!-- Initiate process to create a domain report
     Response: (RunLog|Error) -->
<!ELEMENT GenerateDomainReport (RunDate)>
<!ATTLIST GenerateDomainReport
        ActionId %UID; #REQUIRED>

<!-- Query domain billing amounts in the system
     Response: (BillingAmount*|Error) -->
<!ELEMENT QryBillingAmount EMPTY>
<!ATTLIST QryBillingAmount
        QryId %UID; #IMPLIED>

<!-- Create a new run log entry
     Response: (RunLog|Error) -->
<!ELEMENT RunLogCreate (FirstRunDate,RunLog)>
<!ATTLIST RunLogCreate
        ActionId %UID; #REQUIRED>

<!-- Query existing run log entries
     Response: (RunLog*|Error) -->
<!ELEMENT RunLogQry (LogDateRange?)>
<!ATTLIST RunLogQry
        QryId       %UID; #IMPLIED
        ProcessName CDATA #IMPLIED
        Parameters  CDATA #IMPLIED>

<!-- Cancel a scheduled job entry
     Response: (Schedule|Error) -->
<!ELEMENT ScheduleCancel (FirstRunDate,AuditText?)>
<!ATTLIST ScheduleCancel
        ActionId    %UID;            #REQUIRED
        ProcessName (%ScheduledJob;) #REQUIRED
        Parameters  CDATA            #IMPLIED>

<!-- Create a new scheduled job entry
     Response: (Schedule|Error) -->
<!ELEMENT ScheduleCreate (FirstRunDate,FinalRunDate?,AuditText?)>
<!ATTLIST ScheduleCreate
        ProcessName (%ScheduledJob;) #REQUIRED
        Frequency   CDATA            #REQUIRED
        Parameters  CDATA            #IMPLIED
        ActionId    %UID;            #REQUIRED>

<!-- Query details of existing scheduled job entries
     Response: (Schedule*|Error) -->
<!ELEMENT ScheduleQry (ActiveOn?,FirstRunDate?)>
<!ATTLIST ScheduleQry
        QryId       %UID; #IMPLIED
        ProcessName CDATA #IMPLIED
        Parameters  CDATA #IMPLIED>

<!-- Update an existing scheduled job entry
     Response: (Schedule|Error) -->
<!ELEMENT ScheduleUpdate (FirstRunDate,LastRunDate?,AuditText?)>
<!ATTLIST ScheduleUpdate
        ActionId    %UID;            #REQUIRED
        Parameters  CDATA            #IMPLIED
        ProcessName (%ScheduledJob;) #REQUIRED>

<!-- Create a new billing amount
     Response: (BillingAmount*|Error) -->
<!ELEMENT SetBillingAmount (BillingAmount)>
<!ATTLIST SetBillingAmount
        ActionId %UID; #REQUIRED>

<!-- Query details of configurable system parameters
     Response: (SysParam*|Error) -->
<!ELEMENT SysParamsQry EMPTY>
<!ATTLIST SysParamsQry
        QryId %UID; #IMPLIED>

<!-- Update details of configurable system parameters
     Response: (SysParam*|Error) -->
<!ELEMENT SysParamsUpdate (SysParam+,AuditText?)>
<!ATTLIST SysParamsUpdate
        ActionId %UID; #REQUIRED>

<!-- RESPONSE ELEMENTS -->

<!-- Billing amount -->
<!ELEMENT BillingAmount (EffectiveDate)>
<!ATTLIST BillingAmount
        Amount %Dollars; #REQUIRED>

<!-- Billing transaction -->
<!ELEMENT BillingTrans (InvoiceDate?,TransDate,BillPeriodStart,
                        BillPeriodEnd)>
<!ATTLIST BillingTrans
        RegistrarId   %RegistrarId;  #REQUIRED
        Type          CDATA          #REQUIRED
        TransStatus   (%BillStatus;) #REQUIRED
        DomainName    %DomainName;   #REQUIRED
        RegistrantRef %UID;          #IMPLIED
        BillingTerm   %Term;         #REQUIRED
        InvoiceId     %UID;          #IMPLIED
        Amount        %Dollars;      #REQUIRED>

<!-- Deferred registrar income amount -->
<!ELEMENT DeferredRegistrarIncome (BaseMonth,BaseYear,
                                   IncomeMonth,IncomeYear)>
<!ATTLIST DeferredRegistrarIncome
        RegistrarId  %RegistrarId; #REQUIRED
        BilledAmount %Dollars;     #REQUIRED
        BilledCount  %Number;      #REQUIRED>

<!-- Domain element --> 
<!ELEMENT Domain (NameServers?,RegistrantContact?,
                  RegistrarPublicContact?,AdminContact?,
                  TechnicalContact?,BilledUntil?,RegisteredDate?,
                  CancelledDate?,LockedDate?,AuditDetails?)>
<!ATTLIST Domain
        DomainName    %DomainName;     #REQUIRED
        RegistrantRef %UID;            #IMPLIED
        RegistrarName CDATA            #IMPLIED
        Status        (%DomainStatus;) #IMPLIED
        Delegate      %Boolean;        #IMPLIED
        Term          %Term;           #IMPLIED
        RegistrarId   %RegistrarId;    #IMPLIED
        UDAI          %UID;            #IMPLIED>

<!-- Domain transfer message -->
<!ELEMENT DomainTransfer (TransferredDomain+)>
<!ATTLIST DomainTransfer
        RegistrarName CDATA #REQUIRED
        %TimeStamp;>

<!-- Error -->
<!ELEMENT Error (Description, ErrorDetails*)>
<!ATTLIST Error
        ErrorId  %UID;    #REQUIRED
        Severity %Number; #REQUIRED
        Hint     %UID;    #REQUIRED>

<!-- Raw request -->
<!ELEMENT RawRequest (XML,Signature)>

<!-- Raw response -->
<!ELEMENT RawResponse (XML,Signature)>

<!-- Registrar details  -->
<!ELEMENT Registrar (RegistrarPublicContact,RegistrarSRSContact,
                     DefaultTechnicalContact,EncryptKeys,
                     Allowed2LDs?,Roles?,AuditDetails?)>
<!ATTLIST Registrar
        RegistrarId %RegistrarId; #REQUIRED
        Name        CDATA         #REQUIRED
        AccRef      CDATA         #REQUIRED
        URL         CDATA         #IMPLIED>

<!-- Run Log -->
<!ELEMENT RunLog (RunLogTimeStamp, RunLogDetails?)>
<!ATTLIST RunLog
        ProcessName  CDATA #REQUIRED
        Parameters   CDATA #IMPLIED
        ActionStatus CDATA #REQUIRED
        Control      CDATA #IMPLIED>

<!-- Schedule -->
<!ELEMENT Schedule (FirstRunDate,FinalRunDate?,CreateAuditText?,
                    CancelAuditText?)>
<!ATTLIST Schedule
        ProcessName         (%ScheduledJob;) #REQUIRED
        Frequency           CDATA            #REQUIRED
        Parameters          CDATA            #IMPLIED
        CreateByRegistrarId %UID;            #REQUIRED
        CreateActionId      %UID;            #REQUIRED
        CancelByRegistrarId %UID;            #IMPLIED
        CancelActionId      %UID;            #IMPLIED>

<!-- System parameter -->
<!ELEMENT SysParam (ParamValue, AuditDetails?)>
<!ATTLIST SysParam
        Name CDATA #REQUIRED>

<!-- UDAI validity -->
<!ELEMENT UDAIValid EMPTY>
<!ATTLIST UDAIValid
        Valid %Boolean; #REQUIRED>]]></artwork>
            </figure>
        </section>
    </back>
</rfc>
