<!-- ###### ZeeRex XML DTD ###### -->
<!-- Author: Rob Sanderson (azaroth@liv.ac.uk)  -->
<!-- Version: 1.7                               -->
<!-- Date: 28 April, 2002                       -->
<!-- Documentation:  http://explain.z3950.org/  -->


<!ELEMENT explain (serverInfo, databaseInfo?, metaInfo?, indexInfo?, recordInfo?)>
<!ATTLIST explain
                  authoritative (true|false) "false"
                  id CDATA #IMPLIED>


<!-- ###### Server Info ###### -->
<!ELEMENT serverInfo (host, port, database, authentication?)>
<!ATTLIST serverInfo
                     protocol CDATA "Z39.50">


<!ELEMENT host (#PCDATA)>
<!ELEMENT port (#PCDATA)>
<!ELEMENT database (#PCDATA)>
<!ATTLIST database
                   numRecs CDATA #IMPLIED
                   lastUpdate CDATA #IMPLIED>

<!ELEMENT authentication (#PCDATA | (user?, group?, password?))>
<!ELEMENT user (#PCDATA)>
<!ELEMENT group (#PCDATA)>
<!ELEMENT password (#PCDATA)>


<!-- ###### Database Info ###### -->

<!ELEMENT databaseInfo (title*, description*, (author | contact | extent | history | langUsage | restrictions | subjects)*  )>


<!-- Note that title is used in more than just databaseInfo -->
<!ELEMENT title (#PCDATA)>
<!ATTLIST title
                primary (true|false) #IMPLIED
                lang CDATA #IMPLIED>

<!ELEMENT description (#PCDATA)>
<!ATTLIST description
                      primary (true|false) #IMPLIED
                      lang CDATA #IMPLIED>

<!ELEMENT author (#PCDATA)>
<!ATTLIST author
                 primary (true|false) #IMPLIED
                 lang CDATA #IMPLIED>

<!ELEMENT contact (#PCDATA)>
<!ATTLIST contact
                  primary (true|false) #IMPLIED
                  lang CDATA #IMPLIED>

<!ELEMENT extent (#PCDATA)>
<!ATTLIST extent
                 primary (true|false) #IMPLIED
                 lang CDATA #IMPLIED>


<!ELEMENT history (#PCDATA)>
<!ATTLIST history
                  primary (true|false) #IMPLIED
                  lang CDATA #IMPLIED>

<!ELEMENT langUsage (#PCDATA)>
<!ATTLIST langUsage
                    codes CDATA #IMPLIED
                    primary (true|false) #IMPLIED
                    lang CDATA #IMPLIED>

<!ELEMENT restrictions (#PCDATA)>
<!ATTLIST restrictions
                       primary (true|false) #IMPLIED
                       lang CDATA #IMPLIED>

<!ELEMENT subjects (subject+)>
<!ELEMENT subject (#PCDATA)>


<!-- ###### Meta Info ###### -->

<!ELEMENT metaInfo (dateModified, (aggregatedFrom, dateAggregated)?)>

<!ELEMENT dateModified (#PCDATA)>
<!ELEMENT aggregatedFrom (#PCDATA)>
<!ELEMENT dateAggregated (#PCDATA)>


<!-- ###### Index Info ###### -->

<!ELEMENT indexInfo ((index | sortKeyword)*)>

<!ELEMENT index (title*, map+)>
<!ATTLIST index
                id CDATA #IMPLIED 
                search (true|false) #IMPLIED
                scan (true|false) #IMPLIED
                sort (true|false) #IMPLIED>


<!ELEMENT sortKeyword (#PCDATA)>

<!ELEMENT map ((attr+)|name)>
<!ATTLIST map
              primary (true|false) "false">

<!ELEMENT name (#PCDATA)>
<!ATTLIST name 
               type CDATA #IMPLIED
               attributeSet CDATA #IMPLIED>


<!ELEMENT attr (#PCDATA)>
<!ATTLIST attr
               type CDATA #REQUIRED
               attributeSet CDATA "BIB-1">

<!-- ###### Record Info ###### -->

<!ELEMENT recordInfo (recordSyntax+)>
<!ELEMENT recordSyntax (elementSet+)>
<!ATTLIST recordSyntax
                              name CDATA #REQUIRED>
<!ELEMENT elementSet (title*)>
<!ATTLIST elementSet
                              name CDATA #REQUIRED>

