Skip Headers
Oracle® Role Manager Developer's Guide
Release 10g (10.1.4.2)

Part Number E14614-02
Go to Documentation Home
Home
Go to Book List
Book List
Go to Table of Contents
Contents
Go to Index
Index
Go to Feedback page
Contact Us

Go to previous page
Previous
Go to next page
Next
View PDF

A XML Schema Definitions

This appendix contains the XML schema definitions for the data model. The standard data model and any customizations to the Oracle Role Manager model are validated by two schema definitions, the object type definition and the model configuration.

This appendix contains the following sections:

A.1 Object Type Definition

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns="http://xmlns.oracle.com/iam/rm/type/def/1_0"
            targetNamespace="http://xmlns.oracle.com/iam/rm/type/def/1_0"
            attributeFormDefault="unqualified"
            elementFormDefault="qualified" >
 
    <xsd:simpleType name="Version">
          <xsd:restriction base="xsd:string">
              <xsd:pattern value="[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}(\.[0-9]{1,4}){0,2}">
                  <xsd:annotation>
                      <xsd:documentation>i.e. x.y.z, x.y.z.j or x.y.z.j.h. where x, y, z, j and h are "small" integers</xsd:documentation>
                  </xsd:annotation>
              </xsd:pattern>
          </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="StringType">
        <xsd:complexContent>
            <xsd:extension base="PrimitiveType">
                <xsd:sequence>
        <xsd:element name="length" type="StringLengthConstraint" minOccurs="0"/>
                    <xsd:element name="length" type="StringLengthConstraint"/>
                    <xsd:element name="whitespace" type="WhitespaceConstraint" minOccurs="0"/>
                    <xsd:element name="pattern" type="StringPatternConstraint" minOccurs="0"/>
                    <xsd:element name="default-value" type="xsd:string" minOccurs="0"/>
                    <xsd:element name="default-unique-value" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="StringTypeExt">
        <xsd:complexContent>
            <xsd:extension base="PrimitiveTypeExt">
                <xsd:sequence>
                    <xsd:element name="whitespace" type="WhitespaceConstraint" minOccurs="0"/>
                    <xsd:element name="pattern" type="StringPatternConstraint" minOccurs="0"/>
                    <xsd:element name="default-value" type="xsd:string" minOccurs="0"/>
                    <xsd:element name="default-unique-value" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType abstract="true" name="NumericType">
        <xsd:complexContent>
            <xsd:extension base="PrimitiveType">
                <xsd:sequence>
                    <xsd:element name="value-range" type="NumericConstraint" minOccurs="0"/>
                </xsd:sequence>
                <xsd:attribute name="scale" type="xsd:nonNegativeInteger" use="required"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType abstract="true" name="NumericTypeExt">
        <xsd:complexContent>
            <xsd:extension base="PrimitiveTypeExt">
                <xsd:sequence>
                    <xsd:element name="value-range" type="NumericConstraint" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="IntegerType">
        <xsd:complexContent>
            <xsd:extension base="NumericType">
                <xsd:sequence>
                    <xsd:element name="default-value" type="xsd:long" minOccurs="0"/>
                    <xsd:element name="default-unique-value" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="IntegerTypeExt">
        <xsd:complexContent>
            <xsd:extension base="NumericTypeExt">
                <xsd:sequence>
                    <xsd:element name="default-value" type="xsd:long" minOccurs="0"/>
                    <xsd:element name="default-unique-value" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="DecimalType">
        <xsd:complexContent>
            <xsd:extension base="NumericType">
                <xsd:sequence>
                    <xsd:element name="default-value" type="xsd:double" minOccurs="0"/>
                    <xsd:element name="default-unique-value" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
                <xsd:attribute name="precision" type="xsd:nonNegativeInteger" use="required"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="DecimalTypeExt">
        <xsd:complexContent>
            <xsd:extension base="NumericTypeExt">
                <xsd:sequence>
                    <xsd:element name="default-value" type="xsd:double" minOccurs="0"/>
                    <xsd:element name="default-unique-value" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="DateTimeType">
        <xsd:complexContent>
            <xsd:extension base="PrimitiveType">
                <xsd:sequence>
                    <xsd:element name="default-value" type="dateTime" minOccurs="0"/>
                    <xsd:element name="default-unique-value" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:simpleType name="dateTime">
        <xsd:restriction base="xsd:string">
            <!-- yyyy-MM-dd'T'HH:mm:ss.SSS OR "transaction" -->
            <xsd:pattern value="(\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])T([01]\d|2[0-3])(:[0-5]\d){2}(\.\d{3})?)|transaction"/>
        </xsd:restriction>
    </xsd:simpleType>
 
    <xsd:complexType name="DateTimeTypeExt">
        <xsd:complexContent>
            <xsd:extension base="PrimitiveTypeExt">
                <xsd:sequence>
                    <xsd:element name="default-value" type="dateTime" minOccurs="0"/>
                    <xsd:element name="default-unique-value" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="BooleanType">
        <xsd:complexContent>
            <xsd:extension base="PrimitiveType">
                <xsd:sequence>
                    <xsd:element name="default-value" type="xsd:boolean" minOccurs="0"/>
                    <xsd:element name="default-unique-value" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="BooleanTypeExt">
        <xsd:complexContent>
            <xsd:extension base="PrimitiveTypeExt">
                <xsd:sequence>
                    <xsd:element name="default-value" type="xsd:boolean" minOccurs="0"/>
                    <xsd:element name="default-unique-value" type="xsd:string" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="BinaryType">
        <xsd:complexContent>
            <xsd:extension base="AbstractType"/>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="BinaryTypeExt">
        <xsd:complexContent>
            <xsd:extension base="PrimitiveTypeExt"/>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType abstract="true" name="PrimitiveType">
        <xsd:complexContent>
            <xsd:extension base="AbstractType"/>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType abstract="true" name="PrimitiveTypeExt">
        <xsd:complexContent>
            <xsd:extension base="AbstractTypeExt"/>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="ReferenceType">
        <xsd:complexContent>
            <xsd:extension base="AbstractType">
                <xsd:attribute name="object-type" type="xsd:string" use="required"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="ReferenceTypeExt">
        <xsd:complexContent>
            <xsd:extension base="AbstractTypeExt"/>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType abstract="true" name="AbstractType">
        <xsd:sequence>
            <xsd:element name="non-null-constraint" type="NonNullConstraint" minOccurs="0"/>
            <xsd:element name="unique-constraint" type="UniqueConstraint" minOccurs="0"/>
            <xsd:element name="multi-value-range-constraint" type="MultiValueRangeConstraint" minOccurs="0"/>
            <xsd:element name="valid-value-constraint" type="ValidValueConstraint" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="multi-value" type="xsd:boolean" use="optional" default="false"/>
    </xsd:complexType>
 
    <xsd:complexType abstract="true" name="AbstractTypeExt">
        <xsd:sequence>
            <xsd:element name="non-null-constraint" type="NonNullConstraint" minOccurs="0"/>
            <xsd:element name="unique-constraint" type="UniqueConstraint" minOccurs="0"/>
            <xsd:element name="multi-value-range-constraint" type="MultiValueRangeConstraint" minOccurs="0"/>
            <xsd:element name="valid-value-constraint" type="ValidValueConstraint" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="multi-value" type="xsd:boolean" use="optional" default="false"/>
    </xsd:complexType>
 
    <xsd:group name="TypeChoice">
        <xsd:choice>
            <xsd:element name="string" type="StringType"/>
            <xsd:element name="boolean" type="BooleanType"/>
            <xsd:element name="integer" type="IntegerType"/>
            <xsd:element name="decimal" type="DecimalType"/>
            <xsd:element name="datetime" type="DateTimeType"/>
            <xsd:element name="reference" type="ReferenceType"/>
            <xsd:element name="binary" type="BinaryType"/>
        </xsd:choice>
    </xsd:group>
 
    <xsd:group name="TypeExtChoice">
        <xsd:choice>
            <xsd:element name="string-ext" type="StringTypeExt"/>
            <xsd:element name="boolean-ext" type="BooleanTypeExt"/>
            <xsd:element name="integer-ext" type="IntegerTypeExt"/>
            <xsd:element name="decimal-ext" type="DecimalTypeExt"/>
            <xsd:element name="datetime-ext" type="DateTimeTypeExt"/>
            <xsd:element name="reference-ext" type="ReferenceTypeExt"/>
            <xsd:element name="binary-ext" type="BinaryTypeExt"/>
        </xsd:choice>
    </xsd:group>
 
    <xsd:group name="PrimitiveTypeExtChoice">
        <xsd:choice>
            <xsd:element name="string-ext" type="StringTypeExt"/>
            <xsd:element name="boolean-ext" type="BooleanTypeExt"/>
            <xsd:element name="integer-ext" type="IntegerTypeExt"/>
            <xsd:element name="decimal-ext" type="DecimalTypeExt"/>
            <xsd:element name="datetime-ext" type="DateTimeTypeExt"/>
            <xsd:element name="binary-ext" type="BinaryTypeExt"/>
        </xsd:choice>
    </xsd:group>
 
    <xsd:group name="PrimitiveTypeChoice">
        <xsd:choice>
            <xsd:element name="string" type="StringType"/>
            <xsd:element name="boolean" type="BooleanType"/>
            <xsd:element name="integer" type="IntegerType"/>
            <xsd:element name="decimal" type="DecimalType"/>
            <xsd:element name="datetime" type="DateTimeType"/>
            <xsd:element name="binary" type="BinaryType"/>
        </xsd:choice>
    </xsd:group>
 
    <xsd:complexType abstract="true" name="ValueConstraint">
        <xsd:sequence>
            <xsd:element name="violation-message" type="xsd:string"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string" use="required"/>
    </xsd:complexType>
    
    <xsd:complexType name="NumericConstraint">
        <xsd:complexContent>
            <xsd:extension base="ValueConstraint">
                <xsd:attribute name="min-value" type="xsd:double" use="optional"/>
                <xsd:attribute name="max-value" type="xsd:double" use="optional"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="StringLengthConstraint">
        <xsd:complexContent>
            <xsd:extension base="ValueConstraint">
                <xsd:attribute name="min-length" type="xsd:nonNegativeInteger" use="optional" default="0"/>
                <xsd:attribute name="max-length" type="xsd:nonNegativeInteger" use="required"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="WhitespaceConstraint">
        <xsd:complexContent>
            <xsd:extension base="ValueConstraint">
                <xsd:attribute name="allow-leading-spaces" type="xsd:boolean" use="optional" default="false"/>
                <xsd:attribute name="allow-trailing-spaces" type="xsd:boolean" use="optional" default="false"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="StringPatternConstraint">
        <xsd:complexContent>
            <xsd:extension base="ValueConstraint">
                <xsd:sequence>
                    <xsd:element name="pattern" type="xsd:string"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    
    <xsd:complexType name="MultiValueRangeConstraint">
        <xsd:complexContent>
            <xsd:extension base="ValueConstraint">
                <xsd:attribute name="min-values" type="xsd:nonNegativeInteger" use="optional" default="0"/>
                <xsd:attribute name="max-values" type="xsd:nonNegativeInteger" use="optional"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="UniqueConstraint">
        <xsd:complexContent>
            <xsd:extension base="ValueConstraint">
                <xsd:attribute name="case-sensitive" type="xsd:boolean" use="optional" default="true"/>
                <xsd:attribute name="type" type="xsd:string" use="optional" default="varying-temporal"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="ValidValueConstraint">
        <xsd:complexContent>
            <xsd:extension base="ValueConstraint">
                <xsd:sequence>
                    <xsd:element name="values">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="value" minOccurs="1" maxOccurs="unbounded">
                                    <xsd:complexType>
                                        <xsd:sequence>
                                            <xsd:choice>
                                                <xsd:element name="string-value" type="xsd:string"/>
                                                <xsd:element name="integer-value" type="xsd:long"/>
                                                <xsd:element name="decimal-value" type="xsd:double"/>
                                                <xsd:element name="boolean-value" type="xsd:boolean"/>
                                            </xsd:choice>
                                            <xsd:element name="label" type="xsd:string"/>
                                        </xsd:sequence>
                                    </xsd:complexType>
                                </xsd:element>
                            </xsd:sequence>
                        </xsd:complexType>
                    </xsd:element>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="NonNullConstraint">
        <xsd:complexContent>
            <xsd:extension base="ValueConstraint">                <xsd:attribute name="deferred" type="xsd:boolean" default="true" use="optional"/>            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
