IDN EPP Extension for the CNNIC Registration System


Table of Contents

1.  Abstract
2.  Legal Disclaimer
3.  Conventions
4.  Namespace & Schema
5.  EPP Command Mapping
    5.1.  EPP Query Commands
        5.1.1.  EPP <check> Command
        5.1.2.  EPP <info> Command
        5.1.3.  EPP <poll> Command
        5.1.4.  EPP <transfer> Command
    5.2.  EPP Transform Commands
        5.2.1.  EPP <create> Command
        5.2.2.  EPP <delete> Command
        5.2.3.  EPP <renew> Command
        5.2.4.  EPP <transfer> Command
        5.2.5.  EPP <update> Command
6.  Formal Syntax (cdn-1.0.xsd)
7.  Security Considerations
8.  Normative References


1. Abstract

This document defines an EPP extension mapping for the registration and management of Chinese domain names, including primary domain name, variant domain name, and Unicode / Punycode mapping. This extension extends the EPP domain name mapping to support Chinese script domain operations.

2. Legal Disclaimer

Unless otherwise indicated, this document and all content and materials herein, including without limitation the CNNIC logo, text, graphics, data, software, XML schemas, examples, and the selection and arrangement thereof (collectively, the “EPP Materials”) are the proprietary property of China Internet Network Information Center (CNNIC) or its licensors and are protected by the copyright laws of the People’s Republic of China and international copyright treaties.

You are granted a limited, non-sublicensable license to access and use the EPP Materials solely for the purpose of implementing, testing, and complying with the EPP IDN extension for domain name provisioning. Any use of the EPP Materials other than as specifically authorized herein, without the prior written permission of CNNIC, is strictly prohibited and will terminate the license granted herein. Such unauthorized use may also violate applicable laws, including copyright, trademark laws, and relevant communications regulations.

Unless explicitly stated herein, nothing in this Legal Disclaimer shall be construed as conferring in any manner, whether by implication, estoppel or otherwise, any title, ownership, or exclusive use rights to any intellectual property or other rights and any goodwill associated herewith.

CNNIC Trademark Information

CNNIC and the CNNIC logo are registered trademarks of China Internet Network Information Center (CNNIC) in the People’s Republic of China and other jurisdictions. All other CNNIC trademarks, service marks, domain names, logos, company names, and indications of origin referred to in the EPP Materials are either trademarks, service marks, or the property of CNNIC or its affiliates or licensors. In jurisdictions where any of the foregoing marks are not registered, CNNIC claims rights associated with unregistered trademarks, service marks, domain names, logos, trade names, company names, and indications of origin.

Other product or company names referred to herein may be trademarks of their respective owners. You may not use any trademark, service mark, domain name, logo, company name, trade name, or indication of origin of CNNIC or any third party without permission from the owner of the applicable mark.

3. Conventions

The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL are to be interpreted as described in RFC 2119.

XML is case sensitive. Implementations MUST use a namespace-aware XML parser and serializer.
The prefix cdn represents the namespace:urn:ietf:params:xml:ns:cdn-1.0

4. Namespace & Schema

  • Namespace: urn:ietf:params:xml:ns:cdn-1.0
  • Schema: cdn-1.0.xsd
  • Imports:
    • urn:ietf:params:xml:ns:epp-1.0
    • urn:ietf:params:xml:ns:eppcom-1.0

5. EPP Command Mapping

A detailed description of the EPP syntax and semantics can be found in the EPP core protocol specification [RFC5730]. The command mappings described here are specifically for use in IDN registrations via EPP.

5.1. EPP Query Commands

EPP provides four commands to retrieve object information: <check> to determine if an object is known to the server, <info> to retrieve detailed information associated with an object, <poll> to discover and retrieve service messages queued by a server for individual clients, and <transfer> to retrieve object transfer status information.

5.1.1. <check> Command

This extension does not add any elements to the EPP <check> command or <check> response described in the EPP domain name mapping [RFC5731].

5.1.2. <info> Command

The <info> response MUST return CDN extension data if the domain contains Chinese characters. The contained elements are described as follows:
  • <cdn:SCDN>: contains the Simplified Chinese domain name.
  • <cdn:SCDNPunycode>: contains the Punycode of the Simplified Chinese domain name.
  • <cdn:TCDN>: contains the Traditional Chinese domain name.
  • <cdn:TCDNPunycode>: contains the Punycode of the Traditional Chinese domain name.
  • <cdn:VCDNList>: contains all variant domain names.
