<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:ietf:params:xml:ns:xriAU-1.0"
        xmlns:xriAU="urn:ietf:params:xml:ns:xriAU-1.0"
        xmlns:xriCommon="urn:ietf:params:xml:ns:xriCommon-1.0"
        xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
        xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
        xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"
        xmlns="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">

<!--
Import common element types.
-->
  <import namespace="urn:ietf:params:xml:ns:epp-1.0"
          schemaLocation="epp-1.0.xsd"/>
  <import namespace="urn:ietf:params:xml:ns:eppcom-1.0"
          schemaLocation="eppcom-1.0.xsd"/>
  <import namespace="urn:ietf:params:xml:ns:contact-1.0"
          schemaLocation="contact-1.0.xsd"/>
  <import namespace="urn:ietf:params:xml:ns:xriCommon-1.0"
          schemaLocation="xriCommon-1.0.xsd"/>

  <annotation>
    <documentation>
      Extensible Provisioning Protocol v1.0
      XML schema for XRI Authority provisioning.
    </documentation>
  </annotation>

<!--
Child elements found in EPP commands.
-->
  <element name="check"    type="xriAU:mIdType"/>
  <element name="create"   type="xriAU:createType"/>
  <element name="delete"   type="xriAU:sIdType"/>
  <element name="info"     type="xriAU:infoType"/>
  <element name="transfer" type="xriAU:transferType"/>
  <element name="update"   type="xriAU:updateType"/>

<!--
Child element of commands that require a single i-name
-->
  <complexType name="sIdType">
    <sequence>
      <element name="authId"   type="xriCommon:authIdType"/>
      <element name="authInfo" type="xriAU:authInfoType" minOccurs="0"/>
    </sequence>
  </complexType>

<!--
Child element of commands that accept multiple i-names
-->
  <complexType name="mIdType">
    <sequence>
      <element name="authId" type="xriCommon:authIdType"
       maxOccurs="unbounded"/>
    </sequence>
  </complexType>

<!--
Child elements of the <create> command.
-->
  <complexType name="createType">
    <sequence>
      <element name="authId"       type="xriCommon:authIdType"/>
      <element name="isEscrow"     type="boolean"
       minOccurs="0"/>
      <element name="isContact"    type="boolean"
       minOccurs="0"/>
      <element name="escrowAgent"  type="xriAU:trusteeType"
       minOccurs="0"/>
      <element name="contactAgent" type="xriAU:trusteeType"
       minOccurs="0"/>
      <element name="socialData"   type="xriAU:socialDataType"
       minOccurs="0"/>
      <element name="authInfo"     type="xriAU:authInfoType"/>
    </sequence>
  </complexType>

  <complexType name="socialDataType">
    <sequence>
      <element name="postalInfo" type="xriAU:postalInfoType"
       minOccurs="0"/>
      <element name="voice"      type="contact:e164Type"
       minOccurs="0" maxOccurs="2"/>
      <element name="fax"        type="contact:e164Type"
       minOccurs="0"/>
      <element name="pager"      type="contact:e164Type"
       minOccurs="0"/>
      <element name="email"      type="eppcom:minTokenType"
       minOccurs="0" maxOccurs="2"/>
    </sequence>
  </complexType>

  <complexType name="postalInfoType">
    <sequence>
      <element name="name" type="contact:postalLineType"
       minOccurs="0"/>
      <element name="org"  type="contact:optPostalLineType"
       minOccurs="0"/>
      <element name="addr" type="xriAU:addrType"
       minOccurs="0"/>
    </sequence>
  </complexType>

<!--
Child elements of the <info> command.
-->
  <complexType name="infoType">
    <sequence>
      <element name="authId"   type="xriAU:infoAuthIdType"/>
      <element name="authInfo" type="xriAU:authInfoType"
       minOccurs="0"/>
    </sequence>
  </complexType>

  <complexType name="infoAuthIdType">
    <simpleContent>
      <extension base="xriCommon:authIdType">
        <attribute name="control" type="xriAU:controlType"
         default="none"/>
      </extension>
    </simpleContent>
  </complexType>

  <simpleType name="controlType">
    <restriction base="token">
      <enumeration value="all"/>
      <enumeration value="iname"/>
      <enumeration value="inumber"/>
      <enumeration value="iservice"/>
      <enumeration value="none"/>
    </restriction>
  </simpleType>

<!--
Child elements of the <transfer> command.
-->
  <complexType name="transferType">
    <sequence>
      <element name="authId"   type="xriCommon:authIdType"/>
      <element name="target"   type="xriAU:authorityType"
       minOccurs="0"/>
      <element name="trToken"  type="xriCommon:trTokenType"
       minOccurs="0"/>
      <element name="authInfo" type="xriAU:authInfoType"
       minOccurs="0"/>
    </sequence>
  </complexType>

  <complexType name="authorityType">
    <sequence>
      <element name="authId"   type="xriCommon:authIdType"/>
      <element name="authInfo" type="xriAU:authInfoType"
       minOccurs="0"/>
    </sequence>
  </complexType>

