moodle/lib/xmldb/xmldb.xsd
Eloy Lafuente (stronk7) d2b6a1b7f3
MDL-76459 dml: Remove other remaining harcoded uses of old 28 & 30
Let's require lib/ddllib.php and use the constant properly,
so we don't need to go searching for cases in future changes.

They are a hand of files, but already are included often each
time the database manager is included. Possible alternative
for this, if we want to reduce the number of included files
is to move the constants to xmldb_constants and only include
that file, but I don't think that makes much sense.

Also, fix the xmldb schema definition to validate table and
column names with the new allowed lengths.
2023-09-02 09:22:13 +02:00

176 lines
6.1 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="trueFalse" >
<xs:restriction base="xs:NMTOKEN" >
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction >
</xs:simpleType >
<xs:simpleType name="tableName" >
<xs:restriction base="xs:string" >
<xs:pattern value='[0-9a-z_]{1,53}'/>
</xs:restriction >
</xs:simpleType >
<xs:simpleType name="fieldName" >
<xs:restriction base="xs:string" >
<xs:pattern value='[0-9a-z_]{1,63}'/>
</xs:restriction >
</xs:simpleType >
<xs:simpleType name="fieldType">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="int" />
<xs:enumeration value="number" />
<xs:enumeration value="float" />
<xs:enumeration value="char" />
<xs:enumeration value="text" />
<xs:enumeration value="binary" />
<xs:enumeration value="datetime" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="fieldLength" >
<xs:restriction base="xs:string" >
<!-- TODO: Moodle 2.5 - Drop LOB sizes, keep only numbers -->
<xs:pattern value='(\d+)|(small|medium|big)'/>
</xs:restriction >
</xs:simpleType >
<xs:simpleType name="fieldsList" >
<xs:restriction base="xs:string" >
<xs:pattern value='[0-9a-z_, ]+'/>
</xs:restriction >
</xs:simpleType >
<xs:simpleType name="keyType">
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="primary" />
<xs:enumeration value="unique" />
<xs:enumeration value="foreign" />
<xs:enumeration value="foreign-unique" />
</xs:restriction>
</xs:simpleType>
<xs:element name="FIELD">
<xs:complexType>
<xs:attribute name="NAME" type="fieldName" use="required" />
<xs:attribute name="SEQUENCE" type="trueFalse" use="required" />
<xs:attribute name="TYPE" type="fieldType" use="required" />
<xs:attribute name="LENGTH" type="fieldLength" use="optional" />
<xs:attribute name="NOTNULL" type="trueFalse" use="required" />
<xs:attribute name="DECIMALS" type="xs:positiveInteger" use="optional" />
<!-- TODO: Moodle 2.4 - Drop ignored UNSIGNED attribute -->
<xs:attribute name="UNSIGNED" type="trueFalse" use="optional" />
<xs:attribute name="DEFAULT" type="xs:string" use="optional" />
<xs:attribute name="COMMENT" type="xs:string" use="optional" />
<!-- TODO: Moodle 2.6 - Drop ignored PREVIOUS/NEXT attributes -->
<xs:attribute name="PREVIOUS" type="fieldName" use="optional" />
<xs:attribute name="NEXT" type="fieldName" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="FIELDS">
<xs:complexType>
<xs:sequence>
<xs:element ref="FIELD" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="INDEX">
<xs:complexType>
<xs:attribute name="NAME" type="xs:NMTOKEN" use="required" />
<xs:attribute name="UNIQUE" type="trueFalse" use="required" />
<xs:attribute name="FIELDS" type="fieldsList" use="required" />
<xs:attribute name="HINTS" type="xs:string" use="optional" />
<xs:attribute name="COMMENT" type="xs:string" use="optional" />
<!-- TODO: Moodle 2.6 - Drop ignored PREVIOUS/NEXT attributes -->
<xs:attribute name="PREVIOUS" type="xs:NMTOKEN" use="optional" />
<xs:attribute name="NEXT" type="xs:NMTOKEN" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="INDEXES">
<xs:complexType>
<xs:sequence>
<xs:element ref="INDEX" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="KEY">
<xs:complexType>
<xs:attribute name="NAME" type="xs:NMTOKEN" use="required" />
<xs:attribute name="TYPE" type="keyType" use="required" />
<xs:attribute name="FIELDS" type="fieldsList" use="required" />
<xs:attribute name="REFTABLE" type="tableName" use="optional" />
<xs:attribute name="REFFIELDS" type="fieldsList" use="optional" />
<xs:attribute name="COMMENT" type="xs:string" use="optional" />
<!-- TODO: Moodle 2.6 - Drop ignored PREVIOUS/NEXT attributes -->
<xs:attribute name="PREVIOUS" type="xs:NMTOKEN" use="optional" />
<xs:attribute name="NEXT" type="xs:NMTOKEN" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="KEYS">
<xs:complexType>
<xs:sequence>
<xs:element ref="KEY" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SENTENCE">
<xs:complexType>
<xs:attribute name="TEXT" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="SENTENCES">
<xs:complexType>
<xs:sequence>
<xs:element ref="SENTENCE" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TABLE">
<xs:complexType>
<xs:sequence>
<xs:element ref="FIELDS" />
<xs:element ref="KEYS" minOccurs="0" />
<xs:element ref="INDEXES" minOccurs="0" />
</xs:sequence>
<xs:attribute name="NAME" type="tableName" use="required" />
<xs:attribute name="COMMENT" type="xs:string" use="optional" />
<!-- TODO: Moodle 2.6 - Drop ignored PREVIOUS/NEXT attributes -->
<xs:attribute name="PREVIOUS" type="tableName" use="optional" />
<xs:attribute name="NEXT" type="tableName" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="TABLES">
<xs:complexType>
<xs:sequence>
<xs:element ref="TABLE" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="XMLDB">
<xs:complexType>
<xs:sequence>
<xs:element ref="TABLES" minOccurs="0" />
</xs:sequence>
<xs:attribute name="PATH" type="xs:string" use="required" />
<xs:attribute name="VERSION" type="xs:string" use="required" />
<xs:attribute name="COMMENT" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:schema>