<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <!--
    analysis.rnc
      relaxng schema for CodeSonar's XML output
      generated via template analysis.xml
  -->
  <!--
    relaxng schema for CodeSonar's XML output
    std_grid_entry is the standard structure for a grid entry
  -->
  <xs:attributeGroup name="std_grid_entry">
    <xs:attribute name="url"/>
  </xs:attributeGroup>
  <xs:element name="s">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="c"/>
      </xs:sequence>
      <xs:attribute name="comment" type="xs:boolean"/>
      <xs:attribute name="grayout" type="xs:boolean"/>
      <xs:attribute name="unreachable" type="xs:boolean"/>
      <xs:attribute name="keyword" type="xs:boolean"/>
      <xs:attribute name="string" type="xs:boolean"/>
      <xs:attribute name="macro" type="xs:boolean"/>
      <xs:attribute name="preprocessor" type="xs:boolean"/>
      <xs:attribute name="taint"/>
      <xs:attribute name="linksfid"/>
      <xs:attribute name="interesting" type="xs:boolean"/>
      <xs:attribute name="opcode" type="xs:boolean"/>
      <xs:attribute name="label" type="xs:boolean"/>
      <xs:attribute name="linklocal" type="xs:boolean"/>
      <xs:attribute name="loop" type="xs:boolean"/>
      <xs:attribute name="mclose" type="xs:boolean"/>
      <xs:attribute name="on_path" type="xs:boolean"/>
      <xs:attribute name="super_interesting" type="xs:boolean"/>
      <xs:attribute name="refs"/>
      <xs:attribute name="linkline" type="xs:integer"/>
      <xs:attribute name="include" type="xs:boolean"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="c" type="xs:string"/>
  <xs:element name="vtx_info">
    <xs:complexType>
      <xs:attribute name="loc" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="code_grid_entry">
    <xs:sequence>
      <xs:element minOccurs="0" ref="vtx_info"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="s"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="permissions_link">
    <xs:complexType>
      <xs:attribute name="url" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="analysis">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="description"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="alert"/>
        <xs:group ref="awarningsGridRef"/>
      </xs:sequence>
      <xs:attribute name="analysis_id"/>
      <xs:attribute name="analysis_name"/>
      <xs:attribute name="project"/>
      <xs:attribute name="username"/>
      <xs:attribute name="hub_user"/>
      <xs:attribute name="user_id"/>
      <xs:attribute name="machine"/>
      <xs:attribute name="address"/>
      <xs:attribute name="parent_id"/>
      <xs:attribute name="lines_with_code"/>
      <xs:attribute name="created"/>
      <xs:attribute name="modified"/>
      <xs:attribute name="finished"/>
      <xs:attribute name="dry_run" use="required"/>
      <xs:attribute name="dry_run_cost"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="description" type="xs:string"/>
  <xs:element name="alert">
    <xs:complexType>
      <xs:attribute name="url" use="required"/>
      <xs:attribute name="message" use="required"/>
      <xs:attribute name="color" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="awarningsGridRef">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="warning"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="warning">
    <xs:complexType>
      <xs:all>
        <xs:element minOccurs="0" ref="id"/>
        <xs:element minOccurs="0" ref="instance_id"/>
        <xs:element minOccurs="0" ref="warning_class"/>
        <xs:element minOccurs="0" ref="rank"/>
        <xs:element minOccurs="0" ref="score"/>
        <xs:element minOccurs="0" ref="significance"/>
        <xs:element minOccurs="0" ref="categories"/>
        <xs:element minOccurs="0" ref="class"/>
        <xs:element minOccurs="0" ref="state"/>
        <xs:element minOccurs="0" ref="finding"/>
        <xs:element minOccurs="0" ref="priority"/>
        <xs:element minOccurs="0" ref="owner"/>
        <xs:element minOccurs="0" ref="fingerprint"/>
        <xs:element minOccurs="0" ref="cluster"/>
        <xs:element minOccurs="0" ref="directory"/>
        <xs:element minOccurs="0" ref="modified"/>
        <xs:element minOccurs="0" ref="detected"/>
        <xs:element minOccurs="0" ref="first_detected"/>
        <xs:element minOccurs="0" ref="file"/>
        <xs:element minOccurs="0" ref="file_path"/>
        <xs:element minOccurs="0" ref="language"/>
        <xs:element minOccurs="0" ref="line_number"/>
        <xs:element minOccurs="0" ref="source_line_number"/>
        <xs:element minOccurs="0" ref="source_file_name"/>
        <xs:element minOccurs="0" ref="source_file_path"/>
        <xs:element minOccurs="0" ref="procedure"/>
        <xs:element minOccurs="0" ref="line_content"/>
        <xs:element minOccurs="0" ref="notes"/>
      </xs:all>
      <xs:attribute name="url" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="id">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="instance_id">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="warning_class">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="rank">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="score">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="significance">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="categories">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="class">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="state">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="finding">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="priority">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="owner">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="fingerprint">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="cluster">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="directory">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="modified">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="detected">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="first_detected">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="file">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="file_path">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="language">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="line_number">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="source_line_number">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="source_file_name">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="source_file_path">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="procedure">
    <xs:complexType mixed="true">
      <xs:attributeGroup ref="std_grid_entry"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="line_content" type="code_grid_entry"/>
  <xs:element name="notes">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="change"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="change">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="property_changes"/>
        <xs:element ref="comment"/>
      </xs:sequence>
      <xs:attribute name="user" use="required"/>
      <xs:attribute name="date" use="required"/>
      <xs:attribute name="import_user"/>
      <xs:attribute name="import_date"/>
      <xs:attribute name="import_property_conflict"/>
      <xs:attribute name="import_owner_conflict"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="property_changes">
    <xs:complexType>
      <xs:attribute name="property" use="required"/>
      <xs:attribute name="from"/>
      <xs:attribute name="to" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="comment" type="xs:string"/>
</xs:schema>
