<?xml version="1.0" encoding="UTF-8"?>
<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="1.1 Candidate" xml:lang="en">
	<xs:annotation>
		<xs:documentation>

  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 Martin 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
		
		1.0.1 Content Reference Section Changed to reflect new noun meta data
		- Added include of noun metadata 0.16 schema
		- deprecated item in ContentReference
		- added include to ContentReference
		- added nounMetaData to ContentReference section
		- added processOrder to the ContentReference section
		- changed verison number to 1.0.1 Candidate
		- changed namespace to http://www.oasis-open.org/committees/cam to not reflect version number
		
		1.0.2 nounMetaData changed
		
		1.0.3 Content Reference Section Changed
		- precessOrder spelling corrected to processOrder
		- processOrderType added
		- processOrder added to include and nounMetaData
		- Addressing section made optional
		- nounMetaData is now link differently to allow processOrder flag in the context of CAM
		
		1.0.4 External Mapping Section Changed
		- Now supports three methods -
		- xslt
		- DROOLS
		- SQL presistence engine (Sidhartha Nagolu and David Webber)
		
		1.1 Candidate
		- Section C,D,E replaced with Plug-in Extensions
		
		1.1.1 Candidate
		- Removed deprecated sections
		- Removed include of nounmetadata.xsd
		- copied and applied annotationType from nounmetadata.xsd
		
		1.1.0.06 Candidate
		-Changed to use defaultContextType to get round restriction problems.
		
		1.1.0.07 Candidate
		-Extensions Removed as per Specification
		- Added generic Include or ##any section
		
		1.1.0.08 Candidate
		- Extension element re-introduced to help with inclusion of ##any

	</xs:documentation>
	</xs:annotation>
	<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:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element name="Extension" minOccurs="0">
						<xs:complexType>
							<xs:sequence>
								<xs:any namespace="##any" processContents="skip" minOccurs="0"/>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="include" type="outputSourceType" minOccurs="0"/>
				</xs:choice>
			</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="defaultContextType" minOccurs="0"/>
						<xs:choice minOccurs="0" maxOccurs="unbounded">
							<xs:element name="context" type="contextType" minOccurs="0" maxOccurs="unbounded"/>
							<xs:element name="include" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
						</xs:choice>
					</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="defaultContextType">
		<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:element name="include" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
		</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:complexContent>
			<xs:extension base="defaultContextType">
				<xs:attribute name="condition" type="xs:string"/>
				<xs:attribute name="scope" type="xs:string" use="optional"/>
				<xs:attribute name="ID" type="xs:ID" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="constraintType">
		<xs:sequence minOccurs="0">
			<xs:element name="annotation" type="annotationType" 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>
	<!--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="extensionType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="preprocessor"/>
			<xs:enumeration value="postprocessor"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="processOrderType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="before"/>
			<xs:enumeration value="called"/>
			<xs:enumeration value="after"/>
		</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>