</xsd:schema>

A.2 Model Definition

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:t="http://xmlns.oracle.com/iam/rm/type/def/1_0"
            xmlns:c="http://xmlns.oracle.com/iam/rm/cache/config/1_0"
            xmlns="http://xmlns.oracle.com/iam/rm/temporal/config/1_0"
            targetNamespace="http://xmlns.oracle.com/iam/rm/temporal/config/1_0"
            attributeFormDefault="unqualified"
            elementFormDefault="qualified" >
 
    <xsd:import namespace="http://xmlns.oracle.com/iam/rm/type/def/1_0"/>
    <xsd:import namespace="http://xmlns.oracle.com/iam/rm/cache/config/1_0"/>
 
    <xsd:element name="temporal" type="TemporalType"/>
 
    <xsd:simpleType name="dbEntityName">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="[a-zA-Z][a-zA-Z0-9_]*"/>
        </xsd:restriction>
    </xsd:simpleType>
 
    <xsd:complexType name="TemporalType">
        <xsd:sequence>
            <xsd:element name="compatible-versions" type="CompatibleVersions" minOccurs="0"/>
            <xsd:element name="dependencies" type="Dependencies" minOccurs="0"/>
            <xsd:element name="default-cache-config" type="c:cacheConfigType" minOccurs="0"/>
            <xsd:element name="domain-definitions" minOccurs="0" maxOccurs="1">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="domain-definition" type="DomainDefinition" minOccurs="1" maxOccurs="unbounded"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="permission-definitions" minOccurs="0" maxOccurs="1">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="permission-definition" type="PermissionDefinition" minOccurs="1" maxOccurs="unbounded"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="system-indexes" minOccurs="0">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="index" type="IndexDefinition" minOccurs="1" maxOccurs="unbounded"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="type-definitions" minOccurs="0" maxOccurs="1">
                <xsd:complexType>
                    <xsd:choice  minOccurs="1" maxOccurs="unbounded">
                        <xsd:element name="structural-type-definition" type="StructuralTypeDefinition"/>
                        <xsd:element name="mixin-type-definition" type="MixinTypeDefinition"/>
                        <xsd:element name="relationship-type-definition" type="RelationshipTypeDefinition"/>
                        <xsd:element name="extension-type-definition" type="ExtensionTypeDefinition"/>
                        <xsd:element name="hierarchy-type-definition" type="HierarchyTypeDefinition"/>
                    </xsd:choice>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="system-constraints" type="ConstraintList" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string" use="required"/>
        <xsd:attribute name="version" use="required" type="t:Version"/>
        <xsd:attribute name="previous-version" use="optional" type="t:Version"/>
    </xsd:complexType>
 
    <xsd:complexType name="CompatibleVersions">
        <xsd:sequence>
            <xsd:element name="compatible-version" type="CompatibleVersion" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
 
    <xsd:complexType name="CompatibleVersion">
        <xsd:attribute name="version" type="t:Version" use="required"/>
    </xsd:complexType>
 
    <xsd:complexType name="Dependencies">
        <xsd:sequence>
            <xsd:element name="dependency" type="Dependency" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
 
    <xsd:complexType name="Dependency">
        <xsd:attribute name="id" type="xsd:string" use="required"/>
        <xsd:attribute name="version" type="t:Version" use="required"/>
    </xsd:complexType>
  
    <xsd:complexType name="ConstraintList">
        <xsd:choice maxOccurs="unbounded">
            <xsd:element name="mutually-exclusive-set-constraint">
                <xsd:complexType>
                    <xsd:sequence minOccurs="0" maxOccurs="1">
                        <xsd:element name="attributes"  minOccurs="0" maxOccurs="unbounded">
                            <xsd:complexType>
                                <xsd:sequence minOccurs="2" maxOccurs="unbounded">
                                    <xsd:element name="attribute" type="dbEntityName" />
                                </xsd:sequence>
                            </xsd:complexType>
                        </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="custom-constraint">
                <xsd:complexType>
                    <xsd:sequence minOccurs="0" maxOccurs="1">
                        <xsd:element name="body" type="xsd:string"/>
                    </xsd:sequence>
                    <xsd:attribute name="name" type="dbEntityName" use="required"/>
                </xsd:complexType>
            </xsd:element>
        </xsd:choice>
    </xsd:complexType>
 
    <xsd:complexType name="DomainDefinition">
        <xsd:group ref="t:PrimitiveTypeChoice"/>
        <xsd:attribute name="name" type="dbEntityName" use="required"/>
    </xsd:complexType>
 
    <xsd:complexType name="PermissionDefinition">
        <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="description" type="xsd:string"/>
            <xsd:element name="privilege-name" type="xsd:string"/>
            <xsd:element name="privilege-description" type="xsd:string"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string" use="required"/>
    </xsd:complexType>
 
    <xsd:complexType name="StructuralTypeDefinition">
        <xsd:complexContent>
            <xsd:extension base="EntityTypeDefinition">
                <xsd:sequence>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="RelationshipTypeDefinition">
        <xsd:complexContent>
            <xsd:extension base="TypeDefinition">
                <xsd:sequence>
                    <xsd:element name="primary-key-definitions">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="primary-key-definition" type="PrimaryKeyDefinition" minOccurs="2" maxOccurs="unbounded"/>
                            </xsd:sequence>
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="bypassing-relationship-paths" minOccurs="0">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="bypassing-relationship-path" minOccurs="1" maxOccurs="2">
                                    <xsd:complexType>
                                        <xsd:sequence>
                                            <xsd:element name="title" type="xsd:string"/>
                                        </xsd:sequence>
                                        <xsd:attribute name="id" type="xsd:string" use="required"/>
                                        <xsd:attribute name="local-attribute" type="dbEntityName" use="required"/>
                                        <xsd:attribute name="foreign-attribute" type="dbEntityName" use="required"/>
                                    </xsd:complexType>
                                </xsd:element>
                            </xsd:sequence>
                        </xsd:complexType>
                    </xsd:element>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="MixinTypeDefinition">
        <xsd:complexContent>
            <xsd:extension base="EntityTypeDefinition">
                <xsd:sequence>
                    <xsd:element name="related-types">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="related-type" type="dbEntityName" minOccurs="1" maxOccurs="unbounded"/>
                            </xsd:sequence>
                        </xsd:complexType>
                    </xsd:element>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="EntityTypeDefinition">
        <xsd:complexContent>
            <xsd:extension base="TypeDefinition">
                <xsd:attribute name="extends" type="dbEntityName" use="optional"/>
                <xsd:attribute name="abstract" type="xsd:boolean" use="optional" default="false"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
 
    <xsd:complexType name="TypeDefinition">
        <xsd:sequence>
            <xsd:element name="title" type="xsd:string" nillable="false"/>
            <xsd:element name="title-attribute" type="xsd:string" minOccurs="0"/>
            <xsd:element name="cache-config" type="c:cacheConfigType" minOccurs="0"/>
            <xsd:element name="snapshot-interface-classname" type="xsd:string" minOccurs="0"/>
            <xsd:element name="index-definitions" minOccurs="0">
                <xsd:complexType>
                    <xsd:choice minOccurs="0" maxOccurs="unbounded">
                        <xsd:element name="index" type="IndexDefinition"/>
                    </xsd:choice>
                </xsd:complexType>
            </xsd:element>            
            <xsd:element name="attribute-definitions" minOccurs="0">
                <xsd:complexType>
                    <xsd:choice minOccurs="1" maxOccurs="unbounded">
                        <xsd:element name="reference-attribute" type="ReferenceAttributeDefinition"/>
                        <xsd:element name="attribute" type="AttributeDefinition"/>
                    </xsd:choice>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="related-audit-objects" type="RelatedAuditObjects" minOccurs="0"/>
            <xsd:element name="permissions" type="Permissions" minOccurs="0"/>
            <xsd:element name="access-policy" type="AccessPolicy" minOccurs="0"/>
            <xsd:element name="entity-constraints" type="ConstraintList" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="dbEntityName" use="required"/>
        <xsd:attribute name="disjointed" type="temporalConstraintType"/>
        <xsd:attribute name="overlapping" type="temporalConstraintType"/>
        <xsd:attribute name="continuous" type="temporalConstraintType"/>
        <xsd:attribute name="storage-type" type="storageType" default="pan-temporal" use="optional"/>
        <xsd:attribute name="definition" type="definitionType" default="internal" use="optional"/>
    </xsd:complexType>
 
    <xsd:simpleType name="temporalConstraintType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="true"/>
            <xsd:enumeration value="fill"/>
            <xsd:enumeration value="false"/>
        </xsd:restriction>
    </xsd:simpleType>
 
    <xsd:simpleType name="definitionType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="external"/>
            <xsd:enumeration value="internal"/>
        </xsd:restriction>
    </xsd:simpleType>
 
    <xsd:simpleType name="storageType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="temporal"/>
            <xsd:enumeration value="current-time"/>
            <xsd:enumeration value="pan-temporal"/>
            <xsd:enumeration value="historical"/>
        </xsd:restriction>
    </xsd:simpleType>
 
    <xsd:complexType name="HierarchyTypeDefinition">
        <xsd:sequence>
            <xsd:element name="title" type="xsd:string"/>
            <xsd:element name="node-definitions">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="node-definition" minOccurs="1" maxOccurs="unbounded">
                            <xsd:complexType>
                                <xsd:sequence>
                                    <xsd:element name="node-relationships" minOccurs="0">
                                        <xsd:complexType>
                                            <xsd:sequence>
                                                <xsd:element name="node-relationship" minOccurs="1" maxOccurs="unbounded">
                                                    <xsd:complexType>
                                                        <xsd:attribute name="foreign-type" type="dbEntityName" use="required"/>
                                                        <xsd:attribute name="relationship-path" type="dbEntityName" use="required"/>
                                                    </xsd:complexType>
                                                </xsd:element>
                                            </xsd:sequence>
                                        </xsd:complexType>
                                    </xsd:element>
                                    <xsd:element name="default-parent" minOccurs="0">
                                        <xsd:complexType>
                                            <xsd:sequence>
                                                <xsd:element name="identifying-attributes" type="AttributeValueList"/>
                                            </xsd:sequence>
                                            <xsd:attribute name="object-type" type="dbEntityName" use="required"/>
                                            <xsd:attribute name="referring-attribute" type="dbEntityName" use="required"/>
                                        </xsd:complexType>
                                    </xsd:element>
                                </xsd:sequence>
                                <xsd:attribute name="object-type" type="dbEntityName" use="required"/>
                                <xsd:attribute name="anchor" type="xsd:boolean" use="optional" default="false"/>
                                <xsd:attribute name="mandatory" type="xsd:boolean" use="optional" default="false"/>
                            </xsd:complexType>
                        </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="default-anchors" minOccurs="0">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="default-anchor" maxOccurs="unbounded">
                            <xsd:complexType>
                                <xsd:sequence>
                                    <xsd:element name="identifying-attributes" type="AttributeValueList"/>
                                    <xsd:element name="attributes" type="AttributeValueList" minOccurs="0"/>
                                </xsd:sequence>
                                <xsd:attribute name="object-type" type="dbEntityName" use="required"/>
                                <xsd:attribute name="hierarchy-root-attribute" type="dbEntityName" use="optional"/>
                            </xsd:complexType>
                        </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="permissions" type="Permissions" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="dbEntityName" use="required"/>
        <xsd:attribute name="single-anchor" type="xsd:boolean" use="optional" default="false"/>
    </xsd:complexType>
 
    <xsd:complexType name="AttributeValueList">
        <xsd:sequence>
            <xsd:element name="attribute" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:choice>
                        <xsd:element name="integer-value" type="xsd:long"/>
                        <xsd:element name="decimal-value" type="xsd:double"/>
                        <xsd:element name="datetime-value" type="t:dateTime"/>
                        <xsd:element name="string-value" type="xsd:string"/>
                        <xsd:element name="boolean-value" type="xsd:boolean"/>
                    </xsd:choice>
                    <xsd:attribute name="name" type="xsd:string" use="required"/>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
 
    <xsd:complexType name="ExtensionTypeDefinition">
        <xsd:sequence>
            <xsd:element name="title-attribute" type="xsd:string" minOccurs="0"/>
            <xsd:element name="cache-config" type="c:cacheConfigType" minOccurs="0"/>
            <xsd:element name="attribute-definitions" minOccurs="0">
                <xsd:complexType>
                    <xsd:choice minOccurs="1" maxOccurs="unbounded">
                        <xsd:element name="reference-attribute" type="ReferenceAttributeDefinition"/>
                        <xsd:element name="attribute" type="AttributeDefinition"/>
                        <xsd:element name="attribute-ext" type="AttributeExtension"/>
                    </xsd:choice>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="related-audit-objects" type="RelatedAuditObjects" minOccurs="0"/>
            <xsd:element name="permissions" type="Permissions" minOccurs="0"/>
            <xsd:element name="access-policy" type="AccessPolicy" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="extending-type-id" type="dbEntityName" use="required"/>
    </xsd:complexType>
 
    <xsd:complexType name="Permissions">
        <xsd:sequence>
            <xsd:element name="permission" minOccurs="1" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:attribute name="id" type="xsd:string" use="required"/>
                    <xsd:attribute name="soc-policy" use="optional" default="children">
                        <xsd:simpleType>
                            <xsd:restriction base="xsd:string">
                                <xsd:enumeration value="none"/>
                                <xsd:enumeration value="children"/>
                                <xsd:enumeration value="ancestors"/>
                            </xsd:restriction>
                        </xsd:simpleType>
                    </xsd:attribute>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
 
    <xsd:complexType name="RelatedAuditObjects">
        <xsd:sequence>
            <xsd:element name="related-audit-object" minOccurs="1" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:attribute name="incoming-relationship-path" type="dbEntityName" use="required"/>
                    <xsd:attribute name="foreign-object-type" type="dbEntityName" use="required"/>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
 
    <xsd:complexType name="PrimaryKeyDefinition">
        <xsd:sequence>
            <xsd:element name="title" type="xsd:string" nillable="false"/>
            <xsd:element name="outgoing-relationship-path-title" type="xsd:string" nillable="false"/>
            <xsd:element name="incoming-relationship-path-title" type="xsd:string" nillable="false"/>
            <xsd:element name="getter" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="dbEntityName" use="required"/>
        <xsd:attribute name="foreign-type" type="dbEntityName" use="required"/>
        <xsd:attribute name="outgoing-relationship-path" type="xsd:string" use="required"/>
        <xsd:attribute name="incoming-relationship-path" type="xsd:string" use="required"/>
        <xsd:attribute name="parent-action" use="optional" default="restrict">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="restrict"/>
                    <xsd:enumeration value="cascade"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
    </xsd:complexType>
 
    <xsd:complexType name="ReferenceAttributeDefinition">
        <xsd:sequence>
            <xsd:element name="title" type="xsd:string" nillable="false"/>
            <xsd:element name="outgoing-relationship-path-title" type="xsd:string" nillable="false"/>
            <xsd:element name="incoming-relationship-path-title" type="xsd:string" nillable="false"/>
            <xsd:element name="reference-ext" type="t:ReferenceTypeExt" minOccurs="0"/>
            <xsd:element name="snapshot-getter" type="xsd:string" minOccurs="0"/>
            <xsd:element name="snapshot-setter" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string" use="required"/>
        <xsd:attribute name="foreign-type" type="xsd:string" use="required"/>
        <xsd:attribute name="parent-action" use="optional" default="set null">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="restrict"/>
                    <xsd:enumeration value="cascade"/>
                    <xsd:enumeration value="set null"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
        <xsd:attribute name="outgoing-relationship-path" type="xsd:string" use="required"/>
        <xsd:attribute name="incoming-relationship-path" type="xsd:string" use="required"/>
        <xsd:attribute name="multi-value" type="xsd:boolean" use="optional" default="false"/>
    </xsd:complexType>
 
    <xsd:complexType name="AttributeDefinition">
        <xsd:sequence>
            <xsd:element name="title" type="xsd:string" nillable="false"/>
            <xsd:group ref="t:PrimitiveTypeExtChoice" minOccurs="0"/>
            <xsd:element name="snapshot-getter" type="xsd:string" minOccurs="0"/>
            <xsd:element name="snapshot-setter" type="xsd:string" minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="domain" type="xsd:string" use="required"/>
        <xsd:attribute name="searchable" type="xsd:boolean" use="optional" />
    </xsd:complexType>
 
    <xsd:complexType name="IndexDefinition">
        <xsd:attribute name="body" type="xsd:string"/>
    </xsd:complexType>
 
    <xsd:complexType name="AttributeExtension">
        <xsd:sequence>
            <xsd:group ref="t:PrimitiveTypeExtChoice" minOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="extending-domain" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="AccessPolicy">
        <xsd:attribute name="read-permission" type="xsd:string" use="optional"/>
        <xsd:attribute name="read-audit-details-permission" type="xsd:string" use="optional"/>
    </xsd:complexType>
</xsd:schema>