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