<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://research.sun.com/wadl"
  xmlns:tns="http://research.sun.com/wadl"
  elementFormDefault="qualified">
  
  <xs:element name="application">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="tns:grammars" minOccurs="0"/>
        <xs:element ref="tns:resources" minOccurs="0"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="tns:method"/>
          <xs:element ref="tns:representation"/>
          <xs:element ref="tns:fault"/>
        </xs:choice>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="grammars">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:include"/>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="resources">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="tns:resource" maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="base" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="resource">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="tns:path_variable" minOccurs="0"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="tns:method"/>
          <xs:element ref="tns:resource"/>
        </xs:choice>
        <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other" processContents="lax"/>
      </xs:sequence>
      <xs:attribute name="uri" type="xs:anyURI"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="method">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="tns:request" minOccurs="0"/>
        <xs:element ref="tns:response" minOccurs="0"/>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID"/>
      <xs:attribute name="name" type="tns:Method"/>
      <xs:attribute name="href" type="xs:anyURI"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:simpleType name="Method">
    <xs:union memberTypes="tns:HTTPMethods xs:NMTOKEN"/>
  </xs:simpleType>
  
  <xs:simpleType name="HTTPMethods">
    <xs:restriction base="xs:NMTOKEN">
      <xs:enumeration value="GET"/>
      <xs:enumeration value="POST"/>
      <xs:enumeration value="PUT"/>
      <xs:enumeration value="HEAD"/>
      <xs:enumeration value="DELETE"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:element name="include">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="request">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="tns:representation" minOccurs="0"
          maxOccurs="unbounded"/>
        <xs:element ref="tns:query_variable" minOccurs="0"
          maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="response">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="tns:representation"/>
          <xs:element ref="tns:fault"/>
        </xs:choice>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="representation">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="tns:representation_variable" minOccurs="0"
          maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID"/>
      <xs:attribute name="element" type="xs:QName"/>
      <xs:attribute name="mediaType" type="xs:string"/>
      <xs:attribute name="href" type="xs:anyURI"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:simpleType name="faultCodeList">
    <xs:list itemType="xs:unsignedInt"/>
  </xs:simpleType>
  
  <xs:element name="fault">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="tns:representation_variable" minOccurs="0"
          maxOccurs="unbounded"/>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID" use="required"/>
      <xs:attribute name="element" type="xs:QName"/>
      <xs:attribute name="status" type="tns:faultCodeList"/>
      <xs:attribute name="mediaType" type="xs:string"/>
      <xs:attribute name="href" type="xs:anyURI"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="query_variable">
    <xs:complexType>
      <xs:sequence>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="name" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="type" type="xs:QName" default="xs:string"/>
      <xs:attribute name="required" type="xs:boolean" default="false"/>
      <xs:attribute name="repeating" type="xs:boolean" default="false"/>
      <xs:attribute name="fixed" type="xs:string"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="path_variable">
    <xs:complexType>
      <xs:sequence>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="name" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="type" type="xs:QName" default="xs:string"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="representation_variable">
    <xs:complexType>
      <xs:sequence>
        <xs:any namespace="##other" processContents="lax"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="name" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="type" type="xs:QName" default="xs:string"/>
      <xs:attribute name="path" type="xs:string"/>
      <xs:attribute name="required" type="xs:boolean" default="false"/>
      <xs:attribute name="repeating" type="xs:boolean" default="false"/>
      <xs:attribute name="fixed" type="xs:string"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

</xs:schema>
