352 lines
12 KiB
XML
352 lines
12 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
|
targetNamespace="urn:ultralite"
|
|
xmlns:ul="urn:ultralite"
|
|
elementFormDefault="unqualified"
|
|
attributeFormDefault="unqualified">
|
|
|
|
<xs:element name="ulschema" type="ul:ulschemaType"/>
|
|
|
|
<xs:simpleType name="nonEmptyString">
|
|
<xs:restriction base="xs:string">
|
|
<xs:minLength value="1"/>
|
|
<xs:whiteSpace value="collapse"/>
|
|
</xs:restriction>
|
|
</xs:simpleType>
|
|
|
|
<xs:simpleType name="optionsList">
|
|
<xs:restriction base="xs:string">
|
|
<xs:enumeration value="dateformat"/>
|
|
<xs:enumeration value="dateorder"/>
|
|
<xs:enumeration value="max_hash_size"/>
|
|
<xs:enumeration value="checksum_level"/>
|
|
<xs:enumeration value="nearestcentury"/>
|
|
<xs:enumeration value="precision"/>
|
|
<xs:enumeration value="scale"/>
|
|
<xs:enumeration value="timeformat"/>
|
|
<xs:enumeration value="timestampformat"/>
|
|
<xs:enumeration value="timestampincrement"/>
|
|
<xs:enumeration value="timestampwithtimezoneformat"/>
|
|
</xs:restriction>
|
|
</xs:simpleType>
|
|
|
|
<xs:complexType name="collationType">
|
|
<xs:attribute name="name" type="ul:nonEmptyString" />
|
|
<xs:attribute name="case_sensitive" type="ul:yesNoType" default="no"/>
|
|
<xs:attribute name="utf8" type="ul:yesNoType" default="no"/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="certificatesType">
|
|
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
|
<xs:element name="certificate" type="ul:nonEmptyString"/>
|
|
</xs:sequence>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="identityCertificateType">
|
|
<xs:simpleContent>
|
|
<xs:extension base="xs:string">
|
|
<xs:attribute name='password' type='ul:nonEmptyString' />
|
|
</xs:extension>
|
|
</xs:simpleContent>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="ulschemaType">
|
|
<xs:all>
|
|
<xs:element name="collation" type="ul:collationType" minOccurs="0" maxOccurs="1"/>
|
|
<xs:element name="certificates" type="ul:certificatesType" minOccurs="0" maxOccurs="1"/>
|
|
<xs:element name="identity-certificate" type="ul:identityCertificateType" minOccurs="0" maxOccurs="1"/>
|
|
<xs:element name="options" type="ul:optionsType" minOccurs="0" maxOccurs="1">
|
|
<xs:key name="uniqueOptionNames">
|
|
<xs:selector xpath="option"/>
|
|
<xs:field xpath="@name"/>
|
|
</xs:key>
|
|
</xs:element>
|
|
<xs:element name="tables" type="ul:tablesType" minOccurs="0" maxOccurs="1">
|
|
<xs:key name="uniqueTableNames">
|
|
<xs:selector xpath="table"/>
|
|
<xs:field xpath="@name"/>
|
|
</xs:key>
|
|
|
|
<!-- make sure reftable exists -->
|
|
<xs:key name="ReferencedTable">
|
|
<xs:selector xpath="table"/>
|
|
<xs:field xpath="@name"/>
|
|
</xs:key>
|
|
<xs:keyref name="ref_tbl" refer="ul:ReferencedTable">
|
|
<xs:selector xpath="table/foreignkeys/foreignkey"/>
|
|
<xs:field xpath="@reftable"/>
|
|
</xs:keyref>
|
|
|
|
</xs:element>
|
|
<xs:element name="publications" type="ul:publicationsType" minOccurs="0" maxOccurs="1">
|
|
<xs:key name="uniquePublicationNames">
|
|
<xs:selector xpath="publication"/>
|
|
<xs:field xpath="@name"/>
|
|
</xs:key>
|
|
</xs:element>
|
|
<xs:element name="syncprofiles" type="ul:syncProfileType" minOccurs="0" maxOccurs="1">
|
|
</xs:element>
|
|
<xs:element name="uldata" type="ul:ultableDataType" minOccurs="0" maxOccurs="1"/>
|
|
</xs:all>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="ultableDataType">
|
|
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
|
<xs:element name="table">
|
|
<xs:complexType>
|
|
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
|
<xs:element name="row" type="ul:dataRowType"/>
|
|
</xs:sequence>
|
|
<xs:attribute name="name" type="xs:string"/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
</xs:sequence>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="dataRowType">
|
|
<xs:anyAttribute namespace="##any" processContents="skip"/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="optionsType">
|
|
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
|
<xs:element name="option">
|
|
<xs:complexType>
|
|
<xs:attribute name="name" use="required" type="ul:optionsList" />
|
|
<xs:attribute name="value" use="required" type="ul:nonEmptyString" />
|
|
</xs:complexType>
|
|
</xs:element>
|
|
</xs:sequence>
|
|
</xs:complexType>
|
|
|
|
<xs:simpleType name="yesNoType">
|
|
<xs:restriction base="xs:string">
|
|
<xs:enumeration value="yes"/>
|
|
<xs:enumeration value="no"/>
|
|
</xs:restriction>
|
|
</xs:simpleType>
|
|
|
|
<xs:complexType name="columnsType">
|
|
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
|
<xs:element name="column">
|
|
<xs:complexType>
|
|
<xs:attribute name="name" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="oldname" type="ul:nonEmptyString" />
|
|
<xs:attribute name="type" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="null" default="yes" type="ul:yesNoType"/>
|
|
<xs:attribute name="default">
|
|
<xs:simpleType>
|
|
<xs:restriction base="xs:string">
|
|
<xs:enumeration value="autoincrement"/>
|
|
<xs:enumeration value="global_autoincrement"/>
|
|
<xs:enumeration value="current_utc_timestamp"/>
|
|
<xs:enumeration value="current_timestamp"/>
|
|
<xs:enumeration value="current_time"/>
|
|
<xs:enumeration value="current_date"/>
|
|
<xs:enumeration value="new_uuid"/>
|
|
</xs:restriction>
|
|
</xs:simpleType>
|
|
</xs:attribute>
|
|
|
|
<!-- only used for global autoincrement columns -->
|
|
<xs:attribute name="partition_size" type="xs:nonNegativeInteger"/>
|
|
|
|
<xs:attribute name="default_value" type="xs:string" />
|
|
|
|
<!-- The following two attributes only used by UltraLiteJ: additional optional attributes for blobfile related columns -->
|
|
<xs:attribute name="default_autofilename" type="xs:string" />
|
|
<xs:attribute name="filename_col" type="xs:string" />
|
|
</xs:complexType>
|
|
</xs:element>
|
|
</xs:sequence>
|
|
</xs:complexType>
|
|
|
|
<xs:simpleType name="ascDescType">
|
|
<xs:restriction base="xs:string">
|
|
<xs:enumeration value="asc"/>
|
|
<xs:enumeration value="desc"/>
|
|
</xs:restriction>
|
|
</xs:simpleType>
|
|
|
|
<xs:complexType name="indexColumnType">
|
|
<xs:attribute name="name" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="direction" default="asc" type="ul:ascDescType"/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="primarykeyType">
|
|
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
|
<xs:element name="primarycolumn">
|
|
<xs:complexType>
|
|
<xs:attribute name="name" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="direction" default="asc" type="ul:ascDescType" />
|
|
</xs:complexType>
|
|
</xs:element>
|
|
</xs:sequence>
|
|
<xs:attribute name="name" type="xs:string" />
|
|
<xs:attribute name="max_hash_size" type="ul:nonEmptyString" />
|
|
</xs:complexType>
|
|
|
|
<xs:simpleType name="yesNoKeyType">
|
|
<xs:restriction base="xs:string">
|
|
<xs:enumeration value="yes"/>
|
|
<xs:enumeration value="no"/>
|
|
<xs:enumeration value="key"/>
|
|
</xs:restriction>
|
|
</xs:simpleType>
|
|
|
|
<xs:complexType name="indexesType">
|
|
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
|
<xs:element name="index">
|
|
<xs:complexType>
|
|
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
|
<xs:element name="indexcolumn" type="ul:indexColumnType">
|
|
</xs:element>
|
|
</xs:sequence>
|
|
<xs:attribute name="name" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="unique" default="no" type="ul:yesNoKeyType" />
|
|
<xs:attribute name="max_hash_size" type="ul:nonEmptyString" />
|
|
</xs:complexType>
|
|
<xs:key name="uniqueColNamesPerIndex">
|
|
<xs:selector xpath=".//indexcolumn"/>
|
|
<xs:field xpath="@name"/>
|
|
</xs:key>
|
|
</xs:element>
|
|
</xs:sequence>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="foreignkeyMappingType">
|
|
<xs:attribute name="refcolumn" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="column" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="direction" default="asc" type="ul:ascDescType" />
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="foreignkeysType">
|
|
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
|
<xs:element name="foreignkey">
|
|
<xs:complexType>
|
|
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
|
<xs:element name="mapping" type="ul:foreignkeyMappingType">
|
|
</xs:element>
|
|
</xs:sequence>
|
|
<xs:attribute name="name" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="reftable" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="nullable" type="ul:yesNoType"/>
|
|
<xs:attribute name="check_on_commit" type="ul:yesNoType"/>
|
|
<xs:attribute name="max_hash_size" type="ul:nonEmptyString" />
|
|
</xs:complexType>
|
|
<xs:key name="uniqueColNamesPerForeignKey">
|
|
<xs:selector xpath=".//mapping"/>
|
|
<xs:field xpath="@column"/>
|
|
</xs:key>
|
|
<xs:key name="uniqueRefColNamesPerForeignKey">
|
|
<xs:selector xpath=".//mapping"/>
|
|
<xs:field xpath="@refcolumn"/>
|
|
</xs:key>
|
|
</xs:element>
|
|
</xs:sequence>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="pubTableType">
|
|
<xs:attribute name="name" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="predicate" default="" type="xs:string"/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="publicationsType">
|
|
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
|
<xs:element name="publication">
|
|
<xs:complexType>
|
|
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
|
<xs:element name="pubtable" type="ul:pubTableType">
|
|
</xs:element>
|
|
</xs:sequence>
|
|
<xs:attribute name="name" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="tables" default="" type="xs:string" />
|
|
</xs:complexType>
|
|
</xs:element>
|
|
</xs:sequence>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name="syncProfileType">
|
|
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
|
<xs:element name="profile">
|
|
<xs:complexType>
|
|
<xs:attribute name="name" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="profile" default="" type="xs:string" />
|
|
</xs:complexType>
|
|
</xs:element>
|
|
</xs:sequence>
|
|
</xs:complexType>
|
|
|
|
<xs:simpleType name="tableSyncList">
|
|
<xs:restriction base="xs:string">
|
|
<xs:enumeration value="changes"/>
|
|
<xs:enumeration value="allrows"/>
|
|
<xs:enumeration value="norows"/>
|
|
<xs:enumeration value="download"/>
|
|
</xs:restriction>
|
|
</xs:simpleType>
|
|
|
|
<xs:complexType name="tablesType">
|
|
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
|
<xs:element name="table">
|
|
<xs:complexType>
|
|
<xs:all>
|
|
<xs:element name="columns" type="ul:columnsType" minOccurs="1" maxOccurs="1">
|
|
<xs:key name="uniqueColumnNames">
|
|
<xs:selector xpath="column"/>
|
|
<xs:field xpath="@name"/>
|
|
</xs:key>
|
|
</xs:element>
|
|
<xs:element name="primarykey" type="ul:primarykeyType" minOccurs="1" maxOccurs="1">
|
|
<xs:key name="uniquePrimaryKeyColumns">
|
|
<xs:selector xpath="primarycolumn"/>
|
|
<xs:field xpath="@name"/>
|
|
</xs:key>
|
|
</xs:element>
|
|
|
|
<xs:element name="indexes" type="ul:indexesType" minOccurs="0" maxOccurs="1" >
|
|
<xs:key name="uniqueIndexNamesPerTable">
|
|
<xs:selector xpath="index"/>
|
|
<xs:field xpath="@name"/>
|
|
<!-- disallow index named primary -->
|
|
<!-- <xs:field xpath="string("primary")"/> -->
|
|
</xs:key>
|
|
</xs:element>
|
|
<xs:element name="foreignkeys" type="ul:foreignkeysType" minOccurs="0" maxOccurs="1">
|
|
<xs:key name="uniqueForeignKeyNames">
|
|
<xs:selector xpath="foreignkey"/>
|
|
<xs:field xpath="@name"/>
|
|
</xs:key>
|
|
</xs:element>
|
|
</xs:all>
|
|
<xs:attribute name="name" use="required" type="ul:nonEmptyString" />
|
|
<xs:attribute name="oldname" type="ul:nonEmptyString" />
|
|
<xs:attribute name="sync" default="changes" type="ul:tableSyncList" />
|
|
</xs:complexType>
|
|
|
|
<!--
|
|
Constraints to make sure that specified PK, index, and
|
|
FK cols exist (not refcolumns in FK)
|
|
-->
|
|
<xs:key name="ColumnNamesInTable">
|
|
<xs:selector xpath="columns/column"/>
|
|
<xs:field xpath="@name"/>
|
|
</xs:key>
|
|
<xs:keyref name="IndexColumnsMustExist" refer="ul:ColumnNamesInTable">
|
|
<xs:selector xpath="indexes/index/indexcolumn" />
|
|
<xs:field xpath="@name"/>
|
|
</xs:keyref>
|
|
<xs:keyref name="PrimaryColumnsMustExist" refer="ul:ColumnNamesInTable">
|
|
<xs:selector xpath="primarykey/primarycolumn" />
|
|
<xs:field xpath="@name"/>
|
|
</xs:keyref>
|
|
<xs:keyref name="ForeignColumnsInThisTableMustExist" refer="ul:ColumnNamesInTable">
|
|
<xs:selector xpath="foreignkeys/foreignkey/mapping" />
|
|
<xs:field xpath="@column"/>
|
|
</xs:keyref>
|
|
|
|
</xs:element>
|
|
</xs:sequence>
|
|
</xs:complexType>
|
|
|
|
</xs:schema>
|