1<?xml version="1.0" encoding="UTF-8" ?>
2
3<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
4  <xs:simpleType name="trueFalse" >
5    <xs:restriction base="xs:NMTOKEN" >
6     <xs:enumeration value="true" />
7     <xs:enumeration value="false" />
8    </xs:restriction >
9  </xs:simpleType >
10
11  <xs:simpleType name="tableName" >
12    <xs:restriction base="xs:string" >
13     <xs:pattern value='[0-9a-z_]{1,28}'/>
14    </xs:restriction >
15  </xs:simpleType >
16
17  <xs:simpleType name="fieldName" >
18    <xs:restriction base="xs:string" >
19     <xs:pattern value='[0-9a-z_]{1,30}'/>
20    </xs:restriction >
21  </xs:simpleType >
22
23  <xs:simpleType name="fieldType">
24    <xs:restriction base="xs:NMTOKEN">
25      <xs:enumeration value="int" />
26      <xs:enumeration value="number" />
27      <xs:enumeration value="float" />
28      <xs:enumeration value="char" />
29      <xs:enumeration value="text" />
30      <xs:enumeration value="binary" />
31      <xs:enumeration value="datetime" />
32    </xs:restriction>
33  </xs:simpleType>
34
35  <xs:simpleType name="fieldLength" >
36    <xs:restriction base="xs:string" >
37    <!-- TODO: Moodle 2.5 - Drop LOB sizes, keep only numbers -->
38     <xs:pattern value='(\d+)|(small|medium|big)'/>
39    </xs:restriction >
40  </xs:simpleType >
41
42  <xs:simpleType name="fieldsList" >
43    <xs:restriction base="xs:string" >
44     <xs:pattern value='[0-9a-z_, ]+'/>
45    </xs:restriction >
46  </xs:simpleType >
47
48  <xs:simpleType name="keyType">
49    <xs:restriction base="xs:NMTOKEN">
50      <xs:enumeration value="primary" />
51      <xs:enumeration value="unique" />
52      <xs:enumeration value="foreign" />
53      <xs:enumeration value="foreign-unique" />
54    </xs:restriction>
55  </xs:simpleType>
56
57
58  <xs:element name="FIELD">
59    <xs:complexType>
60      <xs:attribute name="NAME"       type="fieldName"   use="required" />
61      <xs:attribute name="SEQUENCE"   type="trueFalse"   use="required" />
62      <xs:attribute name="TYPE"       type="fieldType"   use="required" />
63      <xs:attribute name="LENGTH"     type="fieldLength" use="optional" />
64      <xs:attribute name="NOTNULL"    type="trueFalse"   use="required" />
65      <xs:attribute name="DECIMALS"   type="xs:positiveInteger" use="optional" />
66      <!-- TODO: Moodle 2.4 - Drop ignored UNSIGNED attribute -->
67      <xs:attribute name="UNSIGNED"   type="trueFalse"   use="optional" />
68      <xs:attribute name="DEFAULT"    type="xs:string"   use="optional" />
69      <xs:attribute name="COMMENT"    type="xs:string"   use="optional" />
70      <!-- TODO: Moodle 2.6 - Drop ignored PREVIOUS/NEXT attributes -->
71      <xs:attribute name="PREVIOUS"   type="fieldName"   use="optional" />
72      <xs:attribute name="NEXT"       type="fieldName"   use="optional" />
73    </xs:complexType>
74  </xs:element>
75
76  <xs:element name="FIELDS">
77    <xs:complexType>
78      <xs:sequence>
79        <xs:element ref="FIELD" maxOccurs="unbounded" />
80      </xs:sequence>
81    </xs:complexType>
82  </xs:element>
83
84  <xs:element name="INDEX">
85    <xs:complexType>
86      <xs:attribute name="NAME"     type="xs:NMTOKEN" use="required" />
87      <xs:attribute name="UNIQUE"   type="trueFalse"  use="required" />
88      <xs:attribute name="FIELDS"   type="fieldsList" use="required" />
89      <xs:attribute name="HINTS"    type="xs:string"  use="optional" />
90      <xs:attribute name="COMMENT"  type="xs:string"  use="optional" />
91      <!-- TODO: Moodle 2.6 - Drop ignored PREVIOUS/NEXT attributes -->
92      <xs:attribute name="PREVIOUS" type="xs:NMTOKEN" use="optional" />
93      <xs:attribute name="NEXT"     type="xs:NMTOKEN" use="optional" />
94    </xs:complexType>
95  </xs:element>
96
97  <xs:element name="INDEXES">
98    <xs:complexType>
99      <xs:sequence>
100        <xs:element ref="INDEX" maxOccurs="unbounded" />
101      </xs:sequence>
102    </xs:complexType>
103  </xs:element>
104
105  <xs:element name="KEY">
106    <xs:complexType>
107      <xs:attribute name="NAME"      type="xs:NMTOKEN" use="required" />
108      <xs:attribute name="TYPE"      type="keyType"    use="required" />
109      <xs:attribute name="FIELDS"    type="fieldsList" use="required" />
110      <xs:attribute name="REFTABLE"  type="tableName"  use="optional" />
111      <xs:attribute name="REFFIELDS" type="fieldsList" use="optional" />
112      <xs:attribute name="COMMENT"   type="xs:string"  use="optional" />
113      <!-- TODO: Moodle 2.6 - Drop ignored PREVIOUS/NEXT attributes -->
114      <xs:attribute name="PREVIOUS"  type="xs:NMTOKEN" use="optional" />
115      <xs:attribute name="NEXT"      type="xs:NMTOKEN" use="optional" />
116    </xs:complexType>
117  </xs:element>
118
119  <xs:element name="KEYS">
120    <xs:complexType>
121      <xs:sequence>
122        <xs:element ref="KEY" maxOccurs="unbounded" />
123      </xs:sequence>
124    </xs:complexType>
125  </xs:element>
126
127  <xs:element name="SENTENCE">
128    <xs:complexType>
129      <xs:attribute name="TEXT" type="xs:string" use="required" />
130    </xs:complexType>
131  </xs:element>
132
133  <xs:element name="SENTENCES">
134    <xs:complexType>
135      <xs:sequence>
136        <xs:element ref="SENTENCE" maxOccurs="unbounded" />
137      </xs:sequence>
138    </xs:complexType>
139  </xs:element>
140
141  <xs:element name="TABLE">
142    <xs:complexType>
143      <xs:sequence>
144        <xs:element ref="FIELDS" />
145        <xs:element ref="KEYS"    minOccurs="0" />
146        <xs:element ref="INDEXES" minOccurs="0" />
147      </xs:sequence>
148      <xs:attribute name="NAME"     type="tableName" use="required" />
149      <xs:attribute name="COMMENT"  type="xs:string" use="optional" />
150      <!-- TODO: Moodle 2.6 - Drop ignored PREVIOUS/NEXT attributes -->
151      <xs:attribute name="PREVIOUS" type="tableName" use="optional" />
152      <xs:attribute name="NEXT"     type="tableName" use="optional" />
153    </xs:complexType>
154  </xs:element>
155
156  <xs:element name="TABLES">
157    <xs:complexType>
158      <xs:sequence>
159        <xs:element ref="TABLE" maxOccurs="unbounded" />
160      </xs:sequence>
161    </xs:complexType>
162  </xs:element>
163
164  <xs:element name="XMLDB">
165    <xs:complexType>
166      <xs:sequence>
167        <xs:element ref="TABLES"     minOccurs="0" />
168      </xs:sequence>
169      <xs:attribute name="PATH"    type="xs:string" use="required" />
170      <xs:attribute name="VERSION" type="xs:string" use="required" />
171      <xs:attribute name="COMMENT" type="xs:string" use="optional" />
172    </xs:complexType>
173  </xs:element>
174
175</xs:schema>
176