<!--
  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.
-->
<!-- ===================================================================

     Apache Forrest Glossary module

TYPICAL INVOCATION:

  <!ENTITY % glossary PUBLIC
      "-//Apache Forrest//ENTITIES Glossary Vx.y//EN"
      "glossary-vxy.mod">
  %glossary;

  where

    x := major version
    y := minor version

NOTES:

==================================================================== -->
<!-- =============================================================== -->
<!-- Entities for general XML compliance -->
<!-- =============================================================== -->
<!-- Common attributes
        Every element has an ID attribute (sometimes required,
        but usually optional) for links. %common.att;
        is for common attributes where the ID is optional, and
        %common-idreq.att; is for common attributes where the
        ID is required.
-->
<!ENTITY % common.att 'id                     ID              #IMPLIED
         class                  NMTOKEN         #IMPLIED
         xml:lang               NMTOKEN         #IMPLIED'
 >
 
<!-- =============================================================== -->
<!-- Useful entities for increased DTD readability -->
<!-- =============================================================== -->
<!ENTITY % text "#PCDATA">
<!-- Entities referred to later on are defined up front -->
<!ENTITY % markup "strong|em|code|sub|sup">
<!ENTITY % special-inline "br|img|icon|acronym|map">
<!ENTITY % links "a">
<!ENTITY % paragraphs "p|source|note|warning|fixme">
<!ENTITY % tables "table">
<!ENTITY % lists "ol|ul|dl">
<!ENTITY % special-blocks "figure|anchor">
<!-- these are used for image maps -->
<!ENTITY % Shape "(rect|circle|poly|default)">
<!ENTITY % Coords "CDATA">

<!-- Link attributes ===================================================
        Indicates that the element requires to have hyperlink attributes.
==================================================================== -->
<!ENTITY % link.att 'href      CDATA             #REQUIRED
                     title     CDATA             #IMPLIED'
 >

<!-- Name attributes ==================================================
        Indicates that the element requires to have a name attribute.
==================================================================== -->
<!ENTITY % name.att 'name                   CDATA           #REQUIRED'>
<!-- Email attributes ==================================================
        Indicates that the element requires to have an email attribute.
==================================================================== -->
<!ENTITY % email.att 'email                  CDATA           #REQUIRED'>

<!-- =============================================================== -->
<!-- Content definitions -->
<!-- =============================================================== -->
<!ENTITY % local.inline "">
<!ENTITY % link-content.mix "%text;|%markup;|%special-inline; %local.inline;">
<!ENTITY % content.mix "%link-content.mix;|%links;">
<!-- =============================================================== -->
<!-- Blocks definitions -->
<!-- =============================================================== -->
<!ENTITY % local.blocks "">
<!ENTITY % blocks "%paragraphs;|%tables;|%lists;|%special-blocks; %local.blocks;">
<!ENTITY % flow "%content.mix;|%blocks;">
<!-- Flow mixes block and inline -->


<!-- =============================================================== -->
<!-- Element declarations -->
<!-- =============================================================== -->
<!ELEMENT glossary (authors?, title?, introduction?, (part)+)>
<!ATTLIST glossary
	%common.att; 
>

<!ELEMENT authors (person+)>
<!ATTLIST authors
  %common.att; 
>

<!-- A person is a general unparsed human entity -->
<!ELEMENT person EMPTY>
<!ATTLIST person
  %common.att; 
  %name.att; 
  %email.att; 
>

<!ELEMENT title (%text; | %markup; | %links; | %special-inline;)*>
<!ATTLIST title
  %common.att; 
>

<!-- Text Paragraph (normally vertically space delimited. Space can be preserved.) -->
<!ELEMENT p (%content.mix;)*>
<!ATTLIST p
  %common.att; 
  xml:space (default|preserve) #IMPLIED
>

<!-- Acronym (in modern browsers, will have rollover text) -->
<!ELEMENT acronym (%text;)*>
<!ATTLIST acronym
  title CDATA #REQUIRED
  %common.att; 
>

<!ELEMENT introduction (%flow;)*>
<!ELEMENT part (title, (item | part)+)>
<!ATTLIST part
	%common.att; 
>
<!ELEMENT item ((term)+, acronym?, see*, definitions, notes?)>
<!ATTLIST item
	%common.att; 
>
<!ELEMENT term (%content.mix;)*>
<!ATTLIST term
	%common.att; 
>
<!ELEMENT definitions (definition)+>
<!ELEMENT definition (%flow;)*>
<!ATTLIST definition
	cite IDREF #IMPLIED
>
<!ELEMENT notes (item-note)+>
<!ELEMENT item-note (%flow;)*>
<!ELEMENT see (id, text)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT text (%content.mix;)*>
<!ATTLIST text
	%common.att; 
>

<!-- ==================================================== -->
<!-- Hypertextual Links -->
<!-- ==================================================== -->
<!-- hyperlink (equivalent of <a ...>) -->
<!-- http://www.w3.org/TR/xhtml2/mod-hypertext.html#s_hypertextmodule -->
<!ELEMENT a (%link-content.mix;)*>
<!ATTLIST a
  %common.att; 
  %link.att; 
>

<!-- =============================================================== -->
<!-- End of DTD -->
<!-- =============================================================== -->