Example Response

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
  <response>
    <result code="1000">
      <msg lang="en-US">Command completed successfully</msg>
    </result>
    <resData>
      <domain:infData xmlns="urn:ietf:params:xml:ns:domain-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
        <domain:name>故乡.cn</domain:name>
        <domain:roid>8001-CNNIC</domain:roid>
        <domain:status s="pendingCreate"/>
        <domain:status s="inactive"/>
        <domain:registrant>jeff</domain:registrant>
        <domain:clID>bos4</domain:clID>
        <domain:crID>bos4</domain:crID>
        <domain:crDate>2000-01-01T00:00:00.0Z</domain:crDate>
        <domain:upID>bos4</domain:upID>
        <domain:upDate>2000-01-01T00:00:00.0Z</domain:upDate>
        <domain:exDate>2000-01-01T00:00:00.0Z</domain:exDate>
        <domain:authInfo>
          <domain:pw><![CDATA[password]]></domain:pw>
        </domain:authInfo>
      </domain:infData>
    </resData>
    <extension>
      <cdn:infData xmlns:cdn="urn:ietf:params:xml:ns:cdn-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:cdn-1.0 cdn-1.0.xsd">
        <cdn:SCDN>故乡.cn</cdn:SCDN>
        <cdn:SCDNPunycode>xn--wjqw17c.cn</cdn:SCDNPunycode>
        <cdn:TCDN>故鄉.cn</cdn:TCDN>
        <cdn:TCDNPunycode>xn--ccv378g.cn</cdn:TCDNPunycode>
        <cdn:VCDNList>
          <cdn:VCDN>故郷.cn</cdn:VCDN>
          <cdn:VCDNPunycode>xn--ccvq68g.cn</cdn:VCDNPunycode>
        </cdn:VCDNList>
      </cdn:infData>
      <rgp:infData xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:rgp-1.0 rgp-1.0.xsd">
        <rgp:rgpStatus s="addPeriod"/>
      </rgp:infData>
    </extension>
    <trID>
      <clTRID>ABC-12345</clTRID>
      <svTRID>bos41LEUF3KWTZ</svTRID>
    </trID>
  </response>
</epp>

5.1.3. <poll> Command

This extension does not add any elements to the EPP <poll> command or <poll> response described in the EPP domain name mapping [RFC5731].

5.1.4. <transfer> Command

The <transfer> query command applies to all variants within a bundle. This means that if a transfer for a domain is started by the gaining registrar and approved by the losing registrar, all other variants in the bundle get transferred, too. The <cdn:trnData> is included in the responses to list all the names of these variants.
Example Response

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
  <response>
    <result code="1000">
      <msg lang="en-US">Command completed successfully</msg>
    </result>
    <resData>
      <domain:trnData xmlns="urn:ietf:params:xml:ns:domain-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
        <domain:name>故乡.cn</domain:name>
        <domain:trStatus>clientApproved</domain:trStatus>
        <domain:reID>bos5</domain:reID>
        <domain:reDate>2000-01-01T00:00:00.0Z</domain:reDate>
        <domain:acID>bos4</domain:acID>
        <domain:acDate>2000-01-01T00:00:00.0Z</domain:acDate>
        <domain:exDate>2000-01-01T00:00:00.0Z</domain:exDate>
      </domain:trnData>
    </resData>
    <extension>
      <cdn:trnData xmlns:cdn="urn:ietf:params:xml:ns:cdn-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:cdn-1.0 cdn-1.0.xsd">
        <cdn:VCDNList>
          <cdn:VCDN>故乡.cn</cdn:VCDN>
          <cdn:VCDN>故鄉.cn</cdn:VCDN>
          <cdn:VCDN>故郷.cn</cdn:VCDN>
        </cdn:VCDNList>
      </cdn:trnData>
    </extension>
    <trID>
      <clTRID>ABC_12345</clTRID>
      <svTRID>bos41WY1HCVWTZ</svTRID>
    </trID>
  </response>
</epp>

5.2. EPP Transform Commands

EPP provides five commands to transform objects: <create> to create an instance of an object, <delete> to delete an instance of an object, <renew> to extend the validity period of an object, <transfer> to manage object sponsorship changes, and <update> to change information associated with an object.

5.2.1. <create> Command

