<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="SummaryResults">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ValidationResultsOverview"/>
        <xs:element maxOccurs="unbounded" ref="ValidationResults"/>
        <xs:element ref="ValidationCounters"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ValidationResultsOverview">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Oid"/>
        <xs:element ref="ReferencedStandard"/>
        <xs:element ref="ValidationServiceName"/>
        <xs:element ref="ValidationServiceVersion"/>
        <xs:element ref="ValidationServiceStatus" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="ValidationDate"/>
        <xs:element ref="ValidationTime"/>
        <xs:element ref="ValidationTestId"/>
        <xs:element ref="ValidationTestResult"/>
        
        
        
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ValidationServiceStatus">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Status"/>
        <xs:element ref="AdditionalStatusInfo" minOccurs="0"/>
        
      </xs:sequence>
    </xs:complexType>
    
  </xs:element>
  <xs:element name="AdditionalStatusInfo"  type="xs:string"/>
  <xs:element name="Oid" type="xs:NMTOKEN"/>
  <xs:element name="ValidationServiceName" type="xs:string"/>
  <xs:element name="ValidationServiceVersion" type="xs:NMTOKEN"/>
  <xs:element name="ValidationDate" type="xs:string"/>
  <xs:element name="ValidationTime" type="xs:string"/>
  <xs:element name="ValidationTestId" type="xs:string"/>
  <xs:element name="ValidationTestResult" type="xs:string"/>
  <xs:element name="ValidationResults">
    <xs:complexType>
      <xs:choice>
        <xs:sequence>
          <xs:element ref="ValidationDicomMessage"/>
        </xs:sequence>
        <xs:sequence>
          <xs:element ref="ResultText" />
        </xs:sequence>
        <xs:sequence>
          <xs:element ref="ResultXML" />
        </xs:sequence>
      </xs:choice>
      
    </xs:complexType>
  </xs:element>
  
  <xs:element name="ResultText" type="xs:string"/>
  <xs:element name="ResultXML" >
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Warning" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="Error" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="Warning">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Location" minOccurs="1"/>
  <xs:element ref="Description" minOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
    </xs:element>

    <xs:element name="Error">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="Location" minOccurs="1"/>
          <xs:element ref="Description" minOccurs="1"/>
        </xs:sequence>
      </xs:complexType>
  </xs:element>
  
  <xs:element name="Location" type="xs:string"/>
  <xs:element name="Description" type="xs:string"/>
  
  <xs:element name="ValidationDicomMessage">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="MessageUID"/>
        <xs:element ref="Name"/>
        <xs:element ref="Module" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="Message" minOccurs="0" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="MessageUID" type="xs:string"/>
  <xs:element name="Status">
    <xs:simpleType>
      <xs:restriction base="xs:NMTOKEN">
        <xs:enumeration value="OK"/>
        <xs:enumeration value="WARNING"/>
        <xs:enumeration value="ERROR"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  
  
  <xs:element name="ReferencedStandard">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="StandardName"/>
        <xs:element ref="StandardVersion"/>
        <xs:element ref="StandardExtension" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="StandardName" type="xs:string"/>
  <xs:element name="StandardVersion" type="xs:string"/>
  <xs:element name="StandardExtension" type="xs:string"  />
  <xs:element name="Name" type="xs:string"/>
  <xs:element name="Module">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Attribute"/>
      </xs:sequence>
      <xs:attribute name="Name" use="required"/>
      <xs:attribute name="Usage" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="ValidationCounters">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="NrOfValidationErrors"/>
        <xs:element ref="NrOfValidationWarnings"/>
        <xs:element ref="NrOfValidationConditions" />
        <xs:element ref="ValidationTest"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="NrOfValidationErrors" type="xs:integer"/>
  <xs:element name="NrOfValidationWarnings" type="xs:integer"/>
  <xs:element name="NrOfValidationConditions" type="xs:integer"/>
  <xs:element name="ValidationTest" type="xs:NCName"/>
  
  <xs:element name="Attribute">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Values"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Message"/>
      </xs:sequence>
      <xs:attribute name="Element" use="required" type="xs:NMTOKEN"/>
      <xs:attribute name="Group" use="required" type="xs:NMTOKEN"/>
      <xs:attribute name="Length" use="required" type="xs:NMTOKEN"/>
      <xs:attribute name="Name" use="required"/>
      <xs:attribute name="Present" use="required"/>
      <xs:attribute name="Type" use="required" type="xs:NMTOKEN"/>
      <xs:attribute name="DefVR" use="required" type="xs:NCName"/>
      <xs:attribute name="DcmVR" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Values">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Sequence" minOccurs="0" />
        <xs:element ref="Value" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="Message" minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Sequence">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Item"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Item">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="Attribute"/>
      </xs:sequence>
      <xs:attribute name="Number" use="required" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Value" type="xs:string"/>
  
  <xs:element name="Message" >
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Id"/>
        <xs:element ref="Type"/>
        <xs:element ref="Meaning"/>
      </xs:sequence>
      <xs:attribute name="Index" use="required" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Id" type="xs:NMTOKEN"/>
  <xs:element name="Type" type="xs:NCName"/>
  <xs:element name="Meaning" type="xs:string"/>
</xs:schema>
