<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="report">
    <xs:annotation><xs:documentation> Schema for NIST reporting format, as described on http://samate.nist.gov/index.php/SATE
    </xs:documentation></xs:annotation>
   
    <xs:complexType>
       <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="weakness"/>
       </xs:sequence>
      <xs:attribute name="tool_name" use="required"/>
      <xs:attribute name="tool_version" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="weakness">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element maxOccurs="unbounded" ref="location"/>
        <xs:element ref="grade"/>
        <xs:element ref="output"/>
        <xs:element ref="evaluation" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attributeGroup ref="attlist.weakness"/>
    </xs:complexType>
  </xs:element>
  <xs:attributeGroup name="attlist.weakness">
    <xs:attribute name="id" use="required"/>
    <xs:attribute name="tool_specific_id"/>
  </xs:attributeGroup>
  <xs:element name="name">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="attlist.name"/>
    </xs:complexType>
  </xs:element>
  <xs:attributeGroup name="attlist.name">
    <xs:attribute name="cweid" type="xs:positiveInteger"/>
  </xs:attributeGroup>
  <xs:element name="location">
    <xs:complexType>
      <xs:attribute  name="line" use="required" type="xs:nonNegativeInteger"/>
      <xs:attribute name="path"  use="required" type="xs:string"/>
    </xs:complexType>
  </xs:element>
   <xs:element name="grade">
    <xs:complexType>
      <xs:attribute  name="severity" use="required" ><xs:annotation><xs:documentation>severity on the scale 1 to 5, with 1 - the highest</xs:documentation></xs:annotation>
        <xs:simpleType>
        <xs:restriction base='xs:integer'>
          <xs:minInclusive value="1"/>
          <xs:maxInclusive value="5"/>
        </xs:restriction>
      </xs:simpleType></xs:attribute>
      <xs:attribute name="probability"  use="optional" ><xs:annotation><xs:documentation>probability that the problem is a true positive, from 0 to 1</xs:documentation></xs:annotation><xs:simpleType>
        <xs:restriction base='xs:decimal'>
          <xs:minInclusive value="0.0"/>
          <xs:maxInclusive value="1.0"/>
        </xs:restriction>
      </xs:simpleType></xs:attribute>
    </xs:complexType>
   </xs:element>
  <xs:element name="output">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="textoutput" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="htmloutput" minOccurs="0"/>
        <xs:element ref="xmloutput" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="textoutput" type="xs:string"/>
  <xs:element name="htmloutput">  <xs:complexType>
    <xs:sequence>
      <xs:any processContents="skip"/>
    </xs:sequence>
  </xs:complexType></xs:element>
  <xs:element name="xmloutput">  <xs:complexType>
    <xs:sequence>
      <xs:any processContents="skip"/>
    </xs:sequence>
  </xs:complexType></xs:element>
  <xs:element name="evaluation" > <xs:annotation><xs:documentation>An evaluation of the issue by a human; not considered to be part of tool output</xs:documentation></xs:annotation> <xs:complexType>
    <xs:sequence>
      <xs:element name="comments"  type="xs:string"/>
    </xs:sequence>
    <xs:attribute  name="severity" use="optional" ><xs:annotation><xs:documentation>severity on the scale 1 to 5, with 1 - the highest</xs:documentation></xs:annotation><xs:simpleType>
      <xs:restriction base='xs:integer'>
        <xs:minInclusive value="1"/>
        <xs:maxInclusive value="5"/>
      </xs:restriction>
    </xs:simpleType></xs:attribute>
      <xs:attribute name="falsepositive"  use="optional">
      <xs:annotation><xs:documentation>the human will tell wheter he thinks this is a false-positive or not, 1 - false positive, 0 - true positive</xs:documentation></xs:annotation>
	  <xs:simpleType>
        <xs:restriction base='xs:integer'>
          <xs:minInclusive value="0"/>
          <xs:maxInclusive value="1"/>
        </xs:restriction>
      </xs:simpleType>
	  </xs:attribute>
  </xs:complexType></xs:element>
</xs:schema>
