<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
      http://www.apache.org/licenses/LICENSE-2.0
    	  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
  
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="configuration">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="contextName"/>
        <xs:element ref="jmxConfigurator"/>
        <xs:element maxOccurs="unbounded" ref="appender"/>
        <xs:element maxOccurs="unbounded" ref="logger"/>
        <xs:element ref="root"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="contextName" type="xs:string"/>
  <xs:element name="jmxConfigurator">
    <xs:complexType>
      <xs:attribute name="contextName" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="appender">
    <xs:complexType>
      <xs:sequence>
        <xs:sequence minOccurs="0">
          <xs:element ref="File"/>
          <xs:element ref="Append"/>
          <xs:element ref="Encoding"/>
          <xs:element ref="BufferedIO"/>
          <xs:element ref="ImmediateFlush"/>
        </xs:sequence>
        <xs:element ref="layout"/>
      </xs:sequence>
      <xs:attribute name="class" use="required"/>
      <xs:attribute name="name" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="File" type="xs:string"/>
  <xs:element name="Append" type="xs:boolean"/>
  <xs:element name="Encoding" type="xs:NCName"/>
  <xs:element name="BufferedIO" type="xs:boolean"/>
  <xs:element name="ImmediateFlush" type="xs:boolean"/>
  <xs:element name="layout">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="Pattern"/>
        <xs:element ref="pattern"/>
      </xs:choice>
      <xs:attribute name="class" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="Pattern" type="xs:string"/>
  <xs:element name="pattern" type="xs:string"/>
  <xs:element name="logger">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="level">
          <xs:attribute name="name" use="required" type="xs:NCName"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="root">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="level">
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="appender-ref"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="appender-ref">
    <xs:complexType>
      <xs:attribute name="ref" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="level">
    <xs:sequence>
      <xs:element ref="level"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="level">
    <xs:complexType>
      <xs:attribute name="value" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
</xs:schema>
