<!-- Schema defined in the SOAP Version 1.2 Part 2 specification
     Last Call Working Draft:
     http://www.w3.org/TR/2002/WD-soap12-part2-20020621/
     $Id: soap-encoding.xsd,v 1.1 2002/06/14 11:33:44 ylafon Exp $

     Copyright 2001 W3C (Massachusetts Institute of Technology,
     Institut National de Recherche en Informatique et en Automatique,
     Keio University). All Rights Reserved.
     http://www.w3.org/Consortium/Legal/

     This document is governed by the W3C Software License [1] as
     described in the FAQ [2].

     [1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
     [2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
-->

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:tns="http://www.w3.org/2002/06/soap-encoding"
           targetNamespace="http://www.w3.org/2002/06/soap-encoding" >
        
 <xs:attribute name="root" type="xs:boolean" default="0" >
   <xs:annotation>
     <xs:documentation>
	   'root' can be used to distinguish serialization roots from other
       elements that are present in a serialization but are not roots of
       a serialized value graph 
	 </xs:documentation>
   </xs:annotation>
 </xs:attribute>

  <xs:attributeGroup name="commonAttributes" >
    <xs:annotation>
	  <xs:documentation>
	    Attributes common to all elements that function as accessors or 
        represent independent (multi-ref) values.  The ref attribute is
        intended to be used in a manner like CONREF.  That is, the element
        content should be empty iff the ref attribute appears
	  </xs:documentation>
	</xs:annotation>
    <xs:attribute name="id" type="xs:ID" />
    <xs:attribute name="ref" type="xs:IDREF" />
    <xs:anyAttribute namespace="##other" processContents="lax" />
  </xs:attributeGroup>

  <!-- Global Attributes.  The following attributes are intended to be usable via qualified attribute names on any complex type referencing them. -->
       
  <!-- Array attributes. Needed to give the type and dimensions of an array's contents, and the offset for partially-transmitted arrays. -->

  <xs:simpleType name='arraySizeBase' >
    <xs:annotation>
	  <xs:documentation>
	  A list type that allows * and non negative integers. Used as the
    base type for arraySize below.
	  </xs:documentation>
	</xs:annotation>
    <xs:list>
	  <xs:simpleType>
	    <xs:union memberTypes='xs:nonNegativeInteger' >
		  <xs:simpleType>
		    <xs:restriction base='xs:token' >
			  <xs:enumeration value='*' />
			</xs:restriction>
		  </xs:simpleType>
		</xs:union>
	  </xs:simpleType>
	</xs:list>
  </xs:simpleType>


  <xs:simpleType name="arraySize" >
    <xs:annotation>
	  <xs:documentation>
	  Pattern based restriction of the arraySizeBase list type. Used
    as the type of the arraySize attribute. Restricts asterisk ( * )
    to first list item only. Instances must contain at least an
    asterisk ( * ) or a nonNegativeInteger. May contain other 
    nonNegativeIntegers as subsequent list items.
	Valid instances include;
	
	  *
	  1
	  * 2
	  2 2
	  * 2 0

	  </xs:documentation>
	</xs:annotation>
    <xs:restriction base="tns:arraySizeBase" >
	  <xs:pattern value='(\*|(\d+))(\s*\d+)*' />
	</xs:restriction>
  </xs:simpleType>
   
  <xs:attribute name='arraySize' type="tns:arraySize" />
  <xs:attribute name='itemType' type="xs:QName" />
  
  <xs:attributeGroup name="arrayAttributes" >
    <xs:attribute ref="tns:arraySize" />
	<xs:attribute ref='tns:itemType' />
  </xs:attributeGroup>    
  
  <xs:group name="Array" >
    <xs:sequence>
      <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
	</xs:sequence>
  </xs:group>

  <xs:element name="Array" type="tns:Array" />
  <xs:complexType name="Array" >
    <xs:annotation>
	  <xs:documentation>
	   'Array' is a complex type for accessors identified by position 
	  </xs:documentation>
	</xs:annotation>
    <xs:group ref="tns:Array" minOccurs="0" />
    <xs:attributeGroup ref="tns:arrayAttributes" />
    <xs:attributeGroup ref="tns:commonAttributes" />
  </xs:complexType> 

  <!-- 'Struct' is a complex type for accessors identified by name. 
       Constraint: No element may be have the same name as any other,
       nor may any element have a maxOccurs > 1. -->
   
  <xs:element name="Struct" type="tns:Struct" />

  <xs:group name="Struct" >
    <xs:sequence>
      <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
	</xs:sequence>
  </xs:group>

  <xs:complexType name="Struct" >
    <xs:group ref="tns:Struct" minOccurs="0" />
    <xs:attributeGroup ref="tns:commonAttributes"/>
  </xs:complexType> 

  <!-- 'Base64' can be used to serialize binary data using base64 encoding
       as defined in RFC2045 but without the MIME line length limitation. -->

  <xs:simpleType name="base64" >
    <xs:restriction base="xs:base64Binary" />
  </xs:simpleType>

 <!-- Element declarations corresponding to each of the simple types in the 
      XML Schemas Specification. -->

  <xs:element name="duration" type="tns:duration" />
  <xs:complexType name="duration" >
    <xs:simpleContent>
      <xs:extension base="xs:duration" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="dateTime" type="tns:dateTime" />
  <xs:complexType name="dateTime" >
    <xs:simpleContent>
      <xs:extension base="xs:dateTime" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="time" type="tns:time" />
  <xs:complexType name="time" >
    <xs:simpleContent>
      <xs:extension base="xs:time" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="date" type="tns:date" />
  <xs:complexType name="date" >
    <xs:simpleContent>
      <xs:extension base="xs:date" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="gYearMonth" type="tns:gYearMonth" />
  <xs:complexType name="gYearMonth" >
    <xs:simpleContent>
      <xs:extension base="xs:gYearMonth" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="gYear" type="tns:gYear" />
  <xs:complexType name="gYear" >
    <xs:simpleContent>
      <xs:extension base="xs:gYear" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="gMonthDay" type="tns:gMonthDay" />
  <xs:complexType name="gMonthDay" >
    <xs:simpleContent>
      <xs:extension base="xs:gMonthDay" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="gDay" type="tns:gDay" />
  <xs:complexType name="gDay" >
    <xs:simpleContent>
      <xs:extension base="xs:gDay" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="gMonth" type="tns:gMonth" />
  <xs:complexType name="gMonth" >
    <xs:simpleContent>
      <xs:extension base="xs:gMonth" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:element name="boolean" type="tns:boolean" />
  <xs:complexType name="boolean" >
    <xs:simpleContent>
      <xs:extension base="xs:boolean" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="base64Binary" type="tns:base64Binary" />
  <xs:complexType name="base64Binary" >
    <xs:simpleContent>
      <xs:extension base="xs:base64Binary" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="hexBinary" type="tns:hexBinary" />
  <xs:complexType name="hexBinary" >
    <xs:simpleContent>
     <xs:extension base="xs:hexBinary" >
       <xs:attributeGroup ref="tns:commonAttributes" />
     </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="float" type="tns:float" />
  <xs:complexType name="float" >
    <xs:simpleContent>
      <xs:extension base="xs:float" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="double" type="tns:double" />
  <xs:complexType name="double" >
    <xs:simpleContent>
      <xs:extension base="xs:double" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="anyURI" type="tns:anyURI" />
  <xs:complexType name="anyURI" >
    <xs:simpleContent>
      <xs:extension base="xs:anyURI" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="QName" type="tns:QName" />
  <xs:complexType name="QName" >
    <xs:simpleContent>
      <xs:extension base="xs:QName" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="string" type="tns:string" />
  <xs:complexType name="string" >
    <xs:simpleContent>
      <xs:extension base="xs:string" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="normalizedString" type="tns:normalizedString" />
  <xs:complexType name="normalizedString" >
    <xs:simpleContent>
      <xs:extension base="xs:normalizedString" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="token" type="tns:token" />
  <xs:complexType name="token" >
    <xs:simpleContent>
      <xs:extension base="xs:token" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="language" type="tns:language" />
  <xs:complexType name="language" >
    <xs:simpleContent>
      <xs:extension base="xs:language" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="Name" type="tns:Name" />
  <xs:complexType name="Name" >
    <xs:simpleContent>
      <xs:extension base="xs:Name" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="NMTOKEN" type="tns:NMTOKEN" />
  <xs:complexType name="NMTOKEN" >
    <xs:simpleContent>
      <xs:extension base="xs:NMTOKEN" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="NCName" type="tns:NCName" />
  <xs:complexType name="NCName" >
    <xs:simpleContent>
      <xs:extension base="xs:NCName" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 
       For compatibility with XML 1.0 the following element declaration and
       associated complex type definition should NOT be used. It is
       provided here for completenes.
   -->
  <xs:element name="NMTOKENS" type="tns:NMTOKENS" />
  <xs:complexType name="NMTOKENS" >
    <xs:simpleContent>
      <xs:extension base="xs:NMTOKENS" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 
       For compatibility with XML 1.0 the following element declaration and
       associated complex type definition should NOT be used. It is
       provided here for completenes.
   -->
  <xs:element name="ID" type="tns:ID" />
  <xs:complexType name="ID" >
    <xs:simpleContent>
      <xs:extension base="xs:ID" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 
       For compatibility with XML 1.0 the following element declaration and
       associated complex type definition should NOT be used. It is
       provided here for completenes.
   -->
  <xs:element name="IDREF" type="tns:IDREF" />
  <xs:complexType name="IDREF" >
    <xs:simpleContent>
      <xs:extension base="xs:IDREF" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 
       For compatibility with XML 1.0 the following element declaration and
       associated complex type definition should NOT be used. It is
       provided here for completenes.
   -->
  <xs:element name="ENTITY" type="tns:ENTITY" />
  <xs:complexType name="ENTITY" >
    <xs:simpleContent>
      <xs:extension base="xs:ENTITY" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 
       For compatibility with XML 1.0 the following element declaration and
       associated complex type definition should NOT be used. It is
       provided here for completenes.
   -->
  <xs:element name="IDREFS" type="tns:IDREFS" />
  <xs:complexType name="IDREFS" >
    <xs:simpleContent>
      <xs:extension base="xs:IDREFS" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- 
       For compatibility with XML 1.0 the following element declaration and
       associated complex type definition should NOT be used. It is
       provided here for completenes.
   -->
  <xs:element name="ENTITIES" type="tns:ENTITIES" />
  <xs:complexType name="ENTITIES" >
    <xs:simpleContent>
      <xs:extension base="xs:ENTITIES" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="decimal" type="tns:decimal" />
  <xs:complexType name="decimal" >
    <xs:simpleContent>
      <xs:extension base="xs:decimal" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="integer" type="tns:integer" />
  <xs:complexType name="integer" >
    <xs:simpleContent>
      <xs:extension base="xs:integer" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="nonPositiveInteger" type="tns:nonPositiveInteger" />
  <xs:complexType name="nonPositiveInteger" >
    <xs:simpleContent>
      <xs:extension base="xs:nonPositiveInteger" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="negativeInteger" type="tns:negativeInteger" />
  <xs:complexType name="negativeInteger" >
    <xs:simpleContent>
      <xs:extension base="xs:negativeInteger" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="long" type="tns:long" />
  <xs:complexType name="long" >
    <xs:simpleContent>
      <xs:extension base="xs:long" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="int" type="tns:int" />
  <xs:complexType name="int" >
    <xs:simpleContent>
      <xs:extension base="xs:int" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="short" type="tns:short" />
  <xs:complexType name="short" >
    <xs:simpleContent>
      <xs:extension base="xs:short" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="byte" type="tns:byte" />
  <xs:complexType name="byte" >
    <xs:simpleContent>
      <xs:extension base="xs:byte" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="nonNegativeInteger" type="tns:nonNegativeInteger" />
  <xs:complexType name="nonNegativeInteger" >
    <xs:simpleContent>
      <xs:extension base="xs:nonNegativeInteger" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="unsignedLong" type="tns:unsignedLong" />
  <xs:complexType name="unsignedLong" >
    <xs:simpleContent>
      <xs:extension base="xs:unsignedLong" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="unsignedInt" type="tns:unsignedInt" />
  <xs:complexType name="unsignedInt" >
    <xs:simpleContent>
      <xs:extension base="xs:unsignedInt" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="unsignedShort" type="tns:unsignedShort" />
  <xs:complexType name="unsignedShort" >
    <xs:simpleContent>
      <xs:extension base="xs:unsignedShort" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="unsignedByte" type="tns:unsignedByte" />
  <xs:complexType name="unsignedByte" >
    <xs:simpleContent>
      <xs:extension base="xs:unsignedByte" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="positiveInteger" type="tns:positiveInteger" />
  <xs:complexType name="positiveInteger" >
    <xs:simpleContent>
      <xs:extension base="xs:positiveInteger" >
        <xs:attributeGroup ref="tns:commonAttributes" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="anyType" />
</xs:schema>

