<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Logs" targetNamespace="http://api.dmds.com/api/v1/schemas/logs" elementFormDefault="qualified" xmlns="http://api.dmds.com/api/v1/schemas/logs" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <!-- Logs type definition -->
  <!-- Destinations type definition -->
  <xs:complexType name="Logs">
    <xs:sequence>
      <xs:element name="Log" type="Log" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>
  <!-- Log type definition -->
  <xs:complexType name="Log">
    <xs:all>
      <xs:element name="IPAddress" type="xs:string" />
      <xs:element name="HTTPMethod" type="httpmethod" />
      <xs:element name="URL" type="xs:string" />
      <xs:element name="Protocol" type="xs:string" />
      <xs:element name="RequestDate" type="xs:dateTime" />
      <!-- Will always be wrapped in CDATA -->
      <xs:element name="RequestStream" type="xs:string" />
      <xs:element name="RequestHeaders" type="HeaderArray" />
      <!-- For internal use only -->
      <xs:element name="InternalLog" type="InternalLog" />
      <!-- Will always be wrapped in CDATA -->
      <xs:element name="ResponseStatus" type="xs:string" />
      <xs:element name="ResponseDate" type="xs:dateTime" />
      <xs:element name="ResponseStream" type="xs:string" />
      <xs:element name="ResponseHeaders" type="HeaderArray" />
    </xs:all>
    <!-- Unique identifier of the request -->
    <xs:attribute name="RequestID" type="guid" />
  </xs:complexType>
  <!-- guid type definition -->
  <xs:simpleType name="guid">
    <xs:annotation>
      <xs:documentation>
        The representation of a GUID.
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}" />
    </xs:restriction>
  </xs:simpleType>
  <!-- httpmethod type definition -->
  <xs:simpleType name="httpmethod">
    <xs:annotation>
      <xs:documentation>
        One of { GET, POST, PUT, DELETE }.
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:enumeration value="GET" />
      <xs:enumeration value="POST" />
      <xs:enumeration value="PUT" />
      <xs:enumeration value="DELETE" />
    </xs:restriction>
  </xs:simpleType>
  <!-- HeaderArray type definition -->
  <xs:complexType name="HeaderArray">
    <xs:all>
      <xs:element name="ArrayOfHeaderKeyValuePair">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="HeaderKeyValuePair">
              <xs:complexType>
                <xs:attribute name="Key" type="xs:string"></xs:attribute>
                <xs:attribute name="Value" type="xs:string"></xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <!-- InternalLog type definition -->
  <xs:complexType name="InternalLog">
    <xs:all>
      <xs:element name="Logs">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Event">
              <xs:complexType>
                <xs:all>
                  <xs:element name="EventTime" type="xs:dateTime" />
                  <xs:element name="Logger" type="xs:string" />
                  <xs:element name="Level" type="xs:string" />
                  <xs:element name="Message" type="xs:string" />
                  <xs:element name="Exception" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                      <xs:all>
                        <xs:element name="Message" type="xs:string" />
                        <xs:element name="Source" type="xs:string" />
                        <xs:element name="StackTrace" type="xs:string" />
                      </xs:all>
                    </xs:complexType>
                  </xs:element>
                </xs:all>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
</xs:schema>