<!--
Child elements of the <update> command.
-->
  <complexType name="updateType">
    <sequence>
      <element name="authId"   type="xriCommon:authIdType"/>
      <element name="add"      type="xriAU:addType" minOccurs="0"/>
      <element name="rem"      type="xriAU:remType" minOccurs="0"/>
      <element name="chg"      type="xriAU:chgType" minOccurs="0"/>
      <element name="authInfo" type="xriAU:authInfoType"
       minOccurs="0"/>
    </sequence>
  </complexType>

<!--
Data elements that can be added.
-->
  <complexType name="addType">
    <sequence>
      <element name="socialData" type="xriAU:socialDataType"
       minOccurs="0"/>
      <element name="trustee"    type="xriAU:trusteeType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="ref"         type="xriAU:refAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="redirect"         type="xriAU:uriAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="equivID"         type="xriAU:synonymAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="canonicalEquivID" type="anyURI"
       minOccurs="0"/>
      <element name="sep"        type="xriAU:sepAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="status"     type="xriAU:statusType"
       minOccurs="0" maxOccurs="14"/>
    </sequence>
  </complexType>

  <complexType name="trusteeType">
    <sequence>
      <choice>
        <element name="authId"  type="xriCommon:authIdType"/>
        <element name="inumber" type="xriCommon:inumberType"/>
      </choice>
    </sequence>
    <attribute name="external" type="boolean"
     use="optional" default="0"/>
  </complexType>

  <complexType name="trusteeInfType">
    <sequence>
      <choice>
        <element name="authId"  type="xriCommon:authIdType"/>
        <element name="inumber" type="xriCommon:inumberType"/>
      </choice>
    </sequence>
    <attribute name="external" type="boolean" use="required"/>
  </complexType>
<!--
Data elements that can be removed.
-->
  <complexType name="remType">
    <sequence>
      <element name="socialData" type="xriAU:remSocialDataType"
       minOccurs="0"/>
      <element name="trustee"    type="xriAU:trusteeType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="ref"        type="xriCommon:xriType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="redirect"   type="anyURI"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="equivID"    type="anyURI"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="canonicalEquivID" type="anyURI"
       minOccurs="0"/>
      <element name="sep"        type="xriAU:sepRemType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="status"     type="xriAU:statusType"
       minOccurs="0" maxOccurs="10"/>
    </sequence>
  </complexType>

  <complexType name="remSocialDataType" final="#all"/>

<!--
Reference Types
-->
  <complexType name="refAddType">
    <simpleContent>
      <extension base="xriCommon:xriType">
        <attribute name="priority" type="unsignedShort"
         use="optional" default="10"/>
      </extension>
    </simpleContent>
  </complexType>

  <complexType name="refInfType">
    <simpleContent>
      <extension base="xriCommon:xriType">
        <attribute name="priority" type="unsignedShort"
         use="optional"/>
      </extension>
    </simpleContent>
  </complexType>

<!--
Synonym Types
-->
  <complexType name="synonymAddType">
    <simpleContent>
      <extension base="anyURI">
        <attribute name="priority" type="unsignedShort"
         use="optional" default="10"/>
      </extension>
    </simpleContent>
  </complexType>

<!--
Data elements that can be changed.
-->
  <complexType name="chgType">
    <sequence>
      <element name="authId"       type="xriCommon:authIdType"
       minOccurs="0"/>
      <element name="isEscrow"     type="boolean"
       minOccurs="0"/>
      <element name="isContact"    type="boolean"
       minOccurs="0"/>
      <element name="escrowAgent"  type="xriAU:trusteeType"
       minOccurs="0"/>
      <element name="contactAgent" type="xriAU:trusteeType"
       minOccurs="0"/>
      <element name="socialData"   type="xriAU:chgSocialDataType"
       minOccurs="0"/>
      <element name="authInfo"     type="xriAU:authInfoType"
       minOccurs="0"/>
      <element name="extension"    type="string"
       minOccurs="0"/>
    </sequence>
  </complexType>

  <complexType name="chgSocialDataType">
    <sequence>
      <element name="postalInfo" type="xriAU:chgPostalInfoType"
       minOccurs="0"/>
      <element name="voice"      type="xriAU:optE164Type"
       minOccurs="0" maxOccurs="2"/>
      <element name="fax"        type="xriAU:optE164Type"
       minOccurs="0"/>
      <element name="pager"      type="xriAU:optE164Type"
       minOccurs="0"/>
      <element name="email"      type="xriAU:optTokenType"
       minOccurs="0" maxOccurs="2"/>
    </sequence>
  </complexType>

  <complexType name="optE164Type">
    <simpleContent>
      <restriction base="contact:e164Type">
        <pattern value=""/>
        <pattern value="(\+[0-9]{1,3}\.[0-9]{1,14})?"/>
        <minLength value="0"/>
        <maxLength value="17"/>
      </restriction>
    </simpleContent>
  </complexType>

  <simpleType name="optTokenType">
    <restriction base="token">
      <minLength value="0"/>
    </restriction>
  </simpleType>

  <complexType name="chgPostalInfoType">
    <sequence>
      <element name="name" type="contact:postalLineType"
       minOccurs="0"/>
      <element name="org"  type="contact:optPostalLineType"
       minOccurs="0"/>
      <element name="addr" type="xriAU:addrType"
       minOccurs="0"/>
    </sequence>
  </complexType>

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

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

  <complexType name="checkType">
    <sequence>
      <element name="authId" type="xriAU:checkIdType"/>
      <element name="reason" type="eppcom:reasonType"
       minOccurs="0"/>
    </sequence>
  </complexType>

  <complexType name="checkIdType">
    <simpleContent>
      <extension base="xriCommon:authIdType">
        <attribute name="avail" type="boolean"
         use="required"/>
      </extension>
    </simpleContent>
  </complexType>

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

