<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <!--
    report.rnc
      relaxng schema for CodeSonar's XML output
      generated by the jinja template report.xml,
      for CodeSonar's reporting feature.
  -->
  <!--
    relaxng schema for CodeSonar's XML output
    chart_tablerow is used for tables generated from charts
  -->
  <xs:element name="row">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="analysis_address"/>
        <xs:element ref="analysis_description"/>
        <xs:element ref="analysis_finished"/>
        <xs:element ref="analysis_id"/>
        <xs:element ref="analysis_machine"/>
        <xs:element ref="analysis_modified"/>
        <xs:element ref="analysis_name"/>
        <xs:element ref="analysis_started"/>
        <xs:element ref="analysis_user"/>
        <xs:element ref="analysis_warning_count"/>
        <xs:element ref="directory"/>
        <xs:element ref="file_full_path"/>
        <xs:element ref="file_language"/>
        <xs:element ref="file_name"/>
        <xs:element ref="language"/>
        <xs:element ref="owner_email"/>
        <xs:element ref="owner_name"/>
        <xs:element ref="procedure"/>
        <xs:element ref="project_created"/>
        <xs:element ref="project_description"/>
        <xs:element ref="project_id"/>
        <xs:element ref="project_name"/>
        <xs:element ref="significance"/>
        <xs:element ref="warning_class"/>
        <xs:element ref="warning_finding"/>
        <xs:element ref="warning_priority"/>
        <xs:element ref="warning_state"/>
        <xs:element ref="number_of_files"/>
        <xs:element ref="number_of_lines"/>
        <xs:element ref="number_of_warnings"/>
        <xs:element ref="metric"/>
      </xs:choice>
      <xs:attribute name="url" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="analysis_address" type="xs:string"/>
  <xs:element name="analysis_description" type="xs:string"/>
  <xs:element name="analysis_finished" type="xs:string"/>
  <xs:element name="analysis_id" type="xs:string"/>
  <xs:element name="analysis_machine" type="xs:string"/>
  <xs:element name="analysis_modified" type="xs:string"/>
  <xs:element name="analysis_name" type="xs:string"/>
  <xs:element name="analysis_started" type="xs:string"/>
  <xs:element name="analysis_user" type="xs:string"/>
  <xs:element name="analysis_warning_count" type="xs:string"/>
  <xs:element name="directory" type="xs:string"/>
  <xs:element name="file_full_path" type="xs:string"/>
  <xs:element name="file_language" type="xs:string"/>
  <xs:element name="file_name" type="xs:string"/>
  <xs:element name="language" type="xs:string"/>
  <xs:element name="owner_email" type="xs:string"/>
  <xs:element name="owner_name" type="xs:string"/>
  <xs:element name="procedure" type="xs:string"/>
  <xs:element name="project_created" type="xs:string"/>
  <xs:element name="project_description" type="xs:string"/>
  <xs:element name="project_id" type="xs:string"/>
  <xs:element name="project_name" type="xs:string"/>
  <xs:element name="significance" type="xs:string"/>
  <xs:element name="warning_class" type="xs:string"/>
  <xs:element name="warning_finding" type="xs:string"/>
  <xs:element name="warning_priority" type="xs:string"/>
  <xs:element name="warning_state" type="xs:string"/>
  <xs:element name="number_of_files" type="xs:string"/>
  <xs:element name="number_of_lines" type="xs:string"/>
  <xs:element name="number_of_warnings" type="xs:string"/>
  <xs:element name="metric">
    <xs:complexType mixed="true">
      <xs:attribute name="name" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="compilations">
    <xs:complexType>
      <xs:attribute name="ok" use="required" type="xs:integer"/>
      <xs:attribute name="fatal_error" use="required" type="xs:integer"/>
      <xs:attribute name="too_many_parse_errors" use="required" type="xs:integer"/>
      <xs:attribute name="some_parse_errors" use="required" type="xs:integer"/>
      <xs:attribute name="running" use="required" type="xs:integer"/>
      <xs:attribute name="total" use="required" type="xs:integer"/>
      <xs:attribute name="obsoleted" use="required" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="parse_errors" type="xs:integer"/>
  <xs:element name="native_run">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="compilation"/>
      </xs:sequence>
      <xs:attribute name="cmdline" use="required"/>
      <xs:attribute name="url" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="compilation">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="issue"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="diag"/>
      </xs:sequence>
      <xs:attribute name="status" use="required"/>
      <xs:attribute name="filename" use="required"/>
      <xs:attribute name="url" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="issue">
    <xs:complexType mixed="true">
      <xs:attribute name="created" use="required"/>
      <xs:attribute name="filename" use="required"/>
      <xs:attribute name="line" use="required"/>
      <xs:attribute name="severity" use="required"/>
      <xs:attribute name="errorcode" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="diag" type="xs:string"/>
  <xs:attributeGroup name="style_attrs">
    <xs:attribute name="class"/>
    <xs:attribute name="style"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="text_attrs">
    <xs:attributeGroup ref="style_attrs"/>
    <xs:attribute name="value" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="toc_entry_attrs">
    <xs:attribute name="level"/>
    <xs:attribute name="header_text"/>
    <xs:attribute name="toc_text"/>
  </xs:attributeGroup>
  <xs:element name="toc_entry" substitutionGroup="toc_entry_elmt"/>
  <xs:element name="toc_table_entry" substitutionGroup="toc_entry_elmt"/>
  <xs:element name="toc_figure_entry" substitutionGroup="toc_entry_elmt"/>
  <xs:element name="toc_entry_elmt" abstract="true">
    <xs:complexType>
      <xs:attributeGroup ref="toc_entry_attrs"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="title">
    <xs:sequence>
      <xs:element name="title">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" ref="toc_entry_elmt"/>
          </xs:sequence>
          <xs:attributeGroup ref="text_attrs"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="caption">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="toc_entry_elmt"/>
      </xs:sequence>
      <xs:attributeGroup ref="text_attrs"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="chart">
    <xs:complexType>
      <xs:sequence>
        <xs:group minOccurs="0" ref="title"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="row"/>
        <xs:element minOccurs="0" ref="caption"/>
      </xs:sequence>
      <xs:attributeGroup ref="style_attrs"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="table">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="header"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="row_style"/>
        <xs:group minOccurs="0" ref="title"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="column">
          <xs:complexType>
            <xs:attribute name="name" use="required"/>
            <xs:attribute name="label"/>
            <xs:attribute name="order"/>
            <xs:attribute name="scope"/>
            <xs:attribute name="search_str"/>
            <xs:attribute name="filter_name"/>
            <xs:attribute name="metric_name"/>
            <xs:attributeGroup ref="style_attrs"/>
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="row">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" maxOccurs="unbounded" name="column">
                <xs:complexType mixed="true">
                  <xs:attribute name="label" use="required"/>
                </xs:complexType>
              </xs:element>
              <xs:element minOccurs="0" ref="notes"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" ref="caption"/>
      </xs:sequence>
      <xs:attribute name="name"/>
      <xs:attribute name="scope"/>
      <xs:attribute name="filter_name"/>
      <xs:attribute name="where_filter"/>
      <xs:attribute name="search_str"/>
      <xs:attribute name="offset"/>
      <xs:attribute name="limit"/>
      <xs:attribute name="granularity"/>
      <xs:attributeGroup ref="style_attrs"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="header">
    <xs:complexType>
      <xs:attributeGroup ref="style_attrs"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="row_style">
    <xs:complexType>
      <xs:attributeGroup ref="style_attrs"/>
    </xs:complexType>
  </xs:element>
  <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:element name="text">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="toc_entry_elmt"/>
      </xs:sequence>
      <xs:attributeGroup ref="text_attrs"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="page">
    <xs:complexType>
      <xs:attributeGroup ref="style_attrs"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="footer">
    <xs:complexType>
      <xs:attributeGroup ref="style_attrs"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="toc_element">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="level"/>
      <xs:element name="title">
        <xs:complexType>
          <xs:attributeGroup ref="text_attrs"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="level">
    <xs:complexType>
      <xs:attributeGroup ref="style_attrs"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="toc" type="toc_element"/>
  <xs:element name="toc_table" type="toc_element"/>
  <xs:element name="toc_figure" type="toc_element"/>
  <xs:element name="pagebreak">
    <xs:complexType/>
  </xs:element>
  <xs:element name="alert">
    <xs:complexType>
      <xs:attribute name="url" use="required"/>
      <xs:attribute name="message" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="alerts">
    <xs:complexType>
      <xs:sequence>
        <xs:group minOccurs="0" ref="title"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="alert"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="parselog">
    <xs:complexType>
      <xs:sequence>
        <xs:group minOccurs="0" ref="title"/>
        <xs:element ref="compilations"/>
        <xs:element ref="parse_errors"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="native_run"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="style_class">
    <xs:complexType>
      <xs:attribute name="name" use="required"/>
      <xs:attributeGroup ref="style_attrs"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="error" type="xs:string"/>
  <xs:element name="template_error">
    <xs:complexType>
      <xs:attribute name="url" use="required"/>
      <xs:attribute name="message" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="report">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="chart"/>
        <xs:element ref="table"/>
        <xs:element ref="text"/>
        <xs:element ref="parselog"/>
        <xs:element ref="page"/>
        <xs:element ref="header"/>
        <xs:element ref="footer"/>
        <xs:element ref="toc"/>
        <xs:element ref="toc_table"/>
        <xs:element ref="toc_figure"/>
        <xs:element ref="pagebreak"/>
        <xs:element ref="alerts"/>
        <xs:element ref="style_class"/>
        <xs:element ref="error"/>
        <xs:element ref="template_error"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>