The <create> command MAY include CDN extension for Chinese domain creation. The CDN extension SHALL be used to activate the corresponding variant domain name at the time of creation. The CDN extension is NOT REQUIRED if only the domain name in the current script is created.
Example Request

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
    <command>
        <create>
            <domain:create
                xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
                <domain:name>故乡.cn</domain:name>
                <domain:period unit="y">2</domain:period>
                <domain:registrant>jeff</domain:registrant>
                <domain:authInfo>
                    <domain:pw roid="ddddd-dddd">password</domain:pw>
                </domain:authInfo>
            </domain:create>
        </create>
        <extension>
            <cdn:create xmlns:cdn="urn:ietf:params:xml:ns:cdn-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:cdn-1.0 cdn-1.0.xsd">
                <cdn:VCDNList>
                    <cdn:VCDN>故鄉.cn</cdn:VCDN>
                    <cdn:VCDN>故郷.cn</cdn:VCDN>
                </cdn:VCDNList>
            </cdn:create>
        </extension>
        <clTRID>ABC-12345</clTRID>
    </command>
</epp>

5.2.2. <delete> Command

This extension does not add any elements to the EPP <delete> command or <delete> response described in the EPP domain name mapping [RFC5731].

5.2.3. <renew> Command

This extension does not add any elements to the EPP <renew> command or <renew> response described in the EPP domain name mapping [RFC5731].

5.2.4. <transfer> Command

The <transfer> command with all its operations ("request", "cancel", "approve", "reject") applies to all variants within a bundle. This means that if a transfer for a domain is started by the gaining registrar and approved by the losing registrar, all other variants in the bundle get transferred, too. The <cdn:trnData> is included in the responses to inform the gaining and losing registrar about the names of these variants, in order to allow them to track these names in their own databases.
Example Response

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
  <response>
    <result code="1001">
      <msg lang="en-US">Command completed successfully; action pending</msg>
    </result>
    <resData>
      <domain:trnData xmlns="urn:ietf:params:xml:ns:domain-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
        <domain:name>故乡.cn</domain:name>
        <domain:trStatus>pending</domain:trStatus>
        <domain:reID>bos4</domain:reID>
        <domain:reDate>2000-01-01T00:00:00.0Z</domain:reDate>
        <domain:acID>bos5</domain:acID>
        <domain:acDate>2000-01-01T00:00:00.0Z</domain:acDate>
        <domain:exDate>2000-01-01T00:00:00.0Z</domain:exDate>
      </domain:trnData>
    </resData>
    <extension>
      <cdn:trnData xmlns:cdn="urn:ietf:params:xml:ns:cdn-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:cdn-1.0 cdn-1.0.xsd">
        <cdn:VCDNList>
          <cdn:VCDN>故乡.cn</cdn:VCDN>
          <cdn:VCDN>故鄉.cn</cdn:VCDN>
          <cdn:VCDN>故郷.cn</cdn:VCDN>
        </cdn:VCDNList>
      </cdn:trnData>
    </extension>
    <trID>
      <clTRID>ABC_12345</clTRID>
      <svTRID>bos41UIP1RNWTZ</svTRID>
    </trID>
  </response>
</epp>

5.2.5. <update> Command

The <update> command MAY be used either to activate the corresponding variant domain name or to deactivate an active variant domain name. The <update> command supports two operations:
  • <add>: add VCDN
  • <rem>: remove VCDN
Example Request of <add> Operation

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
    <command>
        <update>
            <domain:update
                xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
                <domain:name>故乡.cn</domain:name>
            </domain:update>
        </update>
        <extension>
            <cdn:update xmlns:cdn="urn:ietf:params:xml:ns:cdn-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:cdn-1.0 cdn-1.0.xsd">
                <cdn:add>
                    <cdn:VCDN>故鄉.cn</cdn:VCDN>
                </cdn:add>
            </cdn:update>
        </extension>
        <clTRID>ABC-12345</clTRID>
    </command>
</epp>
Example Request of <rem> Operation

<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd">
    <command>
        <update>
            <domain:update
                xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd">
                <domain:name>故乡.cn</domain:name>
            </domain:update>
        </update>
        <extension>
            <cdn:update xmlns:cdn="urn:ietf:params:xml:ns:cdn-1.0" xsi:schemaLocation="urn:ietf:params:xml:ns:cdn-1.0 cdn-1.0.xsd">
                <cdn:rem>
                    <cdn:VCDN>故鄉.cn</cdn:VCDN>
                </cdn:rem>
            </cdn:update>
        </extension>
        <clTRID>ABC-12345</clTRID>
    </command>
