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

Revision 1081, 15.4 kB (checked in by ron, 3 weeks 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.