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

   <schema targetNamespace="urn:ietf:params:xml:ns:host-1.0"
           xmlns:host="urn:ietf:params:xml:ns:host-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
         host provisioning schema.
       </documentation>
     </annotation>

   <!--
   Child elements found in EPP commands.
   -->
     <element name="check" type="host:mNameType"/>
     <element name="create" type="host:createType"/>
     <element name="delete" type="host:sNameType"/>
     <element name="info" type="host:sNameType"/>
     <element name="update" type="host:updateType"/>

   <!--
   Child elements of the <create> command.
   -->
     <complexType name="createType">
       <sequence>
         <element name="name" type="eppcom:labelType"/>
         <element name="addr" type="host:addrType"
          minOccurs="0" maxOccurs="unbounded"/>
       </sequence>
     </complexType>

     <complexType name="addrType">
       <simpleContent>
         <extension base="host:addrStringType">
           <attribute name="ip" type="host:ipType"
            default="v4"/>
         </extension>
       </simpleContent>
     </complexType>

     <simpleType name="addrStringType">
       <restriction base="token">
         <minLength value="3"/>
         <maxLength value="45"/>
       </restriction>
     </simpleType>

     <simpleType name="ipType">
       <restriction base="token">
         <enumeration value="v4"/>
         <enumeration value="v6"/>
       </restriction>
     </simpleType>

   <!--
   Child elements of the <delete> and <info> commands.
   -->
     <complexType name="sNameType">
       <sequence>
         <element name="name" type="eppcom:labelType"/>
       </sequence>
     </complexType>

   <!--
   Child element of commands that accept multiple names.
   -->
     <complexType name="mNameType">
       <sequence>
         <element name="name" type="eppcom:labelType"
          maxOccurs="unbounded"/>
       </sequence>
     </complexType>
   <!--
   Child elements of the <update> command.
   -->
     <complexType name="updateType">
       <sequence>
         <element name="name" type="eppcom:labelType"/>
         <element name="add" type="host:addRemType"
          minOccurs="0"/>
         <element name="rem" type="host:addRemType"
          minOccurs="0"/>
         <element name="chg" type="host:chgType"
          minOccurs="0"/>
       </sequence>
     </complexType>

   <!--
   Data elements that can be added or removed.
   -->
     <complexType name="addRemType">
       <sequence>
         <element name="addr" type="host:addrType"
          minOccurs="0" maxOccurs="unbounded"/>
         <element name="status" type="host:statusType"
          minOccurs="0" maxOccurs="7"/>
       </sequence>
     </complexType>

   <!--
   Data elements that can be changed.
   -->
     <complexType name="chgType">
       <sequence>
         <element name="name" type="eppcom:labelType"/>
       </sequence>
     </complexType>

   <!--
   Child response elements.
   -->
     <element name="chkData" type="host:chkDataType"/>
     <element name="creData" type="host:creDataType"/>
     <element name="infData" type="host:infDataType"/>
     <element name="panData" type="host:panDataType"/>

   <!--
   <check> response elements.
   -->
     <complexType name="chkDataType">
       <sequence>
         <element name="cd" type="host:checkType"
          maxOccurs="unbounded"/>
       </sequence>
     </complexType>

     <complexType name="checkType">
       <sequence>
         <element name="name" type="host:checkNameType"/>
         <element name="reason" type="eppcom:reasonType"
          minOccurs="0"/>
       </sequence>
     </complexType>

     <complexType name="checkNameType">
       <simpleContent>
         <extension base="eppcom:labelType">
           <attribute name="avail" type="boolean"
            use="required"/>
         </extension>
       </simpleContent>
     </complexType>

   <!--
   <create> response elements.
   -->
     <complexType name="creDataType">
       <sequence>
         <element name="name" type="eppcom:labelType"/>
         <element name="crDate" type="dateTime"/>
       </sequence>
     </complexType>

   <!--
   <info> response elements.
   -->
     <complexType name="infDataType">
       <sequence>
         <element name="name" type="eppcom:labelType"/>
         <element name="roid" type="eppcom:roidType"/>
         <element name="status" type="host:statusType"
          maxOccurs="7"/>
         <element name="addr" type="host:addrType"
          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"/>
       </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="host:statusValueType"
            use="required"/>
           <attribute name="lang" type="language"
            default="en"/>
         </extension>
       </simpleContent>
     </complexType>

     <simpleType name="statusValueType">
       <restriction base="token">
         <enumeration value="clientDeleteProhibited"/>
         <enumeration value="clientUpdateProhibited"/>
         <enumeration value="linked"/>
         <enumeration value="ok"/>
         <enumeration value="pendingCreate"/>
         <enumeration value="pendingDelete"/>
         <enumeration value="pendingTransfer"/>
         <enumeration value="pendingUpdate"/>
         <enumeration value="serverDeleteProhibited"/>
         <enumeration value="serverUpdateProhibited"/>
       </restriction>
     </simpleType>

   <!--
   Pending action notification response elements.
   -->
     <complexType name="panDataType">
       <sequence>
         <element name="name" type="host:paNameType"/>
         <element name="paTRID" type="epp:trIDType"/>
         <element name="paDate" type="dateTime"/>
       </sequence>
     </complexType>
     <complexType name="paNameType">
       <simpleContent>
         <extension base="eppcom:labelType">
           <attribute name="paResult" type="boolean"
            use="required"/>
         </extension>
       </simpleContent>
     </complexType>

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