<!--
<info> response elements.
-->
  <complexType name="infDataType">
    <sequence>
      <element name="authId"       type="xriCommon:authIdType"/>
      <element name="isEscrow"     type="boolean"
       minOccurs="0"/>
      <element name="isContact"    type="boolean"
       minOccurs="0"/>
      <element name="escrowAgent"  type="xriAU:trusteeType"
       minOccurs="0"/>
      <element name="contactAgent" type="xriAU:trusteeType"
       minOccurs="0"/>
      <element name="roid"         type="eppcom:roidType"/>
      <element name="status"       type="xriAU:statusType" maxOccurs="13"/>
      <element name="socialData"   type="xriAU:socialDataType"
       minOccurs="0"/>
      <element name="trustee"      type="xriAU:trusteeInfType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="ref"          type="xriAU:refInfType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="redirect"     type="xriAU:uriInfType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="equivID"      type="xriAU:synonymAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="canonicalEquivID" type="anyURI"
       minOccurs="0"/>
      <element name="sep"        type="xriAU:sepInfType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="iname"      type="xriCommon:inameType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="inumber"    type="xriAU:inumberType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="iservice"   type="xriCommon:iServiceIdType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="extension"  type="string" minOccurs="0"/>
      <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="xriAU:authInfoType"
       minOccurs="0"/>
    </sequence>
  </complexType>

  <complexType name="inumberType">
    <simpleContent>
      <extension base="xriCommon:inumberType">
        <attribute name="priority" type="unsignedShort"
         use="optional"/>
      </extension>
    </simpleContent>
  </complexType>

<!--
<transfer> response elements.
-->
  <complexType name="trnDataType">
    <sequence>
      <element name="authId" minOccurs="0" type="xriCommon:authIdType"/>
      <choice minOccurs="0">
         <element name="source" type="xriCommon:authIdType"/>
         <element name="target" type="xriCommon:authIdType"/>
      </choice>
      <element name="trToken"   type="xriCommon:trTokenType"
       minOccurs="0"/>
      <element name="trStatus"  type="xriCommon: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>

<!--
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="xriAU:statusValueType"
         use="required"/>
        <attribute name="lang" type="language"
         default="en"/>
      </extension>
    </simpleContent>
  </complexType>

  <simpleType name="statusValueType">
    <restriction base="token">
      <enumeration value="clientAssociateProhibited"/>
      <enumeration value="clientDeleteProhibited"/>
      <enumeration value="clientHold"/>
      <enumeration value="clientTransferProhibited"/>
      <enumeration value="clientUpdateProhibited"/>
      <enumeration value="linked"/>
      <enumeration value="ok"/>
      <enumeration value="pendingCreate"/>
      <enumeration value="pendingDelete"/>
      <enumeration value="pendingINameTransfer"/>
      <enumeration value="pendingUpdate"/>
      <enumeration value="pendingTransfer"/>
      <enumeration value="serverAssociateProhibited"/>
      <enumeration value="serverDeleteProhibited"/>
      <enumeration value="serverHold"/>
      <enumeration value="serverTransferProhibited"/>
      <enumeration value="serverUpdateProhibited"/>
    </restriction>
  </simpleType>

<!--
Pending action notification response elements.
-->
  <complexType name="panDataType">
    <sequence>
      <element name="authId" type="xriAU:paIdType"/>
      <element name="paTRID" type="epp:trIDType"/>
      <element name="paDate" type="dateTime"/>
    </sequence>
  </complexType>

  <complexType name="paIdType">
    <simpleContent>
      <extension base="xriCommon:authIdType">
        <attribute name="paResult" type="boolean"
         use="required"/>
      </extension>
    </simpleContent>
  </complexType>

