<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="chip">
    <xs:complexType>
      <xs:choice>
        <xs:element name="command" type="commandType"/>
        <xs:element name="response" type="responseType"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="commandType">
    <xs:choice>
      <xs:element name="hello"/>
      <xs:element name="login" type="loginType"/>
      <xs:element name="logout"/>
      <xs:element name="infoContact" type="infoType"/>
      <xs:element name="infoTrademark" type="infoType"/>
      <xs:element name="infoDomain" type="infoType"/>
      <xs:element name="infoRegistration" type="infoType"/>
      <xs:element name="createContact" type="createContactType"/>
      <xs:element name="createTrademark" type="createTrademarkType"/>
      <xs:element name="createDomain" type="createDomainType"/>
      <xs:element name="createRegistration" type="createRegistrationType"/>
      <xs:element name="updateContact" type="updateContactType"/>
      <xs:element name="updateTrademark" type="updateTrademarkType"/>
      <xs:element name="updateDomain" type="updateDomainType"/>
      <xs:element name="updateRegistration" type="updateRegistrationType"/>
    </xs:choice>
  </xs:complexType>
  <xs:complexType name="loginType">
    <xs:attribute name="id" use="required" type="xs:NCName"/>
    <xs:attribute name="pw" use="required" type="requiredStringType"/>
  </xs:complexType>
  <xs:complexType name="infoType">
    <xs:sequence>
      <xs:element name="id" maxOccurs="unbounded" type="xs:NMTOKEN"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="createContactType">
    <xs:sequence>
      <xs:element name="name" type="requiredStringType"/>
      <xs:element name="organization" minOccurs="0" type="optionalStringType"/>
      <xs:element name="street" maxOccurs="2" type="requiredStringType"/>
      <xs:element name="sp" minOccurs="0" type="optionalStringType"/>
      <xs:element name="pc" type="postalCodeType"/>
      <xs:element name="city" type="requiredStringType"/>
      <xs:element name="cc" type="ccType"/>
      <xs:element name="phone" minOccurs="0" type="xs:token"/>
      <xs:element name="fax" minOccurs="0" type="xs:token"/>
      <xs:element name="email" type="xs:token"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="updateContactType">
    <xs:sequence>
      <xs:element name="id" type="xs:NMTOKEN"/>
      <xs:element name="chg" type="createContactType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="responseContactType">
    <xs:complexContent>
      <xs:extension base="createContactType">
        <xs:sequence>
          <xs:element name="id" type="xs:NMTOKEN"/>
          <xs:element name="status" type="xs:NMTOKEN"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="createTrademarkType">
    <xs:sequence>
      <xs:element name="id" minOccurs="0" type="xs:NMTOKEN"/>
      <xs:element name="owner" type="xs:token"/>
      <xs:element name="prior-right-on-name" type="requiredStringType"/>
      <xs:element name="right-type" type="priorRightType"/>
      <xs:element name="right-cc" type="ccType"/>
      <xs:element name="nice-class" minOccurs="0" type="optionalStringType"/>
      <xs:element name="nice-class-name" minOccurs="0" type="optionalStringType"/>
      <xs:element name="reg-nr" type="xs:token"/>
      <xs:element name="appl-date" minOccurs="0" type="xs:date"/>
      <xs:element name="reg-date" minOccurs="0" type="xs:date"/>
      <xs:element name="exp-date" minOccurs="0" type="xs:date"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="updateTrademarkType">
    <xs:sequence>
      <xs:element name="id" type="xs:NMTOKEN"/>
      <xs:element name="chg" type="createTrademarkType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="responseTrademarkType">
    <xs:complexContent>
      <xs:extension base="createTrademarkType">
        <xs:sequence>
          <xs:element name="id" type="xs:NMTOKEN"/>
          <xs:element name="status" type="xs:NMTOKEN"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="createDomainType">
    <xs:sequence>
      <xs:element name="trademark" type="xs:token"/>
      <xs:element name="name" type="requiredStringType"/>
      <xs:element name="acename" minOccurs="0" type="optionalStringType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="updateDomainType">
    <xs:sequence>
      <xs:element name="id" type="xs:NMTOKEN"/>
      <xs:element name="chg" type="createDomainType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="responseDomainType">
    <xs:complexContent>
      <xs:extension base="createDomainType">
        <xs:sequence>
          <xs:element name="id" type="xs:NMTOKEN"/>
          <xs:element name="status" type="xs:NMTOKEN"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="createRegistrationType">
    <xs:sequence>
      <xs:element name="domain" type="xs:token"/>
      <xs:element name="tld" type="xs:token"/>
      <xs:element name="registrar" type="xs:token"/>
      <xs:element name="contactType" type="requiredStringType"/>
      <xs:element name="orderReference" minOccurs="0" type="optionalStringType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="updateRegistrationType">
    <xs:sequence>
      <xs:element name="id" type="xs:NMTOKEN"/>
      <xs:element name="chg" type="createRegistrationType"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="responseRegistrationType">
    <xs:complexContent>
      <xs:extension base="createRegistrationType">
        <xs:sequence>
          <xs:element name="id" type="xs:NMTOKEN"/>
          <xs:element name="status" type="xs:NMTOKEN"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:simpleType name="requiredStringType">
    <xs:restriction base="xs:token">
      <xs:minLength value="1"/>
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="optionalStringType">
    <xs:restriction base="xs:token">
      <xs:maxLength value="255"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="postalCodeType">
    <xs:restriction base="xs:token">
      <xs:minLength value="1"/>
      <xs:maxLength value="16"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="ccType">
    <xs:restriction base="xs:token">
      <xs:length value="2"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="priorRightType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="REG-TM-WORD"/>
      <xs:enumeration value="REG-TM-DESIGN"/>
      <xs:enumeration value="REG-TM-COMB-MARK"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="responseType">
    <xs:sequence>
      <xs:element name="code" type="resultCodeType"/>
      <xs:element name="msg" minOccurs="0" type="xs:normalizedString"/>
      <xs:element name="resData" minOccurs="0">
        <xs:complexType>
          <xs:choice>
            <xs:element name="contact" type="responseContactType" maxOccurs="unbounded"/>
            <xs:element name="trademark" type="responseTrademarkType" maxOccurs="unbounded"/>
            <xs:element name="domain" type="responseDomainType" maxOccurs="unbounded"/>
            <xs:element name="registration" type="responseRegistrationType" maxOccurs="unbounded"/>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="resultCodeType">
    <xs:restriction base="xs:unsignedShort">
      <xs:enumeration value="1000"/>    <!-- Success -->
      <xs:enumeration value="1500"/>    <!-- Success  & closing connection -->
      <xs:enumeration value="2001"/>    <!-- Syntax error -->
      <xs:enumeration value="2201"/>    <!-- Not logged in -->
      <xs:enumeration value="2202"/>    <!-- Login failed -->        
      <xs:enumeration value="2303"/>    <!-- Object does not exist -->
      <xs:enumeration value="2306"/>    <!-- Policy error -->
      <xs:enumeration value="2400"/>    <!-- Command failed (internal server error) -->
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
