1<?xml version="1.0" encoding="UTF-8"?>
   2<!--
   3 Copyright (c) 2009 IETF Trust and the persons identified as authors
   4   of the code.  All rights reserved.
   5
   6   Redistribution and use in source and binary forms, with or without
   7   modification, are permitted provided that the following conditions
   8   are met:
   9
  10   o  Redistributions of source code must retain the above copyright
  11      notice, this list of conditions and the following disclaimer.
  12
  13   o  Redistributions in binary form must reproduce the above copyright
  14      notice, this list of conditions and the following disclaimer in
  15      the documentation and/or other materials provided with the
  16      distribution.
  17
  18   o  Neither the name of Internet Society, IETF or IETF Trust, nor the
  19      names of specific contributors, may be used to endorse or promote
  20      products derived from this software without specific prior written
  21      permission.
  22
  23   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  24   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  25   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  26   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
  27   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  28   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  29   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  30   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  31   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  32   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  33   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34-->
  35<schema targetNamespace="urn:ietf:params:xml:ns:host-1.0"
  36        xmlns:host="urn:ietf:params:xml:ns:host-1.0"
  37        xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
  38        xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
  39        xmlns="http://www.w3.org/2001/XMLSchema"
  40        elementFormDefault="qualified">
  41
  42    <!--
  43    Import common element types.
  44    -->
  45    <import namespace="urn:ietf:params:xml:ns:eppcom-1.0"
  46            schemaLocation="eppcom-1.0.xsd"/>
  47    <import namespace="urn:ietf:params:xml:ns:epp-1.0"
  48            schemaLocation="epp-1.0.xsd"/>
  49
  50    <annotation>
  51        <documentation>
  52            Extensible Provisioning Protocol v1.0
  53            host provisioning schema.
  54        </documentation>
  55    </annotation>
  56
  57    <!--
  58    Child elements found in EPP commands.
  59    -->
  60    <element name="check" type="host:mNameType"/>
  61    <element name="create" type="host:createType"/>
  62    <element name="delete" type="host:sNameType"/>
  63    <element name="info" type="host:sNameType"/>
  64    <element name="update" type="host:updateType"/>
  65
  66    <!--
  67    Child elements of the <create> command.
  68    -->
  69    <complexType name="createType">
  70        <sequence>
  71            <element name="name" type="eppcom:labelType"/>
  72            <element name="addr" type="host:addrType"
  73                     minOccurs="0" maxOccurs="unbounded"/>
  74        </sequence>
  75    </complexType>
  76
  77    <complexType name="addrType">
  78        <simpleContent>
  79            <extension base="host:addrStringType">
  80                <attribute name="ip" type="host:ipType"
  81                           default="v4"/>
  82            </extension>
  83        </simpleContent>
  84    </complexType>
  85
  86    <simpleType name="addrStringType">
  87        <restriction base="token">
  88            <minLength value="3"/>
  89            <maxLength value="45"/>
  90        </restriction>
  91    </simpleType>
  92
  93    <simpleType name="ipType">
  94        <restriction base="token">
  95            <enumeration value="v4"/>
  96            <enumeration value="v6"/>
  97        </restriction>
  98    </simpleType>
  99
 100    <!--
 101    Child elements of the <delete> and <info> commands.
 102    -->
 103    <complexType name="sNameType">
 104        <sequence>
 105            <element name="name" type="eppcom:labelType"/>
 106        </sequence>
 107    </complexType>
 108
 109    <!--
 110    Child element of commands that accept multiple names.
 111    -->
 112    <complexType name="mNameType">
 113        <sequence>
 114            <element name="name" type="eppcom:labelType"
 115                     maxOccurs="unbounded"/>
 116        </sequence>
 117    </complexType>
 118    <!--
 119    Child elements of the <update> command.
 120    -->
 121    <complexType name="updateType">
 122        <sequence>
 123            <element name="name" type="eppcom:labelType"/>
 124            <element name="add" type="host:addRemType"
 125                     minOccurs="0"/>
 126            <element name="rem" type="host:addRemType"
 127                     minOccurs="0"/>
 128            <element name="chg" type="host:chgType"
 129                     minOccurs="0"/>
 130        </sequence>
 131    </complexType>
 132
 133    <!--
 134    Data elements that can be added or removed.
 135    -->
 136    <complexType name="addRemType">
 137        <sequence>
 138            <element name="addr" type="host:addrType"
 139                     minOccurs="0" maxOccurs="unbounded"/>
 140            <element name="status" type="host:statusType"
 141                     minOccurs="0" maxOccurs="7"/>
 142        </sequence>
 143    </complexType>
 144
 145    <!--
 146    Data elements that can be changed.
 147    -->
 148    <complexType name="chgType">
 149        <sequence>
 150            <element name="name" type="eppcom:labelType"/>
 151        </sequence>
 152    </complexType>
 153
 154    <!--
 155    Child response elements.
 156    -->
 157    <element name="chkData" type="host:chkDataType"/>
 158    <element name="creData" type="host:creDataType"/>
 159    <element name="infData" type="host:infDataType"/>
 160    <element name="panData" type="host:panDataType"/>
 161
 162    <!--
 163    <check> response elements.
 164    -->
 165    <complexType name="chkDataType">
 166        <sequence>
 167            <element name="cd" type="host:checkType"
 168                     maxOccurs="unbounded"/>
 169        </sequence>
 170    </complexType>
 171
 172    <complexType name="checkType">
 173        <sequence>
 174            <element name="name" type="host:checkNameType"/>
 175            <element name="reason" type="eppcom:reasonType"
 176                     minOccurs="0"/>
 177        </sequence>
 178    </complexType>
 179
 180    <complexType name="checkNameType">
 181        <simpleContent>
 182            <extension base="eppcom:labelType">
 183                <attribute name="avail" type="boolean"
 184                           use="required"/>
 185            </extension>
 186        </simpleContent>
 187    </complexType>
 188
 189    <!--
 190    <create> response elements.
 191    -->
 192    <complexType name="creDataType">
 193        <sequence>
 194            <element name="name" type="eppcom:labelType"/>
 195            <element name="crDate" type="dateTime"/>
 196        </sequence>
 197    </complexType>
 198
 199    <!--
 200    <info> response elements.
 201    -->
 202    <complexType name="infDataType">
 203        <sequence>
 204            <element name="name" type="eppcom:labelType"/>
 205            <element name="roid" type="eppcom:roidType"/>
 206            <element name="status" type="host:statusType"
 207                     maxOccurs="7"/>
 208            <element name="addr" type="host:addrType"
 209                     minOccurs="0" maxOccurs="unbounded"/>
 210            <element name="clID" type="eppcom:clIDType"/>
 211            <element name="crID" type="eppcom:clIDType"/>
 212            <element name="crDate" type="dateTime"/>
 213            <element name="upID" type="eppcom:clIDType"
 214                     minOccurs="0"/>
 215            <element name="upDate" type="dateTime"
 216                     minOccurs="0"/>
 217            <element name="trDate" type="dateTime"
 218                     minOccurs="0"/>
 219        </sequence>
 220    </complexType>
 221
 222    <!--
 223    Status is a combination of attributes and an optional human-readable
 224    message that may be expressed in languages other than English.
 225    -->
 226    <complexType name="statusType">
 227        <simpleContent>
 228            <extension base="normalizedString">
 229                <attribute name="s" type="host:statusValueType"
 230                           use="required"/>
 231                <attribute name="lang" type="language"
 232                           default="en"/>
 233            </extension>
 234        </simpleContent>
 235    </complexType>
 236
 237    <simpleType name="statusValueType">
 238        <restriction base="token">
 239            <enumeration value="clientDeleteProhibited"/>
 240            <enumeration value="clientUpdateProhibited"/>
 241            <enumeration value="linked"/>
 242            <enumeration value="ok"/>
 243            <enumeration value="pendingCreate"/>
 244            <enumeration value="pendingDelete"/>
 245            <enumeration value="pendingTransfer"/>
 246            <enumeration value="pendingUpdate"/>
 247            <enumeration value="serverDeleteProhibited"/>
 248            <enumeration value="serverUpdateProhibited"/>
 249        </restriction>
 250    </simpleType>
 251
 252    <!--
 253    Pending action notification response elements.
 254    -->
 255    <complexType name="panDataType">
 256        <sequence>
 257            <element name="name" type="host:paNameType"/>
 258            <element name="paTRID" type="epp:trIDType"/>
 259            <element name="paDate" type="dateTime"/>
 260        </sequence>
 261    </complexType>
 262    <complexType name="paNameType">
 263        <simpleContent>
 264            <extension base="eppcom:labelType">
 265                <attribute name="paResult" type="boolean"
 266                           use="required"/>
 267            </extension>
 268        </simpleContent>
 269    </complexType>
 270
 271    <!--
 272    End of schema.
 273    -->
 274</schema>
 275
 276