<?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" xmlns="http://www.oasis-open.org/committees/cam" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="0.15.1" 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

-->
	<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>
	<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="ContextStatements" type="contextStatementsType"/>
			<xs:element name="Properties" type="propertiesType" 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>
	<xs:complexType name="contextStatementsType">
		<xs:sequence>
			<xs:element name="ContextURL" type="xs:anyURI" minOccurs="0"/>
			<xs:element name="Declaration" type="declarationType" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="declarationType">
		<xs:sequence>
			<xs:element name="Description" type="descriptionType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="parameter" 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="propertiesType">
		<xs:sequence>
			<xs:element name="annotation" minOccurs="0">
				<xs:complexType>
					<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:element>
			<xs:element name="using" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="use" maxOccurs="unbounded">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="CAMlocationURL" type="xs:string"/>
									<xs:element name="relatedStructureID" type="xs:string" minOccurs="0"/>
									<xs:element name="Description" type="descriptionType" minOccurs="0"/>
									<xs:element name="import" maxOccurs="unbounded">
										<xs:complexType>
											<xs:attribute name="CAMmember" type="xs:string" use="required"/>
											<xs:attribute name="CAMalias" type="xs:string" use="required"/>
											<xs:attribute name="comment" type="xs:string"/>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</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="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>
	<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: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="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="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="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="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="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="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="testType">
		<xs:restriction base="xs:NMTOKEN">
			<xs:enumeration value="always"/>
			<xs:enumeration value="postcheck"/>
			<xs:enumeration value="precheck"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="descriptionType">
		<xs:restriction base="xs:string"/>
	</xs:simpleType>
</xs:schema>
