<!--
   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.
-->

<!--  DTD for podlings.xml -->
<!ELEMENT podlings (podling+)>

<!ELEMENT podling (description, reporting?, graduating?, retiring?, resolution?, champion?, mentors)>
<!ATTLIST podling name CDATA #REQUIRED>
<!ATTLIST podling longname CDATA #IMPLIED>
<!ATTLIST podling status (current|graduated|retired) #REQUIRED>
<!ATTLIST podling resource CDATA #REQUIRED>
<!-- comma-separated list of alternate resource names -->
<!ATTLIST podling resourceAliases CDATA #IMPLIED>
<!ATTLIST podling sponsor CDATA #REQUIRED>
<!-- Format yyyy-mm-dd -->
<!ATTLIST podling startdate CDATA #REQUIRED>
<!-- Format yyyy-mm-dd -->
<!ATTLIST podling enddate CDATA #IMPLIED>

<!-- 
    Specifies the reporting group for podlings with status="current"
    The text field is used to specify the monthly report details (e.g. June, July, Agust)
-->
<!ELEMENT reporting  (#PCDATA)  >
<!--
    1 = January, April, July, October
    2 = February, May, August, November
    3 = March, June, September, December
-->
<!ATTLIST reporting group (1|2|3) #REQUIRED>
<!-- optional attribute for monthly reports -->
<!ATTLIST reporting monthly (true|false) #IMPLIED>

<!-- optional empty elements to flag podlings that are graduating or retiring -->
<!ELEMENT graduating EMPTY >
<!ELEMENT retiring EMPTY >
<!-- required list of mentors -->
<!ELEMENT mentors (mentor+)>
<!ELEMENT mentor  (#PCDATA)  >
<!ATTLIST mentor username CDATA #REQUIRED>
<!ELEMENT description  (#PCDATA)  >

<!-- The (optional) text is mainly used to comment on the reason for retirement -->
<!ELEMENT resolution  (#PCDATA)  >
<!ATTLIST resolution url CDATA #IMPLIED>
<!-- link defaults to the @name and is used for the link text -->
<!ATTLIST resolution link CDATA #IMPLIED>
<!-- tlp="true" means generate link from @name and @resource, rather than url and link -->
<!ATTLIST resolution tlp CDATA #IMPLIED>

<!ELEMENT champion  (#PCDATA)  >
<!ATTLIST champion availid CDATA #IMPLIED>
