blob: e9424dad3e1614107655bf28d7b136e805366d8b [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!--
Cayenne entity map schema
Defines format of Cayenne DataMap XML files (*.map.xml). DataMap files contain
the metadata needed for Cayenne object-relational features. Multiple DataMaps
are usually combined in one shared namespace, so the elements of the DataMap
may reference objects from other DataMaps.
-->
<xs:schema targetNamespace="http://cayenne.apache.org/schema/3.0/modelMap"
xmlns:cay="http://cayenne.apache.org/schema/3.0/modelMap"
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="3">
<xs:element name="data-map">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:property"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:embeddable"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:procedure"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:db-entity"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:obj-entity"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:db-relationship"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:obj-relationship"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:query"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:entity-listener"/>
</xs:sequence>
<xs:attribute name="project-version" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="db-entity">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="cay:db-attribute"/>
<xs:element minOccurs="0" ref="cay:db-key-generator"/>
<!-- Qualifier for DB Entity -->
<xs:element minOccurs="0" ref="cay:qualifier"/>
</xs:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="schema" type="xs:string"/>
<xs:attribute name="catalog" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="db-attribute">
<xs:annotation>
<xs:documentation>A database column.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="isMandatory" type="xs:boolean"/>
<xs:attribute name="isPrimaryKey" type="xs:boolean">
<xs:annotation>
<xs:documentation>If true, the value of attribute is unique and used as a primary key identifier.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="isGenerated" use="optional" type="xs:boolean"/>
<xs:attribute name="length" type="xs:integer"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="scale" type="xs:integer"/>
<xs:attribute name="type" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="obj-entity">
<xs:annotation>
<xs:documentation>A persistent Java class managed by Cayenne.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" ref="cay:qualifier"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:embedded-attribute"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:obj-attribute"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:attribute-override"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:entity-listener"/>
<!-- Callbacks -->
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-add"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:pre-persist"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-persist"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:pre-update"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-update"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:pre-remove"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-remove"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-load"/>
</xs:sequence>
<xs:attribute name="className" use="optional" type="xs:string"/>
<xs:attribute name="abstract" use="optional" type="xs:string"/>
<xs:attribute name="readOnly" use="optional" type="xs:boolean"/>
<xs:attribute name="clientClassName" use="optional" type="xs:string"/>
<xs:attribute name="clientSuperClassName" use="optional" type="xs:string"/>
<xs:attribute name="dbEntityName" use="optional" type="xs:string"/>
<xs:attribute name="lock-type" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="superClassName" use="optional" type="xs:string"/>
<xs:attribute name="superEntityName" use="optional" type="xs:string"/>
<xs:attribute name="exclude-superclass-listeners" use="optional" type="xs:boolean"/>
<xs:attribute name="exclude-default-listeners" use="optional" type="xs:boolean"/>
<xs:attribute name="serverOnly" use="optional" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="qualifier" type="xs:string"/>
<xs:element name="obj-attribute">
<xs:complexType>
<xs:attribute name="db-attribute-path" use="optional" type="xs:string"/>
<xs:attribute name="lock" use="optional" type="xs:boolean"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="type" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="attribute-override">
<xs:complexType>
<xs:attribute name="db-attribute-path" use="optional" type="xs:string"/>
<xs:attribute name="lock" use="optional" type="xs:boolean"/>
<xs:attribute name="name" use="optional" type="xs:string"/>
<xs:attribute name="type" use="optional" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="db-relationship">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="unbounded" ref="cay:db-attribute-pair"/>
</xs:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="source" use="required" type="xs:string"/>
<xs:attribute name="target" use="required" type="xs:string"/>
<xs:attribute name="toDependentPK" type="xs:boolean"/>
<xs:attribute name="toMany" use="required" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="db-attribute-pair">
<xs:complexType>
<xs:attribute name="source" use="required" type="xs:string"/>
<xs:attribute name="target" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="obj-relationship">
<xs:complexType>
<xs:attribute name="db-relationship-path" use="required" type="xs:string"/>
<xs:attribute name="deleteRule" type="xs:string"/>
<xs:attribute name="lock" type="xs:boolean"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="source" use="required" type="xs:string"/>
<xs:attribute name="target" use="required" type="xs:string"/>
<xs:attribute name="collection-type" use="optional" type="xs:string"/>
<xs:attribute name="map-key" use="optional" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="query">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:property"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:sql"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:ejbql"/>
<xs:element name="qualifier" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:ordering"/>
<xs:element name="prefetch" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
<xs:attribute name="factory" use="required"/>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="root" use="optional" type="xs:string"/>
<xs:attribute name="root-name" use="optional" type="xs:string"/>
<xs:attribute name="result-entity" use="optional" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="ordering">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="descending" type="xs:boolean"/>
<xs:attribute name="ignore-case" type="xs:boolean"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="sql">
<xs:annotation>
<xs:documentation>Defines arbitrary SQL statement. Note that SQL statement can be customized for different SQL dialects per DbAdapter class. If no adapter-specific statement is found, the one with no adapter label is used by default.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="adapter-class" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="ejbql" type="xs:string"/>
<xs:element name="property">
<xs:annotation>
<xs:documentation>A generic property used by other elements.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="value" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="embeddable">
<xs:complexType>
<xs:sequence>
<xs:element name="embeddable-attribute" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="type" use="required" type="xs:string"/>
<xs:attribute name="db-attribute-name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="className" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="embedded-attribute">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded"
ref="cay:embeddable-attribute-override"/>
</xs:sequence>
<xs:attribute name="type" use="required" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="embeddable-attribute-override">
<xs:complexType>
<xs:attribute name="db-attribute-path" use="required" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="procedure">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="procedure-parameter">
<xs:complexType>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="type" use="required" type="xs:string"/>
<xs:attribute name="length" use="optional" type="xs:integer"/>
<xs:attribute name="direction" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="schema" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="entity-listener">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-add"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:pre-persist"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-persist"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:pre-update"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-update"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:pre-remove"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-remove"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="cay:post-load"/>
</xs:sequence>
<xs:attribute name="class" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="pre-update">
<xs:complexType>
<xs:attribute name="method-name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="post-persist">
<xs:complexType>
<xs:attribute name="method-name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="post-update">
<xs:complexType>
<xs:attribute name="method-name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="post-add">
<xs:complexType>
<xs:attribute name="method-name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="pre-persist">
<xs:complexType>
<xs:attribute name="method-name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="post-remove">
<xs:complexType>
<xs:attribute name="method-name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="post-load">
<xs:complexType>
<xs:attribute name="method-name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="pre-remove">
<xs:complexType>
<xs:attribute name="method-name" use="required" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="db-key-generator">
<xs:annotation>
<xs:documentation>Used to install the Automatic Sequence/Key Generation facility for db-entity. This feature is intended for use with simple (non-compound) integral primary keys.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="db-generator-type" type="xs:string">
<xs:annotation>
<xs:documentation>Specifies the Key Generation Method that will be employed
'ORACLE' - use Oracle's SEQUENCE
'NAMED_SEQUENCE_TABLE' - use USER designated SEQUENCE TABLE. User specifies the name of a DBMS Table with the schema (sequence INT) which will be used to hold sequence values (not supported yet)</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="db-generator-name" type="xs:string">
<xs:annotation>
<xs:documentation>For db-generator-type ORACLE this is the name of the ORACLE SEQUENCE to use. The SEQUENCE is assumed to already exist in the Database.
If this is db-generator-type NAMED_SEQUENCE_TABLE Key Generation, this specifies the name of the SEQUENCE TABLE to use. The NAMED_SEQUENCE_TABLE is assumed to already exist in the database.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element minOccurs="0" name="db-key-cache-size" type="xs:integer">
<xs:annotation>
<xs:documentation>Size of key cache. For db-generator-type ORACLE , this value MUST match the Oracle SEQUENCE INCREMENT value. If there is a mismatch between this value and the Oracle SEQUENCE INCREMENT value, then there will likely be duplicate key problems.
For db-generator-type NAMED_SEQUENCE_TABLE , this tells how many keys the Container will fetch in a single DBMS call.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>