<!--
Address type.
-->

  <complexType name="addrType">
    <sequence>
      <element name="street" type="contact:optPostalLineType"
       minOccurs="0" maxOccurs="3"/>
      <element name="city"   type="contact:postalLineType"
       minOccurs="0"/>
      <element name="sp"     type="contact:optPostalLineType"
       minOccurs="0"/>
      <element name="pc"     type="contact:pcType" minOccurs="0"/>
      <element name="cc"     type="contact:ccType" minOccurs="0"/>
    </sequence>
  </complexType>

<!--
Auth Info type.
-->
  <complexType name="authInfoType">
    <choice>
      <element name="pw"  type="eppcom:pwAuthInfoType"/>
      <element name="ext" type="eppcom:extAuthInfoType"/>
    </choice>
  </complexType>

<!--
Authority/Service Endpoint (SEP) related types.
-->


  <simpleType name="appendAttr">
    <restriction base="string">
      <enumeration value="none"  />
      <enumeration value="local" />
      <enumeration value="authority" />
      <enumeration value="path"  />
      <enumeration value="query" />
      <enumeration value="qxri"  />
    </restriction>
  </simpleType>

  <complexType name="uriAddType">
    <simpleContent>
      <extension base="anyURI">
        <attribute name="priority" type="unsignedShort"
         use="optional" default="10"/>
        <attribute name="append" type="xriAU:appendAttr"
         use="optional" default="local"/>
      </extension>
    </simpleContent>
  </complexType>

  <complexType name="uriInfType">
    <simpleContent>
      <extension base="anyURI">
        <attribute name="priority" type="unsignedShort"
         use="optional"/>
        <attribute name="append" type="xriAU:appendAttr"
         use="optional" default="local"/>
      </extension>
    </simpleContent>
  </complexType>

  <complexType name="sepAddType">
    <sequence>
      <element name="id"        type="xriAU:idType"/>
      <element name="priority"  type="unsignedShort" minOccurs="0"/>
      <element name="authority" type="xriCommon:xriType" minOccurs="0"/>
      <element name="type"      type="xriAU:sepTypeType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="path" type="xriAU:sepPathType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="uri"       type="xriAU:uriAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="mediaType" type="xriAU:sepMediaTypeType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="ref"         type="xriAU:refAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="redirect"         type="xriAU:uriAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="localID"         type="xriAU:synonymAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="extension" type="string" minOccurs="0"/>
    </sequence>
  </complexType>

  <complexType name="sepInfType">
    <sequence>
      <element name="id"        type="xriAU:idType"/>
      <element name="priority"  type="unsignedShort" minOccurs="0"/>
      <element name="authority" type="xriCommon:xriType" minOccurs="0"/>
      <element name="type"      type="xriAU:sepTypeType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="path" type="xriAU:sepPathType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="uri"       type="xriAU:uriAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="mediaType" type="xriAU:sepMediaTypeType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="ref"         type="xriAU:refAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="redirect"         type="xriAU:uriAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="localID"         type="xriAU:synonymAddType"
       minOccurs="0" maxOccurs="unbounded"/>
      <element name="extension" type="string" minOccurs="0"/>
    </sequence>
  </complexType>

  <complexType name="sepRemType">
    <sequence>
      <element name="id"        type="xriAU:idType"/>
    </sequence>
  </complexType>

  <simpleType name="idType">
    <restriction base="token">
      <minLength value="1"/>
      <maxLength value="32"/>
    </restriction>
  </simpleType>

  <simpleType name="matchAttr">
    <restriction base="string">
      <enumeration value="default"  />
      <enumeration value="any"      />
      <enumeration value="non-null" />
      <enumeration value="null"     />
    </restriction>
  </simpleType>

  <complexType name="sepTypeType">
    <simpleContent>
      <extension base="string">
        <attribute name="match" type="xriAU:matchAttr"
          use="optional" />
        <attribute name="select" type="boolean"
          use="optional" default="false" />
      </extension>
    </simpleContent>
  </complexType>

  <complexType name="sepPathType">
    <simpleContent>
      <extension base="string">
        <attribute name="match" type="xriAU:matchAttr"
          use="optional" />
        <attribute name="select" type="boolean"
          use="optional" default="false" />
      </extension>
    </simpleContent>
  </complexType>

  <complexType name="sepMediaTypeType">
    <simpleContent>
      <extension base="string">
        <attribute name="match" type="xriAU:matchAttr"
          use="optional" />
        <attribute name="select" type="boolean"
          use="optional" default="false" />
      </extension>
    </simpleContent>
  </complexType>

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