<?xml version="1.0"?>
<!-- $Id: tapir.xsd 1379 2008-04-09 22:21:43Z RenatoDeGiovanni $ -->
<xsd:schema targetNamespace="http://rs.tdwg.org/tapir/1.0" 
	xmlns="http://rs.tdwg.org/tapir/1.0" 
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:dct="http://purl.org/dc/terms/"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	xmlns:vcard="http://www.w3.org/2001/vcard-rdf/3.0#"
	elementFormDefault="qualified" 
	attributeFormDefault="unqualified" version="1.0.7" xml:lang="EN" >
	<xsd:annotation>
		<xsd:documentation xml:lang="en">
			TAPIR XML Schema. TAPIR is an acronym for TDWG Access Protocol for Information Retrieval.
			It is a unified and extended protocol based on DiGIR and BioCASe. TAPIR specifies a standardised, 
			stateless, HTTP transmittable, XML-based request and response protocol for accessing structured 
			data that may be stored on any number of distributed databases of varied physical and logical 
			structure.	
			More information: http://www.tdwg.org/activities/tapir/
		</xsd:documentation>		
	</xsd:annotation>
	<!-- ============================================= -->
	<!-- NAMESPACE IMPORTS -->
	<!-- ============================================= -->
	<xsd:import namespace="http://www.w3.org/XML/1998/namespace"
		schemaLocation="xml.xsd"/>	
	<xsd:import namespace="http://purl.org/dc/elements/1.1/" 
		schemaLocation="dc.xsd"/>
	<xsd:import namespace="http://purl.org/dc/terms/" 
		schemaLocation="dcterms.xsd"/>
	<xsd:import namespace="http://www.w3.org/2003/01/geo/wgs84_pos#" 
		schemaLocation="w3c_geo.xsd"/>
	<xsd:import namespace="http://www.w3.org/2001/vcard-rdf/3.0#" 
		schemaLocation="vcard.xsd"/>
	<!-- ============================================= -->
	<!-- SIMPLE TYPE DEFINITIONS-->
	<!-- ============================================= -->
	<xsd:simpleType name="simpleXPathType">
		<xsd:annotation>
			<xsd:documentation>A simple XPath expression used to reference XML nodes.
			e.g. /dataset/specimen/identification/name</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string"/>
	</xsd:simpleType>
	<xsd:simpleType
		name="qualifiedConceptIdType">
		<xsd:annotation>
			<xsd:documentation>Concept identifiers are just strings for TAPIR, so the protocol does
				not enforce any pattern. However it is recommended to use globally, resolvable and
				permanent unique identifiers for them. It is also recommended to avoid using
				characters that are reserved in the "query" part of URLs, since concepts can be
				referenced there by many TAPIR parameters and would need to be escaped. When
				defining concepts based on xml schemas we recommend to simply concatenate the
				namespace of the schema with the local xpath to the instance element. For example
				/DataSets/DataSet/Units/Unit/InstitutionID in ABCD becomes
				http://www.tdwg.org/schemas/abcd/2.06/DataSets/DataSet/Units/Unit/InstitutionID
			</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction
			base="xsd:string"/>
	</xsd:simpleType>
	<!-- ============================================= -->
	<!-- GENERAL COMPLEX TYPE DEFINITIONS-->
	<!-- ============================================= -->
	<xsd:complexType name="externalResourceType">
		<xsd:annotation>
			<xsd:documentation>A URI that points to a document or schema referenced by TAPIR operations</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="location" type="xsd:anyURI" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="languageAwareElementType">
		<xsd:annotation>
			<xsd:documentation>String with a language attribute. A type for elements that may be language specific.</xsd:documentation>
		</xsd:annotation>
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute ref="xml:lang" use="optional"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="nodeReferenceType">
		<xsd:annotation>
			<xsd:documentation>A reference to an XML node in a conceptual schema. 
				Uses a simple XPath stored as an attribute.</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="path" type="simpleXPathType" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="qualifiedConceptReferenceType">
		<xsd:annotation>
			<xsd:documentation>A qualified reference to a concept. Uses an attribute to hold a concept 
				and its namespace prefix or an alias as defined in qualifiedConceptIdType </xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="id" type="qualifiedConceptIdType" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="softwareInformationType">
		<xsd:annotation>
			<xsd:documentation>Information about the software used to construct or relay a TAPIR request or response.
				The software name and version are stored as simple string attributes.</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="name" type="xsd:string" use="required"/>
		<xsd:attribute name="version" type="xsd:string" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="headerType">
		<xsd:annotation>
			<xsd:documentation>A Header is part of request and response messages. The Header describes the source of the request or response 
				and optionally its destination. It may also describe the software that sent the request or response 
				and there is a custom section for extending the information e.g. with information related to security or access.
			        The header can list several sources, where for instance, a request is cascaded through one or more portals. </xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="source" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Source of this message. Repeatable to trace back all servers
						of a possible cascading transaction, but always starting (first in the
						sequence) with the original source, the client. Holds a URL or at least the
						IP of the source with the timestamp when the message has been processed as
						an attribute in ISO format.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence minOccurs="0">
						<xsd:element name="software" minOccurs="0">
							<xsd:annotation>
								<xsd:documentation>The optional software element should indicate the
									software including its version, used to generate or modify the
									document. It may also list any dependencies on libraries and other software</xsd:documentation>
							</xsd:annotation>
							<xsd:complexType>
								<xsd:complexContent>
									<xsd:extension base="softwareInformationType">
										<xsd:sequence minOccurs="0">
											<xsd:element name="dependencies" minOccurs="0">
												<xsd:annotation>
													<xsd:documentation>Represents set of dependecies for this software.</xsd:documentation>
												</xsd:annotation>
												<xsd:complexType>
													<xsd:sequence minOccurs="0">
														<xsd:element name="dependency" type="softwareInformationType" minOccurs="0" maxOccurs="unbounded">
															<xsd:annotation>
																<xsd:documentation>A single dependency for the software, e.g. a library, framework, component, OS, etc.</xsd:documentation>
															</xsd:annotation>
														</xsd:element>
													</xsd:sequence>
												</xsd:complexType>
											</xsd:element>
										</xsd:sequence>
									</xsd:extension>
								</xsd:complexContent>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
					<xsd:attribute name="accesspoint" type="xsd:anyURI" use="optional"/>
					<xsd:attribute name="sendtime" type="xsd:dateTime" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="destination" type="xsd:string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Destination of the message. Takes a string which usually will
						be a URI but can be anything e.g. include resource names etc. It is optional
						and an implementation is free to ignore it.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element ref="custom" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="diagnosticMessageType">
		<xsd:annotation>
			<xsd:documentation>A diagnostic message from the service with message type and time presented as attributes
				including code, level ( with enumerated types e.g. error, warning, additional
				information, etc). and a time stamp</xsd:documentation>
		</xsd:annotation>
		<xsd:simpleContent>
			<xsd:extension base="xsd:string">
				<xsd:attribute name="code" type="xsd:string" use="optional"/>
				<xsd:attribute name="level" use="required">
					<xsd:simpleType>
						<xsd:restriction base="xsd:string">
							<xsd:enumeration value="debug"/>
							<xsd:enumeration value="info"/>
							<xsd:enumeration value="warn"/>
							<xsd:enumeration value="error"/>
							<xsd:enumeration value="fatal"/>
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:attribute>
				<xsd:attribute name="time" type="xsd:dateTime" use="optional"/>
			</xsd:extension>
		</xsd:simpleContent>
	</xsd:complexType>
	<xsd:complexType name="diagnosticsListType">
		<xsd:annotation>
			<xsd:documentation>Provides the means to present a list of diagnostic messages from the service.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence minOccurs="0">
			<xsd:element name="diagnostic" type="diagnosticMessageType" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="custom">
		<xsd:annotation>
			<xsd:documentation>Extension slot for additional information not defined in the schema.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:any processContents="lax" namespace="##other" minOccurs="0" maxOccurs="unbounded">
					<xsd:annotation>
						<xsd:documentation>For any custom extension. E.g what security related
							capabilities does the provider have? Encryption, access restriction,
							etc.</xsd:documentation>
					</xsd:annotation>
				</xsd:any>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- ============================================= -->
	<!--EXTERNAL QUERY TEMPLATE DEFINITIONS-->
	<!-- ============================================= -->
	<xsd:element name="outputModel">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:group ref="extResourceDocumentationGroup"/>
				<xsd:group ref="outputModelGroup"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:complexType name="outputModelType">
		<xsd:annotation>
			<xsd:documentation>Response structures are part of a model definition which
				includes three sections: a record schema (structure), a mapping section for linking to the datasource model
				and an indexing section that is used as a reference for record counting and paging responses.
			               The outputModel template is a separate, external XML document, called by a search operation,
				that uses  'outputModel' as the root element. </xsd:documentation>
		</xsd:annotation>
		<xsd:group ref="outputModelGroup"/>
	</xsd:complexType>
	<xsd:group name="outputModelGroup">
			<xsd:sequence>
			<xsd:element name="structure">
				<xsd:annotation>
					<xsd:documentation>The response structure definition. By default this should be
						a subset of the XML Schema language but others such as RELAX NG could be
						supported in the future.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:choice>
						<xsd:element name="schema" type="externalResourceType"/>
						<xsd:any processContents="strict" namespace="http://www.w3.org/2001/XMLSchema">
							<xsd:annotation>
								<xsd:documentation>A structure represented through a subset of the
									XML Schema language defining how elements should be
								returned.</xsd:documentation>
							</xsd:annotation>
						</xsd:any>
					</xsd:choice>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="indexingElement">
				<xsd:annotation>
					<xsd:documentation>A simple XPath pointing to a response structure node that
						should be used as a reference for counting.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="path" type="simpleXPathType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="mapping">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="node" minOccurs="0" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:documentation>Maps a node from the structure definition to a
									list of qualified concepts, literals or environment variables,
									which should be concatenated in the output. If the automapping attribute
									is set to 'true' then the server application should match concepts with the same namespace and path.
								For instance if the wrapper and the search request are both using a canonical ABCD model or Darwin Core Model,
								then concepts will be automatically recognised.</xsd:documentation>
							</xsd:annotation>
							<xsd:complexType>
								<xsd:choice maxOccurs="unbounded">
									<xsd:annotation>
										<xsd:documentation>Multiple mappings represent concatenation.</xsd:documentation>
									</xsd:annotation>
									<xsd:element name="concept">
										<xsd:complexType>
											<xsd:complexContent>
												<xsd:extension base="conceptType">
													<xsd:attribute name="required" type="xsd:boolean" use="optional" default="false"/>
												</xsd:extension>
											</xsd:complexContent>
										</xsd:complexType>
									</xsd:element>
									<xsd:element ref="literal"/>
									<xsd:element name="variable">
										<xsd:complexType>
											<xsd:complexContent>
												<xsd:extension base="variableType">
													<xsd:attribute name="required" type="xsd:boolean" use="optional" default="false"/>
												</xsd:extension>
											</xsd:complexContent>
										</xsd:complexType>
									</xsd:element>
								</xsd:choice>
								<xsd:attribute name="path" type="simpleXPathType" use="required"/>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
					<xsd:attribute name="automapping" type="xsd:boolean" use="optional" default="false"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:group>
	<xsd:element name="queryTemplate" abstract="true"/>
	<xsd:complexType name="extResourceDocumentationType">
		<xsd:group ref="extResourceDocumentationGroup"/>
	</xsd:complexType>
	<xsd:group name="extResourceDocumentationGroup">
		<xsd:sequence>
			<xsd:element name="label" type="xsd:string" minOccurs="0"/>
			<xsd:element name="documentation" type="xsd:string" minOccurs="0"/>
		</xsd:sequence>
	</xsd:group>
	<xsd:element name="searchTemplate" substitutionGroup="queryTemplate" type="searchTemplateType"/>
	<xsd:group name="searchTemplateGroup">
		<xsd:sequence>
			<xsd:choice>
				<xsd:element name="externalOutputModel" type="externalResourceType"></xsd:element>
				<xsd:element name="outputModel" type="outputModelType"></xsd:element>
			</xsd:choice>
			<xsd:element name="partial" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Select only a subset of the
						entire response structure to be used in the
						response. Useful for working with large cached
						external structures referenced via URLs. Select
						branch nodes if you want all concepts below
						included. A partial search must take care that
						response documents still validate. Thus
						mandatory elements or attributes of the response
						structure, which are not listed in the partial
						search ,must be included in the response
						content.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="node" type="nodeReferenceType" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:documentation>A node taken from the response structure definition.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element ref="filter" minOccurs="0"/>
			<xsd:element name="orderBy" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>A list of qualified concepts to be used for ordering the model
						results.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="concept" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:documentation>One or more concepts to be used for ordering the
									model. If the attribute "descend" is set to true, a descending
									order will be used instead of the default ascending one.</xsd:documentation>
							</xsd:annotation>
							<xsd:complexType>
								<xsd:complexContent>
									<xsd:extension base="conceptType">
										<xsd:attribute name="descend" type="xsd:boolean" use="optional" default="false"/>
									</xsd:extension>
								</xsd:complexContent>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>		
	</xsd:group>
	<xsd:complexType name="searchTemplateType">
		<xsd:annotation>
			<xsd:documentation>TAPIR can use a template for configuring search requests. 
				The Template is accessed, as an external document, by its URI</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="extResourceDocumentationType">
				<xsd:sequence>
					<xsd:group ref="searchTemplateGroup" />
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name="inventoryTemplate" substitutionGroup="queryTemplate"
		type="inventoryTemplateType"/>
	<xsd:group name="inventoryTemplateGroup">
		<xsd:annotation>
			<xsd:documentation>TAPIR can use a template for configuring inventory requests. 
				The Template is accessed, as an external document, by its URI</xsd:documentation>
		</xsd:annotation>
				<xsd:sequence>
					<xsd:element name="concepts">
						<xsd:annotation>
							<xsd:documentation>Used to specify a list of concepts to make an inventory on.</xsd:documentation>
						</xsd:annotation>
						<xsd:complexType>
							<xsd:sequence>
    						<xsd:element name="concept" maxOccurs="unbounded">
	  						  <xsd:annotation>
  	  							<xsd:documentation>A single qualified concept. The attribute 
			  						  tagName can be used to specify the name of the element
				  					  that will enclose the respective values in the response.</xsd:documentation>
					  		  </xsd:annotation>
						  	  <xsd:complexType>
  								  <xsd:complexContent>
    									<xsd:extension base="qualifiedConceptReferenceType">
	    									<xsd:attribute name="tagName" type="xsd:string" use="optional" default="value"/>
		    							</xsd:extension>
			    					</xsd:complexContent>
				      	  </xsd:complexType>
					  	  </xsd:element>
							</xsd:sequence>
						</xsd:complexType>
					</xsd:element>
					<xsd:element ref="filter" minOccurs="0"/>
				</xsd:sequence>
	</xsd:group>
	<xsd:complexType name="inventoryTemplateType">
		<xsd:annotation>
			<xsd:documentation>TAPIR can use a template for configuring inventory requests. 
				The Template is accessed, as an external document, by its URI</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="extResourceDocumentationType">
		<xsd:sequence>
			<xsd:group ref="inventoryTemplateGroup" />
		</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- ============================================= -->
	<!-- FILTER  DEFINITIONS-->
	<!-- ============================================= -->
	<xsd:element name="filter">
		<xsd:annotation>
			<xsd:documentation>An abstract filter encoding that could be translated to other local
				query languages. Can be used by search and inventory operations to specify
				searching conditions.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="booleanOP"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<!-- ===== EXPRESSIONS ===== -->
	<xsd:element name="expression" abstract="true">
		<xsd:annotation>
			<xsd:documentation>An abstract element representing any expression (literal, parameter
				or concept).</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!-- ===== SIMPLE EXPRESSIONS ===== -->
	<xsd:element name="simpleExpression" abstract="true" substitutionGroup="expression"/>
	<xsd:element name="literal" substitutionGroup="simpleExpression">
		<xsd:annotation>
			<xsd:documentation>An element to represent literals / values. Substitutes an abstract
				expression element.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:attribute name="value" type="xsd:string" use="required"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="parameter" substitutionGroup="simpleExpression">
		<xsd:annotation>
			<xsd:documentation>An element to represent external parameters e.g. via CGI. Substitutes
				an abstract expression element.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:attribute name="name" type="xsd:string" use="required"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="concept" type="conceptType" substitutionGroup="simpleExpression">
		<xsd:annotation>
			<xsd:documentation>An element to represent a concept of one specific conceptual schema.
				Substitutes an abstract expression element.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="conceptType">
		<xsd:complexContent>
			<xsd:extension base="qualifiedConceptReferenceType"/>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- ===== COMPLEX EXPRESSIONS ===== -->
	<xsd:element name="complexExpression" abstract="true" substitutionGroup="expression"/>
	<!-- === ARITHMETIC EXPRESSION OPERATORS ===-->
	<xsd:element name="AOP" abstract="true" substitutionGroup="complexExpression">
		<xsd:annotation>
			<xsd:documentation>An abstract element representing any Arithmetic operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="binaryAOPType">
		<xsd:annotation>
			<xsd:documentation>A binary arithmetic operator with the first expression argument being
				the left argument of the operation.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element ref="expression"/>
			<xsd:element ref="expression"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="add" type="binaryAOPType" substitutionGroup="AOP">
		<xsd:annotation>
			<xsd:documentation>The arithmetic addition (+) operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="sub" type="binaryAOPType" substitutionGroup="AOP">
		<xsd:annotation>
			<xsd:documentation>The arithmetic subtraction (-) operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="mul" type="binaryAOPType" substitutionGroup="AOP">
		<xsd:annotation>
			<xsd:documentation>The arithmetic multiplication (*) operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="div" type="binaryAOPType" substitutionGroup="AOP">
		<xsd:annotation>
			<xsd:documentation>The arithmetic division (/) operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!-- ===== ABSTRACT OPERATOR BASE TYPE ===== -->
	<xsd:element name="booleanOP" abstract="true">
		<xsd:annotation>
			<xsd:documentation>An abstract element representing any logical operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!-- ===== COMPARATIVE OPERATORS ===== -->
	<xsd:element name="COP" abstract="true" substitutionGroup="booleanOP">
		<xsd:annotation>
			<xsd:documentation>An abstract element representing any comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!-- === unary === -->
	<xsd:element name="unaryCOP" abstract="true" substitutionGroup="COP">
		<xsd:annotation>
			<xsd:documentation>An abstract element representing any unary comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="unaryCOPType">
		<xsd:annotation>
			<xsd:documentation>A complex type for unary comparison operators.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element ref="concept"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="isNull" type="unaryCOPType" substitutionGroup="unaryCOP">
		<xsd:annotation>
		            <xsd:documentation>Compares if a concept is null. Use equals element to compare for empty strings.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!-- === binary === -->
	<xsd:element name="binaryCOP" abstract="true" substitutionGroup="COP">
		<xsd:annotation>
			<xsd:documentation>An abstract element representing any binary comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="binaryCOPType">
		<xsd:annotation>
			<xsd:documentation>A complex type for binary comparison operators.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element ref="concept"/>
			<xsd:element ref="expression"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="equals" type="binaryCOPType" substitutionGroup="binaryCOP">
		<xsd:annotation>
			<xsd:documentation>The equals (=) comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="lessThan" type="binaryCOPType" substitutionGroup="binaryCOP">
		<xsd:annotation>
			<xsd:documentation>The less than (&lt;) comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="lessThanOrEquals" type="binaryCOPType" substitutionGroup="binaryCOP">
		<xsd:annotation>
			<xsd:documentation>The less than or equals (&lt;=) comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="greaterThan" type="binaryCOPType" substitutionGroup="binaryCOP">
		<xsd:annotation>
			<xsd:documentation>The greater than (&gt;) comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="greaterThanOrEquals" type="binaryCOPType" substitutionGroup="binaryCOP">
		<xsd:annotation>
			<xsd:documentation>The greater than or equals (&gt;=) comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="like" type="binaryCOPType" substitutionGroup="binaryCOP">
		<xsd:annotation>
			<xsd:documentation>The like (LIKE) comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!-- === multiple === -->
	<xsd:element name="multiCOP" abstract="true" substitutionGroup="COP">
		<xsd:annotation>
			<xsd:documentation>An abstract element representing any multiple comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="multiCOPType">
		<xsd:annotation>
			<xsd:documentation>A complex type for multiple comparison operators.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element ref="concept"/>
			<xsd:element name="values">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element ref="simpleExpression" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="in" type="multiCOPType" substitutionGroup="multiCOP">
		<xsd:annotation>
			<xsd:documentation>The in (IN) comparison operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!-- ===== LOGICAL OPERATORS ===== -->
	<xsd:element name="LOP" abstract="true" substitutionGroup="booleanOP">
		<xsd:annotation>
			<xsd:documentation>An abstract element representing any logical
			operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!-- === unary === -->
	<xsd:element name="unaryLOP" abstract="true" substitutionGroup="LOP">
		<xsd:annotation>
			<xsd:documentation>An abstract element representing any unary logical
			operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="unaryLOPType">
		<xsd:annotation>
			<xsd:documentation>A complex type for unary logical operators.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element ref="booleanOP"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="not" substitutionGroup="unaryLOP">
		<xsd:annotation>
			<xsd:documentation>The not logical operator.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="unaryLOPType"/>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<!-- === multiple === -->
	<xsd:element name="multiLOP" abstract="true" substitutionGroup="LOP">
		<xsd:annotation>
			<xsd:documentation>An abstract element representing any multiple logical
			operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="multiLOPType">
		<xsd:annotation>
			<xsd:documentation>A complex type for multiple logical operators.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence minOccurs="2" maxOccurs="unbounded">
			<xsd:element ref="booleanOP"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name="and" type="multiLOPType" substitutionGroup="multiLOP">
		<xsd:annotation>
			<xsd:documentation>The and logical operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:element name="or" type="multiLOPType" substitutionGroup="multiLOP">
		<xsd:annotation>
			<xsd:documentation>The or logical operator.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!-- ===== ENVIRONMENT VARIABLE EXPRESSIONS ===== -->
	<xsd:simpleType name="predefinedVariableNamesType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="date">
    		<xsd:annotation>
		    	<xsd:documentation>Current date in ISO format like 2005-07-21.</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="timestamp">
    		<xsd:annotation>
		    	<xsd:documentation>Current timestamp in ISO format like 2005-07-20 17:01:38</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="dataSourceName">
    		<xsd:annotation>
		    	<xsd:documentation>The name of the datasource (dc:title metadata).</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="accessPoint">
    		<xsd:annotation>
		    	<xsd:documentation>Service access point.</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="lastUpdate">
    		<xsd:annotation>
		    	<xsd:documentation>Timestamp of the last update of the datasource.</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="dateCreated">
    		<xsd:annotation>
		    	<xsd:documentation>Timestamp of the creation of the datasource.</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="dataSourceDescription">
    		<xsd:annotation>
		    	<xsd:documentation>The description of the datasource (dc:description metadata).</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="rights">
    		<xsd:annotation>
		    	<xsd:documentation>Information about who can access the resource or about its security status, access regulations, etc. (dc:rights metadata).</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="subject">
    		<xsd:annotation>
		    	<xsd:documentation>Keywords, key phrases or classification codes that describe content provided by the resource (dc:subject metadata).</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="bibliographicCitation">
    		<xsd:annotation>
		    	<xsd:documentation>Information about how to cite the datasource (dc:bibliographicCitation metadata).</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="metadataLanguage">
    		<xsd:annotation>
		    	<xsd:documentation>The language in which the content of the following variables are expressed: dataSourceName, dataSourceDescription, rights, subject and bibliographicCitation.</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="dataSourceLanguage">
    		<xsd:annotation>
		    	<xsd:documentation>The primary language of the data provided by the service (first occurrence of the dc:language metadata element).</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="technicalContactName">
    		<xsd:annotation>
		    	<xsd:documentation>The name of the first system administrator of the first technical host entity.</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="technicalContactEmail">
    		<xsd:annotation>
		    	<xsd:documentation>The e-mail of the first system administrator of the first technical host entity.</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="contentContactName">
    		<xsd:annotation>
		    	<xsd:documentation>The name of the first data administrator of the first data supplier entity.</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="contentContactEmail">
    		<xsd:annotation>
		    	<xsd:documentation>The e-mail of the first data administrator of the first data supplier entity.</xsd:documentation>
		    </xsd:annotation>
			</xsd:enumeration>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="variableNameType">
		<xsd:union memberTypes="predefinedVariableNamesType xsd:string"/>
	</xsd:simpleType>
	<xsd:complexType name="variableType">
		<xsd:attribute name="name" type="variableNameType" use="required"/>
	</xsd:complexType>
	<xsd:element name="variable" type="variableType" substitutionGroup="expression">
		<xsd:annotation>
			<xsd:documentation>An element to represent specific values 
				from the service local environment.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<!--  ============================================= -->
	<!--REQUEST TYPE DEFINITIONS-->
	<!--  ============================================= -->
	<xsd:element name="request" type="requestType">
		<xsd:annotation>
			<xsd:documentation>Global element representing a request. This is a root element
			and must contain reference to the schema and namespaces used.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="requestType">
		<xsd:annotation>
			<xsd:documentation>Request message format. Must always contain header and operation
				specific parameters.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="header" type="headerType"/>
			<xsd:choice>
				<xsd:element name="ping">
					<xsd:complexType>
						<xsd:attributeGroup ref="globalParametersGroup"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="capabilities">
					<xsd:complexType>
						<xsd:attributeGroup ref="globalParametersGroup"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="metadata">
					<xsd:complexType>
						<xsd:attributeGroup ref="globalParametersGroup"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="inventory">
					<xsd:complexType>
						<xsd:choice>
							<xsd:element name="template" type="externalResourceType"/>
							<xsd:group ref="inventoryTemplateGroup"/>
						</xsd:choice>
						<xsd:attributeGroup ref="globalParametersGroup"/>
						<xsd:attributeGroup ref="pagingParametersGroup"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="search">
					<xsd:complexType>
						<xsd:choice>
							<xsd:element name="template" type="externalResourceType"/>
							<xsd:group ref="searchTemplateGroup"/>
						</xsd:choice>
						<xsd:attributeGroup ref="globalParametersGroup"/>
						<xsd:attributeGroup ref="pagingParametersGroup"/>
						<xsd:attribute name="envelope" type="xsd:boolean" use="optional" default="true"/>						
						<xsd:attribute name="omit-ns" type="xsd:boolean" use="optional" default="false"/>						
					</xsd:complexType>
				</xsd:element>
			</xsd:choice>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:attributeGroup name="globalParametersGroup">
		<xsd:attribute name="xslt" type="xsd:anyURI" use="optional"/>
		<xsd:attribute name="xslt-apply" type="xsd:boolean" use="optional" default="false"/>
		<xsd:attribute name="log-only" type="xsd:boolean" use="optional" default="false"/>
	</xsd:attributeGroup>
	<xsd:attributeGroup name="pagingParametersGroup">
		<xsd:attribute name="count" type="xsd:boolean" use="optional" default="false"/>
		<xsd:attribute name="start" type="xsd:nonNegativeInteger" use="optional" default="0"/>
		<xsd:attribute name="limit" type="xsd:nonNegativeInteger" use="optional"/>
	</xsd:attributeGroup>
	<!-- ============================================= -->
	<!--RESPONSE TYPE DEFINITIONS-->
	<!-- ============================================= -->
	<xsd:element name="response" type="responseType">
		<xsd:annotation>
			<xsd:documentation>Global element representing a response. This is a root element
				and must contain reference to the schema and namespaces used</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="responseType">
		<xsd:annotation>
			<xsd:documentation>Response message format. Must always contain header, results from the
				requested operation and possible diagnostic messages.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="header" type="headerType"/>
			<xsd:choice>
				<xsd:element ref="pong"/>
				<xsd:element ref="metadata"/>
				<xsd:element ref="capabilities"/>				
				<xsd:element ref="inventory" />
				<xsd:element ref="search" />
				<xsd:element ref="error" />
				<xsd:element ref="logged" />
			</xsd:choice>
			<xsd:element name="diagnostics" type="diagnosticsListType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>The diagnostics element is an optional part of TAPIR requests and response messages.
						Diagnostics may contain many pieces of information used for debugging and providing warnings or error messages.
						Individual diagnostics are held in a diagnosticList with an enumerated attribute for level and attributes for code and time.
						</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="resultSummaryType">
		<xsd:annotation>
			<xsd:documentation>Summary about inventory and search results. The first index of a
				record is 0. The number of records actually being  returned is given in totalReturned.
				If counting was requested the totalMatched gives the "estimated" number of total
				matching records - not necessarily the number of valid records that can possibly be
				returned by paging through the entire record set.</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="start" type="xsd:integer" use="required"/>
		<xsd:attribute name="next" type="xsd:integer" use="optional"/>
		<xsd:attribute name="totalReturned" type="xsd:integer" use="required"/>
		<xsd:attribute name="totalMatched" type="xsd:integer" use="optional"/>
	</xsd:complexType>
	<!-- ===== PING ===== -->
	<xsd:element name="pong" type="pingResultType"/>
	<xsd:complexType name="pingResultType">
		<xsd:annotation>
			<xsd:documentation>Format of ping operation result.</xsd:documentation>
		</xsd:annotation>
	</xsd:complexType>
	<!-- ===== CAPABILITIES ===== -->
	<xsd:element name="capabilities" type="capabilitiesResultType"/>
	<xsd:complexType name="capabilitiesResultType">
		<xsd:annotation>
			<xsd:documentation>Format of capabilities operation result.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="operations">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="ping">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="metadata">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="capabilities">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="inventory" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="templates" type="templatesCapabilitiesType" minOccurs="0"/>
									<xsd:element name="anyConcepts" minOccurs="0"><xsd:complexType/></xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="search" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="templates" type="templatesCapabilitiesType" minOccurs="0" />
									<xsd:element name="outputModels" minOccurs="0">
										<xsd:complexType>
											<xsd:sequence>
												<xsd:element name="knownOutputModels" minOccurs="0" >
													<xsd:complexType>
														<xsd:sequence>
															<xsd:element name="outputModel" maxOccurs="unbounded">
																<xsd:complexType>
																	<xsd:complexContent>
																		<xsd:extension base="externalResourceType">
																			<xsd:attribute name="alias" type="xsd:string"/>
																		</xsd:extension>
																	</xsd:complexContent>
																</xsd:complexType>
															</xsd:element>
														</xsd:sequence>
													</xsd:complexType>
												</xsd:element>
												<xsd:element name="anyOutputModels" minOccurs="0">
													<xsd:complexType>
														<xsd:sequence>
															<xsd:element name="responseStructure" type="responseStructureCapabilitiesType">
																<xsd:annotation>
																	<xsd:documentation>The supported subset of the XML Schema language.</xsd:documentation>
																</xsd:annotation>
															</xsd:element>
														</xsd:sequence>
													</xsd:complexType>
												</xsd:element>
											</xsd:sequence>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="requests">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="encoding">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="kvp"><xsd:complexType/></xsd:element>
									<xsd:element name="xml" minOccurs="0"><xsd:complexType/></xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="globalParameters">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="logOnly">
										<xsd:simpleType>
											<xsd:restriction base="xsd:string">
												<xsd:enumeration value="required"/>
												<xsd:enumeration value="accepted"/>
												<xsd:enumeration value="denied"/>
											</xsd:restriction>
										</xsd:simpleType>						
									</xsd:element>
									<xsd:element name="xlst" minOccurs="0"><xsd:complexType/></xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="filter" type="filterCapabilitiesType">
							<xsd:annotation>
								<xsd:documentation>Information about the supported filter operators of this
									service.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="concepts">
				<xsd:annotation>
					<xsd:documentation>The list of known conceptual schemas and their mapped
						concepts.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="schema" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:documentation>Namespace and location of a supported
								schema.</xsd:documentation>
							</xsd:annotation>
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="mappedConcept" maxOccurs="unbounded">
										<xsd:annotation>
											<xsd:documentation>Each known and mapped concept of a
												schema listed with a boolean flag indicating if its
												searchable (default = true). The mandatory flag can
												be used to indicate that some concepts need to be
												present in response structures
											(default=false).</xsd:documentation>
										</xsd:annotation>
										<xsd:complexType>
											<xsd:complexContent>
												<xsd:extension base="qualifiedConceptReferenceType">
													<xsd:attribute name="searchable" type="xsd:boolean" use="optional" default="true"/>
													<xsd:attribute name="required" type="xsd:boolean" use="optional" default="false"/>
													<xsd:attribute name="alias" type="xsd:string" use="optional"/>
													<xsd:attribute name="datatype" type="xsd:string" use="optional" default="http://www.w3.org/2001/XMLSchema#string"/>
												</xsd:extension>
											</xsd:complexContent>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
								<xsd:attribute name="namespace" type="xsd:anyURI" use="required"/>
								<xsd:attribute name="location" type="xsd:anyURI" use="required"/>
								<xsd:attribute name="alias" type="xsd:string" use="optional"/>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="variables">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="environment" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="date" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="timestamp" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="dataSourceName" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="accessPoint" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="lastUpdate" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="dateCreated" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="dataSourceDescription" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="rights" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="subject" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="bibliographicCitation" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="metadataLanguage" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="dataSourceLanguage" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="technicalContactName" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="technicalContactEmail" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="contentContactName" type="supportedVariableType" minOccurs="0"/>
									<xsd:element name="contentContactEmail" type="supportedVariableType" minOccurs="0"/>
									<xsd:element ref="custom" minOccurs="0"/>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="settings">
				<xsd:annotation>
					<xsd:documentation>Information about the local configuration of a
					datasource.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="minQueryTermLength" type="xsd:integer" minOccurs="0">
							<xsd:annotation>
								<xsd:documentation>Indicates the minimum length for wild-card
									strings used in like comparisons.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="maxElementRepetitions" type="xsd:integer" minOccurs="0">
							<xsd:annotation>
								<xsd:documentation>Indicates the maximum number of repetitions
									allowed in responses for each repeatable element defined in
									response structures.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="maxElementLevels" type="xsd:integer" minOccurs="0">
							<xsd:annotation>
								<xsd:documentation>Indicates the maximum number of allowed levels
									(depth) for response elements.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="maxResponseTags" type="xsd:integer" minOccurs="0">
							<xsd:annotation>
								<xsd:documentation>Indicates the maximum number of tags that can be
									returned by responses.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="maxResponseSize" type="xsd:integer" minOccurs="0">
							<xsd:annotation>
								<xsd:documentation>Indicates the maximum size in kilobytes allowed
									to be returned by responses.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element ref="custom" minOccurs="0"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element ref="custom" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="templatesCapabilitiesType">
		<xsd:sequence>
			<xsd:element name="template" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:complexContent>
						<xsd:extension base="externalResourceType">
							<xsd:attribute name="alias" type="xsd:string"/>
							<xsd:attribute name="wsdl" type="xsd:anyURI">
								<xsd:annotation><xsd:documentation>URL pointing to a WSDL file describing this template interface</xsd:documentation></xsd:annotation>
							</xsd:attribute>
						</xsd:extension>
					</xsd:complexContent>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="responseStructureCapabilitiesType">
		<xsd:annotation>
			<xsd:documentation>A complete indication about what subset of the response structure
				specification is supported by a service.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="basicSchemaLanguage">
				<xsd:annotation>
					<xsd:documentation>This includes the following xml schema tags: schema incl
						target namespace, element incl min/maxOccurs, attribute incl use,
						sequence, all and local definitions of complexType and simpleType.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType/>
			</xsd:element>
			<xsd:element name="choice" minOccurs="0">
				<xsd:complexType/>
			</xsd:element>
			<xsd:element name="group" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>local group definitions without global referencing</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType/>
			</xsd:element>
			<xsd:element name="import" minOccurs="0">
				<xsd:complexType/>
			</xsd:element>
			<xsd:element name="include" minOccurs="0">
				<xsd:complexType/>
			</xsd:element>
			<xsd:element name="references" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>The global use of the tags grouped here when locally
						referenced via the "ref" attribute.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence minOccurs="0">
						<xsd:element name="element" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="attribute" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="group" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="attributeGroup" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="complexType" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="simpleType" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence minOccurs="0">
									<xsd:element name="list" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="union" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="simpleTypes" minOccurs="0">
				<xsd:complexType>
					<xsd:sequence minOccurs="0">
						<xsd:element name="stringTypes" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence minOccurs="0">
									<xsd:element name="string" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="normalizedString" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="token" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="language" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="Name" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="NCName" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="NMToken" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="NMTokens" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="ID" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="IDREF" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="IDREFS" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="ENTITY" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="ENTITIES" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="numericTypes" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence minOccurs="0">
									<xsd:element name="float" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="double" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="decimal" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="integerTypes" minOccurs="0">
										<xsd:complexType>
											<xsd:sequence minOccurs="0">
												<xsd:element name="integer" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="long" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="int" minOccurs="0"/>
												<xsd:element name="short" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="byte" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="positiveInteger" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="nonPositiveInteger" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="negativeInteger" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="nonNegativeInteger" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="unsignedLong" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="unsignedInt" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="unsignedShort" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="unsignedByte" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
											</xsd:sequence>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="dateTimeTypes" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence minOccurs="0">
									<xsd:element name="duration" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="dateTime" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="time" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="date" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="gYearMonth" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="gYear" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="gMonthDay" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="gDay" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="gMonth" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="miscTypes" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence minOccurs="0">
									<xsd:element name="boolean" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="base64Binary" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="hexBinary" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="anyURI" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="QName" minOccurs="0">
										<xsd:complexType/>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="extension" minOccurs="0">
				<xsd:complexType/>
			</xsd:element>
			<xsd:element name="restriction" minOccurs="0">
				<xsd:complexType>
					<xsd:sequence minOccurs="0">
						<xsd:element name="minInclusive" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="maxInclusive" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="minExclusive" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="maxExclusive" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="fractionDigits" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="totalDigits" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="enumeration" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="whiteSpace" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="pattern" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="length" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="minLength" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="maxLength" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="substitutionGroup" minOccurs="0">
				<xsd:complexType/>
			</xsd:element>
			<xsd:element name="constraints" minOccurs="0">
				<xsd:complexType>
					<xsd:sequence minOccurs="0">
						<xsd:element name="field" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="selector" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="unique" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="key" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
						<xsd:element name="keyref" minOccurs="0">
							<xsd:complexType/>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="filterCapabilitiesType">
		<xsd:annotation>
			<xsd:documentation>A complete indication about what filter operators are supported by a
				service.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="encoding" minOccurs="0">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="expression">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="concept">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="literal">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="parameter">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="variable">
										<xsd:complexType/>
									</xsd:element>
									<xsd:element name="arithmetic">
										<xsd:annotation>
											<xsd:documentation>Support +-*/ in filter
								expressions.</xsd:documentation>
										</xsd:annotation>
										<xsd:complexType>
											<xsd:sequence>
												<xsd:element name="add" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="sub" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="div" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="mul" minOccurs="0">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element ref="custom" minOccurs="0"/>
											</xsd:sequence>
										</xsd:complexType>
									</xsd:element>
									<xsd:element ref="custom" minOccurs="0"/>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="booleanOperators">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="logical">
										<xsd:annotation>
											<xsd:documentation>This includes all 3 operators. AND, OR,
								NOT</xsd:documentation>
										</xsd:annotation>
										<xsd:complexType>
											<xsd:sequence>
												<xsd:element name="not">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="and">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="or">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element ref="custom" minOccurs="0"/>
											</xsd:sequence>
										</xsd:complexType>
									</xsd:element>
									<xsd:element name="comparative">
										<xsd:complexType>
											<xsd:sequence>
												<xsd:element name="equals">
													<xsd:annotation>
														<xsd:documentation>Recommended to be case
											sensitive.</xsd:documentation>
													</xsd:annotation>
													<xsd:complexType>
														<xsd:attribute name="caseSensitive" type="xsd:boolean" use="optional" default="true"/>
													</xsd:complexType>
												</xsd:element>
												<xsd:element name="greaterThan">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="greaterThanOrEquals">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="lessThan">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="lessThanOrEquals">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="in">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="isNull">
													<xsd:complexType/>
												</xsd:element>
												<xsd:element name="like">
													<xsd:annotation>
														<xsd:documentation>Recommended to be case insensitive.
												Wildcard is always asterisk *.</xsd:documentation>
													</xsd:annotation>
													<xsd:complexType>
														<xsd:attribute name="caseSensitive" type="xsd:boolean" use="optional" default="false"/>
													</xsd:complexType>
												</xsd:element>
												<xsd:element ref="custom" minOccurs="0"/>
											</xsd:sequence>
										</xsd:complexType>
									</xsd:element>
									<xsd:element ref="custom" minOccurs="0"/>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="supportedVariableType"/>
	<!-- ===== METADATA ===== -->
	<xsd:element name="metadata" type="metadataResultType">
		<xsd:annotation>
			<xsd:documentation>Global element to validate external metadata XML
			files.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:complexType name="metadataResultType">
		<xsd:annotation>
			<xsd:documentation>Format of metadata operation result.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element ref="dc:title">
				<xsd:annotation>
					<xsd:documentation>The name of this service possibly in different
					languages.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element ref="dc:type">
				<xsd:annotation>
					<xsd:documentation>The nature or genre of the content of the resource. 
						http://purl.org/dc/dcmitype/Service</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="accesspoint" type="xsd:anyURI">
				<xsd:annotation>
					<xsd:documentation>The URL of the access point of this
					service.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element ref="dc:description">
				<xsd:annotation>
					<xsd:documentation>Description may include but is not limited to: an abstract,
						table of contents, reference to a graphical representation
						of content or a free-text account of the content.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>			
			<xsd:element ref="dc:language" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Language of content that can be returned by search 
						and inventory responses. This element must follow RFC 4646 
						and use language codes specified by the IANA Language Subtag 
						Registry. More than one language can be specified, in case 
						the provider can serve content in multiple languages. When 
						there is no linguistic content, "zxx" must be used.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>			
			<xsd:element ref="dc:subject" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Subject and Keywords. Typically, a Subject will be expressed as keywords,
						key phrases or classification codes that describe a topic
						of the resource. Recommended best practice is to select 
						a value from a controlled vocabulary or formal 
						classification scheme</xsd:documentation>
				</xsd:annotation>
			</xsd:element>		
			<xsd:element ref="dct:bibliographicCitation" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Recommended practice is to include sufficient 
						bibliographic detail to identify the resource as 
						unambiguously as possible, whether or not the
						citation is in a standard form.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>		
			<xsd:element ref="dc:rights" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Information about who can access the
						resource or an indication of its security status.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>		
			<xsd:element ref="dct:modified" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation></xsd:documentation>
				</xsd:annotation>
			</xsd:element>				
			<xsd:element ref="dct:created" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation></xsd:documentation>
				</xsd:annotation>
			</xsd:element>				
			<xsd:element name="indexingPreferences" minOccurs="0">
				<xsd:complexType>
					<xsd:attribute name="startTime" type="xsd:time" use="optional"/>
					<xsd:attribute name="maxDuration" type="xsd:duration" use="optional"/>
					<xsd:attribute name="frequency" type="xsd:duration" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="relatedEntity" type="relatedEntityInformationType" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Entities (companies, organisations, institutions) related to
						this service with their respective roles, e.g. publisher, data
					supplier</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element ref="custom" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute ref="xml:lang" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="relatedEntityInformationType">
		<xsd:annotation>
			<xsd:documentation>Information about an entity that may have some relationship with the
				service being provided.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="role" type="entityRoleExtensionType" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Used to specify the roles of a related entity, such as "data
						supplier", "technical host", etc.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="entity" type="entityInformationType"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:simpleType name="entityRoleType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="data supplier"/>
			<xsd:enumeration value="technical host"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="entityRoleExtensionType">
		<xsd:union memberTypes="entityRoleType xsd:string"/>
	</xsd:simpleType>
	<xsd:element name="entity" type="entityInformationType">
		<xsd:annotation>
			<xsd:documentation>Global element to validate external XML representations of entities.
				An entity here could be a company, organisation, institution, or
				person.</xsd:documentation>
		</xsd:annotation>
	</xsd:element>
	<xsd:simpleType name="contactRoleType">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="data administrator"/>
			<xsd:enumeration value="system administrator"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="contactRoleExtensionType">
		<xsd:union memberTypes="contactRoleType xsd:string"/>
	</xsd:simpleType>
	<xsd:complexType name="entityInformationType">
		<xsd:annotation>
			<xsd:documentation>Entity information.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="identifier" type="xsd:string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>A global unique identifier for the entity.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="name" type="languageAwareElementType" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>The name of the entity possibly in different
					languages.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="acronym" type="xsd:string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>An acronym for the entity name</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="logoURL" type="xsd:anyURI" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>A URL to a small logo of the entity.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="description" type="languageAwareElementType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>The description of the entity possibly in different
						languages.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="address" type="xsd:string" minOccurs="0"/>
			<xsd:element name="relatedInformation" type="xsd:anyURI" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Other related information about this entity found at the
						specified URL.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="hasContact" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="role" type="contactRoleExtensionType" maxOccurs="unbounded" />
						<xsd:element ref="vcard:VCARD"/>
						<xsd:element ref="custom" minOccurs="0"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element ref="geo:Point" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Location of the entity in decimal WGS84 latitude and longitude (and optional altitude) as defined by the W3C Basic Geo Vocabulary</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element ref="custom" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute ref="xml:lang" use="optional"/>
	</xsd:complexType>
	<!-- ===== INVENTORY===== -->
	<xsd:element name="inventory" type="inventoryResultType" />
	<xsd:complexType name="inventoryResultType">
		<xsd:annotation>
			<xsd:documentation>Format of inventory operation result.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="concepts">
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element ref="concept" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="record" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>A distinct combination of values for all "inventoried"
						concepts. The optional attribute "count" is used to count the number of
						occurrences for this distinct combination and will only be set if the count
						flag was used when requesting an inventory.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:any maxOccurs="unbounded" namespace="##targetNamespace" processContents="skip">
							<xsd:annotation>
								<xsd:documentation>Single values for each concept. The sequence
									of the values should correspond to the sequence used in the
									request. The elements should be within the TAPIR namespace, but as they cannot all be defined by this schema the validation should be skipped</xsd:documentation>
							</xsd:annotation>
					  </xsd:any>
					</xsd:sequence>
					<xsd:attribute name="count" type="xsd:positiveInteger" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="summary" type="resultSummaryType">
				<xsd:annotation>
					<xsd:documentation>Used to show information about the number of records for
						counting and paging purposes.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<!-- ===== SEARCH ===== -->
	<xsd:element name="search" type="searchResultType" />
	<xsd:complexType name="searchResultType">
		<xsd:annotation>
			<xsd:documentation>Format of search operation result.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:any processContents="lax" namespace="##other" minOccurs="0"/>
			<xsd:element name="summary" type="resultSummaryType">
				<xsd:annotation>
					<xsd:documentation>Used to show information about the number of records for
						counting and paging purposes.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<!-- ===== ERROR ===== -->
	<xsd:element name="error" type="diagnosticMessageType"/>
	<!-- ===== LOGGED ===== -->
	<xsd:element name="logged" type="loggedResultType"/>
	<xsd:complexType name="loggedResultType">
		<xsd:annotation>
			<xsd:documentation>Format of logged operation result indicated by setting a true logOnly attribute in the request.</xsd:documentation>
		</xsd:annotation>
	</xsd:complexType>
</xsd:schema>
