<?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.
 -->
<!-- Authors: Chris Taylor, Ceki Gülcü. -->
<!-- Version: 1.2 -->

<!-- PHP Port Modifications Author: Marco Vassura -->
<!-- PHP dtd Version: $Revision$ -->

<!-- A configuration element consists of optional renderer
elements,appender elements, categories and an optional root
element. -->
<!-- [log4php] -->
<!--
    category instead of logger cannot be used. categoryFactory is not implemented in log4php.
-->
<!-- [/log4php] -->
<!ELEMENT log4php:configuration (renderer*, appender*,(logger)*,root?)>

<!-- The "threshold" attribute takes a level value such that all -->
<!-- logging statements with a level equal or below this value are -->
<!-- disabled. -->

<!-- Setting the "debug" enable the printing of internal log4j logging   -->
<!-- statements.                                                         -->

<!-- By default, debug attribute is "null", meaning that we not do touch -->
<!-- internal log4j logging settings. The "null" value for the threshold -->
<!-- attribute can be misleading. The threshold field of a repository    -->
<!-- cannot be set to null. The "null" value for the threshold attribute -->
<!-- simply means don't touch the threshold field, the threshold field   --> 
<!-- keeps its old value.                                                -->
     
<!ATTLIST log4php:configuration
  xmlns:log4php            CDATA #FIXED "http://logging.apache.org/log4php"
  threshold                (all|debug|info|warn|error|fatal|off|null) "null"
>

<!-- renderer elements allow the user to customize the conversion of  -->
<!-- message objects to String.                                       -->
<!ELEMENT renderer EMPTY>
<!ATTLIST renderer
    renderedClass  CDATA #REQUIRED
    renderingClass CDATA #REQUIRED
>

<!-- Appenders must have a name and a class. -->
<!-- Appenders may contain an error handler, a layout, optional parameters -->
<!-- and filters. They may also reference (or include) other appenders. -->
<!-- [log4php] -->
<!-- error handler tag has no effects since log4php does not handle errors. Definition deleted. -->
<!-- [/log4php] -->
<!ELEMENT appender (param*, layout?, filter*, appender-ref*)>
<!ATTLIST appender
  name      ID  #REQUIRED
  class     CDATA   #REQUIRED
>

<!ELEMENT layout (param*)>
<!ATTLIST layout
  class     CDATA   #REQUIRED
>

<!ELEMENT filter (param*)>
<!ATTLIST filter
  class     CDATA   #REQUIRED
>


<!ELEMENT param EMPTY>
<!ATTLIST param
  name      CDATA   #REQUIRED
  value     CDATA   #REQUIRED
>

<!ELEMENT priority EMPTY>
<!ATTLIST priority
  value   CDATA #REQUIRED
>

<!ELEMENT level EMPTY>
<!ATTLIST level
  value   CDATA #REQUIRED
>

<!-- If no level element is specified, then the configurator MUST not -->
<!-- touch the level of the named logger. -->
<!ELEMENT logger (level?,appender-ref*)>
<!ATTLIST logger
  name      ID  #REQUIRED
  additivity    (true|false) "true"  
>

<!ELEMENT appender-ref EMPTY>
<!ATTLIST appender-ref
  ref IDREF #REQUIRED
>

<!-- If no priority element is specified, then the configurator MUST not -->
<!-- touch the priority of root. -->
<!-- The root category always exists and cannot be subclassed. -->
<!ELEMENT root (param*, (priority|level)?, appender-ref*)>


<!-- ==================================================================== -->
<!--                       A logging event                                -->
<!-- ==================================================================== -->
<!ELEMENT log4php:eventSet (log4php:event*)>
<!ATTLIST log4php:eventSet
  xmlns:log4php          CDATA #FIXED "http://www.vxr.it/log4php/" 
  version                (0.2|0.3) "0.3" 
  includesLocationInfo   (true|false) "true"
>

<!ELEMENT log4php:event (log4php:message, log4php:locationInfo?) >

<!-- The timestamp format is application dependent. -->
<!ATTLIST log4php:event
    logger     CDATA #REQUIRED
    level      CDATA #REQUIRED
    thread     CDATA #REQUIRED
    timestamp  CDATA #REQUIRED
>

<!ELEMENT log4php:message (#PCDATA)>
<!ELEMENT log4php:NDC (#PCDATA)>

<!ELEMENT log4php:locationInfo EMPTY>
<!ATTLIST log4php:locationInfo
  class  CDATA  #REQUIRED
  method CDATA  #REQUIRED
  file   CDATA  #REQUIRED
  line   CDATA  #REQUIRED
>
