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

  <xs:element name="notice">
    <xs:complexType>
      <xs:all>
        <xs:element name="api-key" type="xs:string"/>
        <xs:element name="notifier" type="notifier"/>
        <xs:element name="error" type="error"/>
        <xs:element name="request" type="request" minOccurs="0"/>
        <xs:element name="server-environment" type="serverEnvironment"/>
      </xs:all>
      <xs:attribute name="version" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="notifier">
    <xs:all>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="version" type="xs:string"/>
      <xs:element name="url" type="xs:string"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="error">
    <xs:all>
      <xs:element name="class" type="xs:string"/>
      <xs:element name="message" type="xs:string" minOccurs="0"/>
      <xs:element name="backtrace" type="backtrace"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="backtrace">
    <xs:sequence>
      <xs:element name="line" maxOccurs="unbounded">
        <xs:complexType>
          <xs:attribute name="file" type="xs:string" use="required"/>
          <xs:attribute name="number" type="xs:string" use="required"/>
          <xs:attribute name="method" type="xs:string" use="optional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="request">
    <xs:all>
      <xs:element name="url" type="xs:string"/>
      <xs:element name="component" type="xs:string"/>
      <xs:element name="action" type="xs:string" minOccurs="0"/>
      <xs:element name="params" type="varList" minOccurs="0"/>
      <xs:element name="session" type="varList" minOccurs="0"/>
      <xs:element name="cgi-data" type="varList" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="varList">
    <xs:sequence>
      <xs:element name="var" type="var" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="var" mixed="true">
    <xs:sequence>
      <xs:element name="var" type="var" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="key" type="xs:string" use="required"/>
  </xs:complexType>

  <xs:complexType name="serverEnvironment">
    <xs:sequence>
      <xs:element name="project-root" type="xs:string" minOccurs="0"/>
      <xs:element name="environment-name" type="xs:string"/>
      <xs:element name="app-version" type="xs:string" minOccurs="0"/>
      <xs:element name="hostname" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>
