<?xml version="1.0" encoding="utf-8" ?>
<!--
  Copyright 2005-2006 The Apache Software Foundation.
  
  Licensed 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:simpleType name="expression">
    <xs:annotation><xs:documentation>An expression containing at least one property expansion.</xs:documentation></xs:annotation>
    <xs:restriction base="xs:string">
        <xs:pattern value=".*\$\{.+\}.*"/>
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="level-literal">
    <xs:annotation>
        <xs:documentation>Severity levels.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
        <xs:enumeration value="off"/>
        <xs:enumeration value="trace"/>
        <xs:enumeration value="debug"/>
        <xs:enumeration value="info"/>
        <xs:enumeration value="warn"/>
        <xs:enumeration value="error"/>
        <xs:enumeration value="fatal"/>
        <xs:enumeration value="all"/>
    </xs:restriction>
</xs:simpleType>
<xs:element name="configuration">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="appender" minOccurs="0" maxOccurs="unbounded" />
            <xs:element ref="logger" minOccurs="0" maxOccurs="unbounded" />
            <xs:element ref="root" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="debug" type="xs:boolean" />
        <xs:attribute name="id" type="xs:ID" use="optional" />
    </xs:complexType>
</xs:element>
<xs:simpleType name="consoleTarget">
    <xs:restriction base="xs:string">
        <xs:enumeration value="System.out"/>
        <xs:enumeration value="System.err"/>
    </xs:restriction>
</xs:simpleType>
<xs:complexType name="console">
   <xs:complexContent>
       <xs:extension base="writer">
           <xs:attribute name="target" type="consoleTarget" use="optional"/>
       </xs:extension>
   </xs:complexContent>
</xs:complexType>

<xs:simpleType name="filespec-literal">
    <xs:annotation><xs:documentation>A file specification.</xs:documentation></xs:annotation>
    <xs:restriction base="xs:string">
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="filespec">
    <xs:annotation><xs:documentation>A file specification or an expression that evaluates to a file specification.</xs:documentation></xs:annotation>
    <xs:union memberTypes="filespec-literal expression"/>
</xs:simpleType>
<xs:simpleType name="boolean">
    <xs:annotation><xs:documentation>true, false or an expression that evaluates to true or false.</xs:documentation></xs:annotation>
    <xs:union memberTypes="xs:boolean expression"/>
</xs:simpleType>

<xs:simpleType name="encoding">
    <xs:union memberTypes="encoding-literal expression"/>
</xs:simpleType>

<xs:simpleType name="size-literal">
    <xs:restriction base="xs:unsignedInt"/>
</xs:simpleType>
<xs:simpleType name="size">
    <xs:union memberTypes="size-literal expression"/>
</xs:simpleType>


<xs:complexType name="writer">
    <xs:annotation>
        <xs:documentation>
    Base type for WriterAppender derived transports.
</xs:documentation>
    </xs:annotation>
        <xs:sequence>
            <xs:group ref="layout" />
        </xs:sequence>
        <xs:attribute name="encoding" type="encoding" use="optional" />
        <xs:attribute name="immediateFlush" type="boolean" use="optional" />
        <xs:attribute name="id" type="xs:ID" use="optional" />
</xs:complexType>
    <xs:complexType name="file">
        <xs:complexContent>
            <xs:extension base="writer">
                <xs:attribute name="file" type="filespec" use="required" />
                <xs:attribute name="append" type="boolean" use="optional" />
                <xs:attribute name="bufferedIO" type="boolean" use="optional" />
                <xs:attribute name="bufferSize" type="size" use="optional" />
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
<xs:simpleType name="filterReturn-literal">
    <xs:restriction base="xs:string">
        <xs:enumeration value="deny"/>
        <xs:enumeration value="accept"/>
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="filterReturn">
    <xs:union memberTypes="filterReturn-literal expression"/>
</xs:simpleType>
<xs:element name="levelMatch">
    <xs:annotation>
        <xs:documentation>Level match filter</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:attribute name="id" type="xs:ID" use="optional"/>
        <xs:attribute name="levelToMatch" type="xs:string" use="required"/>
        <xs:attribute name="acceptOnMatch" type="boolean" use="optional"/>
        <xs:attribute name="matchReturnValue" type="filterReturn" use="optional"/>
        <xs:attribute name="noMatchReturnValue" type="filterReturn" use="optional"/>
    </xs:complexType>
</xs:element>
<xs:element name="denyAll">
    <xs:annotation>
        <xs:documentation>Deny all filter</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:attribute name="id" type="xs:ID" use="optional"/>
    </xs:complexType>
</xs:element>
<xs:element name="appender">
    <xs:complexType>
        <xs:sequence>
            <xs:group ref="transport" />
            <xs:group ref="filter" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" use="optional" />
        <xs:attribute name="id" type="xs:ID" use="required" />
        <xs:attribute name="level" type="level" use="optional" />
    </xs:complexType>
</xs:element>
<xs:element name="root" type="root"/>
<xs:element name="logger">
    <xs:complexType>
        <xs:complexContent>
        <xs:extension base="root">
        <xs:attribute name="name" type="xs:string" use="required">
            <xs:annotation>
                <xs:documentation>
                Name of logger.
                </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        <xs:attribute name="additivity" type="boolean" use="optional">
            <xs:annotation>
                <xs:documentation>
                If true, logging requests are passed to appenders attached to ancestors.
            </xs:documentation>
            </xs:annotation>
        </xs:attribute>
        </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:element>
<xs:simpleType name="pattern-literal">
    <xs:restriction base="xs:string"></xs:restriction>
</xs:simpleType>
<xs:simpleType name="pattern">
    <xs:union memberTypes="pattern-literal expression"/>
</xs:simpleType>
<xs:element name="pattern">
    <xs:annotation>
        <xs:documentation>Pattern layout.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:attribute name="conversionPattern" type="pattern" use="required" />
        <xs:attribute name="id" type="xs:ID" use="optional" />
    </xs:complexType>
</xs:element>
<xs:simpleType name="dateFormat-literal">
    <xs:restriction base="xs:string">
    </xs:restriction>
</xs:simpleType>
<xs:simpleType name="dateFormat">
    <xs:union memberTypes="expression dateFormat-literal"/>
</xs:simpleType>
<xs:element name="ttcc">
    <xs:annotation>
        <xs:documentation>TTCC layout, deprecated.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:attribute name="dateFormat" type="dateFormat" use="optional" />
        <xs:attribute name="id" type="xs:ID" use="optional" />
    </xs:complexType>
</xs:element>
<xs:element name="simple">
    <xs:annotation>
        <xs:documentation>Simple layout, deprecated.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:attribute name="id" type="xs:ID" use="optional" />
    </xs:complexType>
</xs:element>
<xs:simpleType name="paramName">
    <xs:restriction base="xs:string">
    </xs:restriction>
</xs:simpleType>
<xs:complexType name="param">
    <xs:attribute name="name" type="paramName" use="required"/>
    <xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
