root/trunk/generator/resources/xsd/database.xsd

Revision 1081, 15.4 KB (checked in by ron, 23 months ago)

Added middleClass support, closes #682

  • Property svn:executable set to *
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3        <!-- XML Schema for the Propel schema file
4                  This is just the first draft derived from the existing DTD
5                  and some additional restrictions have been included
6
7                  Comments are a quite rare, I guess most things are pretty
8                  readable. An additional xml schema: custom_datatypes.xsd is
9                  also included. For now this file is unused, but that will
10                  change; don't worry.
11
12                  Ron -->
13
14        <xs:include schemaLocation="custom_datatypes.xsd"/>
15
16        <xs:element name="database" type="database"/>
17        <xs:element name="vendor" type="vendor"/>
18
19        <xs:simpleType name="file">
20                <xs:restriction base="xs:string">
21                        <!-- Match any relative or absolute path and file containing letters, numbers and _ -->
22                        <xs:pattern value="((\.{1,2}|[\w_]*)/)*([\w_]*\.?)+"/>
23                </xs:restriction>
24        </xs:simpleType>
25
26        <xs:simpleType name="default_datatypes">
27                <xs:restriction base="xs:string">
28                        <xs:enumeration value="BIT"/>
29                        <xs:enumeration value="TINYINT"/>
30                        <xs:enumeration value="SMALLINT"/>
31                        <xs:enumeration value="INTEGER"/>
32                        <xs:enumeration value="BIGINT"/>
33                        <xs:enumeration value="FLOAT"/>
34                        <xs:enumeration value="REAL"/>
35                        <xs:enumeration value="NUMERIC"/>
36                        <xs:enumeration value="DECIMAL"/>
37                        <xs:enumeration value="CHAR"/>
38                        <xs:enumeration value="VARCHAR"/>
39                        <xs:enumeration value="LONGVARCHAR"/>
40                        <xs:enumeration value="DATE"/>
41                        <xs:enumeration value="TIME"/>
42                        <xs:enumeration value="TIMESTAMP"/>
43                        <xs:enumeration value="BINARY"/>
44                        <xs:enumeration value="VARBINARY"/>
45                        <xs:enumeration value="LONGVARBINARY"/>
46                        <xs:enumeration value="NULL"/>
47                        <xs:enumeration value="OTHER"/>
48                        <xs:enumeration value="PHP_OBJECT"/>
49                        <xs:enumeration value="DISTINCT"/>
50                        <xs:enumeration value="STRUCT"/>
51                        <xs:enumeration value="ARRAY"/>
52                        <xs:enumeration value="BLOB"/>
53                        <xs:enumeration value="CLOB"/>
54                        <xs:enumeration value="REF"/>
55                        <xs:enumeration value="BOOLEANINT"/>
56                        <xs:enumeration value="BOOLEANCHAR"/>
57                        <xs:enumeration value="DOUBLE"/>
58                        <xs:enumeration value="BOOLEAN"/>
59                </xs:restriction>
60        </xs:simpleType>
61
62        <xs:simpleType name="datatype">
63                <xs:union memberTypes="default_datatypes custom_datatypes"/>
64        </xs:simpleType>
65
66        <xs:simpleType name="dbidmethod">
67                <xs:restriction base="xs:string">
68                        <xs:enumeration value="native"/>
69                        <xs:enumeration value="none"/>
70                </xs:restriction>
71        </xs:simpleType>
72
73        <xs:simpleType name="tbidmethod">
74                <xs:restriction base="xs:string">
75                        <xs:enumeration value="autoincrement"/>
76                        <xs:enumeration value="sequence"/>
77                        <xs:enumeration value="null"/>
78                </xs:restriction>
79        </xs:simpleType>
80
81        <xs:simpleType name="idmethod">
82                <xs:union memberTypes="dbidmethod tbidmethod"/>
83        </xs:simpleType>
84
85        <xs:simpleType name="phpnamingmethod">
86                <xs:restriction base="xs:string">
87                        <xs:enumeration value="nochange"/>
88                        <xs:enumeration value="underscore"/>
89                        <xs:enumeration value="phpname"/>
90                </xs:restriction>
91        </xs:simpleType>
92
93        <xs:simpleType name="delete">
94                <xs:restriction base="xs:string">
95                        <xs:enumeration value="cascade"/>
96                        <xs:enumeration value="set null"/>
97                        <xs:enumeration value="setnull"/>
98                        <xs:enumeration value="restrict"/>
99                        <xs:enumeration value="none"/>
100                        <xs:enumeration value=""/>
101                </xs:restriction>
102        </xs:simpleType>
103
104        <xs:simpleType name="update">
105                <xs:restriction base="xs:string">
106                        <xs:enumeration value="cascade"/>
107                        <xs:enumeration value="setnull"/>
108                        <xs:enumeration value="set null"/>
109                        <xs:enumeration value="restrict"/>
110                        <xs:enumeration value="none"/>
111                        <xs:enumeration value=""/>
112                </xs:restriction>
113        </xs:simpleType>
114
115        <xs:simpleType name="rulename">
116                <xs:restriction base="xs:string">
117                        <xs:enumeration value="mask"/>
118                        <xs:enumeration value="maxLength"/>
119                        <xs:enumeration value="maxValue"/>
120                        <xs:enumeration value="minLength"/>
121                        <xs:enumeration value="minValue"/>
122                        <xs:enumeration value="required"/>
123                        <xs:enumeration value="unique"/>
124                        <xs:enumeration value="validValues"/>
125                        <xs:enumeration value="notMatch"/>
126                        <xs:enumeration value="match"/>
127                        <xs:enumeration value="class"/>
128                </xs:restriction>
129        </xs:simpleType>
130
131        <xs:simpleType name="inh_option">
132                <xs:restriction base="xs:string">
133                        <xs:enumeration value="single"/>
134                        <xs:enumeration value="false"/>
135                </xs:restriction>
136        </xs:simpleType>
137       
138        <xs:simpleType name="sql_type">
139                <xs:restriction base="xs:string">
140                        <xs:pattern value="[\w_\[\]]+"/>
141                </xs:restriction>
142        </xs:simpleType>
143       
144        <xs:simpleType name="php_type">
145                <xs:restriction base="xs:string">
146                        <xs:pattern value="[\w_]+"/>
147                </xs:restriction>
148        </xs:simpleType>
149
150        <xs:simpleType name="treemode">
151                <xs:restriction base="xs:string">
152                        <xs:enumeration value="AdjacencyList"/>
153                        <xs:enumeration value="MaterializedPath"/>
154                        <xs:enumeration value="NestedSet"/>
155                </xs:restriction>
156        </xs:simpleType>
157
158        <!-- Visibility for column accessor and mutator methods -->
159        <xs:simpleType name="visibility">
160                <xs:restriction base="xs:string">
161                        <xs:enumeration value="public"/>
162                        <xs:enumeration value="protected"/>
163                        <xs:enumeration value="private"/>
164                </xs:restriction>
165        </xs:simpleType>
166
167        <!-- Restrict column name to letters (upper- and lowercase), numbers and the _ -->
168        <xs:simpleType name="column_name">
169                <xs:restriction base="xs:string">
170                        <xs:pattern value="[\w_]+"/>
171                </xs:restriction>
172        </xs:simpleType>
173
174        <!-- Restrict php name to letters (upper- and lowercase), numbers and the _ -->
175        <xs:simpleType name="php_name">
176                <xs:restriction base="xs:string">
177                        <xs:pattern value="[\w_]+"/>
178                </xs:restriction>
179        </xs:simpleType>
180
181        <!-- Restrict php class name to letters (upper- and lowercase), numbers and the _. Dot seperated -->
182        <xs:simpleType name="php_class">
183                <xs:restriction base="xs:string">
184                        <xs:pattern value="([\w_]+.?)+"/>
185                </xs:restriction>
186        </xs:simpleType>
187
188        <!-- Restrict table name to letters (upper- and lowercase), numbers and the _ -->
189        <xs:simpleType name="table_name">
190                <xs:restriction base="xs:string">
191                        <xs:pattern value="[\w_]+"/>
192                </xs:restriction>
193        </xs:simpleType>
194
195        <!-- Restrict index name to letters (upper- and lowercase), numbers and the _ -->
196        <xs:simpleType name="index_name">
197                <xs:restriction base="xs:string">
198                        <xs:pattern value="[\w_]+"/>
199                </xs:restriction>
200        </xs:simpleType>
201
202        <!-- Restrict foreign column name to letters (upper- and lowercase), numbers and the _ -->
203        <xs:simpleType name="foreign_name">
204                <xs:restriction base="xs:string">
205                        <xs:pattern value="[\w_]+"/>
206                </xs:restriction>
207        </xs:simpleType>
208
209        <xs:complexType name="parameter">
210                <xs:attribute name="name" type="xs:string" use="required"/>
211                <xs:attribute name="value" type="xs:string" use="required"/>
212        </xs:complexType>
213
214        <xs:complexType name="validator">
215                <xs:sequence>
216                        <xs:element name="rule" type="rule" maxOccurs="unbounded"/>
217                </xs:sequence>
218                <xs:attribute name="column" type="column_name" use="required"/>
219                <xs:attribute name="translate" type="xs:string" use="optional"/>
220        </xs:complexType>
221
222        <xs:complexType name="vendor">
223                <xs:sequence>
224                        <xs:element name="parameter" type="parameter" maxOccurs="unbounded"/>
225                </xs:sequence>
226                <xs:attribute name="type" use="required"/>
227        </xs:complexType>
228
229        <xs:complexType name="rule">
230                <xs:attribute name="name" type="rulename" use="required"/>
231                <xs:attribute name="value" type="xs:string" use="optional"/>
232                <xs:attribute name="size" type="xs:positiveInteger" use="optional"/>
233                <xs:attribute name="message" type="xs:string" use="optional"/>
234                <xs:attribute name="class" type="xs:string" use="optional"/>
235        </xs:complexType>
236
237        <xs:complexType name="id-method-parameter">
238                <xs:attribute name="name" type="xs:string" use="optional"/>
239                <xs:attribute name="value" type="xs:string" use="required"/>
240        </xs:complexType>
241
242        <xs:complexType name="index">
243                <xs:choice maxOccurs="unbounded">
244                        <xs:element name="index-column" type="index-column" minOccurs="1" maxOccurs="unbounded"/>
245                        <xs:element ref="vendor" minOccurs="0" maxOccurs="unbounded"/>
246                </xs:choice>
247                <xs:attribute name="name" type="index_name" use="optional"/>
248        </xs:complexType>
249
250        <xs:complexType name="unique">
251                <xs:choice maxOccurs="unbounded">
252                        <xs:element name="unique-column" type="unique-column" minOccurs="1" maxOccurs="unbounded"/>
253                        <xs:element ref="vendor" minOccurs="0" maxOccurs="unbounded"/>
254                </xs:choice>
255                <xs:attribute name="name" type="index_name" use="optional"/>
256        </xs:complexType>
257
258        <xs:complexType name="index-column">
259                <xs:sequence>
260                        <xs:element ref="vendor" minOccurs="0" maxOccurs="unbounded"/>
261                </xs:sequence>
262                <xs:attribute name="name" type="column_name" use="required"/>
263                <xs:attribute name="size" type="xs:positiveInteger" use="optional"/>
264        </xs:complexType>
265
266        <xs:complexType name="unique-column">
267                <xs:sequence>
268                        <xs:element ref="vendor" minOccurs="0" maxOccurs="unbounded"/>
269                </xs:sequence>
270                <xs:attribute name="name" type="column_name" use="required"/>
271                <xs:attribute name="size" type="xs:positiveInteger" use="optional"/>
272        </xs:complexType>
273
274        <xs:complexType name="inheritance">
275                <xs:attribute name="key" type="xs:string" use="required"/>
276                <xs:attribute name="class" type="xs:string" use="required"/>
277                <xs:attribute name="package" type="xs:string" use="optional"/>
278                <xs:attribute name="extends" type="xs:string" use="optional"/>
279        </xs:complexType>
280
281        <xs:complexType name="reference">
282                <xs:attribute name="local" type="column_name" use="required"/>
283                <xs:attribute name="foreign" type="column_name" use="required"/>
284        </xs:complexType>
285
286        <xs:complexType name="column">
287                <xs:choice maxOccurs="unbounded">
288                        <xs:element name="inheritance" type="inheritance" minOccurs="0" maxOccurs="unbounded"/>
289                        <xs:element ref="vendor" minOccurs="0" maxOccurs="unbounded"/>
290                </xs:choice>
291                <xs:attribute name="name" type="column_name" use="required"/>
292                <xs:attribute name="phpName" type="php_name" use="optional"/>
293                <xs:attribute name="peerName" type="php_class" use="optional"/>
294                <xs:attribute name="prefix" type="column_name" use="optional"/>
295                <xs:attribute name="accessorVisibility" type="visibility" use="optional"/>
296                <xs:attribute name="mutatorVisibility" type="visibility" use="optional"/>
297                <xs:attribute name="primaryKey" type="xs:boolean" default="false"/>
298                <xs:attribute name="required" type="xs:boolean" default="false"/>
299                <xs:attribute name="type" type="datatype" default="VARCHAR"/>
300                <xs:attribute name="sqlType" type="sql_type" use="optional"/>
301                <xs:attribute name="phpType" type="php_type" use="optional"/>
302                <xs:attribute name="size" type="xs:nonNegativeInteger" use="optional"/>
303                <xs:attribute name="scale" type="xs:nonNegativeInteger" use="optional"/>
304                <xs:attribute name="default" type="xs:string" use="optional"/>
305                <xs:attribute name="defaultValue" type="xs:string" use="optional"/>
306                <xs:attribute name="defaultExpr" type="xs:string" use="optional"/>
307                <xs:attribute name="autoIncrement" type="xs:boolean" default="false"/>
308                <xs:attribute name="inheritance" type="inh_option" default="false"/>
309                <xs:attribute name="inputValidator" type="xs:string" use="optional"/>
310                <xs:attribute name="phpNamingMethod" type="phpnamingmethod" use="optional"/>
311                <xs:attribute name="description" type="xs:string" use="optional"/>
312                <xs:attribute name="lazyLoad" type="xs:boolean" default="false"/>
313                <xs:attribute name="nodeKeySep" type="xs:string" use="optional"/>
314                <xs:attribute name="nodeKey" type="xs:string" use="optional"/>
315                <xs:attribute name="nestedSetLeftKey" type="xs:boolean" default="false"/>
316                <xs:attribute name="nestedSetRightKey" type="xs:boolean" default="false"/>
317                <xs:attribute name="treeScopeKey" type="xs:boolean" default="false"/>
318                <xs:attribute name="require" type="xs:string" use="optional"/>
319        </xs:complexType>
320
321        <xs:complexType name="foreign-key">
322                <xs:choice maxOccurs="unbounded">
323                        <xs:element name="reference" type="reference" minOccurs="1" maxOccurs="unbounded"/>
324                        <xs:element ref="vendor" minOccurs="0" maxOccurs="unbounded"/>
325                </xs:choice>
326                <xs:attribute name="foreignTable" type="table_name" use="required"/>
327                <xs:attribute name="name" type="foreign_name" use="optional"/>
328                <xs:attribute name="phpName" type="php_name" use="optional"/>
329                <xs:attribute name="refPhpName" type="php_name" use="optional"/>
330                <xs:attribute name="onDelete" type="delete" default="none"/>
331                <xs:attribute name="onUpdate" type="update" default="none"/>
332        </xs:complexType>
333
334        <xs:complexType name="external-schema">
335                <xs:attribute name="filename" type="file" use="required"/>
336        </xs:complexType>
337
338        <xs:complexType name="table">
339                <xs:choice maxOccurs="unbounded">
340                        <xs:element name="column" type="column" maxOccurs="unbounded"/>
341                        <xs:element name="foreign-key" type="foreign-key" minOccurs="0" maxOccurs="unbounded"/>
342                        <xs:element name="index" type="index" minOccurs="0" maxOccurs="unbounded"/>
343                        <xs:element name="unique" type="unique" minOccurs="0" maxOccurs="unbounded"/>
344                        <xs:element name="id-method-parameter" type="id-method-parameter" minOccurs="0" maxOccurs="unbounded"/>
345                        <xs:element name="validator" type="validator" minOccurs="0" maxOccurs="unbounded"/>
346                        <xs:element ref="vendor" minOccurs="0" maxOccurs="unbounded"/>
347                </xs:choice>
348                <xs:attribute name="name" type="table_name" use="required"/>
349                <xs:attribute name="phpName" type="php_class" use="optional"/>
350                <xs:attribute name="middleClass" type="php_class" use="optional"/>
351                <xs:attribute name="columnPrefix" type="column_name" use="optional"/>
352                <xs:attribute name="defaultAccessorVisibility" type="visibility" use="optional"/>
353                <xs:attribute name="defaultMutatorVisibility" type="visibility" use="optional"/>
354                <xs:attribute name="idMethod" type="idmethod" use='optional'/>
355                <xs:attribute name="allowPkInsert" type="xs:boolean" default="false" use="optional"/>
356                <xs:attribute name="skipSql" type="xs:boolean" default="false"/>
357                <xs:attribute name="readOnly" type="xs:boolean" default="false"/>
358                <xs:attribute name="abstract" type="xs:boolean" default="false"/>
359                <xs:attribute name="baseClass" type="php_class" use="optional"/>
360                <xs:attribute name="basePeer" type="php_class" use="optional"/>
361                <xs:attribute name="alias" type="table_name" use="optional"/>
362                <xs:attribute name="package" type="xs:string" use="optional"/>
363                <xs:attribute name="interface" type="xs:string" use="optional"/>
364                <xs:attribute name="phpNamingMethod" type="phpnamingmethod" use='optional'/>
365                <xs:attribute name="heavyIndexing" type="xs:boolean" use="optional"/>
366                <xs:attribute name="description" type="xs:string"/>
367                <xs:attribute name="treeMode" type="treemode" use="optional"/>
368                <xs:attribute name="reloadOnInsert" type="xs:boolean" default="false"/>
369                <xs:attribute name="reloadOnUpdate" type="xs:boolean" default="false"/>
370        </xs:complexType>
371
372        <xs:complexType name="database">
373                <xs:choice maxOccurs="unbounded">
374                        <xs:element name="external-schema" type="external-schema" minOccurs="0" maxOccurs="unbounded"/>
375                        <xs:element name="table" type="table" minOccurs="1" maxOccurs="unbounded"/>
376                </xs:choice>
377                <xs:attribute name="name" type="xs:string" use="optional"/>
378                <xs:attribute name="defaultIdMethod" type="dbidmethod" default="none"/>
379                <xs:attribute name="defaultTranslateMethod" type="xs:string" use="optional"/>
380                <xs:attribute name="defaultAccessorVisibility" type="visibility" use="optional"/>
381                <xs:attribute name="defaultMutatorVisibility" type="visibility" use="optional"/>
382                <xs:attribute name="package" type="php_class" use="optional"/>
383                <xs:attribute name="baseClass" type="php_class" use="optional"/>
384                <xs:attribute name="basePeer" type="php_class" use="optional"/>
385                <xs:attribute name="defaultPhpNamingMethod" type="phpnamingmethod" default="underscore"/>
386                <xs:attribute name="heavyIndexing" type="xs:boolean" default="false"/>
387        </xs:complexType>
388</xs:schema>
Note: See TracBrowser for help on using the browser.