<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">

  <xs:element name="validatorResponse" type="ValidatorResponse"/>

  <xs:complexType name="ErrorCaseType">
    <xs:sequence>
      <xs:element minOccurs="0" name="message" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="object" type="xs:string"/>
    <xs:attribute name="reportedBy" type="xs:string"/>
    <xs:attribute name="fixed" type="xs:boolean" use="required"/>
  </xs:complexType>

  <xs:complexType name="ErrorType">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="errorCase" type="ErrorCaseType"/>
    </xs:sequence>
    <xs:attribute name="code" type="xs:string"/>
    <xs:attribute name="message" type="xs:string"/>
    <xs:attribute name="type" type="Behavior"/>
    <xs:attribute name="category" type="Category"/>
    <xs:attribute name="notFixedCases" type="xs:int" use="required"/>
    <xs:attribute name="totalCases" type="xs:int" use="required"/>
  </xs:complexType>

  <xs:complexType name="Validation">
    <xs:sequence>
      <xs:element minOccurs="0" name="modelData" type="xs:string"/>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="error" type="ErrorType"/>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="comment" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="description" type="xs:string"/>
    <xs:attribute name="notFixedProblems" type="xs:int" use="required"/>
    <xs:attribute name="notFixedErrors" type="xs:int" use="required"/>
    <xs:attribute name="totalProblemsFound" type="xs:int" use="required"/>
    <xs:attribute name="fix" type="xs:boolean" use="required"/>
    <xs:attribute name="threshold" type="Behavior"/>
    <xs:attribute name="maxErrors" type="xs:int" use="required"/>
    <xs:attribute name="profile" type="xs:string"/>
    <xs:attribute name="summary" type="xs:string"/>
  </xs:complexType>

  <xs:complexType name="ValidatorResponse">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="validation" type="Validation"/>
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="Behavior">
    <xs:annotation>
      <xs:documentation><![CDATA[Validation rule behavior:
      IGNORE -- skip: do not validate, nor report any messages;
      ERROR -- report as error, fail if error limit is exceeded;
      WARNING -- report as warning.]]></xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="IGNORE"/>
      <xs:enumeration value="WARNING"/>
      <xs:enumeration value="ERROR"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Category">
    <xs:annotation>
      <xs:documentation><![CDATA[Validation error category.]]></xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="SYNTAX"/>
      <xs:enumeration value="SPECIFICATION"/>
      <xs:enumeration value="RECOMMENDATION"/>
      <xs:enumeration value="INFORMATION"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
