<?xml version="1.0" encoding="utf-8"?>
<!--

        ** OAGIS® Revision: 9.1  **
        ** Date: 11 May 2007 **
        ** Copyright 1997-2007, All Rights Reserved **

        This is an OAGIS® BOD XML Schema (XSD) Definition.

       License information for this file is provided in the file **OAGi License Agreement.txt** that is provided with this download package.

        For support, more information, or to report implementation bugs, please contact the Open Applications Group at xml@openapplications.org.

        XML Schema

-->

<!-- 
  NOTICE
 
  THIS SOFTWARE IS THE PROPERTY OF AND CONTAINS CONFIDENTIAL INFORMATION OF
  INFOR AND/OR ITS AFFILIATES OR SUBSIDIARIES AND SHALL NOT BE DISCLOSED
  WITHOUT PRIOR WRITTEN PERMISSION. LICENSED CUSTOMERS MAY COPY AND ADAPT
  THIS SOFTWARE FOR THEIR OWN USE IN ACCORDANCE WITH THE TERMS OF THEIR
  SOFTWARE LICENSE AGREEMENT. ALL OTHER RIGHTS RESERVED.
 
  (c) COPYRIGHT 2009 INFOR. ALL RIGHTS RESERVED. THE WORD AND DESIGN MARKS
  SET FORTH HEREIN ARE TRADEMARKS AND/OR REGISTERED TRADEMARKS OF INFOR
  AND/OR ITS AFFILIATES AND SUBSIDIARIES. ALL RIGHTS RESERVED. ALL OTHER
  TRADEMARKS LISTED HEREIN ARE THE PROPERTY OF THEIR RESPECTIVE OWNERS.
-->

<!--    *****     Update Log     *****

Date          By      Note
10 Apr 2008    JB      Added correct Copyright and update comments to schema.

