<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.3 U (http://www.xmlspy.com) by Martin M E Roberts (private) -->
<xs:schema targetNamespace="http://www.oasis-open.org/committees/cam/1.0/candidate" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.oasis-open.org/committees/cam/1.0/candidate" elementFormDefault="qualified" version="1.0candidate" xml:lang="en">
	<!--
  CAM Schema - Content Assembly Mechanism

  History: 0.15 Edited by Martin Roberts 2003-12-22
  			- Rearranged structure using complexTypes;
			- For every enumerated list added Other attribute
			- Moved Properties into header
			- enumerated list mostly simpleTypes
			- place any in Structure

            0.15.1 Edited by Martin Roberts 2004-01-01
			- version attribute allows any string - did not used to
			- default rules required a condition - no does not

            0.15.2 Edited by David Webber 2004-02-04
			- added new attribute - conditionID for Data Validation conditionals

		0.15.3 Edited by Martin Roberts 2004-02-06
		- corrected problem with the recursion of context and conditions.

		0.15.4 Edited by Martion Roberts 2004-02-12
		- corrected version number
		
		1.0 Candidate Edited by Martin Roberts 2004-02-13
		- changed version number and namespace to reflect 1.0 candidate status
		- changed properties to be a name/value pair concept
		- moved imports to header level one element - now has attributes URI and alias
		- renamed contextStatements to Parameters and Declarations to parameter and Declaration/@parameter to @name
		- made consistent use of annotations in header constructs
		- grouped types into Major complexTypes, Minor complexTypes and simpleTypes in alphabetic order

-->
	<xs:element name="CAM">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Header" type="HeaderType"/>
				<xs:element name="AssemblyStructure" type="AssemblyStructureType"/>
				<xs:element name="BusinessUseContext" type="BusinessUseContextType" minOccurs="0"/>
				<xs:element name="ContentReference" type="ContentReferenceType" minOccurs="0"/>
				<xs:element name="DataValidations" type="DataValidationsType" minOccurs="0"/>
				<xs:element name="ExternalMapping" type="ExternalMappingType" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="CAMlevel" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN">
						<xs:enumeration value="1"/>
						<xs:enumeration value="2"/>
						<xs:enumeration value="3"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="version">
				<xs:simpleType>
					<xs:restriction base="xs:NMTOKEN"/>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<!--Major Type Definitions-->
	<xs:complexType name="HeaderType">
		<xs:sequence>
			<xs:element name="Description" type="descriptionType" minOccurs="0"/>
			<xs:element name="Owner" type="xs:string" minOccurs="0"/>
			<xs:element name="Version" type="xs:string" minOccurs="0"/>
			<xs:element name="DateTime" type="xs:dateTime"/>
			<xs:element name="Parameters" type="contextStatementsType" minOccurs="0"/>
			<xs:element name="Properties" type="propertiesType" minOccurs="0"/>
			<xs:element name="Imports" type="ImportsType" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="AssemblyStructureType">
		<xs:sequence maxOccurs="unbounded">
			<xs:element name="Description" type="descriptionType" minOccurs="0"/>
			<xs:element name="Structure">
				<xs:complexType mixed="true">
					<xs:sequence>
						<xs:any namespace="##any" processContents="skip" minOccurs="0"/>
					</xs:sequence>
					<xs:attribute name="ID" type="xs:string"/>
					<xs:attribute name="reference" type="xs:string"/>
					<xs:attribute name="taxonomy" type="taxonomyType" use="required"/>
					<xs:attribute name="taxonomyOther" type="xs:string" use="optional"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="BusinessUseContextType">
		<xs:sequence>
			<xs:element name="Rules">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="default" type="contextType" minOccurs="0"/>
						<xs:element name="context" type="contextType" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ContentReferenceType">
		<xs:sequence>
			<xs:element name="Description" type="descriptionType" minOccurs="0"/>
			<xs:element name="Addressing">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Description" type="descriptionType" minOccurs="0"/>
						<xs:element name="registry" type="registryType" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="item" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:attribute name="type" type="contentType" use="required"/>
					<xs:attribute name="typeOther"/>
					<xs:attribute name="name" type="xs:string"/>
					<xs:attribute name="UIDReference" type="xs:string" use="required"/>
					<xs:attribute name="taxonomy" type="taxonomyType" use="required"/>
					<xs:attribute name="taxonomyOther" type="xs:string"/>
					<xs:attribute name="registry" type="xs:string"/>
					<xs:attribute name="datatype" type="xs:string"/>
					<xs:attribute name="setlength" type="xs:string"/>
					<xs:attribute name="setmask" type="xs:string"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="DataValidationsType">
		<xs:sequence>
			<xs:element name="Description" type="descriptionType" minOccurs="0"/>
			<xs:element name="Conditions" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="conditional" type="conditionalType" maxOccurs="unbounded"/>
					</xs:sequence>
					<xs:attribute name="conditionID" type="xs:string"/>
					<xs:attribute name="condition" type="xs:string"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ExternalMappingType">
		<xs:sequence>
			<xs:element name="ContentAssociation" maxOccurs="unbounded">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="Description" type="descriptionType" minOccurs="0"/>
						<xs:element name="Context">
							<xs:complexType/>
						</xs:element>
						<xs:element name="InputSource">
							<xs:complexType>
								<xs:attribute name="structureID" type="xs:string"/>
								<xs:attribute name="type" type="inputSourceType"/>
								<xs:attribute name="typeOther" type="xs:string"/>
								<xs:attribute name="location" type="xs:string"/>
							</xs:complexType>
						</xs:element>
						<xs:element name="OutputChoice">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="OutputStore" maxOccurs="unbounded">
										<xs:complexType>
											<xs:attribute name="structureID" type="xs:string"/>
											<xs:attribute name="type" type="outputSourceType"/>
											<xs:attribute name="typeOther" type="xs:string"/>
											<xs:attribute name="location" type="xs:string"/>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="RulesSet">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="MapRule" maxOccurs="unbounded">
										<xs:complexType>
											<xs:attribute name="output" type="xs:string" use="required"/>
											<xs:attribute name="input" type="xs:string" use="required"/>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<!--Minor complexType Definitions-->
	<xs:complexType name="annotationType">
		<xs:sequence>
			<xs:element name="documentation" maxOccurs="unbounded">
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string">
							<xs:attribute name="type" use="required">
								<xs:simpleType>
									<xs:restriction base="xs:NMTOKEN">
										<xs:enumeration value="description"/>
										<xs:enumeration value="note"/>
										<xs:enumeration value="license"/>
										<xs:enumeration value="usage"/>
										<xs:enumeration value="other"/>
									</xs:restriction>
								</xs:simpleType>
							</xs:attribute>
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="conditionalType">
		<xs:attribute name="expression" type="xs:string" use="required"/>
		<xs:attribute name="syntax" type="syntaxType"/>
		<xs:attribute name="outcome" type="outcomeType" use="required"/>
		<xs:attribute name="message" type="xs:string"/>
		<xs:attribute name="test" type="testType" use="required"/>
	</xs:complexType>
	<xs:complexType name="contextStatementsType">
		<xs:sequence>
			<xs:element name="annotation" type="annotationType" minOccurs="0"/>
			<xs:element name="ContextURL" type="xs:anyURI" minOccurs="0"/>
			<xs:element name="Parameter" type="declarationType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="contextType">
		<xs:sequence>
			<xs:element name="Description" type="descriptionType" minOccurs="0"/>
			<xs:choice maxOccurs="unbounded">
				<xs:element name="context" type="contextType" maxOccurs="unbounded"/>
				<xs:element name="constraint" type="constraintType" maxOccurs="unbounded"/>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="condition" type="xs:string"/>
		<xs:attribute name="scope" type="xs:string"/>
		<xs:attribute name="ID" type="xs:ID" use="optional"/>
	</xs:complexType>
	<xs:complexType name="constraintType">
		<xs:sequence minOccurs="0">
			<xs:element name="action" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="condition" type="xs:string" use="optional"/>
		<xs:attribute name="action" type="xs:string" use="optional"/>
		<xs:attribute name="item" type="xs:string" use="optional"/>
	</xs:complexType>
	<xs:complexType name="declarationType">
		<xs:sequence>
			<xs:element name="annotation" type="annotationType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="values" type="xs:string"/>
		<xs:attribute name="default" type="xs:string"/>
		<xs:attribute name="datatype" type="xs:string"/>
		<xs:attribute name="xpath" type="xs:string"/>
		<xs:attribute name="use" default="local">
			<xs:simpleType>
				<xs:restriction base="xs:NMTOKEN">
					<xs:enumeration value="global"/>
					<xs:enumeration value="override"/>
					<xs:enumeration value="local"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="importType">
		<xs:sequence>
			<xs:element name="annotation" type="annotationType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="URI" type="xs:anyURI" use="required"/>
		<xs:attribute name="alias" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="ImportsType">
		<xs:sequence>
			<xs:element name="annotation" type="annotationType" minOccurs="0"/>
			<xs:element name="import" type="importType" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="propertyType">
		<xs:sequence minOccurs="0">
			<xs:element name="annotation" type="annotationType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="value" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="propertiesType">
		<xs:sequence>
			<xs:element name="annotation" type="annotationType" minOccurs="0"/>
			<xs:element name="property" type="propertyType"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="registryType">
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="access" type="xs:string" use="required"/>
		<xs:attribute name="method" type="registryMethodType" use="required"/>
		<xs:attribute name="methodOther" type="xs:string"/>
		<xs:attribute name="description" type="xs:string"/>
	</xs:complexType>
	<!--Simple Type Definitions-->
	<xs:simpleType name="descriptionType">
		<xs:restriction base="xs:string"/>
	</xs:simpleType>
	<xs:simpleType name="contentType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="noun"/>
			<xs:enumeration value="corecomponent"/>
			<xs:enumeration value="BIE"/>
			<xs:enumeration value="aggregate"/>
			<xs:enumeration value="defaultAssembly"/>
			<xs:enumeration value="identifier"/>
			<xs:enumeration value="verb"/>
			<xs:enumeration value="schema"/>
			<xs:enumeration value="documentation"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="inputSourceType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="SQL"/>
			<xs:enumeration value="XML"/>
			<xs:enumeration value="EDI"/>
			<xs:enumeration value="TXT"/>
			<xs:enumeration value="ODBC"/>
			<xs:enumeration value="OTHER"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="outcomeType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="fail"/>
			<xs:enumeration value="ignore"/>
			<xs:enumeration value="report"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="outputSourceType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="SQL"/>
			<xs:enumeration value="XML"/>
			<xs:enumeration value="EDI"/>
			<xs:enumeration value="TXT"/>
			<xs:enumeration value="ODBC"/>
			<xs:enumeration value="XHTML"/>
			<xs:enumeration value="XFORM"/>
			<xs:enumeration value="MERGE"/>
			<xs:enumeration value="OTHER"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="registryMethodType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="URL"/>
			<xs:enumeration value="http"/>
			<xs:enumeration value="SOAP"/>
			<xs:enumeration value="ebXML"/>
			<xs:enumeration value="UDDI"/>
			<xs:enumeration value="Other"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="syntaxType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="XPath"/>
			<xs:enumeration value="JavaScript"/>
			<xs:enumeration value="VB"/>
			<xs:enumeration value="Perl"/>
			<xs:enumeration value="ECMAScript"/>
			<xs:enumeration value="Python"/>
			<xs:enumeration value="XQuery"/>
			<xs:enumeration value="Other"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="taxonomyType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="XSD"/>
			<xs:enumeration value="DTD"/>
			<xs:enumeration value="RNG"/>
			<xs:enumeration value="XML"/>
			<xs:enumeration value="EDI"/>
			<xs:enumeration value="HTML"/>
			<xs:enumeration value="MERGE"/>
			<xs:enumeration value="OTHER"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="testType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="always"/>
			<xs:enumeration value="postcheck"/>
			<xs:enumeration value="precheck"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
