<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="features" type="featuresType"/>
    <xs:complexType name="featuresType">
        <xs:sequence>
            <xs:element ref="feature" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="feature" type="featureType"/>
    <xs:complexType name="featureType">
        <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="location"/>
            <xs:element ref="roundref" maxOccurs="unbounded"/>
            <xs:element ref="notes" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="name" type="xs:string"/>
    <xs:element name="location" type="locationType"/>
    <xs:complexType name="locationType">
        <xs:sequence>
            <xs:element ref="section"/>
            <xs:element ref="URI"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="section" type="xs:string"/>
    <xs:element name="URI" type="xs:anyURI"/>
    <xs:element name="testcaseref" type="xs:anyURI"/>
    <xs:element name="notes" type="xs:string"/>
    <xs:element name="rounds" type="roundsType">
        <xs:unique name="round-name">
            <xs:selector xpath="round"/>
            <xs:field xpath="name"/>
        </xs:unique>
        <xs:unique name="testcase-name">
            <xs:selector xpath="round/testcase"/>
            <xs:field xpath="name"/>
        </xs:unique>
    </xs:element>
    <xs:complexType name="roundsType">
        <xs:sequence>
            <xs:element ref="round" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="round" type="roundType"/>
    <xs:complexType name="roundType">
        <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="label"/>
            <xs:element ref="description"/>
            <xs:element ref="type"/>
            <xs:element ref="testcase" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="label" type="xs:string"/>
    <xs:element name="description" type="xs:string"/>
    <xs:element name="testcases" type="testcasesType"/>
    <xs:complexType name="testcasesType">
        <xs:sequence>
            <xs:element ref="testcase" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="testcase" type="testcaseType"/>
    <xs:complexType name="testcaseType">
        <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="description"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="type" type="typeType"/>
    <xs:simpleType name="typeType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Unit"/>
            <xs:enumeration value="Interop"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="participant" type="participationType"/>
    <xs:complexType name="participationType">
        <xs:sequence>
            <xs:element ref="organization"/>
            <xs:element ref="reporter" maxOccurs="unbounded"/>
            <xs:element ref="implementation" maxOccurs="unbounded"/>
            <xs:element ref="roundref" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="organization" type="xs:string"/>
    <xs:element name="reporter" type="reporterType"/>
    <xs:element name="implementation" type="implementationType"/>
    <xs:element name="roundref" type="roundrefType"/>
    <xs:complexType name="reporterType">
        <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="email"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="email" type="emailType"/>
    <xs:simpleType name="emailType">
        <xs:restriction base="xs:string">
            <xs:pattern value="[^@]+@[^\.]+\..+"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="implementationType">
        <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="version"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="version" type="xs:string"/>
    <xs:simpleType name="roundrefType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Round-1"/>
            <xs:enumeration value="Round-2-WSDL11"/>
            <xs:enumeration value="Round-2-WSDL20"/>
            <xs:enumeration value="Round-3-WSDL11"/>
            <xs:enumeration value="Round-3-WSDL20"/>
            <xs:enumeration value="Round-4-Media-Type"/>
            <xs:enumeration value="Round-4-External-Policy-Attachment-WSDL11"/>
            <xs:enumeration value="Round-4-External-Policy-Attachment-WSDL20"/>
            <xs:enumeration value="Round-4-UDDI-Attachment-Interop"/>
            <xs:enumeration value="Round-4-UDDI-Attachment-Unittest"/>
            <xs:enumeration value="Round-4-Negative-Test"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="results" type="resultsType">
        <!--<xs:unique name="testcaseref">
            <xs:selector xpath="result"/>
            <xs:field xpath="testcaseref"/>
        </xs:unique>
        <xs:unique name="providerref">
            <xs:selector xpath="result"/>
            <xs:field xpath="testcaseref"/>
            <xs:field xpath="provider"/>
        </xs:unique>-->
    </xs:element>
    <xs:complexType name="resultsType">
        <xs:sequence>
            <xs:element ref="participantref"/>
            <xs:element ref="endpoints" minOccurs="0"/>
            <xs:element ref="result" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="participantref" type="participantrefType"/>
    <xs:simpleType name="participantrefType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="BEA"/>
            <xs:enumeration value="IBM"/>
            <xs:enumeration value="HP"/>
            <xs:enumeration value="Layer-7"/>
            <xs:enumeration value="Microsoft"/>
            <xs:enumeration value="Oracle"/>
            <xs:enumeration value="Sun"/>
            <xs:enumeration value="webMethods"/>
            <xs:enumeration value="WSO2"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="endpoints" type="endpointsType"/>
    <xs:complexType name="endpointsType">
        <xs:sequence>
            <xs:element ref="endpoint" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="endpoint" type="endpointType"/>
    <xs:complexType name="endpointType">
        <xs:sequence>
            <xs:element ref="label"/>
            <xs:element ref="URI"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="result" type="resultType"/>
    <xs:complexType name="resultType">
        <xs:sequence>
            <xs:element ref="testcaseref"/>
            <xs:element ref="provider" minOccurs="0"/>
            <xs:element ref="passed"/>
            <xs:element ref="notes" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="provider" type="participantrefType"/>
    <xs:element name="passed" type="passedType"/>
    <xs:simpleType name="passedType">
        <xs:union memberTypes="xs:boolean">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="tbd"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>
</xs:schema>
