users@jaxb.java.net

Re: Problems with multiple root elements in same package

From: Russell Johns <johns_at_lanl.gov>
Date: Wed, 23 Apr 2003 18:32:01 -0600

On Wed, 23 Apr 2003 12:19:24 -0700, Kohsuke Kawaguchi <Kohsuke.Kawaguchi_at_Sun.COM> wrote:

>As far as I can see, your code and compilation procedure looks OK. So it
>must be either a very simple mistake, or a bug in the RI.
>

As Usual, simple bug. the instance document was not set to the namespace.

> - could you turn on the validation on the unmarshaller just for a
> test?
>
- reveals namespace issue at top level of document. on correction- it gets more interesting...

3 levels deep it insists qualified names become unqualified. the original Xml file passed XmlSpy 5.2 validation, after massaging the file so that
JAXB-RI can read the file XmlSpy insists the generated file is not schema-conformant- below is the relevant parts of the Schemas and the Xml file that succesfully completes unmarshalling (nominally the same as the marshalled result: replace "tvt" with "ns1".)

I used the qualified approach as i was unable to get the file to work using the whole file as unqualified (xmlns="tvTrac" as opposed to xmlns:tvt="tvTrac"). I am presuming that this is probably a bug in the RI but I could be wrong...

Is XmlSpy not properly validating?

As I believe this will need examples to show, I have included the real Xml and Schema files (less a couple of repeated blocks in the XML)I can attach the Java files as well if desired-

