<!--************************************************************-->
<!--  draft_pstc_schema_schema_03.xsd                           -->
<!--                                                            -->
<!--  Draft request/response schema for SPML. Requires the      -->
<!--  SPML Core schema.                                         -->
<!--                                                            -->
<!--  Editors:                                                  -->
<!--    Jeff Bohren (jbohren@opennetwork.com)                   -->
<!--    Yoav Kirsch (Yoav.Kirsch@businesslayers.com)            -->
<!--                                                            -->
<!--                                                            -->
<!-- Copyright (C) The Organization for the Advancement of      -->
<!-- Structured Information Standards [OASIS] 2003. All Rights  -->
<!-- Reserved.                                                  -->
<!--************************************************************-->

<xsd:schema 	targetNamespace="urn:oasis:names:tc:SPML:1:0:schema" 
		xmlns ="urn:oasis:names:tc:SPML:1:0:schema"
		xmlns:spml="urn:oasis:names:tc:SPML:1:0:core"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema"
		xmlns:dsml="urn:oasis:names:tc:DSML:2:0:core">
		
        <xsd:import namespace="urn:oasis:names:tc:DSML:2:0:core" 
        	schemaLocation="http://www.oasis-open.org/committees/dsml/docs/DSMLv2.xsd" />
        
        <xsd:import namespace="urn:oasis:names:tc:SPML:1:0:core" 
        	schemaLocation="draft_pstc_schema_core_09.xsd" />
        	
	<xsd:complexType name="Properties">
		<xsd:sequence>
			<xsd:element name="attr" type="dsml:DsmlAttr" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>  


 
 	<xsd:complexType name="AttributeDefinition">
			<xsd:sequence>
				<xsd:element name="properties" type="Properties" minOccurs="0" maxOccurs="1"/>
			</xsd:sequence>
			<xsd:attribute name="name" type="dsml:AttributeDescriptionValue" use="required"/>
			<xsd:attribute name="description" type="xsd:string" use="optional"/>
			<xsd:attribute name="multivalued" type="xsd:boolean" use="optional" default="false"/>
			<xsd:attribute name="type" type="xsd:string" use="optional" default="xsd:string"/>
	</xsd:complexType>
	
 	<xsd:complexType name="AttributeDefinitionReference">
		<xsd:sequence>
			<xsd:element name="providerIdentifier" type="spml:ProviderIdentifier" minOccurs="0" maxOccurs="1" />
			<xsd:element name="schemaIdentifier" type="SchemaIdentifier" minOccurs="0" maxOccurs="1" />
		</xsd:sequence>
 		<xsd:attribute name="name" type="dsml:AttributeDescriptionValue" use="required"/>
		<xsd:attribute name="required" type="xsd:boolean" use="optional" default="false"/>
	</xsd:complexType>

	<xsd:complexType name="AttributeDefinitionReferences">
		<xsd:sequence>
			<xsd:element name="attributeDefinitionReference" type="AttributeDefinitionReference" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>  


 	<xsd:complexType name="ObjectClassDefinitionReference">
		<xsd:sequence>
			<xsd:element name="providerIdentifier" type="spml:ProviderIdentifier" minOccurs="0" maxOccurs="1" />
			<xsd:element name="schemaIdentifier" type="SchemaIdentifier" minOccurs="0" maxOccurs="1" />
		</xsd:sequence>
 		<xsd:attribute name="name" type="dsml:AttributeDescriptionValue" use="required"/>
	</xsd:complexType>

	<xsd:complexType name="ObjectClassDefinitionReferences">
		<xsd:sequence>
			<xsd:element name="objectClassDefinitionReference" type="ObjectClassDefinitionReference" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>  


 	<xsd:complexType name="ObjectClassDefinition">
 		<xsd:sequence>
			<xsd:element name="properties" type="Properties" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="memberAttributes" type="AttributeDefinitionReferences" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="superiorClasses" type="ObjectClassDefinitionReferences" minOccurs="0" maxOccurs="1"/>
		</xsd:sequence>
 		<xsd:attribute name="name" type="dsml:AttributeDescriptionValue" use="required"/>
 		<xsd:attribute name="description" type="xsd:string" use="optional"/>
	</xsd:complexType>

 	<xsd:complexType name="ExtendedRequestDefinition">
 		<xsd:sequence>
			<xsd:element name="operationIdentifier" type="spml:OperationIdentifier" minOccurs="1" maxOccurs="1" />
			<xsd:element name="properties" type="Properties" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="parameters" type="AttributeDefinitionReferences" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="returnValues" type="AttributeDefinitionReferences" minOccurs="0" maxOccurs="1"/>
		</xsd:sequence>
 		<xsd:attribute name="description" type="xsd:string" use="optional"/>
 	</xsd:complexType>

	
	<xsd:complexType name="SchemaIdentifier">
		<xsd:sequence>
			<xsd:element name="schemaID" type="xsd:anyType" />
		</xsd:sequence>

		<xsd:attribute name="schemaIDType" use="required">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#URN"/>
					<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#OID"/>
					<xsd:enumeration value="urn:oasis:names:tc:SPML:1.0:core#GenericString"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		
	</xsd:complexType>
	

 	<xsd:complexType name="Schema">
		<xsd:sequence>
			<xsd:element name="providerIdentifier" type="spml:ProviderIdentifier" minOccurs="0" maxOccurs="1" />
			<xsd:element name="schemaIdentifier" type="SchemaIdentifier" minOccurs="1" maxOccurs="1" />
			<xsd:element name="objectClassDefinition" type="ObjectClassDefinition" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element name="attributeDefinition" type="AttributeDefinition" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element name="extendedRequestDefinition" type="ExtendedRequestDefinition" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
		
		<xsd:attribute name="majorVersion" type="xsd:string"/>
		<xsd:attribute name="minorVersion" type="xsd:string"/>
		
	</xsd:complexType>
	 
	<xsd:complexType name="SchemaRequest">
		<xsd:complexContent>
			<xsd:extension base="spml:SpmlRequest">
 				<xsd:sequence>
 					<xsd:element name="providerIdentifier" type="spml:ProviderIdentifier" minOccurs="0" maxOccurs="1"/>
					<xsd:element name="schemaIdentifier" type="SchemaIdentifier" minOccurs="0" maxOccurs="1"/>
 				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	 
	<xsd:complexType name="SchemaResponse">
		<xsd:complexContent>
			<xsd:extension base="spml:SpmlResponse">
 				<xsd:sequence>
 					<xsd:element name="schema" type="Schema" minOccurs="1" maxOccurs="unbounded"/>
 				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	
	<xsd:element name="schema" type="Schema" />

</xsd:schema>

