<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by University Innsbruck / Department of Computer Science (University Innsbruck / Department of Computer Science) -->
<xs:schema targetNamespace="http://www.wsmo.org/wsml/wsml-syntax#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.wsmo.org/wsml/wsml-syntax#" elementFormDefault="qualified" attributeFormDefault="unqualified">
		<xs:annotation>
				<xs:documentation>
		version: $Revision: 1.24 $
		date: $Date: 2005/07/13 08:59:31 $
		author: Jos de Bruijn, Reto Krummenacher

		this document provides an XML Schema for the XML version of the WSML syntax
		The syntax presented in this document can be used for all WSML variants. The WSML variant is identified through the 'variant' attribute of the root element 'wsml'.

		A modular approach has been chosen when creating this schema. This schema contains the conceptual syntax. Separate schemas have been developed for the WSML identifiers and for the WSML logical expressions. These schemas are therefore included in this schema.
				</xs:documentation>
		</xs:annotation>
		<!-- the following schema contains the definitions for the logical expression syntax-->
		<xs:include schemaLocation="wsml-expr.xsd"/>
		<!-- the following schema contains the definitions for the auxiliary identifiers -->
		<xs:include schemaLocation="wsml-identifiers.xsd"/>
		<!-- import the Dublin Core schema -->
		<xs:import namespace="http://purl.org/dc/elements/1.1/" schemaLocation="http://dublincore.org/schemas/xmls/qdc/2003/04/02/dc.xsd"/>
		<!-- start of the global elements, to be used by all parts of the schema -->
		<xs:element name="wsml">
				<xs:annotation>
						<xs:documentation>
								The element 'wsml' is the preferred root element for any WSML specification.
								It allows the user to explicity specify, through the 'variant' attribute, which WSML variant is used. 
								If the WSML variant has not been specified, the application has to "guess" the variant and in the worst case, 
								WSML-Full will be assumed.
						</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence minOccurs="0" maxOccurs="unbounded">
								<xs:any/>
						</xs:sequence>
						<xs:attribute name="variant" type="wsmlIRI"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="importsOntology" type="wsmlIRI">
				<xs:annotation>
						<xs:documentation>
								This element is used for indicating which ontologies to import. 
								Importing ontologies is the most basic (and inflexible) modularization mechanism. 
								The result of the import is merely the union of the axioms in the importing and the imported ontology.
						</xs:documentation>
				</xs:annotation>
		</xs:element>
		<xs:element name="usesMediator" type="wsmlIRI">
				<xs:annotation>
						<xs:documentation>
								Mediators can be used to mediate between any top-level WSMO elements, i.e. ontologies, goals, and web services. 
								The most frequent use of mediators is to resolve heterogeneity between ontologies. 
								Thus, mediators provide a more flexible way for modularization of ontologies.                           
						</xs:documentation>
				</xs:annotation>
		</xs:element>
		<xs:element name="sharedVariables">
				<xs:annotation>
						<xs:documentation>A list of shared variables for the capability</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element name="variable" type="wsmlVariable" minOccurs="1" maxOccurs="unbounded"/>
						</xs:sequence>
				</xs:complexType>
		</xs:element>
		<xs:element name="precondition" type="axiomType">
				<xs:annotation>
						<xs:documentation>A pre-condition is an axiom describing the state of the information space before executing the web service.</xs:documentation>
				</xs:annotation>
		</xs:element>
		<xs:element name="assumption" type="axiomType">
				<xs:annotation>
						<xs:documentation>An assumption is an axiom describing the state of the world before executing the web service.</xs:documentation>
				</xs:annotation>
		</xs:element>
		<xs:element name="postcondition" type="axiomType">
				<xs:annotation>
						<xs:documentation>A post-condition is an axiom describing the state of the information space after executing the web service.</xs:documentation>
				</xs:annotation>
		</xs:element>
		<xs:element name="effect" type="axiomType">
				<xs:annotation>
						<xs:documentation>An effect is an axiom describing the state of the world after executing the web service.</xs:documentation>
				</xs:annotation>
		</xs:element>
		<xs:element name="choreography" type="wsmlIRI">
				<xs:annotation>
						<xs:documentation>A reference to a choreography description.</xs:documentation>
				</xs:annotation>
		</xs:element>
		<xs:element name="orchestration" type="wsmlIRI">
				<xs:annotation>
						<xs:documentation>A reference to an orchestration description.</xs:documentation>
				</xs:annotation>
		</xs:element>
		<xs:element name="goal">
				<xs:annotation>
						<xs:documentation>A goal specification.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="importsOntology" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="usesMediator" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="capability"/>
								<xs:element ref="interface" minOccurs="0" maxOccurs="unbounded"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<!-- start of the non-functional properties part -->
		<xs:element name="nonFunctionalProperties">
				<xs:annotation>
						<xs:documentation>
								Any element can be used inside the non-functional properties. 
								Non-functional properties function as annotation for the containing element. 
								The recommended set of non-functional properties is the set of elements offered by Dublin Core. 
								WSML further defines one element, named 'version' and a number of web-service specific elements, 
								named 'performance', 'reliability', 'security'. 'scalability', 'robustness', 'accuracy', 'transactional', 
								'trust', 'financial', and 'networkRelatedQoS'.
						</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element ref="attributeValue" minOccurs="0" maxOccurs="unbounded"/>
						</xs:sequence>
				</xs:complexType>
		</xs:element>
		<!-- end of the non-functional properties part -->
		<!-- start of the Web Services part -->
		<xs:element name="webService">
				<xs:annotation>
						<xs:documentation>A web service specification.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="importsOntology" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="usesMediator" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="capability"/>
								<xs:element ref="interface" minOccurs="0" maxOccurs="unbounded"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="capability">
				<xs:annotation>
						<xs:documentation>A web service capability specification.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="importsOntology" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="usesMediator" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="sharedVariables" minOccurs="0"/>
								<xs:element ref="precondition" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="assumption" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="postcondition" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="effect" minOccurs="0" maxOccurs="unbounded"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="interface">
				<xs:annotation>
						<xs:documentation>A web service interface specification.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="importsOntology" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="usesMediator" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="choreography" minOccurs="0" maxOccurs="1"/>
								<xs:element ref="orchestration" minOccurs="0" maxOccurs="1"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<!-- End of the Web Services part -->
		<!-- start of the mediator part -->
		<xs:element name="ooMediator">
				<xs:annotation>
						<xs:documentation>
								The element ooMediator is used for both declaration of ooMediators and reference to existing ooMediators. 
								In case no elements are nested inside the ooMediator, the element is interpreted as a reference to the ooMediator 
								indicated with the attribute 'name'. 
								If elements are nested inside the ooMediator, it is interpreted as a specification of a new ooMediator whose 
								identifier is specified in the attribute 'name'.
						</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="importsOntology" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element name="source" type="wsmlIRI" minOccurs="1" maxOccurs="unbounded"/>
								<xs:element name="target" type="wsmlIRI" minOccurs="0"/>
								<xs:element name="usesService" type="wsmlIRI" minOccurs="0"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="ggMediator">
				<xs:annotation>
						<xs:documentation>A ggMediator specification.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="importsOntology" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="usesMediator" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element name="source" type="wsmlIRI" minOccurs="1" maxOccurs="unbounded"/>
								<xs:element name="target" type="wsmlIRI" minOccurs="0"/>
								<xs:element name="usesService" type="wsmlIRI" minOccurs="0"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="wgMediator">
				<xs:annotation>
						<xs:documentation>A wgMediator specification.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence minOccurs="0">
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="importsOntology" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="usesMediator" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element name="source" type="wsmlIRI" minOccurs="0"/>
								<xs:element name="target" type="wsmlIRI" minOccurs="0"/>
								<xs:element name="usesService" type="wsmlIRI" minOccurs="0"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="wwMediator">
				<xs:annotation>
						<xs:documentation>A wwMediator specification.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="importsOntology" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="usesMediator" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element name="source" type="wsmlIRI" minOccurs="0"/>
								<xs:element name="target" type="wsmlIRI" minOccurs="0"/>
								<xs:element name="usesService" type="wsmlIRI" minOccurs="0"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<!-- end of the mediator part -->
		<!-- start of the ontology part -->
		<xs:element name="ontology">
				<xs:annotation>
						<xs:documentation>An ontology specification.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:choice minOccurs="0" maxOccurs="unbounded">
										<xs:element ref="nonFunctionalProperties"/>
										<xs:element ref="importsOntology"/>
										<xs:element ref="usesMediator"/>
										<xs:element ref="concept"/>
										<xs:element ref="relation"/>
										<xs:element ref="instance"/>
										<xs:element ref="relationInstance"/>
										<xs:element ref="axiom"/>
								</xs:choice>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="axiom" type="axiomType"/>
		<xs:complexType name="axiomType">
				<xs:annotation>
						<xs:documentation>
								An axiom reference or specification. 
								In case no elements are nested inside the axiom, it is merely a reference to an axiom definition.
								Otherwise, it is an axiom specification, consisting of a number of annotations in the form of non-functional 
								properties and the actual logical expression, contained in the definedBy keyword.
						</xs:documentation>
				</xs:annotation>
				<xs:sequence minOccurs="0">
						<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
						<xs:element name="definedBy" type="logicalExpressionType"/>
				</xs:sequence>
				<xs:attribute name="name" type="wsmlIRI" use="optional"/>
		</xs:complexType>
		<xs:element name="concept">
				<xs:annotation>
						<xs:documentation>A concept specification or reference. In case no elements are nested inside the concept, it is a reference to the concept identified by the name. Otherwise, it is a concept specification.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element name="superConcept" type="wsmlIRI" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="attribute" minOccurs="0" maxOccurs="unbounded"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="required"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="attribute">
				<xs:annotation>
						<xs:documentation>A concept can have zero or more attributes. The type of the attribute can be inferring or constraining. A constraining attribute (corresponding to 'ofType') is used to check the type of parameter values; an inferring parameter (corresponding to 'impliesType') is used to derive the type of attribute values. By default an attribute is constraining. Furthermore, an attribute can be symmetric, transitive, reflexive or the inverse of another attribute. Finally, it is possible to specify the minimal and maximal cardinality of an attribute. By default the minimal cardinality is 0 and the maximal cardinality is n (i.e. not restricted).
						</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element name="range" type="wsmlIRI" minOccurs="0"/>
								<xs:element name="symmetric" minOccurs="0"/>
								<xs:element name="transitive" minOccurs="0"/>
								<xs:element name="reflexive" minOccurs="0"/>
								<xs:element name="inverseOf" type="wsmlID" minOccurs="0"/>
								<xs:element name="minCardinality" type="xs:integer" minOccurs="0"/>
								<xs:element name="maxCardinality" type="xs:integer" minOccurs="0"/>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="required"/>
						<xs:attribute name="type" default="constraining">
								<xs:simpleType>
										<xs:restriction base="xs:string">
												<xs:enumeration value="constraining"/>
												<xs:enumeration value="inferring"/>
										</xs:restriction>
								</xs:simpleType>
						</xs:attribute>
				</xs:complexType>
		</xs:element>
		<xs:element name="relation" type="relationType"/>
		<xs:complexType name="relationType">
				<xs:annotation>
						<xs:documentation>
								A relation specification or reference. 
								In case no elements are nested inside the relation, it is a reference to the relation identified by the name. 
								Otherwise, it is a relation specification.
						</xs:documentation>
				</xs:annotation>
				<xs:sequence>
						<xs:element name="superRelation" type="wsmlIRI" minOccurs="0" maxOccurs="unbounded"/>
						<xs:element ref="parameters" minOccurs="0"/>
						<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="name" type="wsmlIRI" use="required"/>
				<xs:attribute name="arity" type="xs:integer" use="optional"/>
		</xs:complexType>
		<xs:element name="parameters">
				<xs:annotation>
						<xs:documentation>The ordered list of parameter types</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element name="parameter" minOccurs="0" maxOccurs="unbounded">
										<xs:complexType>
												<xs:sequence>
														<xs:element name="range" type="wsmlIRI" maxOccurs="unbounded"/>
												</xs:sequence>
												<xs:attribute name="type" default="constraining">
														<xs:simpleType>
																<xs:restriction base="xs:string">
																		<xs:enumeration value="constraining"/>
																		<xs:enumeration value="inferring"/>
																</xs:restriction>
														</xs:simpleType>
												</xs:attribute>
										</xs:complexType>
								</xs:element>
						</xs:sequence>
				</xs:complexType>
		</xs:element>
		<xs:element name="instance">
				<xs:annotation>
						<xs:documentation>
								An instance can be member of zero or more concepts. 
								Furthermore, zero or more attribute values can be associated with this particular instance.
						</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element name="memberOf" type="wsmlIRI" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="attributeValue" minOccurs="0" maxOccurs="unbounded"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="attributeValue">
				<xs:annotation>
						<xs:documentation>
								The value of an attribute is either the identifier of another WSML element or a literal.
						</xs:documentation>
				</xs:annotation>
				<xs:complexType>
						<xs:sequence>
								<xs:element name="value" type="wsmlAnyValue" maxOccurs="unbounded"/>
								<!-- can be instance, ID or literal -->
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="required"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="relationInstance">
				<xs:complexType>
						<xs:annotation>
								<xs:documentation>
								An instance of a relation corresponds with a tuple in the extension of the relation. 
								The values of the parameters are explicitly specified. 
								In case the relation does not have named parameters, the parameter values only have a value and not a name. 
								The order of the XML elements then corresponds with the order of the arguments of the relation.
						</xs:documentation>
						</xs:annotation>
						<xs:sequence>
								<xs:element name="memberOf" type="wsmlIRI" minOccurs="0" maxOccurs="unbounded"/>
								<xs:element ref="nonFunctionalProperties" minOccurs="0"/>
								<xs:element ref="parameterValue" minOccurs="0" maxOccurs="unbounded"/>
						</xs:sequence>
						<xs:attribute name="name" type="wsmlIRI" use="optional"/>
				</xs:complexType>
		</xs:element>
		<xs:element name="parameterValue">
				<xs:complexType>
						<xs:choice>
								<xs:element name="value" type="wsmlAnyValue" maxOccurs="unbounded"/>
						</xs:choice>
				</xs:complexType>
		</xs:element>
		<!-- End of the ontology part -->
</xs:schema>

