
<!-- bibx.dtd
A DTD for bibliographic data, Copyright (C) 2002 Taco Hoekwater,
Markus Hoenicka

  Namespace "http://tex.aanhet.net/bibx/0.2"
  PUBLIC    "-//Taco Hoekwater//DTD BibX 0.2//EN" 
  SYSTEM    "http://tex.aanhet.net/bibx/0.2/dtd/bibx.dtd"


I can be reached as taco@elvenkind.com.
-->

<!-- .......................................................................... -->


<!-- %entry-types;
An entry may contain one of these bibliographic types. 
-->

<!ENTITY % entry-types "( abstract | 
article | 
artwork | 
audio | 
bill | 
book | 
case | 
catalog | 
chapter | 
collection | 
communication | 
electronic | 
hearing  | 
manual | 
map | 
pamphlet | 
patent | 
periodical  | 
proceedings | 
quote | 
report | 
review | 
score | 
slide | 
statute | 
thesis | 
unbill |
unknown | 
visual | 
other )">

<!-- %lang; 

text-type differentiates between the original text and a translated
text for e.g. a title. Since it is related to language, it is part of the
same parameter entity.
-->


<!ENTITY % lang  "xml:lang       NMTOKEN              #IMPLIED
                  translit       (yes|no)             'no'
                  text-type      (primary|
                                  translation)        #IMPLIED" >

<!-- %data;
A placeholder for the data content of elements
-->

<!ENTITY % data "(#PCDATA)">


<!-- .......................................................................... -->

<!-- bibx is the document top element  -->

<!ELEMENT bibx  ( bibentry )* >

<!ATTLIST bibx
          xmlns   CDATA #FIXED 'http://tex.aanhet.net/bibx/0.2'
          %lang;
>

<!ELEMENT bibentry (input-date?, 
                    (work|
                    (work,publication)|
                    (work,publication,set)|
                    publication|
                    (publication,set)|
                    set),
                    libinfo?, contents?)>

<!--
id                 == the bibliographic key
primary-language   == main language of the item described in this record
status             == publication status of the item described
type               == type of the item described (see above)
                      'other' implies a type that cannot be described
                              using the current dtd,
                      'unknown' implies that the person that created the
                                record doesn't dare to guess the correct
                                type.
subtype            == further classification of the item described, if applicable
-->

<!ATTLIST bibentry
          id                CDATA                #REQUIRED 
          primary-language  CDATA                #IMPLIED
          publication-status (published|
                              in-press|
                              unpublished|
                              retracted)         "published"
          review-status      (submitted|
                              no-review|
                              to-be-edited|
                              accepted|
                              rejected)          #IMPLIED
          type                %entry-types;      #REQUIRED 
          subtype             CDATA              #IMPLIED     >
           

<!-- input-date 
-->

<!ELEMENT   input-date            EMPTY>
<!ATTLIST   input-date
            year  CDATA #REQUIRED
            month (1|2|3|4|5|6|7|8|9|10|11|12) #IMPLIED
            day   CDATA #IMPLIED >


<!-- the bibliographic information proper -->
<!ELEMENT work        (by, titles+) >

<!ELEMENT publication (by?, titles+, partdesc?, pubinfo?) >

<!ELEMENT set         (by?, titles+, partdesc?, pubinfo?) >
           

<!-- titles of the work 
All titles can be repeated in different languages as explained above.
-->

<!ELEMENT   titles          (title|subtitle|note)+>

<!ELEMENT   title %data; >
<!ATTLIST   title 
            %lang;
            role          (main|formal-abbr|abbreviation|short|alternate|user|unknown|other) #IMPLIED >

<!ELEMENT   subtitle        %data; >
<!ATTLIST   subtitle 
            role          (main|formal-abbr|abbreviation|short|alternate|user|unknown|other) #IMPLIED
            %lang; >

<!-- by
This is the 'generator' selector. Either a person, or a separate entity that has 
a name, like an institute or a band. Multiple authors in a collaboration should be
given as a number of consecutive persons.
-->

<!ELEMENT   by (person|entity|note)+ >

<!ATTLIST   by
            type    (author|editor|translator|publisher|other|unknown) #IMPLIED
            subtype CDATA #IMPLIED >

<!-- person
There are two possible ways to encode a name: A complex way and a simple way.
The simple way is sometimes needed if the constituent parts are not obvious from
the name itself.
The name+address can be repeated multiple times for the same person, if there
is a need to display the person's information in two or more languages. 
-->

<!ELEMENT   person  (note*,(((initials|(givenname+,middle?)),prelast?,familyname,lineage?)|name),titulae?,
                     address?)+>


<!ATTLIST   person
            %lang;
            role (author | editor | serieseditor | publisher | translator | publisher) #REQUIRED
            id              CDATA #IMPLIED >


<!ELEMENT   givenname       %data; >
<!ELEMENT   initials        %data; >
<!ELEMENT   familyname      %data; >
<!ELEMENT   middle          %data; >
<!ELEMENT   prelast         %data; >
<!ELEMENT   lineage         %data; >
<!ELEMENT   titulae         %data; >

<!ELEMENT   name            %data; >

<!ELEMENT   entity    (note*,name,address?)+ >

<!ATTLIST   entity    
            id             CDATA #IMPLIED
            %lang;
            role      (author | editor | serieseditor | publisher | translator | publisher ) #REQUIRED
            type           (organization|institution|company|
                            band|other|unknown) #REQUIRED
            subtype        CDATA #IMPLIED >
  
<!-- address
-->

