<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<schema xmlns:oio="urn:oio:definitions:1.0.0" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:oio:definitions:1.0.0" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<!-- ************************ -->
	<!-- ***** Definitions  ***** -->
	<!-- ************************ -->
	<element name="Definitions" type="oio:DefinitionsType"/>
	<complexType name="DefinitionsType">
		<sequence>
			<element ref="oio:IncludeDefinitions" minOccurs="0" maxOccurs="unbounded"/>
			<choice minOccurs="0" maxOccurs="unbounded">
				<element ref="oio:AggregateDataDefinition"/>
				<element ref="oio:BasicDataDefinition"/>
				<element ref="oio:AssociationDataDefinition"/>
				<element ref="oio:DataType"/>
				<element ref="oio:SemanticDefinition"/>
				<element ref="oio:Ontology"/>
				<element ref="oio:Taxonomy"/>
				<element ref="oio:MessageDefinition"/>
				<element ref="oio:OperationDefinition"/>
				<element ref="oio:ServiceDefinition"/>
				<element ref="oio:MappingDefinition"/>
				<element ref="oio:Assembly"/>
			</choice>
		</sequence>
	</complexType>
	<!-- *********** -->
	<element name="IncludeDefinitions" type="oio:IncludeDefinitionsType"/>
	<complexType name="IncludeDefinitionsType">
		<attribute name="locationReference" type="string"/>
	</complexType>
	<!-- ****************************************************************************************************************************** -->
	<!-- *  Definitions                                                                                                                                                                     * -->
	<!-- ****************************************************************************************************************************** -->
	<complexType name="DefinitionType" abstract="true">
		<attribute name="definitionIdentifier" type="string" use="required"/>
		<attribute name="versionIdentifier" type="string" use="required"/>
	</complexType>
	<!-- ****************************************************************************************************************************** -->
	<!-- *  Title & Description                                                                                                                                                        * -->
	<!-- ****************************************************************************************************************************** -->
	<element name="TitleText" type="string"/>
	<element name="DescriptionText" type="string"/>
	<element name="AlternativeTitleText" type="string"/>
	<element name="AlternativeDescriptionText" type="string"/>
	<element name="DomainText" type="string"/> <!-- Applies only for UML static class attributes -->
	<element name="AlternativeDomainText" type="string"/> <!-- Applies only for UML static class attributes -->
	<!-- ****************************************************************************************************************************** -->
	<!-- *  Model                                                                                                                                                                             * -->
	<!-- ****************************************************************************************************************************** -->
	<complexType name="ModelType">
		<sequence>
			<element ref="oio:TitleText"/>
			<element ref="oio:DescriptionText" minOccurs="0"/>
			<sequence minOccurs="0">
				<element ref="oio:AlternativeTitleText"/>
				<element ref="oio:AlternativeDescriptionText" minOccurs="0"/>
			</sequence>
			<sequence minOccurs="0">
				<!-- Applies only for class attributes: -->
				<element ref="oio:DomainText"/>
				<element ref="oio:AlternativeDomainText" minOccurs="0"/>
			</sequence>
			<!-- Reference to a specific model from where above model information is taken from:  
				   TODO: This should properly be removed unles classes are allowed as definitions -->
			<element name="ModelReference" type="string" minOccurs="0"/>
		</sequence>
	</complexType>
	<!-- -->
	<!-- ****************************************************************************************************************************** -->
	<!-- *  Data Definitions                                                                                                                                                            * -->
	<!-- ****************************************************************************************************************************** -->
	<complexType name="DataDefinitionType" abstract="true">
		<complexContent>
			<extension base="oio:DefinitionType">
				<attribute name="semanticReference" type="string"/>
			</extension>
		</complexContent>
	</complexType>
	<!-- Embedded version: -->
	<complexType name="DataDefinitionEmbeddedType" abstract="true">
		<attribute name="semanticReference" type="string"/>
	</complexType>
	<!-- ****************************************************************************************************************************** -->
	<!-- * Data Definition Embedded & Reference                                                                                                                    * -->
	<!-- ****************************************************************************************************************************** -->
	<complexType name="SimpleDataDefinitionEmbeddedType" abstract="true">
		<complexContent>
			<extension base="oio:DataDefinitionEmbeddedType">
				<attribute name="occurrenceCode" type="oio:OccurrenceCodeType" use="required"/>
				<!-- default = 1: -->
				<attribute name="minimumCount" type="nonNegativeInteger" use="optional"/>
				<!-- default = 1 ;  -1 = unbounded: -->
				<attribute name="maximumCount" type="integer" use="optional"/>
				<attribute name="contentIdentifier" type="string" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="DataDefinitionReferenceType">
		<sequence>
			<element name="Model" type="oio:ModelType" minOccurs="0"/>
		</sequence>
		<!-- Reference to global data definition (BDD or ASDD) that defines this local data definition (BDD or ASDD) -->
		<attribute name="dataDefinitionReference" type="string" use="required"/>
		<attribute name="occurrenceCode" type="oio:OccurrenceCodeType" use="required"/>
		<!-- default = 1: -->
		<attribute name="minimumCount" type="nonNegativeInteger" use="optional"/>
		<!-- default = 1 ;  -1 = unbounded: -->
		<attribute name="maximumCount" type="integer" use="optional"/>
		<attribute name="contentIdentifier" type="string" use="required"/>
	</complexType>
	<!-- *********** -->
	<simpleType name="OccurrenceCodeType">
		<restriction base="string">
			<enumeration value="Mandatory"/>
			<enumeration value="Optional"/>
			<enumeration value="OneOrMore"/>
			<enumeration value="ZeroOrMore"/>
			<enumeration value="MinMax"/>
		</restriction>
	</simpleType>
	<!-- ****************************************************************************************************************************************** -->
	<!-- * Basic Data Definition                                                                                                                                                                      * -->
	<!-- ****************************************************************************************************************************************** -->
	<element name="BasicDataDefinition" type="oio:BasicDataDefinitionType"/>
	<!-- *********** -->
	<complexType name="BasicDataDefinitionType">
		<complexContent>
			<extension base="oio:DataDefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:BDDContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- Embedded version for use in ADDs: -->
	<complexType name="BasicDataDefinitionEmbeddedType">
		<complexContent>
			<extension base="oio:SimpleDataDefinitionEmbeddedType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:BDDContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="BDDContentType">
		<choice>
			<!-- Indicates primitive data type -->
			<element name="MasterDataTypeCode" type="oio:MasterDataTypeCodeType"/>
			<!-- Reference to a datatype definition -->
			<element name="DataTypeReference" type="string"/>
		</choice>
		<attribute name="baseReference" type="string" use="optional"/>
	</complexType>
	<!-- ****************************************************************************************************************************************** -->
	<!-- * Association Data Definition                                                                                                                                                           * -->
	<!-- ****************************************************************************************************************************************** -->
	<element name="AssociationDataDefinition" type="oio:AssociationDataDefinitionType"/>
	<!-- *********** -->
	<complexType name="AssociationDataDefinitionType">
		<complexContent>
			<extension base="oio:DataDefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:ASDDContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- Embedded version for use in ADDs: -->
	<complexType name="AssociationDataDefinitionEmbeddedType">
		<complexContent>
			<extension base="oio:SimpleDataDefinitionEmbeddedType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:ASDDContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="ASDDContentType">
		<sequence>
			<!-- Reference to an aggregate data definition: -->
			<element name="AggregateDataDefinitionReference" type="string"/>
		</sequence>
		<attribute name="baseReference" type="string" use="optional"/>
	</complexType>
	<!-- ***************************************************************************************************************************** -->
	<!-- ***** Aggregated Data Definition                                                                                                                          ****** -->
	<!-- ***************************************************************************************************************************** -->
	<element name="AggregateDataDefinition" type="oio:AggregateDataDefinitionType"/>
	<!-- *********** -->
	<complexType name="AggregateDataDefinitionType">
		<complexContent>
			<extension base="oio:DataDefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:ADDContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="ADDContentType">
		<choice minOccurs="0" maxOccurs="unbounded">
			<element name="BasicDataDefinition" type="oio:BasicDataDefinitionEmbeddedType"/>
			<element name="BasicDataDefinitionReference" type="oio:DataDefinitionReferenceType"/>
			<element name="AssociationDataDefinition" type="oio:AssociationDataDefinitionEmbeddedType"/>
			<element name="AssociationDataDefinitionReference" type="oio:DataDefinitionReferenceType"/>
			<element name="AnyDefinition" type="oio:AnyDefinitionEmbeddedType"/> <!-- This is to support the wildcard-construction any in xml schema --> 
		</choice>
		<attribute name="compositionCode" type="oio:CompositionCodeType"/>
		<attribute name="baseReference" type="string" use="optional"/>
	</complexType>
	<!-- *********** -->
	<simpleType name="CompositionCodeType">
		<restriction base="string">
			<enumeration value="ordered"/>
			<enumeration value="alternate"/>
		</restriction>
	</simpleType>
	<!-- ****************************************************************************************************************************************** -->
	<!-- ***** Any Definition                                                                                                                                                                       ***** -->
	<!-- ****************************************************************************************************************************************** -->
	<complexType name="AnyDefinitionEmbeddedType">
		<complexContent>
			<extension base="oio:SimpleDataDefinitionEmbeddedType">
				<sequence>
					<!-- Add attributes for processContents, namespace, etc. -->
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- ****************************************************************************************************************************************** -->
	<!-- ***** Data Type Definition                                                                                                                                                            ***** -->
	<!-- ****************************************************************************************************************************************** -->
	<element name="DataType" type="oio:DataTypeDefinitionType"/>
	<!-- *********** -->
	<complexType name="DataTypeDefinitionType">
		<complexContent>
			<extension base="oio:DataDefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:DTContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="DTContentType">
		<choice minOccurs="0">
			<sequence>
				<element name="MasterDataTypeCode" type="oio:MasterDataTypeCodeType"/>
				<element name="Facet" type="oio:FacetType" minOccurs="0" maxOccurs="unbounded"/>
			</sequence>
			<element name="TaxonomyReference" type="string"/>
			<!-- Reference to a taxonomy (or maybe a GeneriCode spec) to be used as a code list -->
			<element name="CodeList" type="oio:CodeListType"/>
		</choice>
		<attribute name="baseReference" type="string" use="optional"/>
	</complexType>
	<!-- *********** -->
	<simpleType name="MasterDataTypeCodeType">
		<!-- See also http://www.w3.org/TR/xmlschema-2/#built-in-datatypes -->
		<restriction base="string">
			<enumeration value="string"/>
			<enumeration value="boolean"/>
			<enumeration value="binary"/> <!-- binary is fundament for  base64Binary and hexBinary -->
			<enumeration value="float"/>
			<enumeration value="decimal"/> <!-- decimal is fundament for integer -->
			<enumeration value="integer"/> <!-- integer is fundament for all decimals without a decimal part -->
			<enumeration value="double"/>
			<enumeration value="duration"/>
			<enumeration value="dateTime"/>
			<enumeration value="time"/>
			<enumeration value="date"/>
			<enumeration value="gYearMonth"/>
			<enumeration value="gYear"/>
			<enumeration value="gMonthDay"/>
			<enumeration value="gDay"/>
			<enumeration value="gMonth"/>
		</restriction>
	</simpleType>
	<!-- *********** -->
	<complexType name="FacetType">
		<sequence>
			<element name="Model" type="oio:ModelType" minOccurs="0"/>
		</sequence>
		<attribute name="facetTypeCode" type="oio:FacetTypeCodeType" use="required"/>
		<attribute name="facetValue" type="string" use="required"/>
		<attribute name="semanticReference" type="string"/>
	</complexType>
	<!-- *********** -->
	<simpleType name="FacetTypeCodeType">
		<restriction base="string">
			<enumeration value="Length"/>
			<enumeration value="MinimumLength"/>
			<enumeration value="MaximumLength"/>
			<enumeration value="Expression"/>
			<enumeration value="Enumeration"/>
			<enumeration value="Whitespace"/>
			<enumeration value="MaximumInclusive"/>
			<enumeration value="MaximumExclusive"/>
			<enumeration value="MinimumInclusive"/>
			<enumeration value="MinimumExclusive"/>
			<enumeration value="TotalDigits"/>
			<enumeration value="FractionDigits"/>
		</restriction>
	</simpleType>
	<!-- *********** -->
	<complexType name="CodeListType">
		<sequence>
			<element name="Enumeration" type="oio:EnumerationType" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
		<attribute name="taxonomyReference" type="string"/>
	</complexType>
	<!-- *********** -->
	<complexType name="EnumerationType">
		<sequence>
			<element name="Model" type="oio:ModelType"/>
		</sequence>
		<attribute name="semanticReference" type="string"/>
	</complexType>
	<!-- ******************************************************************************************************************************************** -->
	<!-- *  Section: Semantic Definition                                                                                                                                                           * -->
	<!-- ******************************************************************************************************************************************** -->
	<element name="SemanticDefinition" type="oio:SemanticDefinitionType"/>
	<!-- *********** -->
	<complexType name="SemanticDefinitionType">
		<complexContent>
			<extension base="oio:DefinitionType">
				<choice minOccurs="0" maxOccurs="unbounded">
					<element name="Term" type="oio:TermType"/>
					<element name="Description" type="oio:DescriptionType"/>
				</choice>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="TermType">
		<simpleContent>
			<extension base="string">
				<attribute name="roleCode" type="oio:TermRoleCodeType" use="required"/>
				<attribute name="formatCode" type="oio:TermFormatCodeType" use="optional"/>
				<attribute name="definitionIdentifier" type="string" use="optional"/>
				<attribute name="versionIdentifier" type="string" use="optional"/>
				<attribute name="languageCode" type="oio:LanguageCodeType" use="required"/>
			</extension>
		</simpleContent>
	</complexType>
	<!-- *********** -->
	<simpleType name="TermRoleCodeType">
		<restriction base="string">
			<enumeration value="preferred"/>
			<enumeration value="admitted"/>
			<enumeration value="deprecated"/>
			<enumeration value="obsolete"/>
		</restriction>
	</simpleType>
	<!-- *********** -->
	<simpleType name="TermFormatCodeType">
		<restriction base="string">
			<enumeration value="text"/>
			<enumeration value="symbolic"/> <!-- if format is symbolic then the term is a reference to a symbolic representation, e.g. a picture file -->
		</restriction>
	</simpleType>
	<!-- *********** -->
	<simpleType name="LanguageCodeType">
		<!-- The language code is a combination of an ISO 639 two-letter lowercase culture code associated with a language 
				and an ISO 3166 two-letter uppercase subculture code associated with a country or region. -->
		<restriction base="string">
			<enumeration value="en"/>
			<enumeration value="da"/>
		</restriction>
	</simpleType>
	<!-- *********** -->
	<complexType name="DescriptionType">
		<simpleContent>
			<extension base="string">
				<attribute name="roleCode" type="oio:DescriptionRoleCodeType" use="required"/>
				<attribute name="languageCode" type="oio:LanguageCodeType" use="required"/>
			</extension>
		</simpleContent>
	</complexType>
	<!-- *********** -->
	<simpleType name="DescriptionRoleCodeType">
		<restriction base="string">
			<enumeration value="definition"/>
			<enumeration value="explanation"/>
			<enumeration value="rationale"/>
			<enumeration value="example"/>
		</restriction>
	</simpleType>
	<!-- ****************************************************************************************************************************************** -->
	<!-- *  Section: Ontology                                                                                                                                                                           * -->
	<!-- ****************************************************************************************************************************************** -->
	<element name="Ontology" type="oio:OntologyType"/>
	<!-- *********** -->
	<complexType name="OntologyType">
		<complexContent>
			<extension base="oio:DefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:OntologyContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="OntologyContentType">
		<sequence>
			<element name="Concept" type="oio:ConceptType" maxOccurs="unbounded"/>
		</sequence>
	</complexType>
	<!-- *********** -->
	<complexType name="ConceptType">
		<sequence>
			<element name="Feature" type="oio:FeatureType" minOccurs="0" maxOccurs="unbounded"/>
			<choice minOccurs="0" maxOccurs="unbounded">
				<element name="IsKindOf" type="string"/>
				<element name="IsPartOf" type="string"/>
				<element name="IsA" type="string"/>
				<element name="IsAssociatedWith" type="oio:RelationType"/>
			</choice>
		</sequence>
		<attribute name="conceptIdentifier" type="string"/>
		<attribute name="semanticReference" type="string"/>
	</complexType>
	<!-- *********** -->
	<complexType name="FeatureType">
		<!-- Karakteristisk træk = characteristic feature -->
		<sequence>
			<element name="FeatureName" type="string"/>
			<element name="FeatureValue" type="string"/>
		</sequence>
	</complexType>
	<!-- *********** -->
	<complexType name="RelationType">
		<simpleContent>
			<extension base="string">
				<attribute name="associationKindText" type="string" use="required"/>
				<attribute name="semanticReference" type="string"/>
				<attribute name="conceptReference" type="string"/>
				<attribute name="associationDescriptionText" type="string"/>
			</extension>
		</simpleContent>
	</complexType>
	<!-- ****************************************************************************************************************************************** -->
	<!-- *  Section: Taxonomy                                                                                                                                                                         * -->
	<!-- ****************************************************************************************************************************************** -->
	<element name="Taxonomy" type="oio:TaxonomyType"/>
	<!-- *********** -->
	<complexType name="TaxonomyType">
		<complexContent>
			<extension base="oio:DefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:TaxonomyContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="TaxonomyContentType">
		<sequence>
			<element ref="oio:Category" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
	</complexType>
	<!-- *********** -->
	<element name="Category" type="oio:CategoryType"/>
	<!-- *********** -->
	<complexType name="CategoryType">
		<sequence>
			<element ref="oio:Category" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
		<!-- When no semantic definition og concept element is avaliable, use categoryName to identify this node: -->
		<attribute name="categoryName" type="string" use="optional"/>
		<!-- Reference to a semantic definition: -->
		<attribute name="semanticReference" type="string" use="optional"/>
		<!-- reference to a concept element in an ontology: -->
		<attribute name="conceptReference" type="string" use="optional"/>
	</complexType>
	<!-- ************************************************************************************************************************************** -->
	<!-- * Section: Message definition                                                                                                                                                     * -->
	<!-- ************************************************************************************************************************************** -->
	<element name="MessageDefinition" type="oio:MessageDefinitionType"/>
	<!-- *********** -->
	<complexType name="MessageDefinitionType">
		<complexContent>
			<extension base="oio:DefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:MessageContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="MessageContentType">
		<sequence>
			<element name="messageActionCode" type="oio:MessageActionCodeType"/>
			<!-- Reference to the ADD, BDD, ASDD, or DT that contains the message DD for the message definition: -->
			<element name="DataDefinitionReference" type="string"/>
		</sequence>
	</complexType>
	<!-- *********** -->
	<simpleType name="MessageActionCodeType">
		<restriction base="string">
			<!-- The message actions below are copied from the Core Components Message Assembly Working Draft 1.10 -->
			<!-- Create: The Business Entity is to be created in the information system of the recipient. The entity must not already exist. -->
			<enumeration value="create"/>
			<!-- Change: The information on the Business Entity is to be changed at the recipient. The Business Entity must exist there. -->
			<enumeration value="change"/>
			<!-- Delete: The Business Entity is to be deleted from the information system of the recipient. The Business Entity must exist there. -->
			<enumeration value="delete"/>
			<!-- Save: The information on the Business Entity is to be saved at the recipient. If the Business Entity already exists there, it is changed. It if does not exist there, it is created. -->
			<enumeration value="save"/>
			<!--Remove: The Business Entity is to be deleted from the recipients information system. The Business Entity does not need to exist there. If it exists, it is deleted. If it does not exists, no action is taken. -->
			<enumeration value="remove"/>
			<!-- Request: The recipient is requested to supply information on the Business Entity that is identified by the Business Information Entity. -->
			<enumeration value="request"/>
			<!-- Refer: The Business Information Entity is included for reference purposes, to identify or to give information on another Business Entity. E.g. while creating an Order, reference is made to a Contract. The Business Entity that is referred to must already exist in the recipients information system. Usually only attributes to identify the referred Business Entity are included. -->
			<enumeration value="refer"/>
			<!-- Repeat: The Business Information Entity contains information that is already known by the recipient and is unchanged. It is included for regulatory purposes, convenience or technical reasons. -->
			<enumeration value="repeat"/>
			<!-- None: The recipient is allowed to take any action on receiving the business information. This is the default action that is implied if the action code is not present. -->
			<enumeration value="none"/>
		</restriction>
	</simpleType>
	<!-- ************************************************************************************************************************************** -->
	<!-- * Section: Operation definition                                                                                                                                                     * -->
	<!-- ************************************************************************************************************************************** -->
	<element name="OperationDefinition" type="oio:OperationDefinitionType"/>
	<!-- *********** -->
	<complexType name="OperationDefinitionType">
		<complexContent>
			<extension base="oio:DefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:OperationContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="OperationContentType">
		<sequence>
			<element name="MessageDefinitionReference" type="string" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
	</complexType>
	<!-- ************************************************************************************************************************************** -->
	<!-- * Section: Service definition                                                                                                                                                     * -->
	<!-- ************************************************************************************************************************************** -->
	<element name="ServiceDefinition" type="oio:ServiceDefinitionType"/>
	<!-- *********** -->
	<complexType name="ServiceDefinitionType">
		<complexContent>
			<extension base="oio:DefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:ServiceContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="ServiceContentType">
		<sequence>
			<element name="OperationDefinitionReference" type="string" minOccurs="0" maxOccurs="unbounded"/>
		</sequence>
	</complexType>
	<!-- ************************************************************************************************************************************** -->
	<!-- * Section: Mapping definitions                                                                                                                                                    * -->
	<!-- ************************************************************************************************************************************** -->
	<!-- 
		An mapping definition specifies the transformation from data definitions to XML Schema components, i.e.
		to element & attribute declarations and complex and simple type definitions.
		Furthermore it specifies the transformation fra schema components to schema files.
		The mapping definition is the only definition in this schema that belongs to the tecnical implementation of MS.
	-->
	<element name="MappingDefinition" type="oio:MappingDefinitionType"/>
	<!-- *********** -->
	<complexType name="MappingDefinitionType">
		<complexContent>
			<extension base="oio:DefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:MappingContentType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="MappingContentType">
		<sequence>
			<element name="ResourceReference" type="string"/>
			<element name="NDRComplianceCode" type="oio:NDRComplianceCodeType"/>
			<element name="SchemaGeneration" type="oio:SchemaGenerationType" minOccurs="0"/>
			<!-- -->
			<element name="ComponentMapping" type="oio:ComponentMappingType" minOccurs="0"/>
		</sequence>
	</complexType>
	<!-- *********** -->
	<complexType name="SchemaGenerationType">
		<sequence>
			<element name="FileGenerationCode" type="oio:FileGenerationCodeType" default="OneSchemaFilePerNamespace" minOccurs="0"/>
			<element name="EnforceElementDeclarationIndicator" type="boolean" minOccurs="0"/>
			<element name="DefaultAggregationCode" type="oio:AggregationCodeType" minOccurs="0"/>
			<element name="ReuseExistingSchemasIndicator" type="boolean" minOccurs="0"/>
		</sequence>
	</complexType>
	<!-- *********** -->
	<simpleType name="NDRComplianceCodeType">
		<restriction base="string">
			<enumeration value="OIO NDR 3.2"/>
			<enumeration value="OIO NDR 4.0"/>
		</restriction>
	</simpleType>
	<!-- *********** -->
	<complexType name="ComponentMappingType">
		<sequence>
			<choice minOccurs="0" maxOccurs="unbounded">
				<element ref="oio:DataTypeMapping"/>
				<element ref="oio:AggregateDataMapping"/>
				<element ref="oio:BasicDataMapping"/>
				<element ref="oio:AssociationDataMapping"/>
				<element ref="oio:MessageMapping"/>
				<element name="MappingGroup" type="oio:MappingGroupType"/>
			</choice>
		</sequence>
		<attribute name="oioNamespaceReference" type="string"/>
		<attribute name="documentationIndicator" type="boolean"/>
	</complexType>
	<!-- *********** -->
	<complexType name="MappingGroupType">
		<sequence>
			<choice minOccurs="0" maxOccurs="unbounded">
				<element ref="oio:DataTypeMapping"/>
				<element ref="oio:AggregateDataMapping"/>
				<element ref="oio:BasicDataMapping"/>
				<element ref="oio:AssociationDataMapping"/>
				<element ref="oio:MessageMapping"/>
			</choice>
		</sequence>
		<attribute name="titleIdentifier" type="string"/>
		<attribute name="oioNamespaceReference" type="string"/>
		<attribute name="documentationIndicator" type="boolean"/>
	</complexType>
	<!-- *********** -->
	<simpleType name="FileGenerationCodeType">
		<restriction base="string">
			<!-- one schema file for each namespace (always possible): -->
			<enumeration value="OneSchemaFilePerNamespace"/>
			<!-- one schema file for the each group, if possible with regard to namespace: -->
			<enumeration value="OneSchemaFilePerGroup"/>
			<!-- In contrast to several schema files for one namespace -->
			<enumeration value="OneSchemaFilePerElementAttribute"/>
			<!-- one schema file per element or attribute declaration  -->
		</restriction>
	</simpleType>
	<!-- ***** Mapping Type ***** -->
	<complexType name="MappingBaseType" abstract="true">
		<attribute name="oioNamespaceReference" type="string"/>
		<attribute name="documentationIndicator" type="string"/>
	</complexType>
	<!-- *********** -->
	<complexType name="MappingType" abstract="true">
		<complexContent>
			<extension base="oio:MappingBaseType">
				<sequence>
					<element ref="oio:Naming" minOccurs="0"/>
				</sequence>
				<attribute name="definitionReference" type="string"/>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="MappingEmbeddedBaseType" abstract="true">
		<complexContent>
			<extension base="oio:MappingBaseType">
				<!-- aggregation code default value: composition -->
				<attribute name="aggregationCode" type="oio:AggregationCodeType"/>
				<attribute name="contentReference" type="string" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<!-- ********** -->
	<complexType name="MappingEmbeddedType" abstract="true">
		<complexContent>
			<extension base="oio:MappingEmbeddedBaseType">
				<sequence>
					<element ref="oio:Naming" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- ********** -->
	<complexType name="MappingReferenceEmbeddedType">
		<complexContent>
			<extension base="oio:MappingEmbeddedBaseType"/>
		</complexContent>
	</complexType>
	<!-- ********** -->
	<simpleType name="AggregationCodeType">
		<restriction base="string">
			<enumeration value="composition"/>
			<enumeration value="shared"/>
		</restriction>
	</simpleType>
	<!-- *********** -->
	<element name="Naming" type="oio:NamingType"/>
	<complexType name="NamingType">
		<sequence>
			<element ref="oio:ISOName" minOccurs="0"/>
			<element name="AlternativeName" type="string" minOccurs="0"/>
		</sequence>
		<attribute name="languageCode" type="oio:LanguageCodeType" use="required"/>
	</complexType>
	<!-- *********** -->
	<element name="ISOName" type="oio:ISONameType"/>
	<complexType name="ISONameType">
		<sequence>
			<element name="ObjectClassTermName" type="string"/>
			<element name="PropertyTermName" type="string" minOccurs="0"/>
			<element name="RepresentationTermName" type="oio:RepresentationTermCodeType" minOccurs="0"/>
		</sequence>
	</complexType>
	<!-- *********** -->
	<simpleType name="RepresentationTermCodeType">
		<restriction base="string">
			<!-- Engelsk -->
			<enumeration value="Amount"/>
			<enumeration value="Code"/>
			<enumeration value="Data"/>
			<enumeration value="Date"/>
			<enumeration value="DateTime"/>
			<enumeration value="Identifier"/>
			<enumeration value="Indicator"/>
			<enumeration value="Measure"/>
			<enumeration value="Name"/>
			<enumeration value="Percent"/>
			<enumeration value="Quantity"/>
			<enumeration value="Rate"/>
			<enumeration value="Reference"/>
			<enumeration value="Text"/>
			<enumeration value="Time"/>
			<!-- Dansk -->
			<enumeration value="Beloeb"/>
			<enumeration value="Kode"/>
			<!-- <enumeration value="Data"/>  samme som engelsk -->
			<enumeration value="Dato"/>
			<enumeration value="DatoTid"/>
			<enumeration value="Identifikator"/>
			<enumeration value="Indikator"/>
			<enumeration value="Maal"/>
			<enumeration value="Navn"/>
			<enumeration value="Procent"/>
			<enumeration value="Kvantitet"/>
			<!-- <enumeration value="Rate"/> samme som engelsk -->
			<!-- <enumeration value="Reference"/> samme som engelsk -->
			<enumeration value="Tekst"/>
			<enumeration value="Tid"/>
		</restriction>
	</simpleType>
	<!-- ********************************************* -->
	<!-- ***** Implementation                         ***** -->
	<!-- ********************************************* -->
	<simpleType name="ImplementDataTypeCodeType">
		<!-- See also http://www.w3.org/TR/xmlschema-2/#built-in-datatypes -->
		<restriction base="string">
			<enumeration value="string"/>
			<enumeration value="boolean"/>
			<enumeration value="binary"/> <!-- binary is fundament for  base64Binary and hexBinary -->
			<enumeration value="float"/>
			<enumeration value="decimal"/> <!-- decimal is fundament for integer -->
			<enumeration value="integer"/> <!-- integer is fundament for all decimals without a decimal part -->
			<!-- Implementation data types derived from integer: -->
			<enumeration value="nonPositiveInteger"/> <!-- derived from integer -->
			<enumeration value="negativeInteger"/> <!-- derived from nonPositiveInteger -->
			<enumeration value="long"/> <!-- derived from integer -->
			<enumeration value="int"/> <!-- derived from long -->
			<enumeration value="short"/> <!-- derived from int -->
			<enumeration value="byte"/> <!-- derived from short-->
			<enumeration value="nonNegativeInteger"/>
			<enumeration value="unsignedLong"/> <!-- derived from nonNegativeInteger -->
			<enumeration value="unsignedInt"/> <!-- derived from unsignedLong -->
			<enumeration value="unsignedShort"/> <!-- derived from unsignedInt -->
			<enumeration value="unsignedByte"/> <!-- derived from unsignedShort-->
			<enumeration value="positiveInteger"/> <!-- derived from nonNegativeInteger -->
			<!-- End of implementation data types -->
			<enumeration value="double"/>
			<enumeration value="duration"/>
			<enumeration value="dateTime"/>
			<enumeration value="time"/>
			<enumeration value="date"/>
			<enumeration value="gYearMonth"/>
			<enumeration value="gYear"/>
			<enumeration value="gMonthDay"/>
			<enumeration value="gDay"/>
			<enumeration value="gMonth"/>
		</restriction>
	</simpleType>
	<!-- *********** -->
	<complexType name="ReuseExistingSchemaType">
		<sequence>
			<element name="SchemaNamespaceReference" type="string"/>
			<element name="SchemaLocationReference" type="string"/>
			<element name="SchemaElementName" type="string"/>
		</sequence>
	</complexType>
	<!-- ********************************************* -->
	<!-- ***** Data Type Mapping                 ***** -->
	<!-- ********************************************* -->
	<element name="DataTypeMapping" type="oio:DataTypeMappingType"/>
	<complexType name="DataTypeMappingType">
		<complexContent>
			<extension base="oio:MappingType">
				<sequence>
					<element name="Implementation" type="oio:DTImplementationType" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="DTImplementationType">
		<choice>
			<element name="ImplementDataTypeCode" type="oio:ImplementDataTypeCodeType" minOccurs="0"/>
			<element name="ReuseExistingSchema" type="oio:ReuseExistingSchemaType" minOccurs="0"/>
		</choice>
	</complexType>
	<!-- ********************************************* -->
	<!-- ***** Aggregate Data Mapping     ****** -->
	<!-- ********************************************* -->
	<element name="AggregateDataMapping" type="oio:AggregateDataMappingType"/>
	<complexType name="AggregateDataMappingType">
		<complexContent>
			<extension base="oio:MappingType">
				<sequence>
					<element name="Content" type="oio:ADMContentType" minOccurs="0"/>
					<element name="Implementation" type="oio:ADDImplementationType" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="ADMContentType">
		<choice minOccurs="0" maxOccurs="unbounded">
			<element name="AnyMapping" type="oio:AnyEmbeddedMappingType"/>
			<element name="BasicDataMapping" type="oio:BasicDataEmbeddedMappingType"/>
			<element name="AssociationDataMapping" type="oio:AssociationDataEmbeddedMappingType"/>
			<element name="BasicDataReferenceMapping" type="oio:MappingReferenceEmbeddedType"/>
			<element name="AssociationDataReferenceMapping" type="oio:MappingReferenceEmbeddedType"/>
			<element name="CommentText" type="string"/>
		</choice>
	</complexType>
	<!-- *********** -->
	<complexType name="ADDImplementationType">
		<choice>
			<element name="ReuseExistingSchema" type="oio:ReuseExistingSchemaType" minOccurs="0"/>
		</choice>
	</complexType>
	<!-- ******************************************* -->
	<!-- ***** Basic Data Mapping             ***** -->
	<!-- ******************************************* -->
	<complexType name="BasicDataEmbeddedMappingType">
		<complexContent>
			<extension base="oio:MappingEmbeddedType">
				<!-- attribute indicator default value: false -->
				<attribute name="attributeIndicator" type="boolean"/>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="BasicDataMappingType">
		<complexContent>
			<extension base="oio:MappingType">
				<sequence>
					<element name="Implementation" type="oio:BDDImplementationType" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="BasicDataMapping" type="oio:BasicDataMappingType"/>
	<!-- *********** -->
	<complexType name="BDDImplementationType">
		<choice>
			<element name="ImplementDataTypeCode" type="oio:ImplementDataTypeCodeType" minOccurs="0"/>
			<element name="ReuseExistingSchema" type="oio:ReuseExistingSchemaType" minOccurs="0"/>
		</choice>
	</complexType>
	<!-- ******************************************* -->
	<!-- ***** Association Data Mapping  ***** -->
	<!-- ******************************************* -->
	<complexType name="AssociationDataEmbeddedMappingType">
		<complexContent>
			<extension base="oio:MappingEmbeddedType">
				<!-- embedded indicator default value: false -->
				<attribute name="embeddedIndicator" type="boolean"/>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="AssociationDataMappingType">
		<complexContent>
			<extension base="oio:MappingType">
				<sequence>
					<element name="Implementation" type="oio:ASDDImplementationType" minOccurs="0"/>
				</sequence>
				<!-- embedded indicator default value: false -->
				<attribute name="embeddedIndicator" type="boolean"/>
			</extension>
		</complexContent>
	</complexType>
	<element name="AssociationDataMapping" type="oio:AssociationDataMappingType"/>
	<!-- *********** -->
	<complexType name="ASDDImplementationType">
		<choice>
			<element name="ReuseExistingSchema" type="oio:ReuseExistingSchemaType" minOccurs="0"/>
		</choice>
	</complexType>
	<!-- ********************************************* -->
	<!-- ***** Any Mapping                             ***** -->
	<!-- ********************************************* -->
	<complexType name="AnyEmbeddedMappingType">
		<complexContent>
			<extension base="oio:MappingEmbeddedType">
				<sequence>
					<!-- Add attributes for processContent, namespace-->
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- ************************************ -->
	<!-- ***** Message Mapping     ***** -->
	<!-- ************************************ -->
	<element name="MessageMapping" type="oio:MessageMappingType"/>
	<complexType name="MessageMappingType">
		<complexContent>
			<extension base="oio:MappingType">
				<sequence>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<!-- ************************************************************************************************************************************** -->
	<!-- * Section: Assembly  & Specification                                                                                                                                        * -->
	<!-- ************************************************************************************************************************************** -->
	<!-- Maybe this section should be in the Desktop schema instead of here -->
	<element name="Assembly" type="oio:AssemblyType"/>
	<!-- *********** -->
	<complexType name="AssemblyType">
		<complexContent>
			<extension base="oio:DefinitionType">
				<sequence>
					<element name="Model" type="oio:ModelType"/>
					<element name="Content" type="oio:AssemblyContentType"/>
				</sequence>
				<attribute name="sourceReference" type="string" use="required"/>
			</extension>
		</complexContent>
	</complexType>
	<!-- *********** -->
	<complexType name="AssemblyContentType">
		<choice minOccurs="0" maxOccurs="unbounded">
			<element name="ResourceReference" type="string"/>
			<element ref="oio:Assembly"/>
			<element name="SpecificationReference" type="string"/>
		</choice>
	</complexType>
	<!-- *********** -->
	<element name="Specification" type="oio:SpecificationType"/>
	<complexType name="SpecificationType">
		<sequence>
			<element name="Model" type="oio:ModelType"/>
			<!-- Content: -->
			<choice minOccurs="0" maxOccurs="unbounded">
				<element name="ResourceReference" type="string"/>
				<element ref="oio:Assembly"/>
				<element name="SpecificationReference" type="string"/>
			</choice>
		</sequence>
		<attribute name="sourceReference" type="string" use="required"/>
	</complexType>
</schema>