11 Mar 2009  SMAINA	` Updated to match the new Domain Model.

        *****     Update End     *****

-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns="http://schema.infor.com/InforOAGIS/2"
  targetNamespace="http://schema.infor.com/InforOAGIS/2" elementFormDefault="qualified"
    attributeFormDefault="unqualified">

  <xsd:include schemaLocation="../Common/Components.xsd"/>

  <xsd:complexType name="NounMetadataType">
    <xsd:annotation>
      <xsd:documentation/>
    </xsd:annotation> 
    <xsd:sequence>
    	<xsd:element ref="NounData" minOccurs="0" maxOccurs="1"/>
      	<xsd:element ref="SchemaProperties" minOccurs="0" maxOccurs="unbounded"/>
      	<xsd:element ref="NounDataDefinitions" minOccurs="0" maxOccurs="unbounded"/>
      	<xsd:element ref="PropertyDefinitions" minOccurs="0" maxOccurs="unbounded"/>
      	<xsd:element ref="PropertyDatas" minOccurs="0" maxOccurs="unbounded"/>
      	<xsd:element ref="LocalizedTexts" minOccurs="0" maxOccurs="unbounded"/>
      	<xsd:element ref="BusinessKeyDatas" minOccurs="0" maxOccurs="unbounded"/>
      	<xsd:element ref="TextDefinitions" minOccurs="0" maxOccurs="unbounded"/>
      	<xsd:element ref="CustomFields" minOccurs="0" maxOccurs="unbounded"/>
      	<xsd:element ref="ApplicationNames" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="NounMetadata" type="NounMetadataType"/>
  
  <xsd:element name="SchemaProperties" type="SchemaPropertyType" />
  <xsd:element name="NounDataDefinitions" type="NounDataDefinitionType" />
  <xsd:element name="PropertyDefinitions" type="PropertyDefinitionType" />
  <xsd:element name="PropertyDatas" type="PropertyDataType" />
  <xsd:element name="LocalizedTexts" type="LocalizedTextType" />
  <xsd:element name="BusinessKeyDatas" type="BusinessKeyDataType" />
  <xsd:element name="TextDefinitions" type="TextDefinitionType" />
  <xsd:element name="CustomFields" type="CustomFieldType" />
  <xsd:element name="ApplicationNames" type="ApplicationNameType" />
  
  <xsd:complexType name="ApplicationNameType">
  	<xsd:attribute name="identifier" type="StringType" use="required" />
 	<xsd:attribute name="name" type="StringType" use="required" />
 	<xsd:attribute name="description" type="StringType" use="optional" />
  </xsd:complexType>
  <xsd:element name="ApplicationName" type="ApplicationNameType" />
  
  <xsd:complexType name="BaseDefinitionType">
  	<xsd:attribute name="type" type="DataTypeEnum" use="optional" />
 	<xsd:attribute name="name" type="StringType" use="optional" />
 	<xsd:attribute name="description" type="StringType" use="optional" />
  </xsd:complexType>
  
   <xsd:complexType name="BaseItemType">
 	<xsd:attribute name="value" type="StringType" use="optional" />
  </xsd:complexType>
  
  <xsd:complexType name="BaseMetadataType">
 	<xsd:attribute name="tenantID" type="StringType" use="required" />
  	<xsd:attribute name="bodVersion" type="StringType" use="required" />
  </xsd:complexType>

	<xsd:complexType name="BaseLevelAwareMetadataType">
		<xsd:complexContent>
			<xsd:extension base="BaseMetadataType">
				<xsd:attribute name="level" type="CustomizationLevelEnum"
					use="required" />
				<xsd:attribute name="levelDetail" type="StringType"
					use="required" />
				<xsd:attribute name="path" type="StringType" use="required" />
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
  
	<xsd:complexType name="BusinessKeyDataType">
		<xsd:annotation>
			<xsd:documentation> Acts as a container for BusinessKeys.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="BaseLevelAwareMetadataType">
				<xsd:sequence>
					<xsd:element ref="BusinessKey" minOccurs="1" maxOccurs="unbounded" />
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name="BusinessKeyData" type="BusinessKeyDataType" />

  <xsd:complexType name="BusinessKeyType">
    <xsd:annotation>
      <xsd:documentation> Gives details on the business
        key(s) of a Noun. </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element ref="KeyProperty" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="name" type="StringType" use="required"/>
	<xsd:attribute name="associationTarget" type="StringType" use="optional" />
    <xsd:attribute name="kind" type="KeyKindEnum" use="required"/>
    <xsd:attribute name="unique" type="xsd:boolean" use="optional" />
  </xsd:complexType>
  <xsd:element name="BusinessKey" type="BusinessKeyType"/>

  <xsd:complexType name="KeyPropertyType">
    <xsd:annotation>
      <xsd:documentation> Identifies a property that is
        part of a Key. </xsd:documentation>
    </xsd:annotation>
    <xsd:attribute name="sequence" type="xsd:int" use="required"/>
    <xsd:attribute name="path" type="StringType"  use="required"/>
	<xsd:attribute name="associationTarget" type="StringType" use="optional" />
  </xsd:complexType>
  <xsd:element name="KeyProperty" type="KeyPropertyType"/>
  
  <xsd:complexType name="SchemaPropertyType">
    <xsd:sequence>
  		<xsd:element ref="InheritablePaths" minOccurs="0" maxOccurs="unbounded" />
  	</xsd:sequence>
  	<xsd:attribute name="tenantID" type="StringType" use="required" />
  	<xsd:attribute name="bodVersion" type="StringType" use="required" />
  	<xsd:attribute name="name" type="StringType" use="required" />
  	<xsd:attribute name="metadataPath" type="StringType" use="required" />
  	<xsd:attribute name="inheritanceAllowed" type="xsd:boolean" use="required" />
  	<xsd:attribute name="xpath" type="StringType" use="optional" />
  	<xsd:attribute name="primitiveType" type="PrimitiveTypeEnum" use="optional" />
  	<xsd:attribute name="typeName" type="StringType" use="required" />
  	<xsd:attribute name="multilingual" type="xsd:boolean" use="optional" />
  	<xsd:attribute name="namespace" type="StringType" use="optional" />
  	<xsd:attribute name="minOccurs" type="StringType" use="optional" />
    <xsd:attribute name="nounName" type="StringType" use="required" />
  	<xsd:attribute name="level" type="NumericType" use="optional" />
  	<xsd:attribute name="used" type="xsd:boolean" use="optional" />
  	<xsd:attribute name="mandatory" type="xsd:boolean" use="optional" />
  	<xsd:attribute name="customXpath" type="StringType" use="optional" />
  	<xsd:attribute name="documentation" type="StringType" use="optional" />
  	<xsd:attribute name="index" type="NumericType" use="required" />
  </xsd:complexType>
  <xsd:element name="SchemaProperty" type="SchemaPropertyType" />
  
  <xsd:element name="InheritablePaths" type="StringType" />
  
  <xsd:complexType name="NounType">
  	<xsd:complexContent>
		<xsd:extension base="SchemaPropertyType" />		
	</xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Noun" type="NounType" />
  
  <xsd:complexType name="ElementType">
  	<xsd:complexContent>
		<xsd:extension base="SchemaPropertyType">
			<xsd:attribute name="maxOccurs" type="StringType" use="optional" />
			<xsd:attribute name="notRepeating" type="xsd:boolean" use="optional" />		
		</xsd:extension>
	</xsd:complexContent>
  </xsd:complexType>
  
  <xsd:complexType name="AttributeType">
  	<xsd:complexContent>
		<xsd:extension base="SchemaPropertyType" />		
	</xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Attribute" type="AttributeType" />
  
  <xsd:complexType name="NounDataDefinitionType">
  	<xsd:complexContent>
		<xsd:extension base="BaseDefinitionType" />		
	</xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="NounDataDefinition" type="NounDataDefinitionType" />
  
  <xsd:complexType name="NounDataItemType">
		<xsd:complexContent>
			<xsd:extension base="BaseItemType">
				<xsd:sequence>
					<xsd:element ref="NounDataDefinition" minOccurs="1"
						maxOccurs="1" />
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
  <xsd:element name="NounDataItem" type="NounDataItemType" />
  
	<xsd:complexType name="NounDataType">
		<xsd:complexContent>
			<xsd:extension base="BaseLevelAwareMetadataType">
				<xsd:sequence>
					<xsd:element ref="NounDataItem" minOccurs="0" maxOccurs="unbounded" />
				</xsd:sequence>
				<xsd:attribute name="nounName" type="StringType" use="required" />
				<xsd:attribute name="category" type="NounCategoryEnum" use="required" />
  				<xsd:attribute name="kind" type="NounKindEnum" use="required" />
				<xsd:attribute name="status" type="NounStatusEnum" use="optional" />
				<xsd:attribute name="sorID" type="StringType" use="optional" />
  				<xsd:attribute name="sorStatus" type="StringType" use="optional" />			
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name="NounData" type="NounDataType" />
	  
   <xsd:complexType name="PropertyDefinitionType">
  	<xsd:complexContent>
		<xsd:extension base="BaseDefinitionType" />		
	</xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="PropertyDefinition" type="PropertyDefinitionType" />
  
  <xsd:complexType name="PropertyItemType">
		<xsd:complexContent>
			<xsd:extension base="BaseItemType">
				<xsd:sequence>
					<xsd:element ref="PropertyDefinition" minOccurs="1"
						maxOccurs="1" />
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
  <xsd:element name="PropertyItem" type="PropertyItemType" />
  
	<xsd:complexType name="PropertyDataType">
		<xsd:complexContent>
			<xsd:extension base="BaseLevelAwareMetadataType">
				<xsd:sequence>
					<xsd:element ref="PropertyItem" minOccurs="0" maxOccurs="unbounded" />
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name="PropertyData" type="PropertyDataType" />
  
	<xsd:complexType name="TextDefinitionType">
		<xsd:complexContent>
			<xsd:extension base="BaseDefinitionType" />		
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name="TextDefinition" type="TextDefinitionType" />
	
	<xsd:complexType name="LocalizedTextItemType">
	<xsd:complexContent>
			<xsd:extension base="BaseItemType">
				<xsd:sequence>
					<xsd:element ref="TextDefinition" minOccurs="1"
						maxOccurs="1" />
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name="LocalizedTextItem" type="LocalizedTextItemType" />
	
	<xsd:complexType name="LocalizedTextType">
		<xsd:complexContent>
			<xsd:extension base="BaseLevelAwareMetadataType">
				<xsd:sequence>
					<xsd:element ref="LocalizedTextItem" minOccurs="0" maxOccurs="unbounded" />
				</xsd:sequence>
				<xsd:attribute name="languageID" type="StringType" use="required" />
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name="LocalizedText" type="LocalizedTextType" />  
	
	<!-- added CustomFieldType and element here -->
	<xsd:complexType name="CustomFieldType">
		<xsd:complexContent>
			<xsd:extension base="BaseLevelAwareMetadataType">
				<xsd:attribute name="name" type="StringType" use="required" />
				<xsd:attribute name="type" type="CustomFieldTypeEnum" use="required" />
				<xsd:attribute name="nounName" type="StringType" use="required" />
				<xsd:attribute name="defaultValue" type="StringType" use="optional" />
				<xsd:attribute name="minInclusive" type="IntegerNumericType" use="optional" />
				<xsd:attribute name="maxInclusive" type="IntegerNumericType" use="optional" />
				<xsd:attribute name="precision" type="IntegerNumericType" use="optional" />
				<xsd:attribute name="hierarchyNodeId" type="IntegerNumericType" use="optional" />
				<xsd:attribute name="enumerationValues" type="StringType" use="optional" />
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name="CustomField" type="CustomFieldType" />
	
	<!-- added CustomFieldTypeEnum here -->
	<xsd:simpleType name="CustomFieldTypeEnum">
    <xsd:restriction base="xsd:string">
	    <xsd:enumeration value="Amount"/>
		<xsd:enumeration value="Boolean"/>
		<xsd:enumeration value="Date"/>
		<xsd:enumeration value="Decimal"/>
		<xsd:enumeration value="Enumeration"/>
		<xsd:enumeration value="HierarchyReference"/>
		<xsd:enumeration value="Integer"/>
		<xsd:enumeration value="MasterDataReference"/>
		<xsd:enumeration value="Quantity"/>
		<xsd:enumeration value="String"/>
		<xsd:enumeration value="Time"/>
    </xsd:restriction>
  </xsd:simpleType>
    
  <xsd:simpleType name="NounStatusEnum">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="NotStarted"/>
      <xsd:enumeration value="InProcess"/>
      <xsd:enumeration value="ReviewScheduled"/>
      <xsd:enumeration value="Complete"/>
      <xsd:enumeration value="Released"/>
    </xsd:restriction>
  </xsd:simpleType> 	
   
  <xsd:simpleType name="NounKindEnum">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Balance"/>
      <xsd:enumeration value="Master"/>
      <xsd:enumeration value="Transactional"/>
      <xsd:enumeration value="System"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="NounCategoryEnum">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Standard"/>
      <xsd:enumeration value="Custom"/>
      <xsd:enumeration value="Private"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="DataTypeEnum">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="String"/>
      <xsd:enumeration value="Boolean"/>
      <xsd:enumeration value="Decimal"/>
      <xsd:enumeration value="Integer"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="PrimitiveTypeEnum">
    <xsd:restriction base="xsd:string">
	    <xsd:enumeration value="String"/>
		<xsd:enumeration value="NormalizedString"/>
		<xsd:enumeration value="Integer"/>
		<xsd:enumeration value="Decimal"/>
		<xsd:enumeration value="Boolean"/>
		<xsd:enumeration value="Date"/>
		<xsd:enumeration value="Time"/>
		<xsd:enumeration value="DateAndTime"/>
		<xsd:enumeration value="Duration"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="CustomizationLevelEnum">
    <xsd:annotation>
      <xsd:documentation>Metadata customizations can be
        defined at various levels. INFOR - Additional standard metadata as defined by Infor BOD
        Librarians. APPLICATION - Metadata used by a specific application. CUSTOMER - Metadata
        specific to a given customer deployment. This is typically added by Infor PSO, but may
        possibly be added by the customer themselves.</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Infor"/>
      <xsd:enumeration value="Application"/>
      <xsd:enumeration value="Customer"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="KeyKindEnum">
    <xsd:restriction base="xsd:string">
    	<xsd:enumeration value="System"/>
	    <xsd:enumeration value="User"/>
	    <xsd:enumeration value="ParentToChild"/>
	    <xsd:enumeration value="ChildToParent"/>
	    <xsd:enumeration value="FlattenPoint"/>
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>