</epp>

6. Formal Syntax (cdn-1.0.xsd)


<?xml version="1.0" encoding="UTF-8"?>

<schema targetNamespace="urn:ietf:params:xml:ns:cdn-1.0"
        xmlns:cdn="urn:ietf:params:xml:ns:cdn-1.0"
        xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
        xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
        xmlns="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">
        
   <!--
   Import common element types.
   -->
    <import namespace="urn:ietf:params:xml:ns:eppcom-1.0" schemaLocation="eppcom-1.0.xsd"/>
    <import namespace="urn:ietf:params:xml:ns:epp-1.0" schemaLocation="epp-1.0.xsd"/>
    
   <annotation>
     <documentation>
       Extensible Provisioning Protocol v1.0
       CNNIC Domain Extension Schema v1.0
     </documentation>
   </annotation>

   <!--
   Child elements found in EPP commands.
   -->
   <element name="create" type="cdn:trnDataType"/>
   <element name="update" type="cdn:updateType"/>

   <!--
   Child elements of the <cdn:update> command
   All elements must be present at time of creation
   -->
   <complexType name="updateType">
     <sequence>
       <element name="chg" type="cdn:chgType" minOccurs="0" />
       <element name="add" type="cdn:addRemType" minOccurs="0" />
       <element name="rem" type="cdn:addRemType" minOccurs="0" />
     </sequence>
   </complexType>

   <complexType name="chgType">
     <sequence>
       <element name="SCDN" type="eppcom:labelType" minOccurs="0" />
       <element name="TCDN" type="eppcom:labelType" minOccurs="0" />
     </sequence>
   </complexType>

   <complexType name="addRemType">
     <sequence>
       <element name="VCDN" type="eppcom:labelType"
        maxOccurs="unbounded" />
     </sequence>
   </complexType>

   <!--
   Child elements found in EPP commands.
   -->
   <element name="infData" type="cdn:infDataType"/>
   <element name="creData" type="cdn:trnDataType"/>
   <element name="delData" type="cdn:trnDataType"/>
   <element name="renData" type="cdn:trnDataType"/>
   <element name="trnData" type="cdn:trnDataType"/>

   <!--
   Child elements of the <cdn:infData> command
   All elements must be present at time of creation
   -->
   <complexType name="infDataType">
     <all>
       <element name="OCDNPunycode" type="eppcom:labelType" minOccurs="0"/>
       <element name="SCDN" type="eppcom:labelType" minOccurs="0" />
       <element name="SCDNPunycode" type="eppcom:labelType" minOccurs="0"/>
       <element name="TCDN" type="eppcom:labelType" minOccurs="0" />
       <element name="TCDNPunycode" type="eppcom:labelType" minOccurs="0"/>
       <element name="VCDNList" type="cdn:mVariantNameType" minOccurs="0" />
     </all>
   </complexType>

   <complexType name="mVariantNameType">
     <sequence>
       <element name="VCDN" type="eppcom:labelType" maxOccurs="unbounded"/>
       <element name="VCDNPunycode" type="eppcom:labelType" maxOccurs="unbounded"/>
     </sequence>
   </complexType>

   <!--
   <transfer> response elements.
   All elements must be present at time of poll query
   -->
   <complexType name="trnDataType">
     <sequence>
       <element name="SCDN" type="eppcom:labelType" minOccurs="0" />
       <element name="TCDN" type="eppcom:labelType" minOccurs="0" />
       <element name="VCDNList" type="cdn:VCDNListType"  minOccurs="0" />
     </sequence>
   </complexType>

   <complexType name="VCDNListType">
     <sequence>
       <element name="VCDN" type="eppcom:labelType" maxOccurs="unbounded" />
     </sequence>
   </complexType>

<!--
End of schema.
-->
</schema>

7. Security Considerations

This extension does not introduce new security mechanisms beyond those defined in EPP (RFC 5730). All security considerations of EPP apply.
Servers MUST validate domain names against CNNIC IDN rules (consistent with RFC 5891).

8. Normative References

  • RFC 2119: Key words for requirements
  • RFC 5730: EPP Core Protocol
  • RFC 5731: EPP Domain Name Mapping
  • RFC 5891: IDNA Protocol
  • RFC 7451: EPP Extension IANA Registration
  • cdn-1.0.xsd: CNNIC CDN EPP Extension Schema