in the files below the following the translations from the previous scenario apply ( sorry I don't usually get to program much with foo :-) )

namespace: xmlFoo --> tvTrac
Java Package: Xml.foo -> JvTrac.Xml
root element: <foo-root1> --> <TvTrac-DaemonConfig>

>>>>>>>>>Unmarshallable Xml file:
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v5 rel. 2 U (http://www.xmlspy.com) by Russell C. Johns (Los Alamos National Laboratory) -->
<TvTrac-DaemonConfig MajorVersion="0" MinorVersion="1" xmlns="tvTrac" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="tvTrac
E:\Trac\TvTrac\JvTrac\Xml\TvTrac-DaemonConfig.xsd">
 <port>8189</port>
 <processors>2</processors>
 <speedIndex>0.5</speedIndex>
 <isReferenceSystem>false</isReferenceSystem>
 <buildCapable>true</buildCapable>
 <repositoryInfo type="local">
  <location>/home/cvs/TvTrac</location>
  <port>0</port>
 </repositoryInfo>
 <executableInfo>
  <inFiles>
   <name>tracin</name>
   <suffix>.inp</suffix>
   <type>ASCII</type>
   <input>req</input>
   <output>NA</output>
  </inFiles>
  <outFiles>
   <name>trcout</name>
   <suffix>.out</suffix>
   <type>ASCII</type>
   <input>NA</input>
   <output>req</output>
  </outFiles>
  <cmdLineOptions>
   <optName>-usetpr</optName>
   <numDataArgs>0</numDataArgs>
   <reqFilesReplaced>trcdmp</reqFilesReplaced>
   <newOutFiles>trctpr</newOutFiles>
  </cmdLineOptions>
  <appliesTo>
   <startVersion>
    <category>NRC</category>
    <MajorVersion>3</MajorVersion>
    <MinorVersion>1110</MinorVersion>
    <release> </release>
   </startVersion>
   <RangeClass>AllMinor</RangeClass>
  </appliesTo>
 </executableInfo>
 <diffInfo>
  <numFileTypes>2</numFileTypes>
  <comparators>
   <tag>ASCII</tag>
   <path>diff.exe</path>
   <argList>%Reference%</argList>
   <argList>%Test%</argList>
   <resultType>Text</resultType>
  </comparators>
  <comparators>
   <tag>SigDif</tag>
   <path>rtrcsno.exe</path>
   <argList>%Reference%</argList>
   <argList>%Test%</argList>
   <resultType>Text</resultType>
  </comparators>
 </diffInfo>
</TvTrac-DaemonConfig>
<<<<<<<<<

>>>>>>>>>DaemonConfig Schema:
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v5 rel. 2 U (http://www.xmlspy.com) by Russell C. Johns (Los Alamos National Laboratory) -->
<xs:schema targetNamespace="tvTrac" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="tvTrac" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:include schemaLocation="TvTrac-DataTypes.xsd"/>
 <xs:element name="TvTrac-DaemonConfig">
  <xs:annotation>
   <xs:documentation>ConfigurationalElements for TvTrac Daemon</xs:documentation>
  </xs:annotation>
  <xs:complexType>
   <xs:sequence>
    <xs:element name="port" type="PortType">
     <xs:annotation>
      <xs:documentation>port number that daemon will listen on</xs:documentation>
     </xs:annotation>
    </xs:element>
    <xs:element name="processors" type="xs:int">
     <xs:annotation>
      <xs:documentation>number of processors that can be used to perform calcs</xs:documentation>
     </xs:annotation>
    </xs:element>
    <xs:element name="speedIndex" type="xs:float">
     <xs:annotation>
      <xs:documentation>relative speed as compared to reference System </xs:documentation>
     </xs:annotation>
    </xs:element>
    <xs:element name="isReferenceSystem" type="xs:boolean">
     <xs:annotation>
      <xs:documentation>flag for this being reference system.</xs:documentation>
     </xs:annotation>
    </xs:element>
    <xs:element name="buildCapable" type="xs:boolean">
     <xs:annotation>
      <xs:documentation>flag for system being build capable</xs:documentation>
     </xs:annotation>
    </xs:element>
    <xs:element name="buildInfo" type="BuildInfoType" minOccurs="0">
     <xs:annotation>
      <xs:documentation>information about location of build resources</xs:documentation>
     </xs:annotation>
    </xs:element>
    <xs:element name="repositoryInfo" type="RepositoryInfoType">
     <xs:annotation>
      <xs:documentation>information for the type and location of the reference results repository</xs:documentation>
     </xs:annotation>
    </xs:element>
    <xs:element name="executableInfo" type="ExecutableInfoType">
     <xs:annotation>
      <xs:documentation>information for files used by the application for input - output - cmd Line Args data</xs:documentation>
     </xs:annotation>
    </xs:element>
    <xs:element name="diffInfo" type="DiffInfoType">
     <xs:annotation>
      <xs:documentation>information on how to "diff" each file type</xs:documentation>
     </xs:annotation>
    </xs:element>
   </xs:sequence>
   <xs:attribute name="MajorVersion" type="xs:nonNegativeInteger" use="required" fixed="0">
    <xs:annotation>
     <xs:documentation>major version of Schema / interface</xs:documentation>
    </xs:annotation>
   </xs:attribute>
   <xs:attribute name="MinorVersion" type="xs:nonNegativeInteger" use="required" fixed="1">
    <xs:annotation>
     <xs:documentation>minor version number of schema -interface </xs:documentation>
    </xs:annotation>
   </xs:attribute>
  </xs:complexType>
 </xs:element>
</xs:schema>
<<<<<<<<<<<<

>>>>>>>>>>>> DataTypes Schema:

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v5 rel. 2 U (http://www.xmlspy.com) by Russell C. Johns (Los Alamos National Laboratory) -->
<xs:schema targetNamespace="tvTrac" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="tvTrac">
 <xs:complexType name="BuildInfoType">
  <xs:annotation>
   <xs:documentation>derived type to contain info needed to build app.</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="makePath" type="xs:string">
    <xs:annotation>
     <xs:documentation>path to make app Incl make name e.g. /bin/make</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="makeDbgArgs" type="xs:string" minOccurs="0" maxOccurs="unbounded">
    <xs:annotation>
     <xs:documentation>arguments to use to build a debug executable</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="makeOptArgs" type="xs:string" minOccurs="0" maxOccurs="unbounded">
    <xs:annotation>
     <xs:documentation>arguments to use to build a optimized exe</xs:documentation>
    </xs:annotation>
   </xs:element>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="CommandLineArgType">
  <xs:annotation>
   <xs:documentation>Definition of a CommandLine Argument element</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="Arg" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="cmd" type="xs:string" use="required"/>
 </xs:complexType>
 <xs:simpleType name="ComplexityType">
  <xs:annotation>
   <xs:documentation>Definition of Complexity Type</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:float"/>
 </xs:simpleType>
 <xs:simpleType name="CrcValue">
  <xs:restriction base="xs:string">
   <xs:length value="60"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="DescriptionType">
  <xs:annotation>
   <xs:documentation>Definition of Description</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string"/>
 </xs:simpleType>
 <xs:complexType name="DiffInfoType">
  <xs:annotation>
   <xs:documentation>information on how to "diff" each file type</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="numFileTypes" type="xs:nonNegativeInteger"/>
   <xs:element name="comparators" maxOccurs="unbounded">
    <xs:annotation>
     <xs:documentation>list of file type tags and info on how to comapare them.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
     <xs:sequence>
      <xs:element name="tag" type="xs:string">
       <xs:annotation>
        <xs:documentation>name for file type e.g. ASCII</xs:documentation>
       </xs:annotation>
      </xs:element>
      <xs:element name="path" type="xs:string">
       <xs:annotation>
        <xs:documentation>path to diffing application</xs:documentation>
       </xs:annotation>
      </xs:element>
      <xs:element name="argList" type="xs:string" minOccurs="0" maxOccurs="unbounded">
       <xs:annotation>
        <xs:documentation>list of arguments to diffing app %Ref% idicates reference file %Test% representy test file.</xs:documentation>
       </xs:annotation>
      </xs:element>
      <xs:element name="resultType" type="xs:string">
       <xs:annotation>
        <xs:documentation>type tag of result of diff. enables recursive diff.</xs:documentation>
       </xs:annotation>
      </xs:element>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="ExeIdType">
  <xs:annotation>
   <xs:documentation>derived Type to Id a Executable</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="Name" type="NameType"/>
   <xs:element name="BinaryCrcValue" type="CrcValue"/>
   <xs:element name="TracVersion" type="VersionType"/>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="ExecutableInfoType">
  <xs:annotation>
   <xs:documentation>information for files used by the application for input - output - cmd Line Args data</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="inFiles" type="FileType" maxOccurs="unbounded">
    <xs:annotation>
     <xs:documentation>list of files used for input</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="outFiles" type="FileType" maxOccurs="unbounded">
    <xs:annotation>
     <xs:documentation>list of file used for output</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="chkOnErr" type="xs:string" minOccurs="0" maxOccurs="unbounded">
    <xs:annotation>
     <xs:documentation>list of files to compare on error</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="cmdLineOptions" maxOccurs="unbounded">
    <xs:annotation>
     <xs:documentation>list of Cmd Line args</xs:documentation>
    </xs:annotation>
    <xs:complexType>
     <xs:sequence>
      <xs:element name="optName" type="xs:string">
       <xs:annotation>
        <xs:documentation>name of the argument</xs:documentation>
       </xs:annotation>
      </xs:element>
      <xs:element name="numDataArgs" type="xs:unsignedInt">
       <xs:annotation>
        <xs:documentation>number of arguments given after argument for data</xs:documentation>
       </xs:annotation>
      </xs:element>
      <xs:element name="aliasFor" type="xs:string" minOccurs="0">
       <xs:annotation>
        <xs:documentation>used if argument is alias fo other argument e.g. --nocpu</xs:documentation>
       </xs:annotation>
      </xs:element>
      <xs:element name="optFilesNeeded" type="xs:string" minOccurs="0" maxOccurs="unbounded">
       <xs:annotation>
        <xs:documentation>optional input file that are REQUIRED when option is present.</xs:documentation>
       </xs:annotation>
      </xs:element>
      <xs:element name="reqFilesReplaced" type="xs:string" minOccurs="0" maxOccurs="unbounded">
       <xs:annotation>
        <xs:documentation>required file that aren't used/needed when </xs:documentation>
       </xs:annotation>
      </xs:element>
      <xs:element name="newOutFiles" type="xs:string" minOccurs="0" maxOccurs="unbounded">
       <xs:annotation>
        <xs:documentation>optionl output files provided by the argument</xs:documentation>
       </xs:annotation>
      </xs:element>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="appliesTo" type="VersionRange"/>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="ExeSpecType">
  <xs:annotation>
   <xs:documentation>definition of an EXE spec as a derived type.</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="name" type="NameType">
    <xs:annotation>
     <xs:documentation>name or label of the executable for testing.</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="cvsTag" type="NameType">
    <xs:annotation>
     <xs:documentation>the cvs tag to retrieve the source for this executable.</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="cvsModules" maxOccurs="unbounded">
    <xs:annotation>
     <xs:documentation>The Cvs modules used for this executable</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="platform" type="PlatformType" minOccurs="0">
    <xs:annotation>
     <xs:documentation>Canonical Name of the host Operating System.</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="compiler" minOccurs="0">
    <xs:complexType>
     <xs:annotation>
      <xs:documentation>compiler name</xs:documentation>
     </xs:annotation>
     <xs:simpleContent>
      <xs:extension base="NameType">
       <xs:attribute name="version" type="VersionStringType">
        <xs:annotation>
         <xs:documentation>version of the compiler</xs:documentation>
        </xs:annotation>
       </xs:attribute>
      </xs:extension>
     </xs:simpleContent>
    </xs:complexType>
   </xs:element>
   <xs:element name="optimization" type="OptimizationString" minOccurs="0">
    <xs:annotation>
     <xs:documentation>optimization used to make this executable.</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="sourceCrcValue" type="CrcValue" nillable="true">
    <xs:annotation>
     <xs:documentation>CRC hash value on the source used to build the executable.</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="binaryCrcValue" type="CrcValue" minOccurs="0">
    <xs:annotation>
     <xs:documentation>Crc Type value for the platform dependent binary.</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="dateCompiled" type="xs:string">
    <xs:annotation>
     <xs:documentation>date and time the executable was made.</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="TracVersion" type="VersionType"/>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="ExternalReferenceType">
  <xs:sequence>
   <xs:element name="Name" type="xs:string"/>
   <xs:element name="Location" type="xs:string"/>
   <xs:choice>
    <xs:element name="SetReference" type="SetReferenceType" minOccurs="0"/>
    <xs:element name="TestReference" type="TestReferenceType" minOccurs="0"/>
   </xs:choice>
  </xs:sequence>
  <xs:attribute name="RefType" use="required">
   <xs:simpleType>
    <xs:restriction base="xs:NMTOKEN">
     <xs:enumeration value="PACKAGE"/>
     <xs:enumeration value="SET"/>
     <xs:enumeration value="PROBLEM"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
 </xs:complexType>
 <xs:complexType name="FileSetType">
  <xs:annotation>
   <xs:documentation>specification of a FileSet</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="FileType" type="xs:string" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="FileType">
  <xs:annotation>
   <xs:documentation>Derived type to describe a input or output file</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="name" type="xs:string"/>
   <xs:element name="suffix" type="xs:string"/>
   <xs:element name="type" type="xs:string"/>
   <xs:element name="input" type="FileUseType"/>
   <xs:element name="output" type="FileUseType"/>
  </xs:sequence>
 </xs:complexType>
 <xs:simpleType name="FileUseType">
  <xs:annotation>
   <xs:documentation>Derived Type to describe the use of an input or output file</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
   <xs:enumeration value="req"/>
   <xs:enumeration value="opt"/>
   <xs:enumeration value="NA"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="HostType">
  <xs:annotation>
   <xs:documentation>definition of HostType, string of no more than 80 chars.</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
   <xs:length value="80"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="IPV4Type">
  <xs:annotation>
   <xs:documentation>Type for an IP address.</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
   <xs:length value="16"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="LevelsType">
  <xs:annotation>
   <xs:documentation>Specification of the Levels element</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:int"/>
 </xs:simpleType>
 <xs:simpleType name="NameType">
  <xs:annotation>
   <xs:documentation>defintion of a name constant: String of no more than 20 Chars</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
   <xs:length value="20"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="OptimizationString">
  <xs:restriction base="xs:string">
   <xs:length value="40"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="PlatformType">
  <xs:restriction base="xs:string">
   <xs:length value="40"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="PortType">
  <xs:annotation>
   <xs:documentation>Derived type for Socket ports </xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:unsignedInt"/>
 </xs:simpleType>
 <xs:complexType name="QueryExe-ResponseType">
  <xs:annotation>
   <xs:documentation>Queryexe response.</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="foundExe" type="xs:boolean"/>
   <xs:element name="exeSpec" type="ExeSpecType" minOccurs="0"/>
  </xs:sequence>
 </xs:complexType>
 <xs:simpleType name="RangeClassType">
  <xs:annotation>
   <xs:documentation>Specification of how to define range</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:NMTOKEN">
   <xs:enumeration value="Default"/>
   <xs:enumeration value="AllMajor"/>
   <xs:enumeration value="AllMinor"/>
   <xs:enumeration value="AllRelease"/>
   <xs:enumeration value="AllCategory"/>
   <xs:enumeration value="StdRange"/>
   <xs:enumeration value="SingleVersion"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:complexType name="RepositoryInfoType">
  <xs:annotation>
   <xs:documentation>information for the type and location of the reference results repository</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="location" type="xs:string">
    <xs:annotation>
     <xs:documentation>path to repository</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="port" type="PortType">
    <xs:annotation>
     <xs:documentation>port to use if remote type</xs:documentation>
    </xs:annotation>
   </xs:element>
  </xs:sequence>
  <xs:attribute name="type" type="xs:string" use="required">
   <xs:annotation>
    <xs:documentation>type of repository "local", "Rmt"</xs:documentation>
   </xs:annotation>
  </xs:attribute>
 </xs:complexType>
 <xs:simpleType name="SetReferenceType">
  <xs:annotation>
   <xs:documentation>definition of a set reference</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string"/>
 </xs:simpleType>
 <xs:simpleType name="SizeType">
  <xs:annotation>
   <xs:documentation>Specification of a Size</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:float"/>
 </xs:simpleType>
 <xs:complexType name="TestReferenceType">
  <xs:annotation>
   <xs:documentation>definition of a Test Reference</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="SetName" type="xs:string"/>
   <xs:element name="TestName" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="TestSetType">
  <xs:annotation>
   <xs:documentation>Definition of a Test Set element</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="Name" type="xs:string"/>
   <xs:element name="Description" type="DescriptionType"/>
   <xs:element name="Complexity" type="ComplexityType" minOccurs="0"/>
   <xs:element name="Size" type="SizeType" minOccurs="0"/>
   <xs:element name="Time" type="TimeType" minOccurs="0"/>
   <xs:element name="Levels" type="LevelsType" minOccurs="0"/>
   <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="TestProblem" type="TestProblemType"/>
    <xs:element name="SetReference" type="SetReferenceType"/>
    <xs:element name="TestReference" type="TestReferenceType"/>
   </xs:choice>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="TestProblemType">
  <xs:annotation>
   <xs:documentation>Definition of a Test Problem Element</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="Name" type="xs:string"/>
   <xs:element name="Description" type="DescriptionType"/>
   <xs:element name="versionParameters" maxOccurs="unbounded">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="appliesTo" type="VersionRange"/>
      <xs:element name="CmdLineOptions" type="CommandLineArgType" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="RequiredFileSet" type="xs:short"/>
      <xs:element name="OptionalFileSet" type="xs:short"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="Restart" type="TestReferenceType" minOccurs="0"/>
   <xs:element name="Parallel" type="xs:boolean" minOccurs="0"/>
   <xs:element name="RefResults" type="VersionType" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element name="Successes" type="VersionType" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element name="Failures" type="VersionType" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element name="Complexity" type="ComplexityType" minOccurs="0"/>
   <xs:element name="Levels" type="LevelsType" minOccurs="0"/>
   <xs:element name="Time" type="TimeType" minOccurs="0"/>
   <xs:element name="Size" type="SizeType" minOccurs="0"/>
  </xs:sequence>
 </xs:complexType>
 <xs:complexType name="TestType">
  <xs:annotation>
   <xs:documentation>Derived Type to encapsulate Tests</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="Module" type="NameType"/>
   <xs:element name="Problem" type="NameType"/>
   <xs:element name="Options" type="NameType" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element name="isRestart" type="xs:boolean"/>
  </xs:sequence>
 </xs:complexType>
 <xs:simpleType name="TimeType">
  <xs:annotation>
   <xs:documentation>Specification of Time (seconds) Elapsed for a problem.</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:long"/>
 </xs:simpleType>
 <xs:simpleType name="UserType">
  <xs:annotation>
   <xs:documentation>definition of UserType, string of no more than 20 chars.</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
   <xs:length value="20"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:complexType name="VersionRange">
  <xs:annotation>
   <xs:documentation>Definition of a range of versions for run time features</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="startVersion" type="VersionType"/>
   <xs:element name="endVersion" type="VersionType" minOccurs="0"/>
   <xs:element name="RangeClass" type="RangeClassType"/>
   <xs:element name="exceptions" type="VersionType" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>
 <xs:simpleType name="VersionStringType">
  <xs:annotation>
   <xs:documentation>definition of a version string, a string of no more than 20 chars</xs:documentation>
  </xs:annotation>
  <xs:restriction base="xs:string">
   <xs:length value="20"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:complexType name="VersionType">
  <xs:annotation>
   <xs:documentation>Specification of a Version Type</xs:documentation>
  </xs:annotation>
  <xs:sequence>
   <xs:element name="category" type="xs:string">
    <xs:annotation>
     <xs:documentation>category of version e.g. KAPL, NRC, AAA etc.</xs:documentation>
    </xs:annotation>
   </xs:element>
   <xs:element name="MajorVersion" type="xs:int"/>
   <xs:element name="MinorVersion" type="xs:int"/>
   <xs:element name="release" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>
</xs:schema>