<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cnf="urn:oid:1.0.10303.28.2.1.2"
           targetNamespace="urn:oid:1.0.10303.28.2.1.2"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
   <xs:element name="configuration" nillable="true">
      <xs:complexType>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="include">
               <xs:complexType>
                  <xs:attribute name="configuration" type="xs:IDREF" use="required"/>
               </xs:complexType>
            </xs:element>
            <xs:element ref="cnf:option"/>
            <xs:element ref="cnf:type"/>
            <xs:element ref="cnf:entity"/>
            <xs:element ref="cnf:schema" maxOccurs="1"/>
         </xs:choice>
         <xs:attribute name="id" type="xs:ID" use="required"/>
         <xs:attribute name="targetNamespace" type="xs:anyURI" use="optional"/>
         <xs:attribute name="schema" type="xs:IDREF" use="optional"/>
         <xs:attribute name="configurationLocation" type="cnf:Seq-anyURI" use="optional"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="option">
      <xs:complexType>
         <xs:attribute name="inheritance" type="xs:boolean" default="false"/>
         <xs:attribute name="exp-type" type="cnf:exp-type" default="unspecified"/>
         <xs:attribute name="entity_attribute" type="cnf:exp-attribute-global" use="optional"/>
         <xs:attribute name="concrete_attribute" type="cnf:exp-attribute-global" use="optional"/>
         <xs:attribute name="tagless" type="cnf:boolean_or_unspecified" default="unspecified"/>
         <xs:attribute name="naming-convention" type="cnf:naming-convention" default="initial-upper"/>
         <xs:attribute name="keep" type="cnf:attributeType"/>
         <xs:attribute name="generate-keys" type="xs:boolean" default="true"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="type">
      <xs:complexType>
         <xs:choice minOccurs="0" maxOccurs="1">
            <xs:element ref="cnf:aggregate"/>
         </xs:choice>
         <xs:attribute name="select" type="xs:NMTOKEN" use="required"/>
         <xs:attribute name="name" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="map" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="exp-type" type="cnf:exp-type" use="optional"/>
         <xs:attribute name="tagless" type="cnf:boolean_or_unspecified" use="optional"/>
         <!--<xs:attribute name="notation" type="xs:NOTATION" use="optional"/> --><xs:attribute name="keep" type="xs:boolean" use="optional" default="true"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="entity">
      <xs:complexType>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="cnf:attribute"/>
            <xs:element ref="cnf:inverse"/>
         </xs:choice>
         <xs:attribute name="select">
            <xs:simpleType>
               <xs:restriction>
                  <xs:simpleType>
                     <xs:list itemType="xs:Name"/>
                  </xs:simpleType>
                  <xs:minLength value="1"/>
               </xs:restriction>
            </xs:simpleType>
         </xs:attribute>
         <xs:attribute name="inheritance" type="xs:boolean" default="false"/>
         <xs:attribute name="name" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="tag-source" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="tag-values" type="xs:NMTOKENS" use="optional"/>
         <xs:attribute name="map" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="exp-type" type="cnf:exp-type" use="optional"/>
         <xs:attribute name="content" type="cnf:content" use="optional"/>
         <xs:attribute name="exp-attribute" type="cnf:exp-attribute" default="unspecified"/>
         <xs:attribute name="tagless" type="cnf:boolean_or_unspecified" use="optional"/>
         <xs:attribute name="keep" type="xs:boolean" use="optional" default="true"/>
         <xs:attribute name="new" type="xs:boolean" use="optional" default="false"/>
         <xs:attribute name="implementation" type="xs:string" use="optional"/>
         <xs:attribute name="facet" type="xs:string" use="optional"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="attribute">
      <xs:complexType>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="cnf:aggregate"/>
         </xs:choice>
         <xs:attribute name="name" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="exp-attribute" type="cnf:exp-attribute" use="optional"/>
         <xs:attribute name="content" type="cnf:content" use="optional"/>
         <xs:attribute name="aggregate-content" type="cnf:content" use="optional"/>
         <xs:attribute name="map" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="use-id" type="xs:boolean" use="optional"/>
         <xs:attribute name="keep" type="xs:boolean" default="true"/>
         <xs:attribute name="tagless" type="cnf:boolean_or_unspecified" use="optional"/>
         <!--<xs:attribute name="notation" type="xs:NOTATION" use="optional"/> --><xs:attribute name="new" type="xs:boolean" use="optional" default="false"/>
         <xs:attribute name="ref" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="use" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="implementation" type="xs:string" use="optional"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="inverse">
      <xs:complexType>
         <xs:attribute name="select" type="xs:NMTOKEN" use="required"/>
         <xs:attribute name="name" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="exp-attribute" type="cnf:exp-attribute" use="optional"/>
         <xs:attribute name="content" type="cnf:content" use="optional"/>
         <xs:attribute name="tagless" type="cnf:boolean_or_unspecified" use="optional"/>
         <xs:attribute name="invert" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="keep" type="xs:boolean" default="false"/>
         <xs:attribute name="minOccurs" type="xs:nonNegativeInteger" default="0" use="optional"/>
         <xs:attribute name="maxOccurs" type="cnf:nonNegativeInteger_or_unbounded" default="unbounded"
                       use="optional"/>
         <xs:attribute name="ref" type="xs:NMTOKEN" use="optional"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="aggregate">
      <xs:complexType>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="cnf:aggregate"/>
         </xs:choice>
         <xs:attribute name="name" type="xs:NMTOKEN" use="optional"/>
         <xs:attribute name="exp-attribute" type="cnf:exp-attribute" use="optional"/>
         <xs:attribute name="tagless" type="cnf:boolean_or_unspecified" use="optional"/>
         <xs:attribute name="use-id" type="xs:boolean" use="optional"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="schema">
      <xs:complexType>
         <xs:choice>
            <xs:element ref="cnf:namespace" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="cnf:include" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element ref="cnf:containerObject" minOccurs="0" maxOccurs="1"/>
            <xs:element ref="cnf:additionalObject" minOccurs="0" maxOccurs="unbounded"/>
         </xs:choice>
         <xs:attribute name="targetNamespace" type="xs:anyURI"/>
         <xs:attribute name="elementFormDefault" type="xs:string"/>
         <xs:attribute name="attributeFormDefault" type="xs:string"/>
         <xs:attribute name="defaultRootObjectType" type="xs:string"/>
         <xs:attribute name="defaultObjectType" type="xs:string"/>
         <xs:attribute name="schema-version" type="xs:string"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="containerObject">
      <xs:complexType>
         <xs:attribute name="name" type="xs:NMTOKEN" use="required"/>
         <xs:attribute name="implementation" type="xs:string" use="optional"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="additionalObject">
      <xs:complexType>
         <xs:attribute name="name" type="xs:NMTOKEN" use="required"/>
         <xs:attribute name="implementation" type="xs:string" use="optional"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="namespace">
      <xs:complexType>
         <xs:attribute name="urn" type="xs:anyURI"/>
         <xs:attribute name="prefix" type="xs:string"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="include">
      <xs:complexType>
         <xs:attribute name="urn" type="xs:anyURI"/>
         <xs:attribute name="schema-location" type="xs:string"/>
      </xs:complexType>
   </xs:element>
   <xs:element name="add-attribute">
      <xs:complexType>
         <xs:attribute name="name" type="xs:QName" use="required"/>
         <xs:attribute name="ref" type="xs:boolean" default="false"/>
         <xs:attribute name="type" type="xs:QName" use="optional"/>
         <xs:attribute name="usage" default="optional">
            <xs:simpleType>
               <xs:restriction base="xs:string">
                  <xs:enumeration value="optional"/>
                  <xs:enumeration value="required"/>
                  <xs:enumeration value="fixed"/>
                  <xs:enumeration value="default"/>
               </xs:restriction>
            </xs:simpleType>
         </xs:attribute>
         <xs:attribute name="value" type="xs:string" use="optional"/>
      </xs:complexType>
   </xs:element>
   <xs:simpleType name="exp-type">
      <xs:restriction base="xs:string">
         <xs:enumeration value="root"/>
         <xs:enumeration value="value"/>
         <xs:enumeration value="unspecified"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="exp-attribute">
      <xs:restriction base="xs:string">
         <xs:enumeration value="double-tag"/>
         <xs:enumeration value="attribute-tag"/>
         <xs:enumeration value="type-tag"/>
         <xs:enumeration value="no-tag"/>
         <xs:enumeration value="no-tag-simple"/>
         <xs:enumeration value="attribute-content"/>
         <xs:enumeration value="unspecified"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="exp-attribute-global">
      <xs:restriction base="xs:string">
         <xs:enumeration value="double-tag"/>
         <xs:enumeration value="attribute-tag"/>
         <xs:enumeration value="attribute-content"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="content">
      <xs:restriction base="xs:string">
         <xs:enumeration value="value"/>
         <xs:enumeration value="ref"/>
         <xs:enumeration value="unspecified"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="naming-convention">
      <xs:restriction base="xs:string">
         <xs:enumeration value="initial-upper"/>
         <xs:enumeration value="camel-case"/>
         <xs:enumeration value="preserve-case"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="boolean_or_unspecified">
      <xs:union>
         <xs:simpleType>
            <xs:restriction base="xs:boolean"/>
         </xs:simpleType>
         <xs:simpleType>
            <xs:restriction base="xs:string">
               <xs:enumeration value="unspecified"/>
            </xs:restriction>
         </xs:simpleType>
      </xs:union>
   </xs:simpleType>
   <xs:simpleType name="attributeType">
      <xs:restriction base="xs:normalizedString">
         <xs:enumeration value="INVERSE"/>
         <xs:enumeration value="DERIVE"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="nonNegativeInteger_or_unbounded">
      <xs:union>
         <xs:simpleType>
            <xs:restriction base="xs:nonNegativeInteger"/>
         </xs:simpleType>
         <xs:simpleType>
            <xs:restriction base="xs:string">
               <xs:enumeration value="unbounded"/>
            </xs:restriction>
         </xs:simpleType>
      </xs:union>
   </xs:simpleType>
   <xs:simpleType name="patterns">
      <xs:restriction>
         <xs:simpleType>
            <xs:list itemType="xs:normalizedString"/>
         </xs:simpleType>
         <xs:minLength value="1"/>
      </xs:restriction>
   </xs:simpleType>
   <xs:simpleType name="Seq-anyURI">
      <xs:list itemType="xs:anyURI"/>
   </xs:simpleType>
</xs:schema>