Internet Engineering Task Force Eric Brunner-Williams
Internet-Draft Ayesha Damaraju
Ning Zhang
NeuStar
August, 2001 Expires February 2002
Extensible Provisioning Protocol Container
<draft-ietf-provreg-epp-container-00.txt>
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026.
This document is an Internet-Draft. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its areas,
and its working groups. Note that other groups may also distribute
working documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as ``work in progress.''
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
Abstract
This memo documents how EPP container objects extends EPP objects,
supporting hierarchy and inheritance, simplifying administration and
mangement of the associated objects.
Conventions Used In This Document
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
Brunner, et al Expires February 2002 [Page 1]
Internet-Draft EPP Container August 2001
Table of Contents
Status of this Memo ............................................ 1
Copyright Notice ............................................... 1
Abstract ....................................................... 1
Table of Contents .............................................. 2
1. Introduction ................................................ 2
2. Containers .................................................. 3
2.1 EPP Command Summary for Containers ...................... 5
2.1.1 Container Query Commands ........................... 5
2.1.2 Container Transformation Commands .................. 5
2.2 EPP Commnand for Managing Objects with Containers ....... 5
2.3 Container Templates ..................................... 6
2.4 Container Attributes .................................... 8
2.5 Status Values ........................................... 11
3. EPP Command Mapping for Container ........................... 11
3.1 EPP Query Commands ...................................... 11
3.1.1 EPP <check> Command ................................ 11
3.1.2 EPP <info> Command ................................. 14
3.1.3 EPP <transfer> Command ............................. 17
3.2 EPP Transform Commands .................................. 19
3.2.1 EPP <create> Command ............................... 19
3.2.2 EPP <delete> Command ............................... 21
3.2.3 EPP <renew> Command ................................ 23
3.2.4 EPP <transfer> Command ............................. 23
3.2.5 EPP <update> Command ............................... 25
3.3 Formal Syntax for Container ............................. 27
4. EPP Command Mapping for Objects with Containers ............. 34
4.1 EPP Command <create> for Domain Object With Container ... 34
4.2 EPP Command <update> for Domain Object With Container ... 35
4.3 EPP Command <info> for Domain Object With Container ..... 36
4.4 Formal Syntax for Domain Object with Container .......... 37
5. Internationalization Considerations ......................... 39
6. IANA Considerations ......................................... 39
7. Security Considerations ..................................... 40
References ..................................................... 40
Authors' Addresses ............................................. 40
Full Copyright Statement ....................................... 41
Acknowledgement ................................................ 41
1. Introduction
EPP (Extensible Provisioning Protocol) defines generic object
management operations and an extensible framework that maps protocol
operations to objects stored in a shared central repository.
This memo documents how these generic object management operations
are extended to hierarchies of objects, called container objects or
Brunner, et al Expires February 2002 [Page 2]
Internet-Draft EPP Container August 2001
containers.
This memo is being discussed on the "ietf-provreg" mailing list. To
join the list, send a message to <majordomo@cafax.se> with the words
"subscribe ietf-provreg" in the body of the message. There is a web
site for the list archives at http://www.cafax.se/ietf-provreg.
Conventions Used In This Document
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
2. Containers
A container object is a collection of objects defined by a registry.
A container object may contain any number of these defined objects,
and may also contain other containers in a nested fashion.
Containers simplify administration and management of associated
objects.
Each object in a collection of objects in a container maintains a
parent-child relationship with the container. The collection of
containers and the objects are managed in a tree/forest fashion with
one root container node. In a Container tree, non-leaf nodes are
container objects, leaf nodes are other objects. Each object in the
collection of a container will maintain a link to its parent
container. A container without a parent container is the root node
of a container tree.
Each child container inherits properties from the parent container.
Additionally, each container derives properties from its directly
associated leaf child object nodes, which override any mutual
exclusive inherited properties. For root containers the properties
are the properties of its directly associated leaf child object nodes
alone.
This inheritance of properties among associated containers restricts
containers to a single parent, or no parent in the case of the root
container. Non-leaf nodes (containers) may maintain references to
leaf-notes without restriction. Restated, a container can only have
at most one parent container, and zero or more child containers.
Mutual exclusion of objects contained in registries and references to
objects in multiple containers may be defined by the registry.
Example Container:
Brunner, et al Expires February 2002 [Page 3]
Internet-Draft EPP Container August 2001
+-------------+
| Container 1 |
+------+------+
|
--------------+----+----------------------+
| | |
+------+-------+ +-------+-------+ +------+------+
| Registrant 1 | | Host 1 | | Container 2 |
+--------------+ +---------------+ +------+------+
|
+-----------------+----------------+
| | |
+------+------+ +--------------+ +------+------+
| Container 3 | | Contact 1 | | Container 4 |
+------+------+ +--------------+ +-------------+
| ...
+-------------+----+----------------+
| | |
+------+-------+ +-------+-------+ +-----+-----+
| Host 2 | | Registrant 2 | | Contact 2 |
+--------------+ +---------------+ +-----------+
Figure 1: An Example of Container Tree
Container 1 has the properties:
"Registrant 1"
"Host 1"
Container 2 inherits the Container 1 properties and its child
objects.
"Registrant 1"
"Host 1"
"Contact 1"
The derivation of Container 3, assuming the registry policy of type
Container 3 is Unique Registrant, evaluates as:
"Registrant 2"
"Contact 1"
"Contact 2"
"Host 1"
"Host 2"
This example shows property derivation with a local policy
(registrant 2 preference).
Brunner, et al Expires February 2002 [Page 4]
Internet-Draft EPP Container August 2001
2.1 EPP Command Summary for Containers
2.1.1 Container Query Commands
check
check on a container
info
query the collection of objects using a container object
transfer query
query the status of a container transfer command
2.1.2 Container Transformation Commands
create
create a container
delete
delete a container
update
update a container (add/remove objects)
update
update a collection of associated objects by updating properties
of a container object
delete
delete a container with an option to delete all associated
objects.
transfer
transfer a container with an option to transfer all associated
objects.
transfer
transfer a container with an option to transfer all directly
associated leaf child objects and child containers.
transfer
transfer a container with an option to transfer both linked
objects and directly associated leaf child objects and child
containers.
2.2 EPP Command for Managing Objects with Containers
A detailed description of the EPP syntax and semantics can be found
Brunner, et al Expires February 2002 [Page 5]
Internet-Draft EPP Container August 2001
in [EPP]. The extended command mappings summarized here are
described in section 5.
2.3 Container Templates
Each container can be subjected to a set of registry policies by
binding a container to a template supported by Registry. Templates
are well-documented Registry policies that determine the functions
and objects supported in a container.
Example Templates
Registrant Template
supports child objects:
o registrant
o contacts (multiple type associations: admin, tech, billing),
o hosts (1-13),
o domain and/or registrant containers
supports functions/commands:
o create a registrant container with supported child objects,
o create associated objects (domains, registrant container) using the
registrant container,
o update container add/delete
registrant,
contacts (admin, tech, billing),
hosts (1-13),
container
o update container with an option to update associated objects
o delete container
o delete container with an option to delete all associated objects
o update add/delete other registrant containers, domain containers
o transfer a container to a different registrar
o transfer a container to a different registrar along with associated
objects
Domain Template
support child objects:
o domains,
supports functions/commands to:
o create a domain container with supported child objects
Brunner, et al Expires February 2002 [Page 6]
Internet-Draft EPP Container August 2001
o create a domain container under a registrant template
and supported child objects
o create a domain container using a registrant template
and supported child objects
o update container add/delete domains or other domain container
o transfer a container to a different registrar
o transfer a container to a different registrar along with child
objects
o delete a container
o delete a container with an option to delete all child objects
Registrar Account Template
support child objects:
o contacts,
o hosts (1-13),
o registrant containers
supports functions/commands to:
o create a registrant account container with supported child
objects.
o create associated objects (registrant containers)
o update container add/delete any of the child objects
o delete container
o delete container with an option to delete all associated objects
Registrant Account Template
A Registrant Account Template can be used to group various objects or
containers into a single aggregation. However, objects or containers
in the registry should only belong to at most one container created
with the Registrant Account Template.
support child objects:
o domain objects,
o host objects,
o contact objects,
o registrant containers,
o domain containers
supports functions/commands to:
o create a registrant account template with supported child objects
o update container add/delete any supported child objects
o delete a container
o delete a container with an option to delete all child objects
Brunner, et al Expires February 2002 [Page 7]
Internet-Draft EPP Container August 2001
o transfer a container to a different registrar
2.4 Container Attributes
An XRP container object has attributes and associated values that may
be viewed and modified by the sponsoring client or the server. This
section describes each attribute type in detail.
id
This element is the unique identifier of the container given by
the registrar. The format is alphanumeric with the minimum and
maximum length and character set specified in the XML Schema
Definition [XML-SCHEMA].
Example:
<id>MIT-CONTAINER-42</id>
roid
This element is the unique identifier of the container given by
the registry. Container identifiers use the "roidType" syntax
described in [EPP].
Example:
<roid>CONTAINER001-BIZ</roid>
status
This element describes the status of the container. This element
may have multiple occurrences.
Example:
<status s="ok"/>
<status s="clientTransferProhibited"/>
parent
This element is the reference of the parent container object in
the container tree by its <id>. This element is optional and if
not specified the container is the root node of the tree.
The format is alphanumeric with the minimum and maximum length and
character set specified in the XML Schema Definition [XML-SCHEMA].
Example:
<parent>00-CONT-21</parent>
Brunner, et al Expires February 2002 [Page 8]
Internet-Draft EPP Container August 2001
template
This optional element is the registry provided template for
creating containers. For a given template there are set of
Registry defined policies for supported objects in a template and
other validations for a container.
The format is alphanumeric with the minimum and maximum length and
character set specified in the XML Schema Definition [XML-SCHEMA].
Example:
<template>Template100-Registrant</template>
child
This element is the reference to objects in the container. This
element may have multiple occurrences. The child element in a
container has attribute "obj" and optional "type" to reflect
supported object types and optional type of association. The
object types include all registry supported objects including
containers.
Example:
<child object="registrant">coca-cola-corp</child>
<child object="contact" type="admin">coco-cola-admin</child>
derived
This element is the reference to objects inherited from ancestor
containers. This element may have multiple occurrences. The
derived element in a container has attribute "container", "object"
and optional "type" to reflect the container from which the object
is inherited, object type, and optional type of association. The
object types include all registry supported objects.
Example:
<derived container="coca-container"
object="registrant">coca-cola-corp
</derived>
<derived container="coca-container"
object="contact"
type="admin">coco-cola-admin
</derived>
linked
This element is the reference to other objects linked to this
container. These are the objects created using container
Brunner, et al Expires February 2002 [Page 9]
Internet-Draft EPP Container August 2001
properties. Updates made to a container will result in updates to
all linked objects. The "linked" element has attribute "type" to
reflect the type of the linked object.
Example:
<linked object="registrant">coca-cola-corp</linked>
<linked object="contact" type="admin">coca-cola-admin</linked>
clID
This element contains the identifier of the sponsoring registrar.
The sponsoring registrar client has all the necessary
administrative privileges to manage the object.
Example:
<clID>clientXX</clID>
crID
This element contains the reference to the registrar client that
created the container.
Example:
<crID>clientXX</crID>
crDate
This element contains the reference to the date the container was
created. The format of the time field is UCT extended format of
ISO 8601.
Example:
<crDate>2001-07-04:00:00.0Z</crDate>
upID
This element contains the reference to the registrar client that
modified the container.
Example:
<upID>clientXX</upID>
upDate
This element contains the reference to the date the container was
modified. The format of the time field is UCT extended format of
ISO 8601.
Brunner, et al Expires February 2002 [Page 10]
Internet-Draft EPP Container August 2001
Example:
<upDate>2001-07-04:00:00.0Z</upDate>
trDate
This element contains the reference to the date the container was
transferred. The format of the time field is UCT extended format
of ISO 8601.
Example:
<trDate>2001-07-04:00:00.0Z</trDate>
authInfo
This element contains information associated with containers to
facilitate transfer operations. Authorization information is
assigned when a container is created, and it MAY be updated in the
future. This specification describes password or certificate-
based authorization information, though other mechanisms are
possible.
Example:
<authInfo type="pw">2fooBAR</authInfo>
2.5 Status Values
A container object MUST always have at least one associated status
value. Status values MAY be set only by the client that sponsors a
domain object and by the server on which the container resides. A
client MAY change the status of a container object using the XRP
<update> command. Each status value MAY be accompanied by a string
of human-readable text that describes the rationale for the status
applied to the container.
Status value Descriptions:
active
Supports updates and usage in transactions.
inactive
Does not support updates or usage in transactions.
pendingTransfer
A transfer request has been received for the container, and
completion of the request is pending. Transform (??) commands
other than <transfer> MUST be rejected while a container is in
Brunner, et al Expires February 2002 [Page 11]
Internet-Draft EPP Container August 2001
this state.
pendingDelete
A delete request has been received for the container, but the
container has not yet been purged from the server database.
TransferProhibited, clientTransferProhibited
Requests to transfer the container MUST be rejected.
UpdateProhibited, clientUpdateProhibited
Requests to update the container MUST be rejected.
DeleteProhibited, clientDeleteProhibited
Requests to delete the container MUST be rejected.
linked
The container has at least one active association, such as a
domain object of another container. Servers SHOULD provide
services to determine existing object associations.
ok
This is the nominal status value for an container that has no
pending operations or prohibitions.
3. EPP Command Mapping for Container
A detailed description of the EPP syntax and semantics can be found
in [EPP]. The command mappings described here are specifically for
use in provisioning and managing containers via EPP.
3.1 EPP Query Commands
EPP provides three commands to retrieve container information:
<check> to determine if a container is known to the server, <info> to
retrieve detailed information associated with a container, and
<transfer> to retrieve container transfer status information.
3.1.1 EPP <check> Command
The EPP <check> command is used to determine if a container is known
to the server. In addition to the standard EPP command elements, the
<check> command MUST contain a <container:check> element that
identifies the container namespace and the location of the container
schema. The <container:check> element contains the following child
elements:
- One or more <container:id> elementshat contain the server-unique
Brunner, et al Expires February 2002 [Page 12]
Internet-Draft EPP Container August 2001
identifier of the containers to be queried.
Example <check> command:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:iana:xml:ns:epp"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
C: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
C: <command>
C: <check>
C: <container:check xmlns:container="urn:iana:xml:ns:container"
C: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
C: container-1.0.xsd">
C: <container:id>CONTAINER-CocaCola-USA</container:id>
C: <container:id>CONTAINER-CocaCola-Asia</container:id>
C: <container:id>CONTAINER-CocaCola-Europe</container:id>
C: </container:check>
C: </check>
C: <unspec/>
C: <clTRID>ABC-12346</clTRID>
C: </command>
C:</epp>
When a <check> command has been processed successfully, the EPP
<resData> element MUST contain a child <container:chkData> element
that identifies the container namespace and the location of the
container schema. The <container:chkData> element contains the
following child elements:
- One or more <container:cd> elements that contain the server-unique
identifier for the queried containers and an "x" attribute whose
value identifies the object as either "+" for a known object or "-"
for an unknown container.
Example <check> response:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:iana:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
S: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <container:chkData xmlns:container="urn:iana:xml:ns:container-1.0"
S: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
S: container-1.0.xsd">
Brunner, et al Expires February 2002 [Page 13]
Internet-Draft EPP Container August 2001
S: <container:cd x="+">CONTAINER-CocaCola-USA</container:cd>
S: <container:cd x="-">CONTAINER-CocaCola-Asia</container:cd>
S: <container:cd x="+">CONTAINER-CocaCola-Europe</container:cd>
S: </container:chkData>
S: </resData>
S: <unspec/>
S: <trID>
S: <clTRID>ABC-12346</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
An EPP error response MUST be returned if a <check> command can not
be processed for any reason.
3.1.2 EPP <info> Command
The EPP <info> command is used to retrieve information associated
with a container. In addition to the standard EPP command elements,
the <info> command MUST contain a <container:info> element that
identifies the container namespace and the location of the container
schema. The <container:info> element contains the following child
elements:
- A <container:id> element that contains the server-unique identifier
of the container to be queried.
Example <info> command:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:iana:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
C: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
C: <command>
C: <info>
C: <container:info xmlns:container="urn:iana:xml:ns:container-1.0"
C: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
C: container-1.0.xsd">
C: <container:id>CONTAINER-CocaCola-USA</container:id>
C: </container:info>
C: </info>
C: <unspec/>
C: <clTRID>ABC-12346</clTRID>
C: </command>
C:</epp>
When an <info> command has been processed successfully, the EPP
Brunner, et al Expires February 2002 [Page 14]
Internet-Draft EPP Container August 2001
<resData> element MUST contain a child <container:infData> element
that identifies the container namespace and the location of the
container schema. The <container:infData> element contains the
following child elements:
- A <container:id> element that contains the server-unique identifier
of the container.
- A <container:roid> element that contains the Repository Object
IDentifier assigned to the container when the container was created.
- One or more <container:status> elements that describe the status of
the container.
- An OPTIONAL <container:parent> element that contains the server-
unique identifier of the parent container of which the container is a
child.
- An OPTIONAL <container:template> element that identifies the
registry provided template, which is a set of registry defined
policies, for maintaining the container.
- Zero or more <container:child> elements that specify the server-
unique identifiers of objects or containers that are included in the
container. Each element MUST include one required "object" attribute
for identifying the type of the child, and an OPTIONAL "type"
attribute for identifying the sub-type of the child within the
specific object type.
- If supported by the server, one or more <container:derived>
elements specify the server-unique identifiers of objects, excluding
containers, that the container inherited from its ancestor
containers. Each element MUST inlude one required "container"
attribute for identifying the container from which the object is
inherited, one required "object" attribute for identifying the type
of the child, and an OPTIONAL "type" attribute for identifying the
sub-type of the child within the specific object type.
- If supported by the server, one or more <container:linked> elements
that identifies types (via a REQUIRED "type" attribute) and server-
unique identifiers of objects associated with the container, either
directly or indirectly, specified by the OPTIONAL "directly"
attribute, with either a "true" or "false" value, with "false" as the
default.
- A <container:clID> element that contains the identifier of the
sponsoring client.
Brunner, et al Expires February 2002 [Page 15]
Internet-Draft EPP Container August 2001
- A <container:crID> element that contains the identifier of the
client that created the container.
- A <container:crDate> element that contains the date and time of the
container creation.
- A <container:upID> element that contains the identifier of the
client that last updated the container. This element MUST NOT be
present if the container has never been modified.
- A <container:upDate> element that contains the date and time of the
most recent container modification. This element MUST NOT be present
if the container has never been modified.
- A <container:trDate> elements that contains the date and time of
the most recent successful container transfer. This element MUST NOT
be provided if the container has never been transferred.
- A <container:authInfo> element that contains authorization
information to be associated with the container. This element MUST
NOT be provided if the querying client is not the current sponsoring
client.
Example <info> response:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:iana:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
S: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <container:infData xmlns:container="urn:iana:xml:ns:container-1.0"
S: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
S: container-1.0.xsd">
S: <container:id>CONTAINER-CocaCola-USA</container:id>
S: <container:roid>CONTAINER12345-NEULEVEL</container:roid>
S: <container:status s="linked"/>
S: <container:status s="clientDeleteProhibited"/>
S: <container:status s="clientTransferProhibited"/>
S: <container:parent>CONTAINER-CocaCola</container:id>
S: <container:template>TEMPLATE-CocaCola</container:template>
S: <container:child object="container">CONTAINER-CocaCola-Georgia
S: </container:child>
S: <container:child object="registrant">CONTACT-CocaCola-USA
S: </container:child>
Brunner, et al Expires February 2002 [Page 16]
Internet-Draft EPP Container August 2001
S: <container:child object="contact" type="tech">CONTACT-CocaCola-Tech
S: </container:child>
S: <container:child object="host">ns1.cocacola.biz</container:child>
S: <container:child object="host">ns2.cocacola.biz</container:child>
S: <container:child object="host">ns3.cocacola.biz</container:child>
S: <container:derived container="CONTAINER-CocaCola" object="host">
S: ns.cocacola.biz</container:derived>
S: <container:linked object="domain" directly="true">cocacola.biz
S: </container:linked>
S: <container:linked object="domain" directly="true">cocacola-ga.biz
S: </container:linked>
S: <container:linked object="contact" directly="false">cocacola-va.biz
S: </container:linked>
S: <container:clID>ClientY</container:clID>
S: <container:crID>ClientX</container:crID>
S: <container:crDate>2001-04-03T22:00:00.0Z</container:crDate>
S: <container:upID>ClientX</container:upID>
S: <container:upDate>2001-12-03T09:00:00.0Z</container:upDate>
S: <container:trDate>2002-04-08T09:00:00.0Z</container:trDate>
S: <container:authInfo type="pw">2fooBAR</container:authInfo>
S: </container:infData>
S: </resData>
S: <unspec/>
S: <trID>
S: <clTRID>ABC-12346</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
An EPP error response MUST be returned if an <info> command can not
be processed for any reason.
3.1.3 EPP <transfer> Command
The EPP <transfer> command provides a query operation that allows a
client to determine real-time status of pending and completed
transfer requests. In addition to the standard EPP command elements,
the <transfer> command MUST contain an "op" attribute with value
"query", and a <container:transfer> element that identifies the
container namespace and the location of the container schema. The
<container:transfer> element MUST contain the following child
elements:
- A <container:id> element that contains the server-unique identifier
of the container to be queried.
Example <transfer> query command:
Brunner, et al Expires February 2002 [Page 17]
Internet-Draft EPP Container August 2001
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:iana:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
C: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
C: <command>
C: <transfer op="query">
C: <transfer op="query">
C: <container:transfer xmlns:container="urn:iana:xml:ns:container-1.0"
C: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
C: container-1.0.xsd">
C: <container:id>CONTAINER-CocaCola-USA</container:id>
C: </container:transfer>
C: </transfer>
C: <unspec/>
C: <clTRID>ABC-12346</clTRID>
C: </command>
C:</epp>
When a <transfer> query command has been processed successfully, the
EPP <resData> element MUST contain a child <container:trnData>
element that identifies the container namespace and the location of
the container schema. The <container:trnData> element contains the
following child elements:
- A <container:id> element that contains the server-unique identifier
for the queried container.
- A <container:trStatus> element that contains the state of the most
recent transfer request.
- A <container:reID> element that contains the identifier of the
client that requested the object transfer.
- A <container:reDate> element that contains the date and time that
the transfer was requested.
- A <container:acID> element that contains the identifier of the
client that SHOULD act upon the transfer request.
- A <container:acDate> element that contains the date and time of a
required or completed response. For a pending request, the value
identifies the date and time by which a response is required before
an automated response action SHOULD be taken by the server. For all
other status types, the value identifies the date and time when the
request was completed.
Example <transfer> query response:
Brunner, et al Expires February 2002 [Page 18]
Internet-Draft EPP Container August 2001
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:iana:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
S: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <container:trnData xmlns:container="urn:iana:xml:ns:container-1.0"
S: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
S: container-1.0.xsd">
S: <container:id>CONTAINER-CocaCola-USA</container:id>
S: <container:trStatus>pending</container:trStatus>
S: <container:reID>ClientX</container:reID>
S: <container:reDate>2000-06-06T22:00:00.0Z</container:reDate>
S: <container:acID>ClientY</container:acID>
S: <container:acDate>2000-06-11T22:00:00.0Z</container:acDate>
S: </container:trnData>
S: </resData>
S: <unspec/>
S: <trID>
S: <clTRID>ABC-12346</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
An EPP error response MUST be returned if a <transfer> query command
can not be processed for any reason.
3.2 EPP Transform Commands
EPP provides four commands to transform container information:
<create> to create an instance of a container, <delete> to delete an
instance of a container, <transfer> to manage container sponsorship
changes, and <update> to change information associated with a
container. This document does not define a mapping for the EPP
<renew> command.
3.2.1 EPP <create> Command
The EPP <create> command provides a transform operation that allows a
client to create a container. In addition to the standard EPP
command elements, the <create> command MUST contain a
<container:create> element that identifies the container namespace
and the location of the container schema. The <container:create>
element contains the following child elements:
Brunner, et al Expires February 2002 [Page 19]
Internet-Draft EPP Container August 2001
- A <container:id> element that contains the desired server-unique
identifier for the container to be created.
- An OPTIONAL <container:parent> element that contains the server-
unique identifier of the parent container of which the container is a
child.
- An OPTIONAL <container:template> element that identifies the
registry provided template, which is a set of registry defined
policies, in maintaining the container.
- Zero or more <container:child> elements that specify the server-
unique identifiers of objects or containers that are included in the
container. Each element MUST include one required "object" attribute
for identifying the type of the child, and an OPTIONAL "type"
attribute for identifying the sub-type of the child within the
specific object type. If an element is a container, its "parent"
value MUST NOT have been specified.
- A <container:authInfo> element that contains authorization
information to be associated with the container.
Example <create> command:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:iana:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
C: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
C: <command>
C: <create>
C: <container:create xmlns:container="urn:iana:xml:ns:container-1.0"
C: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
C: container-1.0.xsd">
C: <container:id>CONTAINER-CocaCola-USA</container:id>
C: <container:parent>CONTAINER-CocaCola</container:parent>
C: <container:template>TEMPLATE-CocaCola</container:template>
S: <container:child object="container">CONTAINER-CocaCola-Georgia
S: </container:child>
S: <container:child object="registrant">CONTACT-CocaCola-USA
S: </container:child>
S: <container:child object="contact" type="tech">CONTACT-CocaCola-Tech
S: </container:child>
S: <container:child object="host">ns1.cocacola.biz</container:child>
S: <container:child object="host">ns2.cocacola.biz</container:child>
S: <container:child object="host">ns3.cocacola.biz</container:child>
C: <container:authInfo type="pw">2fooBAR</container:authInfo>
C: </container:create>
C: </create>
Brunner, et al Expires February 2002 [Page 20]
Internet-Draft EPP Container August 2001
C: <unspec/>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
When a <create> command has been processed successfully, the EPP
<resData> element MUST contain a child <container:creData> element
that identifies the container namespace and the location of the
container schema. The <container:creData> element contains the
following child elements:
- A <container:id> element that contains the server-unique identifier
for the created container.
Example <create> response:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:iana:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
S: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <container:creData xmlns:container="urn:iana:xml:ns:container-1.0"
S: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
S: container-1.0.xsd">
S: <container:id>CONTAINER-CocaCola-USA</container:id>
S: </container:creData>
S: </resData>
S: <unspec/>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
An EPP error response MUST be returned if a <create> command can not
be processed for any reason.
3.2.2 EPP <delete> Command
The EPP <delete> command provides a transform operation that allows a
client to delete a container. In addition to the standard EPP
command elements, the <delete> command MUST contain a
<container:delete> element that identifies the container namespace
Brunner, et al Expires February 2002 [Page 21]
Internet-Draft EPP Container August 2001
and the location of the container schema. The <container:delete>
element MUST contain the following child elements:
- A <container:id> element that contains the server-unique identifier
of the container to be deleted.
- An OPTIONAL <container:option> elements that indicates if all
objects associated with the container should be deleted or the
associations to be broken. This element MAY take one of the following
possible values, with "none" as the default:
- "none" for taking no actions on associated objects
- "delete" for deleting all associated objects
- "break" for breaking the association relationship of all
associated objects without deleting them.
- A <container:authInfo> element that contains authorization
information to be associated with the container.
A container object SHOULD NOT be deleted if it is associated with
other known objects or containers. An associated container SHOULD
NOT be deleted until associations with other known objects or
containers have been broken.
Example <delete> command:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:iana:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
C: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
C: <command>
C: <delete>
C: <container:delete xmlns:container="urn:iana:xml:ns:container-1.0"
C: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
C: container-1.0.xsd">
C: <container:id>CONTAINER-CocaCola-USA</container:id>
C: <container:option>break</container:option>
C: </container:delete>
C: </delete>
C: <unspec/>
C: <clTRID>ABC-12346</clTRID>
C: </command>
C:</epp>
When a <delete> command has been processed successfully, a server
MUST respond with an EPP response with no <resData> element.
Brunner, et al Expires February 2002 [Page 22]
Internet-Draft EPP Container August 2001
Example <delete> response:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:iana:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
S: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <unspec/>
S: <trID>
S: <clTRID>ABC-12346</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
An EPP error response MUST be returned if a <delete> command can not
be processed for any reason.
3.2.3 EPP <renew> Command
Renewal semantics do not apply to containers, so there is no mapping
defined for the EPP <renew> command.
3.2.4 EPP <transfer> Command
The EPP <transfer> command provides a transform operation that allows
a client to manage requests to transfer the sponsorship of a
container. In addition to the standard EPP command elements, the
<transfer> command MUST contain a <container:transfer> element that
identifies the container namespace and the location of the container
schema. The <container:transfer> element contains the following child
elements:
- A <container:id> element that contains the server-unique identifier
of the container for which a transfer request is to be created,
approved, rejected, or cancelled.
- An OPTIONAL <container:option> element that contains instruction if
and how the objects associated with container are transferred. This
element is REQUIRED only when a transfer is requested, and it MUST be
ignored if used otherwise. The element takes one of the following
possible values, with "none" as default:
- "none" for no actions to be taken for all associated objects
Brunner, et al Expires February 2002 [Page 23]
Internet-Draft EPP Container August 2001
- "linked" for transferring all directly associated objects
- "child" for transferring all child objects or containers
- "all" for transferring both all associated objects, directly or
indirectly, and all child objects or containers.
If there are any objects or containers with a status that
prohibites transfer operation, the transfer operation as a whole
will fail.
- A <container:authInfo> element that contains authorization
information associated with the container. This element is REQUIRED
only when a transfer is requested, and it MUST be ignored if used
otherwise.
Every EPP <transfer> command MUST contain an "op" attribute that
identifies the transfer operation to be performed as defined in
[EPP].
The EPP <transfer> command MAY be restricted to certain containers,
based on the container templates or registry policies.
Example <transfer> request command:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:iana:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
C: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
C: <command>
C: <transfer op="request">
C: <container:transfer xmlns:container="urn:iana:xml:ns:container-1.0"
C: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
C: container-1.0.xsd">
C: <container:id>CONTAINER-CocaCola-USA</container:id>
C: <container:authInfo type="pw">2fooBAR</container:authInfo>
C: </container:transfer>
C: </transfer>
C: <unspec/>
C: <clTRID>ABC-12346</clTRID>
C: </command>
C:</epp>
When a <transfer> command has been processed successfully, the EPP
<resData> element MUST contain a child <container:trnData> element
that identifies the container namespace and the location of the
container schema. The <container:trnData> element contains the same
child elements defined for a transfer query response.
Brunner, et al Expires February 2002 [Page 24]
Internet-Draft EPP Container August 2001
Example <transfer> response:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:iana:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
S: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <container:trnData xmlns:container="urn:iana:xml:ns:container-1.0"
S: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
S: container-1.0.xsd">
S: <container:id>CONTAINER-CocaCola-USA</container:id>
S: <container:trStatus>pending</container:trStatus>
S: <container:reID>ClientX</container:reID>
S: <container:reDate>2000-06-08T22:00:00.0Z</container:reDate>
S: <container:acID>ClientY</container:acID>
S: <container:acDate>2000-06-13T22:00:00.0Z</container:acDate>
S: </container:trnData>
S: </resData>
S: <unspec/>
S: <trID>
S: <clTRID>ABC-12346</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
An EPP error response MUST be returned if a <transfer> command can not
be processed for any reason.
3.2.5 EPP <update> Command
The EPP <update> command provides a transform operation that allows a
client to modify the attributes of a container. In addition to
the standard EPP command elements, the <update> command MUST contain a
<container:update> element that identifies the container namespace and the
location of the container schema. The <container:update> element contains
the following child elements:
- A <container:id> element that contains the server-unique identifier of
the container object to be updated.
- An OPTIONAL <container:add> element that contains attribute values to
be added to the container
Brunner, et al Expires February 2002 [Page 25]
Internet-Draft EPP Container August 2001
- An OPTIONAL <container:rem> element that contains attribute values to
be removed from the container.
- An OPTIONAL <container:chg> element that contains container attribute
values to be changed.
At least one <container:add>, <container:rem>, or <container:chg> element
MUST be provided. The <container:add> and <container:rem> elements
contain the following child elements.
At least one child element MUST be present:
- Zero or more <container:child> elements that specify the server-unique
identifiers of objects or containers that are included in the container.
Each element MUST include one required "object" attribute for
identifying the type of the child, and an OPTIONAL "type" attribute
for identifying the sub-type of the child within the specific object type.
The removal of any children of a container MUST ensure data integrity
of all objects associated with the container, directly or indirectly.
- Zero or more <container:status> elements that contain status values to
be associated with or removed from the container. When specifying a
value to be removed, only the attribute value is significant; element
text is not required to match a value for removal.
A <container:chg> element contains the following OPTIONAL child
elements. At least one child element MUST be present:
- A <container:parent> element that contains the server-unique
identifier of the new parent container of which the container is a child.
The change of the container child-parent relationship MUST ensure data
integrity of all objects associated with the container, directly or
indirectly.
- If supported by the server, an <container:template> element that identifies
the new registry provided template, which is a set of registry defined
policies, in maintaining the container.
- A <container:authInfo> element that contains authorization information
associated with the container object.
Example <update> command:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:iana:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
C: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
C: <command>
C: <update>
Brunner, et al Expires February 2002 [Page 26]
Internet-Draft EPP Container August 2001
C: <container:update xmlns:container="urn:iana:xml:ns:container-1.0"
C: xsi:schemaLocation="urn:iana:xml:ns:container-1.0
C: container-1.0.xsd">
C: <container:id>CONTAINER-CocaCola-USA</container:id>
C: <container:add>
C: <container:status s="clientDeleteProhibited"/>
C: <container:child object="host">ns4.cocacola.biz</container:child>
C: </container:add>
C: <container:chg>
C: <container:parent>CONTAINER-CocaCola-All</container:parent>
C: </container:chg>
C: </container:update>
C: </update>
C: <unspec/>
C: <clTRID>ABC-12346</clTRID>
C: </command>
C:</epp>
When an <update> command has been processed successfully, a server
MUST respond with an EPP response with no <resData> element.
Example <update> response:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:iana:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
S: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <unspec/>
S: <trID>
S: <clTRID>ABC-12346</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
An EPP error response MUST be returned if an <update> command can not
be processed for any reason.
3.3 Formal Syntax for Container
An EPP object mapping is specified in XML Schema notation. The
formal syntax presented here is a complete schema representation of
the object mapping suitable for automated validation of EPP XML
instances.
Brunner, et al Expires February 2002 [Page 27]
Internet-Draft EPP Container August 2001
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:iana:xml:ns:container-1.0"
xmlns:container="urn:iana:xml:ns:container-1.0"
xmlns:epp="urn:iana:xml:ns:epp-1.0"
xmlns:eppcom="urn:iana:xml:ns:eppcom-1.0"
xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<!--
Import common element types.
-->
<import namespace="urn:iana:xml:ns:eppcom-1.0"
schemaLocation="eppcom-1.0.xsd"/>
<import namespace="urn:iana:xml:ns:epp-1.0"
schemaLocation="epp-1.0.xsd"/>
<annotation>
<documentation>
Extensible Provisioning Protocol v1.0
container provisioning schema.
</documentation>
</annotation>
<!--
Types used within an EPP greeting.
-->
<element name="svc"/>
<!--
Container identifier type
-->
<simpleType name="containerIDType">
<restriction base="token">
<minLength value="3"/>
<maxLength value="64"/>
</restriction>
</simpleType>
<!--
Template identifier type
-->
<simpleType name="templateIDType">
<restriction base="token">
<minLength value="3"/>
<maxLength value="64"/>
</restriction>
</simpleType>
<!--
Child/Derived/Linked type
-->
<complexType name="childType">
<simpleContent>
<extension base="normalizedString">
Brunner, et al Expires February 2002 [Page 28]
Internet-Draft EPP Container August 2001
<attribute name="object" type="container:objectType"/>
<attribute name="type" type="token" use="optional"/>
</extension>
</simpleContent>
</complexType>
<complexType name="derivedType">
<simpleContent>
<extension base="normalizedString">
<attribute name="container" type="container:containerIDType"/>
<attribute name="object" type="container:objectType"/>
<attribute name="type" type="token" use="optional"/>
</extension>
</simpleContent>
</complexType>
<complexType name="linkedType">
<simpleContent>
<extension base="normalizedString">
<attribute name="object" type="container:objectType"/>
<attribute name="directly" type="boolean"
use="optional" default="true"/>
</extension>
</simpleContent>
</complexType>
<simpleType name="objectType">
<restriction base="token">
<enumeration value="container"/>
<enumeration value="registrant"/>
<enumeration value="contact"/>
<enumeration value="domain"/>
<enumeration value="host"/>
</restriction>
</simpleType>
<!--
Child elements found in EPP commands.
-->
<element name="check" type="container:mIDType"/>
<element name="create" type="container:createType"/>
<element name="delete" type="container:deleteType"/>
<element name="info" type="container:sIDType"/>
<element name="transfer" type="container:transferType"/>
<element name="update" type="container:updateType"/>
<!--
Child elements of the <create>, <delete> and <info> commands.
-->
<complexType name="createType">
<sequence>
<element name="id" type="container:containerIDType"/>
<element name="parent" type="container:containerIDType"
Brunner, et al Expires February 2002 [Page 29]
Internet-Draft EPP Container August 2001
minOccurs="0"/>
<element name="template" type="container:templateIDType"
minOccurs="0"/>
<element name="child" type="container:childType"/>
<element name="authInfo" type="eppcom:authInfoType"/>
</sequence>
</complexType>
<complexType name="deleteType">
<sequence>
<element name="id" type="container:containerIDType"/>
<element name="option" type="container:deleteOptType"
minOccurs="0"/>
<element name="authInfo" type="eppcom:authInfoType"/>
</sequence>
</complexType>
<simpleType name="deleteOptType">
<restriction base="token">
<enumeration value="none"/>
<enumeration value="delete"/>
<enumeration value="break"/>
</restriction>
</simpleType>
<!--
Child element of commands that require only an identifier.
-->
<complexType name="sIDType">
<sequence>
<element name="id" type="container:containerIDType"/>
</sequence>
</complexType>
<!--
Child element of commands that accept multiple identifiers.
-->
<complexType name="mIDType">
<sequence>
<element name="id" type="container:containerIDType"
maxOccurs="unbounded"/>
</sequence>
</complexType>
<!--
Child elements of the <transfer> command.
-->
<complexType name="transferType">
<sequence>
<element name="id" type="container:containerIDType"/>
<element name="option" type="container:transferOptType"
minOccurs="0"/>
<element name="authInfo" type="eppcom:authInfoType"
Brunner, et al Expires February 2002 [Page 30]
Internet-Draft EPP Container August 2001
minOccurs="0"/>
</sequence>
</complexType>
<simpleType name="transferOptType">
<restriction base="token">
<enumeration value="none"/>
<enumeration value="linked"/>
<enumeration value="child"/>
<enumeration value="all"/>
</restriction>
</simpleType>
<!--
Child elements of the <update> command.
-->
<complexType name="updateType">
<sequence>
<element name="id" type="container:containerIDType"/>
<choice minOccurs="1" maxOccurs="3">
<element name="add" type="container:addRemType"
minOccurs="0"/>
<element name="rem" type="container:addRemType"
minOccurs="0"/>
<element name="chg" type="container:chgType"
minOccurs="0"/>
</choice>
</sequence>
</complexType>
<!--
Data elements that can be added or removed.
-->
<complexType name="addRemType">
<choice minOccurs="1" maxOccurs="2">
<element name="status" type="container:statusType"
minOccurs="0" maxOccurs="9"/>
<element name="child" type="container:childType"
minOccurs="0" maxOccurs="unbounded"/>
</choice>
</complexType>
<!--
Data elements that can be changed.
-->
<complexType name="chgType">
<choice minOccurs="1" maxOccurs="3">
<element name="parent" type="container:containerIDType"
minOccurs="0"/>
<element name="template" type="container:templateIDType"
minOccurs="0"/>
<element name="authInfo" type="eppcom:authInfoType"
Brunner, et al Expires February 2002 [Page 31]
Internet-Draft EPP Container August 2001
minOccurs="0"/>
</choice>
</complexType>
<!--
Child response elements.
-->
<element name="chkData" type="container:chkDataType"/>
<element name="creData" type="container:creDataType"/>
<element name="infData" type="container:infDataType"/>
<element name="trnData" type="container:trnDataType"/>
<!--
<check> response elements.
-->
<complexType name="chkDataType">
<sequence>
<element name="cd" type="container:checkType"
maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="checkType">
<simpleContent>
<extension base = "container:containerIDType">
<attribute name="x" type="eppcom:checkType"
use="required"/>
</extension>
</simpleContent>
</complexType>
<!--
<create> response elements.
-->
<complexType name="creDataType">
<sequence>
<element name="id" type="container:containerIDType"/>
</sequence>
</complexType>
<!--
<info> response elements.
-->
<complexType name="infDataType">
<sequence>
<element name="id" type="container:containerIDType"/>
<element name="roid" type="eppcom:roidType"/>
<element name="status" type="container:statusType"
maxOccurs="8"/>
<element name="parent" type="container:containerIDType"
minOccurs="0"/>
<element name="template" type="container:templateIDType"
minOccurs="0"/>
Brunner, et al Expires February 2002 [Page 32]
Internet-Draft EPP Container August 2001
<element name="child" type="container:childType"
minOccurs="0" maxOccurs="unbounded"/>
<element name="derived" type="container:derivedType"
minOccurs="0" maxOccurs="unbounded"/>
<element name="linked" type="container:linkedType"
minOccurs="0" maxOccurs="unbounded"/>
<element name="clID" type="eppcom:clIDType"/>
<element name="crID" type="eppcom:clIDType"/>
<element name="crDate" type="dateTime"/>
<element name="upID" type="eppcom:clIDType"
minOccurs="0"/>
<element name="upDate" type="dateTime"
minOccurs="0"/>
<element name="trDate" type="dateTime"
minOccurs="0"/>
<element name="authInfo" type="eppcom:authInfoType"/>
</sequence>
</complexType>
<!--
Status is a combination of attributes and an optional human-readable
message that may be expressed in languages other than English.
-->
<complexType name="statusType">
<simpleContent>
<extension base="normalizedString">
<attribute name="s" type="container:statusValueType"
use="required"/>
<attribute name="lang" type="language"
use="optional" default="en"/>
</extension>
</simpleContent>
</complexType>
<simpleType name="statusValueType">
<restriction base="token">
<enumeration value="clientDeleteProhibited"/>
<enumeration value="clientTransferProhibited"/>
<enumeration value="clientUpdateProhibited"/>
<enumeration value="linked"/>
<enumeration value="ok"/>
<enumeration value="pendingDelete"/>
<enumeration value="pendingTransfer"/>
<enumeration value="serverDeleteProhibited"/>
<enumeration value="serverTransferProhibited"/>
<enumeration value="serverUpdateProhibited"/>
</restriction>
</simpleType>
<!--
<transfer> response elements.
Brunner, et al Expires February 2002 [Page 33]
Internet-Draft EPP Container August 2001
-->
<complexType name="trnDataType">
<sequence>
<element name="id" type="container:containerIDType"/>
<element name="trStatus" type="eppcom:trStatusType"/>
<element name="reID" type="eppcom:clIDType"/>
<element name="reDate" type="dateTime"/>
<element name="acID" type="eppcom:clIDType"/>
<element name="acDate" type="dateTime"/>
</sequence>
</complexType>
<!--
End of schema.
-->
</schema>
4. EPP Command Mapping for Objects with Containers
A detailed description of the EPP syntax and semantics can be found
in [EPP]. The extended command mappings described here are
specifically for use in provisioning and managing objects using
containers via EPP. The objects can be maintained with containers
specified here are domains. Other types of objects managed with
containers will be included in the future as required. However, any
objects included in a container cannot be removed via the <delete>
commands, or modified via the <update> command unless the data
integrity of all objects associated with the container are ensured.
The EPP commands that can be applied to domain objects MUST be
<create> or <update> commands. In addition, the responses to <info>
commands MAY contains an OPTIONAL "container" element that indicating
the container used in maintaining domain objects. Finally, in order
to <transfer> a domain object that is associated with a container,
the association MUST be cut-off first via the <update> command for
nullifying its container value.
4.1 EPP Command <create> for Domain Object With Container
A domain object can be created with a container. The extended schema
for domain object will include an OPTIONAL "container" element in the
<create> command.
If the OPTIONAL "container" element is present in the <create>
command for creating a domain object, all other required elements
described in [EPP-D], except for the fully required name of the
domain object, become OPTIONAL. All other REQUIRED or OPTIONAL
elements specified in [EPP-D] are derived from the container
specified. If some of the REQUIRED elements cannot be found in the
Brunner, et al Expires February 2002 [Page 34]
Internet-Draft EPP Container August 2001
container or any of the ancestor containers of the container, the
domain object will not be created. Any REQUIRED or OPTIONAL elements
specified in the <create> command will override the values derived
from the container object.
Example <create> command with container:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:iana:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
C: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
C: <command>
C: <create>
C: <domain:create xmlns:domain="urn:iana:xml:ns:domain-1.0"
C: xsi:schemaLocation="urn:iana:xml:ns:domain-1.0
C: domain-1.0.xsd">
C: <domain:name>cocacola-ga.biz</domain:name>
C: <domain:container>CONTAINER-CocaCola-USA</domain:container>
C: <domain:registrant>CocaCola-Georgia</container:registrant>
C: </container:create>
C: </create>
C: <unspec/>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
The response to a <create> command is described in [EPP-D].
4.2 EPP Command <update> for Domain Object With Container
Additional domain attribute values can be added or changed via the
<update> command to override the default values derived from
containers. However, only attribute values specified via the <create>
command or added via the <update> command can be removed, and data
integrity of the domain object is ensured.
When a domain object is associated with a container, the association
can be cut-off or changed with another container. All attribute
values for the domain object will be copied from containers into the
domain object itself.
When the <chg> element of the <update> command for a domain object
contains an OPTIONAL <container> element, which is either empty or a
server-unique container identifier, the association to the current
container, if present, will be cut-off or changed to the new
container. However, if the domain object does not associated with any
container, the update command SHOULD fail.
Brunner, et al Expires February 2002 [Page 35]
Internet-Draft EPP Container August 2001
Example <update> command for updating container association:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:iana:xml:ns:epp-1.0"
C: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
C: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
C: <command>
C: <update>
C: <domain:update xmlns:domain="urn:iana:xml:ns:domain-1.0"
C: xsi:schemaLocation="urn:iana:xml:ns:domain-1.0
C: domain-1.0.xsd">
C: <domain:name>cocacola-va.com</domain:name>
C: <domain:chg>
C: <domain:container>CONTAINER-CocaCola-Virginia</domain:container>
C: <domain:authInfo type="pw">2BARfoo</domain:authInfo>
C: </domain:chg>
C: </domain:update>
C: </update>
C: <unspec/>
C: <clTRID>ABC-12346</clTRID>
C: </command>
C:</epp>
The response to a <update> command is described in [EPP-D].
4.3 EPP Command <info> for Domain Object With Container
If a domain object is associated with a container, the response data to
the <info> command will contain an OPTIONAL "container" element whose
value is the server-unique identifier of the container used for maintaining
the domain object.
Example <info> response:
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:iana:xml:ns:epp-1.0"
S: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
S: xsi:schemaLocation="urn:iana:xml:ns:epp-1.0 epp-1.0.xsd">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:infData xmlns:domain="urn:iana:xml:ns:domain-1.0"
S: xsi:schemaLocation="urn:iana:xml:ns:domain-1.0
S: domain-1.0.xsd">
S: <domain:name>cocacola-va.biz</domain:name>
S: <domain:roid>COCACOLA-12-NEULEVEL</domain:roid>
S: <domain:status s="ok"/>
Brunner, et al Expires February 2002 [Page 36]
Internet-Draft EPP Container August 2001
S: <domain:container>CONTAINER-CocaCola-USA</domain:container>
S: <domain:registrant>CocaCola-Corp</domain:registrant>
S: <domain:contact type="admin">CocaColaAdmin</domain:contact>
S: <domain:contact type="tech">CocaColaTech</domain:contact>
S: <domain:contact type="billing">CocaColaBilling</domain:contact>
S: <domain:ns>ns1.cocacola.biz</domain:ns>
S: <domain:ns>ns2.cocacola.biz</domain:ns>
S: <domain:host>ns1.cocacola.biz</domain:host>
S: <domain:host>ns2.cocacola.biz</domain:host>
S: <domain:clID>ClientX</domain:clID>
S: <domain:crID>ClientY</domain:crID>
S: <domain:crDate>2001-04-03T22:00:00.0Z</domain:crDate>
S: <domain:upID>ClientX</domain:upID>
S: <domain:upDate>2001-12-03T09:00:00.0Z</domain:upDate>
S: <domain:exDate>2005-04-03T22:00:00.0Z</domain:exDate>
S: <domain:trDate>2002-04-08T09:00:00.0Z</domain:trDate>
S: <domain:authInfo type="pw">2fooBAR</domain:authInfo>
S: </domain:infData>
S: </resData>
S: <unspec/>
S: <trID>
S: <clTRID>ABC-12346</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
4.4 Formal Syntax for Domain Object with Container
An EPP object mapping is specified in XML Schema notation. The
formal syntax presented here is a complete schema representation of
the object mapping suitable for automated validation of EPP XML
instances.
Instead of giving a full XML Schema for domain object with container
extension, the following is the diff output comparing to the original
[EPP-D] schema.
*** domain-1.0.xsd Tue Jun 26 08:33:20 2001
--- domain-1.1.xsd Thu Aug 2 10:48:50 2001
***************
*** 1,7 ****
<?xml version="1.0" encoding="UTF-8"?>
! <schema targetNamespace="urn:iana:xml:ns:domain-1.0"
! xmlns:domain="urn:iana:xml:ns:domain-1.0"
xmlns:epp="urn:iana:xml:ns:epp-1.0"
xmlns:eppcom="urn:iana:xml:ns:eppcom-1.0"
Brunner, et al Expires February 2002 [Page 37]
Internet-Draft EPP Container August 2001
xmlns="http://www.w3.org/2001/XMLSchema"
--- 1,7 ----
<?xml version="1.0" encoding="UTF-8"?>
! <schema targetNamespace="urn:iana:xml:ns:domain-1.1"
! xmlns:domain="urn:iana:xml:ns:domain-1.1"
xmlns:epp="urn:iana:xml:ns:epp-1.0"
xmlns:eppcom="urn:iana:xml:ns:eppcom-1.0"
xmlns="http://www.w3.org/2001/XMLSchema"
***************
*** 18,24 ****
<annotation>
<documentation>
Extensible Provisioning Protocol v1.0
! domain provisioning schema.
</documentation>
</annotation>
--- 18,24 ----
<annotation>
<documentation>
Extensible Provisioning Protocol v1.0
! domain provisioning schema, with container extension.
</documentation>
</annotation>
***************
*** 28,33 ****
--- 28,42 ----
<element name="svc"/>
<!--
+ Container identifier type, imported from container-1.0.xsd
+ -->
+ <simpleType name="containerIDType">
+ <restriction base="token">
+ <minLength value="3"/>
+ <maxLength value="64"/>
+ </restriction>
+ </simpleType>
+ <!--
Child elements found in EPP commands.
-->
<element name="check" type="domain:mNameType"/>
***************
*** 44,49 ****
--- 53,60 ----
<complexType name="createType">
Brunner, et al Expires February 2002 [Page 38]
Internet-Draft EPP Container August 2001
<sequence>
<element name="name" type="eppcom:labelType"/>
+ <element name="container" type="domain:containerIDType"
+ minOccurs="0"/>
<element name="period" type="domain:periodType"
minOccurs="0"/>
<element name="ns" type="eppcom:labelType"
***************
*** 52,58 ****
minOccurs="0"/>
<element name="contact" type="domain:contactType"
minOccurs="0" maxOccurs="unbounded"/>
! <element name="authInfo" type="eppcom:authInfoType"/>
</sequence>
</complexType>
--- 63,70 ----
minOccurs="0"/>
<element name="contact" type="domain:contactType"
minOccurs="0" maxOccurs="unbounded"/>
! <element name="authInfo" type="eppcom:authInfoType"
! minOccurs="0"/>
</sequence>
</complexType>
***************
*** 228,233 ****
--- 240,246 ----
<sequence>
<element name="name" type="eppcom:labelType"/>
<element name="roid" type="eppcom:roidType"/>
+ <element name="container" type="domain:containerIDType"/>
<element name="status" type="domain:statusType"
maxOccurs="14"/>
<element name="registrant" type="domain:contactType"
5. Internationalization Considerations
This memo introduces no international considerations beyond those
introduced in [EPP].
6. IANA Considerations
This memo introduces no IANA considerations beyond those introduced
in [EPP].
Brunner, et al Expires February 2002 [Page 39]
Internet-Draft EPP Container August 2001
7. Security Considerations
This memo introduces no security considerations beyond those
introduced in [EPP].
References
[EPP] Hollenbeck, S., "Extensible Provisioning Protocol", Internet-
Draft <draft-ietf-provreg-epp-04.txt>, work in progress.
[EPP-C] Hollenbeck, S., "EPP Contact mapping", Internet-Draft <draft-
ietf-provreg-contact-02.txt>, work in progress.
[EPP-D] Hollenbeck, S., "EPP Domain mapping", Internet-Draft <draft-
ietf-provreg-domain-02.txt>, work in progress. [EPP-H] Hollenbeck,
S., "EPP Host mapping", Internet-Draft <draft-ietf-provreg-
host-02.txt>, work in progress.
[BEEP] Rose, M., "The Blocks Extensible Exchange Protocol Core", RFC
3080, March 2001.
[RFC2119] Bradner, S., "Key Words for Use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[XML] Bray, T., et al, "Extensible Markup Language (XML) 1.0 (Second
Edition)", 6 October 2000. http://www.w3.org/TR/2000/REC-
xml-20001006
[XML-SCHEMA] XML Schema Part 1: Structures Working Draft. D. Beech,
M. Maloney, N. Mendelshohn. April 2000.
http://www.w3.org/TR/2000/WD-xmlschema-1-20000407/
XML Schema Part 2: Datatypes Working Draft. P. Biron, A. Malhotra.
April 2000. http://www.w3.org/TR/2000/WD-xmlschema-2-20000407/
Author's Addresses
Eric Brunner-Williams
NeuStar, Inc.
1415 Forest Ave.,
Portland, ME 04103
Phone: +1 202 533 2600
Email: ebw@neustar.com
Ayesha Damaraju
NeuStar, Inc.
Brunner, et al Expires February 2002 [Page 40]
Internet-Draft EPP Container August 2001
1120 Vermont Ave, N.W.
Suite 550
Washington, DC 20005
Phone: +1 202 533 2600
Email: ayesha.damaraju@neustar.com
Ning Zhang
NeuStar, Inc.
1120 Vermont Ave, N.W.
Suite 550
Washington, DC 20005
Phone: +1 202 533 2600
Email: Ning.Zhang@neustar.com
Full Copyright Statement
Copyright (C) The Internet Society (2001). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgement
Funding for the RFC editor function is currently provided by the
Internet Society.
Brunner, et al Expires February 2002 [Page 41]