blob: 65ba7a48bfd6992bb13422c3933e077a61d1ce0f [file] [log] [blame]
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:test="urn:xml.testframework.asterix.ics.uci.edu"
targetNamespace="urn:xml.testframework.asterix.ics.uci.edu" elementFormDefault="qualified">
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- test-suite - top level element -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<xs:element name="test-suite">
<xs:annotation>
<xs:documentation>
This is the top level element for documents that use this schema.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element ref="test:test-group" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="CatalogDesignDate" type="xs:date" use="required"/>
<xs:attribute name="ResultOffsetPath" type="test:SimplifiedRelativeFilePath" use="required">
<xs:annotation>
<xs:documentation>
offset from root to results
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="QueryOffsetPath" type="test:SimplifiedRelativeFilePath"
use="required">
<xs:annotation>
<xs:documentation>
offset from root to Query expression files
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:unique name="unique-test-group">
<xs:selector xpath=".//test:test-group"/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
<!-- SimplifiedRelativeFilePath type -->
<xs:simpleType name="SimplifiedRelativeFilePath">
<xs:restriction base="xs:anyURI">
<xs:pattern value="([a-zA-Z0-9\-\.]+/)+"/>
</xs:restriction>
</xs:simpleType>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- test-group -->
<!-- -->
<!-- Group of test cases and test groups. -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<xs:element name="test-group">
<xs:annotation>
<xs:documentation>
Group of test cases and test groups.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="test-case" type="test:test-case" minOccurs="0" maxOccurs="unbounded">
<xs:unique name="unique-expected-error">
<xs:selector xpath=".//test:expected-error"/>
<xs:field xpath="."/>
</xs:unique>
</xs:element>
<xs:element ref="test:test-group" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- test-case -->
<!-- -->
<!-- A test case to be run. -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<xs:complexType name="test-case">
<xs:sequence>
<xs:element name="description" type="test:description"/>
<xs:element name="compilation-unit" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="description" type="test:description" minOccurs="0"/>
<xs:element name="output-dir" minOccurs="0">
<xs:annotation>
<xs:documentation>
Zero or one file containing expected results for this query.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="compare" type="test:comparison-enum" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<!-- Zero or more expected errors for this query -->
<xs:element name="expected-error" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Zero or more expected errors for this query.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="test:ErrorCode">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<!-- This name is always equal to the name of the test case -->
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- Zero or more files containing expected results for this query -->
</xs:sequence>
<!-- The filename for this query can be constructed from: -->
<!-- the QueryOffsetPath -->
<!-- the FilePath -->
<!-- the name -->
<!-- the QueryFileExtension -->
<xs:attribute name="FilePath" type="test:SimplifiedRelativeFilePath" use="required"/>
<xs:attribute name="date" type="xs:date" use="required"/>
<xs:attribute name="category" type="test:category-enum"/>
</xs:complexType>
<!-- category-enum type -->
<!-- Identify which category of test this is. Currently only "slow". -->
<xs:simpleType name="category-enum">
<xs:annotation>
<xs:documentation>
Identify the category of test, for limiting when it is run.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="slow"/>
</xs:restriction>
</xs:simpleType>
<!-- comparison-enum type -->
<!-- Identify the type of comparison used to determine whether an -->
<!-- expected result and an actual result match. -->
<xs:simpleType name="comparison-enum">
<xs:annotation>
<xs:documentation>
Identify the type of comparison used to determine whether an
expected result and an actual result match.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="XML"/>
<xs:enumeration value="Text"/>
<xs:enumeration value="Inspect"/>
<xs:enumeration value="Ignore"/>
<xs:enumeration value="JSON"/>
<xs:enumeration value="CSV"/>
<xs:enumeration value="CSV_Header"/>
</xs:restriction>
</xs:simpleType>
<!-- description type -->
<xs:complexType name="description">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="last-mod" type="xs:date"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- ErrorCode type -->
<!-- * is used to mean that any error code is acceptable -->
<xs:simpleType name="ErrorCode">
<xs:annotation>
<xs:documentation>
* is used to mean that any error code is acceptable
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="\*|([A-Z]{4}[0-9]{4})"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>