<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <!--
    warning_report.rnc
      Relaxng schema for CodeSonar's XML output.
      Generates ../xmlschemas/warning_report.xsd
  -->
  <!--
    warning_report_base.rnc
      RELAX NG schema for CodeSonar's XML output.
      Generates ../xmlschemas/warning_report_base.xsd
      Included by "warning_report.rnc" and "warning_report_reml.rnc"
  -->
  <xs:element name="warning">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="project"/>
        <xs:element ref="analysis"/>
        <xs:element ref="categories"/>
        <xs:element ref="similar_instances"/>
        <xs:element ref="clustered_instances"/>
        <xs:element ref="listing"/>
        <xs:element ref="notes"/>
      </xs:sequence>
      <xs:attribute name="report_id" use="required" type="xs:integer"/>
      <xs:attribute name="instance_id" use="required" type="xs:integer"/>
      <xs:attribute name="warningclass" use="required"/>
      <xs:attribute name="filename"/>
      <xs:attribute name="line_number" type="xs:integer"/>
      <xs:attribute name="source_location_file"/>
      <xs:attribute name="source_location_line" type="xs:integer"/>
      <xs:attribute name="procedure"/>
      <xs:attribute name="priority" use="required"/>
      <xs:attribute name="state" use="required"/>
      <xs:attribute name="finding" use="required"/>
      <xs:attribute name="owner"/>
      <xs:attribute name="language"/>
      <xs:attribute name="modified" use="required"/>
      <xs:attribute name="detected" use="required"/>
      <xs:attribute name="firstdetected" use="required"/>
      <xs:attribute name="significance" use="required"/>
      <xs:attribute name="score" use="required" type="xs:float"/>
      <xs:attribute name="rank" use="required" type="xs:float"/>
      <xs:attribute name="cluster" use="required"/>
      <xs:attribute name="cluster_representative" use="required"/>
      <xs:attribute name="fingerprint" use="required"/>
      <xs:attribute name="report_representative" use="required"/>
      <xs:attribute name="start_procedure"/>
      <xs:attribute name="latest_instance_id" type="xs:integer"/>
      <xs:attribute name="latest_instance_url"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="project">
    <xs:complexType>
      <xs:attribute name="name" use="required"/>
      <xs:attribute name="url" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="analysis">
    <xs:complexType>
      <xs:attribute name="analysis_id" use="required" type="xs:integer"/>
      <xs:attribute name="analysis_name" use="required"/>
      <xs:attribute name="url" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="categories">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="category"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="category">
    <xs:complexType mixed="true">
      <xs:attribute name="url"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="similar_instances">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="similar_instance"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="similar_instance">
    <xs:complexType>
      <xs:attribute name="instance_id" use="required" type="xs:integer"/>
      <xs:attribute name="url" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="clustered_instances">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="clustered_instance"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="clustered_instance">
    <xs:complexType>
      <xs:attribute name="instance_id" use="required" type="xs:integer"/>
      <xs:attribute name="url" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="listing">
    <xs:complexType>
      <xs:choice>
        <xs:element maxOccurs="unbounded" ref="path"/>
        <xs:element ref="procedure"/>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:element minOccurs="0" ref="file"/>
          <xs:element minOccurs="0" maxOccurs="unbounded" ref="line"/>
        </xs:sequence>
        <xs:element ref="msg"/>
      </xs:choice>
    </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="path">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="procedure"/>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
          <xs:element minOccurs="0" ref="file"/>
          <xs:element minOccurs="0" maxOccurs="unbounded" ref="line"/>
        </xs:sequence>
      </xs:choice>
      <xs:attribute name="name" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="procedure">
    <xs:complexType>
      <xs:sequence minOccurs="0" maxOccurs="unbounded">
        <xs:element minOccurs="0" ref="file"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="line"/>
      </xs:sequence>
      <xs:attribute name="pdg"/>
      <xs:attribute name="name" use="required"/>
      <xs:attribute name="sfid"/>
      <xs:attribute name="sfhash"/>
      <xs:attribute name="line" type="xs:integer"/>
      <xs:attribute name="hidden" type="xs:boolean"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="file">
    <xs:complexType>
      <xs:attribute name="name" use="required"/>
      <xs:attribute name="sfid" use="required"/>
      <xs:attribute name="sfhash"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="line">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="markers"/>
        <xs:element minOccurs="0" ref="vtx_info"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:group minOccurs="0" maxOccurs="unbounded" ref="span"/>
          <xs:element minOccurs="0" maxOccurs="unbounded" ref="expansion"/>
          <xs:element minOccurs="0" maxOccurs="unbounded" ref="msg"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="number" use="required" type="xs:integer"/>
      <xs:attribute name="problem"/>
      <xs:attribute name="call_sites"/>
      <xs:attribute name="style0" type="xs:boolean"/>
      <xs:attribute name="style1" type="xs:boolean"/>
      <xs:attribute name="style2" type="xs:boolean"/>
      <xs:attribute name="style3" type="xs:boolean"/>
      <xs:attribute name="on_path" type="xs:boolean"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="vtx_info">
    <xs:complexType>
      <xs:attribute name="loc" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="markers">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="marker"/>
      </xs:sequence>
      <xs:attribute name="cols" use="required" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="marker">
    <xs:complexType>
      <xs:attribute name="name"/>
      <xs:attribute name="hovertext"/>
      <xs:attribute name="text"/>
      <xs:attribute name="pos" use="required" type="xs:integer"/>
      <xs:attribute name="width" use="required" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <!--
    "element span" exists for compatibility with old versions of
    codesonar.
  -->
  <xs:group name="span">
    <xs:choice>
      <xs:element ref="span"/>
      <xs:element ref="s"/>
    </xs:choice>
  </xs:group>
  <xs:element name="span">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="expansion"/>
        <xs:group ref="content"/>
      </xs:choice>
      <xs:attribute name="comment" type="xs:boolean"/>
      <xs:attribute name="grayout" type="xs:boolean"/>
      <xs:attribute name="include" type="xs:boolean"/>
      <xs:attribute name="interesting" type="xs:boolean"/>
      <xs:attribute name="keyword" type="xs:boolean"/>
      <xs:attribute name="label" type="xs:boolean"/>
      <xs:attribute name="string" type="xs:boolean"/>
      <xs:attribute name="linklocal" type="xs:boolean"/>
      <xs:attribute name="linksfid"/>
      <xs:attribute name="linkline" type="xs:integer"/>
      <xs:attribute name="loop" type="xs:boolean"/>
      <xs:attribute name="mclose" type="xs:boolean"/>
      <xs:attribute name="macro" type="xs:boolean"/>
      <xs:attribute name="on_path" type="xs:boolean"/>
      <xs:attribute name="preprocessor" type="xs:boolean"/>
      <xs:attribute name="interpolate_style" type="xs:boolean"/>
      <xs:attribute name="super_interesting" type="xs:boolean"/>
      <xs:attribute name="style0" type="xs:boolean"/>
      <xs:attribute name="style1" type="xs:boolean"/>
      <xs:attribute name="style2" type="xs:boolean"/>
      <xs:attribute name="style3" type="xs:boolean"/>
      <xs:attribute name="alternate_interesting" type="xs:boolean"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="s">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="expansion"/>
        <xs:group ref="content"/>
      </xs:choice>
      <xs:attribute name="comment" type="xs:boolean"/>
      <xs:attribute name="grayout" type="xs:boolean"/>
      <xs:attribute name="taint"/>
      <xs:attribute name="unreachable" type="xs:boolean"/>
      <xs:attribute name="include" type="xs:boolean"/>
      <xs:attribute name="interesting" type="xs:boolean"/>
      <xs:attribute name="keyword" type="xs:boolean"/>
      <xs:attribute name="opcode" type="xs:boolean"/>
      <xs:attribute name="label" type="xs:boolean"/>
      <xs:attribute name="string" type="xs:boolean"/>
      <xs:attribute name="linklocal" type="xs:boolean"/>
      <xs:attribute name="linksfid"/>
      <xs:attribute name="linkline" type="xs:integer"/>
      <xs:attribute name="loop" type="xs:boolean"/>
      <xs:attribute name="mclose" type="xs:boolean"/>
      <xs:attribute name="macro" type="xs:boolean"/>
      <xs:attribute name="on_path" type="xs:boolean"/>
      <xs:attribute name="preprocessor" type="xs:boolean"/>
      <xs:attribute name="interpolate_style" type="xs:boolean"/>
      <xs:attribute name="super_interesting" type="xs:boolean"/>
      <xs:attribute name="style0" type="xs:boolean"/>
      <xs:attribute name="style1" type="xs:boolean"/>
      <xs:attribute name="style2" type="xs:boolean"/>
      <xs:attribute name="style3" type="xs:boolean"/>
      <xs:attribute name="alternate_interesting" type="xs:boolean"/>
    </xs:complexType>
  </xs:element>
  <!--
    "element content" exists for compatibility with old versions of
    codesonar.
  -->
  <xs:group name="content">
    <xs:choice>
      <xs:element ref="content"/>
      <xs:element ref="c"/>
    </xs:choice>
  </xs:group>
  <xs:element name="content" type="xs:string"/>
  <xs:element name="c" type="xs:string"/>
  <xs:element name="expansion">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="procedure"/>
        <xs:sequence>
          <xs:element minOccurs="0" ref="file"/>
          <xs:element minOccurs="0" maxOccurs="unbounded" ref="line"/>
        </xs:sequence>
      </xs:choice>
      <xs:attribute name="expanded" type="xs:boolean"/>
      <xs:attribute name="macro_ref"/>
      <xs:attribute name="id"/>
      <xs:attribute name="macro_id"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="msg">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="ul"/>
        <xs:group ref="text_markup"/>
        <xs:element ref="paragraph"/>
      </xs:choice>
      <xs:attribute name="msg_id"/>
      <xs:attribute name="detail" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="text_markup">
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element ref="code"/>
        <xs:element ref="br"/>
        <xs:element ref="plain"/>
        <xs:element ref="placeholder"/>
        <xs:element ref="link"/>
        <xs:element ref="explanation"/>
        <xs:element ref="on_path_legend"/>
        <xs:element ref="style0_legend"/>
        <xs:element ref="style1_legend"/>
        <xs:element ref="style2_legend"/>
        <xs:element ref="style3_legend"/>
        <xs:element ref="subscript"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:element name="ul">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="li"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="li">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="ul"/>
        <xs:group ref="text_markup"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="br">
    <xs:complexType/>
  </xs:element>
  <xs:element name="code">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="plain">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="placeholder">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="paragraph">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="explanation">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="on_path_legend">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="style0_legend">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="style1_legend">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="style2_legend">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="style3_legend">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="subscript">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="text_markup"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="link">
    <xs:complexType mixed="true">
      <xs:attribute name="msg"/>
      <xs:attribute name="line" type="xs:integer"/>
      <xs:attribute name="local" type="xs:boolean"/>
      <xs:attribute name="sfhash"/>
      <xs:attribute name="sfid"/>
      <xs:attribute name="url"/>
      <xs:attribute name="uid"/>
    </xs:complexType>
  </xs:element>
</xs:schema>
