<?xml version="1.0" encoding="UTF-8"?>
<!--
NOTE (JT): This schema differs from the official version adopted by the WG in that
1) these attribute declarations in the xs:schema element:
  xmlns:ts="http://www.w3.org/2003/XMLSchema/TestSuite/PLACEHOLDER"
  targetNamespace="http://www.w3.org/2003/XMLSchema/TestSuite/PLACEHOLDER"
are replaced by lines to enable the use of a local copy of this schema.
2) The import declarations for XLink and XML namespace are given schemaLocation attributes.
-->
<xs:schema  
  xmlns:ts="TestSuite"
  targetNamespace="TestSuite"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  >
<!--
  <xs:import namespace="http://www.w3.org/1999/xlink"/>

  <xs:import namespace="http://www.w3.org/XML/1998/namespace"/>
-->

  <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="file:///C:/3rd-party/XlnGui/Catalogs/Large/www.xbrl.org/2003/xlink-2003-12-31.xsd"/>

  <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="file:///C:/3rd-party/XlnGui/Catalogs/Small/www.w3.org/2001/03/xml.xsd"/>


  <xs:annotation>
    <xs:documentation>
      This is the schema for the W3C XML Schema Test Suite collection
      (TS), as approved by the W3C XML Schema Working Group on May 12,
      2003. It defines the namespace:

        http://www.w3.org/2003/XMLSchema/TestSuite/PLACEHOLDER

      The TS consists of a set of test suites, each of which is identified
      according to the version of W3C XML Schema it is designed to
      test. Previous versions of test suites are archived and are also
      available, identifiable by the version of the test suite itself.

      This schema defines three separate but related document types for
      the TS:

        1) The testSuite element is the root element of a document
           which defines a test suite as described above (e.g. the
           2003-10-25 version of the test suite for version 1 of the
           Recommendation).

           The principal purpose of a testSuite document is the provision
           of a set of links to documents defining the tests which
           constitute the test suite.

           Files containing testSuite documents have the filename suffix
           ".suite".

        2) The testSet element is the root element of a document which
           describes a set of tests. Each testSuite consists primarily
           of a set of links to testSet documents.  The scope of the
           testSet is typically determined by the contributor of the
           tests which make up the testSet: it is the unit in which
           tests are contributed to the collection.

           Files containing testSet documents have the filename suffix
           ".testSet".

        3) The testSuiteResults element is the root element of a
           document describing the results of testing a processor
           against a testSuite.

           Files containing testSuiteResults documents have the filename
           suffix ".results".
    </xs:documentation>
  </xs:annotation>


  <xs:element name="testSuite">
    <xs:annotation>
      <xs:documentation>
        The root element of a document describing all tests for a
        particular version of W3C XML Schema, for the version of the TS
        defined by the document.

        The element has three attributes, each of which is required:

          name - the name of this test suite.

          releaseDate - the date on which this test suite was
                        released. This value serves to identify the
                        version of the test suite.

          schemaVersion - the version of W3C XML Schema for which the 
                          tests are designed.

        Two elements may optionally be present:

          annotation - at most one instance of general documentation.

          testSetRef - a set of references to the sets of tests which 
                       make up this test suite.

                       The test sets referenced are uniquely named.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ts:annotation" minOccurs="0"/>
        <xs:element ref="ts:testSetRef" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="name" use="required" type="xs:Name"/>
      <xs:attribute name="releaseDate" use="required" type="xs:date"/>
      <xs:attribute name="schemaVersion" use="required" type="xs:string"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>


  <xs:element name="testSetRef" type="ts:ref"/>


  <xs:element name="testSet">
    <xs:annotation>
      <xs:documentation>
        The root element of a document describing a set of tests,
        normally from a single contributor.  A contributor may supply
        any number of testSet files.

        The element has two attributes, each of which is required:

          contributor - the name of the contributor of this testSet.

          name - the name of this testSet, which must be unique within
                 the enclosing testSuite.

        Two elements may optionally be present:

          annotation - at most one instance of general documentation.

          testGroup - a set of testGroup elements, each of which defines a
                      group of closely related tests.

                      The testGroup elements must be uniquely named.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ts:annotation" minOccurs="0"/>
        <xs:element ref="ts:testGroup" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="contributor" use="required" type="xs:string"/>
      <xs:attribute name="name" use="required" type="xs:Name"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
    <xs:unique name="uniqueGroupName">
      <xs:annotation>
        <xs:documentation>
          Each test group within a test set must have a unique name.
        </xs:documentation>
      </xs:annotation>
      <xs:selector xpath="ts:testGroup"/>
      <xs:field xpath="@name"/>
    </xs:unique>
  </xs:element>


  <xs:element name="testGroup">
    <xs:annotation>
      <xs:documentation>
        This element groups a collection of closely related tests. In the 
        case where a schema is present, this element groups the schema with a
        set of instance documents which should be validated against the
        schema.

        It has one attribute, which is required:

          name - an identifier for the testGroup which is unique within
                 the enclosing testSet.

        Four elements may optionally be present:

          annotation - at most one instance of general documentation.

          documentationReference - any number of references to external
                                   documentation upon which the test
                                   is based, e.g. links to relevant
                                   sections of the Recommendation,
                                   to the Errata, etc.

          schemaTest - any number of elements, each of which holds
                       information on a single schema document.

                       When more than one schema document is present,
                       a single schema is constructed from the set
                       (or from other schemas via import).

                       Schema documents may be omitted, for the purpose
                       of testing a processor's validation of an instance
                       containing only the built-in datatypes defined in
                       the Recommendation.

          instanceTest - any number of elements, each of which holds
                         information on a single instance document to
                         be validated against the included schema.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ts:annotation" minOccurs="0"/>
        <xs:element ref="ts:documentationReference" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ts:schemaTest" minOccurs="0"/>
        <xs:element ref="ts:instanceTest" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="name" use="required" type="xs:Name"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
    <xs:unique name="uniqueTestName">
      <xs:annotation>
        <xs:documentation>
          Each test within a test group must have a unique name.
        </xs:documentation>
      </xs:annotation>
      <xs:selector xpath="ts:schemaTest|ts:instanceTest"/>
      <xs:field xpath="@name"/>
    </xs:unique>
  </xs:element>


  <xs:element name="schemaTest">
    <xs:annotation>
      <xs:documentation>
        This element groups together information about the schema for
        a particular test condition.

        It has one attribute, which is required:

          name - the name of the schema, which must be unique within
                 the enclosing testGroup (i.e. it must differ from the
                 name(s) of any associated instanceTest elements).

        One element is required:

          schemaDocument - at least one link to a file containing a
                           schema document. The schema for the test is 
                           constructed from the set (or from other 
                           schemas via import).

        Three elements may optionally be present:

          expected - the expected validation outcome for the schema
                     contained in the schema document(s).

          current - the current status of this test in the TS (an
                    indication of the test's accuracy in testing the
                    feature it is intended to test).

          prior - the history of any changes in the status of this test.

        The elements "expected" and "current" may be absent when tests
        are contributed, but will always be present for tests included in 
        the TS.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ts:schemaDocument" maxOccurs="unbounded"/>
        <xs:element ref="ts:expected" minOccurs="0"/>
        <xs:element ref="ts:current" minOccurs="0"/>
        <xs:element ref="ts:prior" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="name" use="required" type="xs:Name"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>


  <xs:element name="instanceTest">
    <xs:annotation>
      <xs:documentation>
        This element groups together information about an instance
        document which should be validated against the schema referenced
        in the enclosing testGroup.

        It has one attribute, which is required:

          name - the name of the instance document, which must be unique
                 within the enclosing testGroup (i.e. it must differ
                 from the name of any associated schemaTest elements).

        One element is required:

          instanceDocument - a link to a file containing the instance
                             document.

        Three elements may optionally be present:

          expected - the expected validation outcome for the instance
                     document.

          current - the current status of this test in the TS (an
                    indication of the test's accuracy in testing the
                    feature it is intended to test).

          prior - the history of any changes in the status of this test.

        The elements "expected" and "current" may be absent when tests
        are contributed, but will always be present for tests included in 
        the TS.

        Note: per section 5.2 "Assessing Schema-Validity" of the
        Recommendation "XML Schema Part 1: Structures", validation may
        be started in a variety of ways.  For the purposes of the TS,
        only the third method shall be used:

          "The processor starts from Schema-Validity Assessment (Element)
          (3.3.4) with no stipulated declaration or definition".
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ts:instanceDocument"/>
        <xs:element ref="ts:expected" minOccurs="0"/>
        <xs:element ref="ts:current" minOccurs="0"/>
        <xs:element ref="ts:prior" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="name" use="required" type="xs:Name"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>


  <xs:element name="schemaDocument" type="ts:ref"/>
  <xs:element name="instanceDocument" type="ts:ref"/>


  <xs:element name="current" type="ts:statusEntry">
    <xs:annotation>
      <xs:documentation>
        The current status of a test in the TS.
        
        This element has two attributes, both of which are required:

          status - the status of the test. One of "accepted", "stable",
                   "disputed-test" or "disputed-spec" (see the TS website
                   for an explanation of these values).

          date - the date on which the value in the status attribute
                 was attained.
      </xs:documentation>
    </xs:annotation>
  </xs:element>


  <xs:element name="prior" type="ts:statusEntry">
    <xs:annotation>
      <xs:documentation>
        A former status of a test in the TS.

        This element has two attributes, both of which are required:

          status - the former status of the test. One of "accepted",
                   "stable", "disputed-test" or "disputed-spec" (see
                   the TS website for an explanation of these values).

          date - the date on which the value in the status attribute
                 was attained.
      </xs:documentation>
    </xs:annotation>
  </xs:element>


  <xs:complexType name="statusEntry">
    <xs:attribute name="status" use="required" type="ts:status"/>
    <xs:attribute name="date" use="required" type="xs:date"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>


  <xs:simpleType name="status">
    <xs:restriction base="xs:token">
      <xs:enumeration value="accepted"/>
      <xs:enumeration value="stable"/>
      <xs:enumeration value="disputed-test"/>
      <xs:enumeration value="disputed-spec"/>
    </xs:restriction>
  </xs:simpleType>


  <xs:element name="expected">
    <xs:annotation>
      <xs:documentation>
        The expected validation outcome of a test in the TS.
        
        This element has one attribute, which is required:
        
          validity - the expected validity of the test. One of "valid",
                     "invalid" or "notKnown".
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:attribute name="validity" use="required" type="ts:validityOutcome"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>


  <xs:simpleType name="validityOutcome">
    <xs:restriction base="xs:token">
      <xs:enumeration value="valid"/>
      <xs:enumeration value="invalid"/>
      <xs:enumeration value="notKnown"/>
    </xs:restriction>
  </xs:simpleType>


  <xs:element name="testSuiteResults">
    <xs:annotation>
      <xs:documentation>
        This is the root element of a document containing a test result
        report. The report takes the form of a set of test results 
        returned by a processor/validator when run against the TS.

        It has three required attributes:

          suite - the name of the test suite to which these results
                  correspond.  This should be the value of the name
                  attribute of the testSuite element at the root of
                  the test suite document describing the tests to which
                  these results correspond.

          processor - some identifying information for the processor/
                      validator which produced the reported results. The
                      value of this attribute is left to the discretion
                      of the reporter.

          submitDate - the date on which these results were submitted
                       to the TS Task Force.

        The element also has one optional attribute:

          publicationPermission - the degree to which the result reporter
                                  authorizes the W3C to disseminate the
                                  reported results. One of "W3C members"
                                  or "public" (see the TS website for an
                                  explanation of these values). If this
                                  attribute is absent, no permission to
                                  publish is granted.

        This element has two optional elements:

          annotation - at most one instance of more detailed
                       (ts:documentation) or structured (ts:appinfo)
                       information or commentary regarding the enclosed
                       test results.

          testResult - any number of reports of the results of individual
                       tests. Any results may be omitted, particularly
                       those for tests of features for which the processor
                       claims no support.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ts:annotation" minOccurs="0"/>
        <xs:element ref="ts:testResult" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="suite" use="required" type="xs:Name"/>
      <xs:attribute name="processor" use="required" type="xs:string"/>
      <xs:attribute name="submitDate" use="required" type="xs:date"/>
      <xs:attribute name="publicationPermission">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="W3C members"/>
            <xs:enumeration value="public"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>


  <xs:element name="testResult">
    <xs:annotation>
      <xs:documentation>
        The result of an individual instance test or a schema test.
        
        This element has four required attributes:
        
          validity - the validition outcome of the test. One of "valid",
                     "invalid" or "notKnown".

          set - the value of the "name" attribute of the test set to
                which the test belongs.

          group - the value of the "name" attribute of the test group
                  to which the test belongs.

          test - the value of the "name" attribute of the schema test
                 or instance test, the validation outcome of which this
                 result reports.

            NOTE: The "set", "group" and "test" attributes are used to
            uniquely identify the test within the TS for which this
            result reports the validation outcome.  Each matches the
            "name" attribute of the respective element in the test suite.

        This element has one optional attribute:
        
          normalizedLoad - a relative load value, intended as an indicator
                           of the resource requirements of an individual
                           test. Values may be based on processing time,
                           memory usage or a combination of the two.
                           Values should be in the vicinity of 1.0.

        The element has one optional element:
        
          annotation - at most one instance of more detailed
                       (ts:documentation) or structured (ts:appinfo)
                       information or commentary regarding the individual
                       test result. Reporters are encouraged to use
                       annotation/appinfo to report more detailed outcome
                       information, such as error and warning messages.
     </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ts:annotation" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="validity" use="required" type="ts:validityOutcome"/>
      <xs:attribute name="set" use="required" type="xs:Name"/>
      <xs:attribute name="group" use="required" type="xs:Name"/>
      <xs:attribute name="test" use="required" type="xs:Name"/>
      <xs:attribute name="normalizedLoad" type="xs:decimal"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>


  <xs:complexType name="ref">
    <xs:attribute ref="xlink:type" default="locator"/>
    <xs:attribute ref="xlink:href"/>
    <xs:anyAttribute namespace="##other" processContents="lax"/>
  </xs:complexType>


  <xs:element name="documentationReference" type="ts:ref">
    <xs:annotation>
      <xs:documentation>
        A link to documentation relevant to a test, such as a link to the
        Recommendation, an erratum, an archived email discussion, etc.
      </xs:documentation>
    </xs:annotation>
  </xs:element>


  <xs:element name="annotation">
    <xs:annotation>
      <xs:documentation>
        This is an exact copy of the annotation element defined in the Schema
        Recommendation. It is duplicated here in order to replicate the 
        functionality of the xs:annotation element and because the Schema for
        Schemas cannot be imported. 
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element ref="ts:appinfo"/>
        <xs:element ref="ts:documentation"/>
      </xs:choice>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>


  <xs:element name="appinfo">
    <xs:complexType mixed="true">
      <xs:sequence maxOccurs="unbounded" minOccurs="0">
        <xs:any processContents="lax"/>
      </xs:sequence>
      <xs:attribute name="source" type="xs:anyURI"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="documentation">
    <xs:complexType mixed="true">
      <xs:sequence maxOccurs="unbounded" minOccurs="0">
        <xs:any processContents="lax"/>
      </xs:sequence>
      <xs:attribute name="source" type="xs:anyURI"/>
      <xs:attribute ref="xml:lang"/>
      <xs:anyAttribute namespace="##other" processContents="lax"/>
    </xs:complexType>
  </xs:element>

</xs:schema>
