<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
    attributeFormDefault="qualified"
    elementFormDefault="qualified"
    targetNamespace="http://gjxdmtools.gtri.gatech.edu/wantList/1"
    xmlns:w="http://gjxdmtools.gtri.gatech.edu/wantList/1"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="wantList" type="w:wantListType"/>

  <xsd:complexType name="wantListType">
    <xsd:sequence>
      <xsd:element name="attribute" type="w:attributeType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="element" type="w:elementType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="type" type="w:typeType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="release" use="required" type="w:versionType"/>
  </xsd:complexType>

  <xsd:simpleType name="versionType">
    <xsd:restriction base="xsd:token">
      <xsd:pattern value="[0-9]+(\.[0-9]+)*((alpha|beta|rc)[0-9]+)?"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:complexType name="attributeType">
    <xsd:attribute name="prefix" use="required" type="xsd:NCName"/>
    <xsd:attribute name="name" use="required" type="xsd:NCName"/>
    <xsd:attribute name="qualifier" use="optional" type="xsd:NCName"/>
  </xsd:complexType>

  <xsd:complexType name="elementType">
    <xsd:attribute name="prefix" use="required" type="xsd:NCName"/>
    <xsd:attribute name="name" use="required" type="xsd:NCName"/>
    <xsd:attribute name="qualifier" use="optional" type="xsd:NCName"/>
    <xsd:attribute name="isReference" use="required" type="xsd:boolean"/>
  </xsd:complexType>

  <xsd:complexType name="typeType">
    <xsd:sequence>
      <xsd:element name="attributeInType" type="w:attributeInTypeType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="elementInType" type="w:elementInTypeType" minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="facet" type="w:facetType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="prefix" use="required" type="xsd:NCName"/>
    <xsd:attribute name="name" use="required" type="xsd:NCName"/>
    <xsd:attribute name="isRequested" use="required" type="xsd:boolean"/>
  </xsd:complexType>

  <xsd:complexType name="attributeInTypeType">
    <xsd:attribute name="prefix" use="required" type="xsd:NCName"/>
    <xsd:attribute name="name" use="required" type="xsd:NCName"/>
    <xsd:attribute name="qualifier" use="optional" type="xsd:NCName"/>
  </xsd:complexType>

  <xsd:complexType name="elementInTypeType">
    <xsd:attribute name="prefix" use="required" type="xsd:NCName"/>
    <xsd:attribute name="name" use="required" type="xsd:NCName"/>
    <xsd:attribute name="qualifier" use="optional" type="xsd:NCName"/>
    <xsd:attribute name="isReference" use="required" type="xsd:boolean"/>
  </xsd:complexType>

  <xsd:complexType name="facetType">
    <xsd:attribute name="facet" use="required" type="w:facetFacetType"/>
    <xsd:attribute name="value" use="required"/>
  </xsd:complexType>

  <xsd:simpleType name="facetFacetType">
    <xsd:restriction base="xsd:token">
      <xsd:enumeration value="minExclusive"/>
      <xsd:enumeration value="minInclusive"/>
      <xsd:enumeration value="maxExclusive"/>
      <xsd:enumeration value="maxInclusive"/>
      <xsd:enumeration value="totalDigits"/>
      <xsd:enumeration value="fractionDigits"/>
      <xsd:enumeration value="length"/>
      <xsd:enumeration value="minLength"/>
      <xsd:enumeration value="maxLength"/>
      <xsd:enumeration value="enumeration"/>
      <xsd:enumeration value="whiteSpace"/>
      <xsd:enumeration value="pattern"/>
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>