<!ELEMENT   address         (date+,
                             (email|phone|fax)*,
                             ((streetaddress|postal-code|city|country)+|place),
                             note?)+ >

<!ATTLIST   address             %lang; >

<!ELEMENT   place               %data; >
<!ATTLIST   place               %lang; >

<!ELEMENT   email               %data; >
<!ELEMENT   phone               %data; >
<!ELEMENT   fax                 %data; >
<!ELEMENT   streetaddress       %data; >
<!ELEMENT   postal-code         %data; >
<!ELEMENT   city                %data; >
<!ELEMENT   country             %data; >



<!-- date 
The data content is  optional, like "Spring", the date
should be given using the attributes  
-->

<!ELEMENT   date            %data;>
<!ATTLIST   date
            year  CDATA #REQUIRED
            month (1|2|3|4|5|6|7|8|9|10|11|12) #IMPLIED
            day   CDATA #IMPLIED
            role (start | end | item) "item" 
            %lang;>

<!-- partdesc
selection specification for an <bibentry>. 
This indicates which part(s) of the <publication> or <work> is targeted. 
The structure would look like this:

 <partdesc>
    <single type="chapter">1</single>
    <range type="chapter">
         <start>3</start>
         <end>5</end>
    </range>
    <composite>
         <single type="chapter">8</single>
         <partdesc>
            <single type="section">1</single>
            <single type="section">10</single>
         </partdesc>
    </composite>
  </partdesc>

This example references chapters 1 and 3-5 in their entirity, as well as
sections 1 and 10 of chapter 8.
-->

<!ENTITY % parttype "(number|volume|issue|page|chapter|part|section|
                      paragraph|line|word|track|other)">

<!ELEMENT   partdesc  (single|range|composite)+ >

<!ELEMENT   composite  ((single|range),partdesc) >

<!ELEMENT   single        %data; >
<!ATTLIST   single
            %lang;
            type    %parttype; #REQUIRED
            subtype CDATA            #IMPLIED>

<!ELEMENT range (start,end?) >
<!ATTLIST   range
            %lang;
            type    %parttype; #REQUIRED
            subtype CDATA            #IMPLIED>

<!ELEMENT start %data; >
<!ELEMENT end %data; >

<!-- publication information -->


<!-- how the work was published -->
<!ELEMENT pubinfo (note*, by?, pubplace?, date*, copyright?, medium?, edition?, locator*)+ >

<!ELEMENT pubplace (city,country?)+ >

<!ATTLIST pubplace %lang; >


<!ELEMENT   copyright       %data; >
<!ATTLIST   copyright
            %lang;
            year CDATA #IMPLIED>

<!ELEMENT   medium (price|dimensions|note)*>
<!ATTLIST   medium
            type   (paper|electronic|film|audio|video|other|unknown) #REQUIRED
            subtype  CDATA #IMPLIED >

<!ELEMENT   price           %data; >
<!ATTLIST   price
            %lang;>

<!ELEMENT   dimensions      %data; >
<!ATTLIST   dimensions
            %lang;>

<!ELEMENT   edition         %data; >
<!ATTLIST   edition
            %lang;>

<!ELEMENT   locator         %data; >
<!ATTLIST   locator
            %lang;
            type (doi|issn|isbn|uri|mrnumber|lccn|ordernr|other) #REQUIRED
            subtype CDATA #IMPLIED>


<!-- the local housekeeping information -->
<!ELEMENT libinfo (id, date?, local-copy?, location*) >

<!ELEMENT   id (#PCDATA) >
<!ATTLIST   id
            type CDATA #IMPLIED 
            %lang; >

<!ELEMENT local-copy (date)? >

<!ATTLIST local-copy status (present | onrequest | not-present) "not-present" >

<!ELEMENT location (#PCDATA) >

<!ATTLIST location 
          role (uri | physical ) "physical" >



<!-- contents information and classification -->

<!ELEMENT contents (annotation*, 
                    abstract*, toc*, 
                    keywords*, classifications*, topics*) >

<!ELEMENT annotation (note, by?) >


<!ELEMENT   abstract            %data; >
<!ATTLIST   abstract
            %lang; >

<!ELEMENT   toc            %data; >
<!ATTLIST   toc
            %lang; >

<!ELEMENT   keywords        (keyword+) >
<!ATTLIST   keywords        
            %lang;>

<!ELEMENT   keyword         %data;>
<!ATTLIST   keyword
            %lang; >

<!ELEMENT   classifications        (classification+) >
<!ATTLIST   classifications
            type CDATA #IMPLIED       
            %lang;>

<!ELEMENT   classification         %data;>
<!ATTLIST   classification
            %lang; >

<!ELEMENT   topics        (topic+) >
<!ATTLIST   topics        
            type CDATA #IMPLIED
            %lang;>

<!ELEMENT   topic         %data;>
<!ATTLIST   topic
            %lang; >


<!-- note
This is a 'garbage can'-preventing element.
-->
<!ELEMENT   note            %data; >
<!ATTLIST   note
            type (note|comment|other|unknown) "note"
            originator (author|editor|translator|publisher|user|other|unknown) #IMPLIED
            %lang;
            subtype CDATA #IMPLIED>



<!-- ..................................................................... -->
<!-- Predefined/reserved character entities -->

<!ENTITY amp    "&#38;#38;">
<!ENTITY lt     "&#38;#60;">
<!ENTITY gt     "&#62;">
<!ENTITY apos   "&#39;">
<!ENTITY quot   "&#34;">


<!-- ..................................................................... -->
<!-- End of bibx dtd -->
