<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <!--Simple Types-->
  <xs:simpleType name="t_time">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]"/>
      <!-- "YYYY-MM-DD hh:mm.ss" -->
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="t_timestamp">
    <xs:restriction base="xs:string">
      <xs:pattern value="[ 0-9]*[0-9]\.[0-9][0-9][0-9][0-9][0-9][0-9]"/>
      <!-- "X.XXXXXX" -->
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="t_verdict_enum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="na"/>
      <xs:enumeration value="none"/>
      <xs:enumeration value="pass"/>
      <xs:enumeration value="inconclusive"/>
      <xs:enumeration value="fail"/>
      <xs:enumeration value="error"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="t_measurementresult_enum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="int"/>
      <xs:enumeration value="float"/>
      <xs:enumeration value="string"/>
      <xs:enumeration value="signed"/>
      <xs:enumeration value="unsigned"/>
      <xs:enumeration value="double"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="t_verdictconcept">
    <xs:restriction base="xs:string">
      <xs:enumeration value="2_basic"/>
      <xs:enumeration value="5_extended"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:attributeGroup name="a_time">
    <xs:attribute name="time" type="t_time" use="required"/>
    <xs:attribute name="timestamp" type="t_timestamp" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="a_starttime">
    <xs:attribute name="starttime" type="t_time" use="required"/>
    <xs:attribute name="timestamp" type="t_timestamp" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="a_endtime">
    <xs:attribute name="endtime" type="t_time" use="required"/>
    <xs:attribute name="endtimestamp" type="t_timestamp" use="required"/>
  </xs:attributeGroup>
  <!--Complex Types-->
  <xs:complexType name="t_info">
    <xs:sequence>
      <xs:element name="name"/>
      <xs:element name="description"/>
    </xs:sequence>
    <xs:attribute name="key" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="t_infos">
    <xs:sequence>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="xinfo" type="t_info" maxOccurs="unbounded"/>
        <xs:element name="info" type="t_info" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="t_measuredresults">
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="measuredresult">
        <xs:complexType>
          <xs:attribute name="name" type="xs:string" use="required"/>
          <xs:attribute name="value" type="xs:string" use="required"/>
          <xs:attribute name="type" type="t_measurementresult_enum" use="required"/>
          <xs:attribute name="unit" type="xs:string" use="required"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="t_verdict">
    <xs:attributeGroup ref="a_time"/>
    <xs:attributeGroup ref="a_endtime"/>
    <xs:attribute name="result" type="t_verdict_enum" use="required"/>
  </xs:complexType>
  <xs:complexType name="t_xinfoobject">
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="xinfo" type="t_info"/>
    </xs:sequence>
    <xs:attribute name="type" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="t_xinfoset">
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="xinfoobject" type="t_xinfoobject"/>
    </xs:sequence>
    <xs:attribute name="type" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="t_externalref" mixed="true">
    <xs:attribute name="type" type="xs:string" use="required"/>
    <xs:attribute name="title" type="xs:string" use="required"/>
    <xs:attribute name="owner" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="t_testsetup">
    <xs:complexContent>
      <xs:extension base="t_infos"/>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="t_sut">
    <xs:complexContent>
      <xs:extension base="t_infos"/>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="t_hardware">
    <xs:sequence>
      <xs:element name="sectioncomment" minOccurs="0"/>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element name="xinfoset" type="t_xinfoset"/>
      </xs:sequence>
    </xs:sequence>
    <xs:attribute name="name" type="xs:string" use="required"/>
    <xs:attribute name="category" type="xs:string" use="required"/>
  </xs:complexType>
  <xs:complexType name="t_engineer">
    <xs:complexContent>
      <xs:extension base="t_infos"/>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="t_geninfo">
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="xinfo" type="t_info"/>
    </xs:sequence>
  </xs:complexType>
  <!--Structure Elements-->
  <xs:complexType name="t_seqend">
    <xs:attributeGroup ref="a_endtime"/>
  </xs:complexType>
  <xs:complexType name="t_testcase">
    <xs:sequence>
      <xs:element name="measuredresults" type="t_measuredresults" minOccurs="0"/>
      <xs:element name="verdict" type="t_verdict"/>
      <xs:element name="title"/>
      <xs:element name="ident" minOccurs="0"/>
      <xs:element name="testcaseid" minOccurs="0"/>
      <xs:element name="externalref" type="t_externalref" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attributeGroup ref="a_starttime"/>
  </xs:complexType>
  <xs:complexType name="t_testcaselist">
    <xs:sequence>
      <xs:sequence maxOccurs="unbounded">
        <xs:element name="testcase" type="t_testcase"/>
      </xs:sequence>
      <xs:element name="title"/>
      <xs:element name="externalref" type="t_externalref" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="t_testsequencelist">
    <xs:sequence>
      <xs:sequence maxOccurs="unbounded">
        <xs:element name="testsequence" type="t_testsequence"/>
      </xs:sequence>
      <xs:element name="title"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="t_testgroup">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="testcase" type="t_testcase"/>
        <xs:element name="testgroup" type="t_testgroup"/>
        <xs:element name="testfixture" type="t_testfixture"/>
        <xs:element name="testsequence" type="t_testsequence"/>
        <xs:element name="testcaselist" type="t_testcaselist"/>
        <xs:element name="testsequencelist" type="t_testsequencelist"/>
      </xs:choice>
      <xs:element name="title"/>
      <xs:element name="ident" minOccurs="0"/>
      <xs:element name="externalref" type="t_externalref" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="t_testfixture">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="testfixture" type="t_testfixture"/>
        <xs:element name="testcase" type="t_testcase"/>
        <xs:element name="testcaselist" type="t_testcaselist"/>
        <xs:element name="testsequence" type="t_testsequence"/>
        <xs:element name="testsequencelist" type="t_testsequencelist"/>
      </xs:choice>
      <xs:element name="title"/>
      <xs:element name="externalref" type="t_externalref" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="t_testcycle">
    <xs:sequence>
      <xs:element name="testunit" type="t_testunit" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="run" type="xs:integer" use="required"/>
  </xs:complexType>
  <xs:complexType name="t_testunit">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="testcase" type="t_testcase"/>
        <xs:element name="testgroup" type="t_testgroup"/>
        <xs:element name="testfixture" type="t_testfixture"/>
        <xs:element name="testsequence" type="t_testsequence"/>
        <xs:element name="testcaselist" type="t_testcaselist"/>
        <xs:element name="testsequencelist" type="t_testsequencelist"/>
      </xs:choice>
      <xs:element name="verdict" type="t_verdict"/>
      <xs:element name="title"/>
      <xs:element name="variantinfo" type="t_geninfo" minOccurs="0"/>
    </xs:sequence>
    <xs:attributeGroup ref="a_starttime"/>
  </xs:complexType>
  <xs:complexType name="t_testsequence">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="testcase" type="t_testcase"/>
        <xs:element name="testcaselist" type="t_testcaselist"/>
      </xs:choice>
      <xs:element name="title"/>
      <xs:element name="externalref" type="t_externalref" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="seqend" type="t_seqend"/>
    </xs:sequence>
    <xs:attributeGroup ref="a_starttime"/>
  </xs:complexType>
  <!--ROOT ELEMENT-->
  <xs:element name="testreport">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="testcycle" type="t_testcycle"/>
          <xs:element name="testunit" type="t_testunit"/>
        </xs:choice>
        <xs:element name="verdict" type="t_verdict"/>
        <xs:element name="title"/>
        <xs:element name="engineer" type="t_engineer" minOccurs="0"/>
        <xs:element name="testsetup" type="t_testsetup" minOccurs="0"/>
        <xs:element name="sut" type="t_sut" minOccurs="0"/>
        <xs:element name="hardware" type="t_hardware" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="externalref" type="t_externalref" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attributeGroup ref="a_starttime"/>
      <xs:attribute name="verdicts" type="t_verdictconcept" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>
