<!--
    $Id: coolmeta.dtd,v 1.18 2011/05/19 16:52:49 whenry Exp $
    coolmeta DTD
    Describes metadata components (mainly) found in HEAD elements of
    html documents in CoOL
-->

<!ENTITY % isolat1 PUBLIC
    "-//W3C//ENTITIES Added Latin 1//EN//XML"
    "./iso-lat1.ent"
>
%isolat1;

<!-- elements specific to Conservation OnLine -->
<!ENTITY % CoOLElements
    "cool.title | cool.issue | cool.seriestitle | cool.vol |
    cool.articleseq | cool.copyright | cool.annotation | cool.issn | cool.isbn | copyright | url "
>

<!-- common attributes for DC elements  -->
<!ENTITY % DCattrs
	"id	        ID	    #IMPLIED
	 lang	    CDATA   'en'
	 qualifiers CDATA   #IMPLIED
     scheme     CDATA   #IMPLIED"
>

<!-- common attributes for cool elements  (happens to be same as for dc right now) -->
<!ENTITY % CoOLattrs
    "%DCattrs;
    "
>


<!-- local title may be diff from dc.title. We will use cool.title in HTML title element -->
<!ELEMENT cool.title       (#PCDATA) >
<!ELEMENT cool.issue       (#PCDATA) >
<!ELEMENT cool.seriestitle (#PCDATA) >
<!ELEMENT cool.articleseq  (#PCDATA) > <!-- indicates this is the Nth article in the issue -->
<!ELEMENT cool.vol         (#PCDATA) >
<!ELEMENT cool.copyright   (#PCDATA) >
<!ELEMENT cool.issn        (#PCDATA) >
<!ELEMENT cool.isbn        (#PCDATA) >
<!ELEMENT copyright        (#PCDATA) > <!-- copyright is a legacy version of cool.copyright -->
<!ELEMENT cool.annotation  (#PCDATA) > <!-- e.g. Talk presented at... (TODO: more examples) -->

<!ATTLIST cool.title         %CoOLattrs;>
<!ATTLIST cool.issue         %CoOLattrs;>
<!ATTLIST cool.seriestitle   %CoOLattrs;>
<!ATTLIST cool.articleseq    %CoOLattrs;>
<!ATTLIST cool.vol           %CoOLattrs;>
<!ATTLIST cool.copyright     %CoOLattrs;>
<!ATTLIST cool.annotaion
    role    CDATA   #IMPLIED
    %CoOLattrs; >



<!-- These probably won't need attributes  -->
<!--
<!ATTLIST cool.issn
<!ATTLIST cool.isbn
<!ATTLIST copyright          %CoOLattrs;>
-->

<!ELEMENT url              (#PCDATA) >

<!-- Selected elements from Dublin Core -->
<!ENTITY % DCElements
   'dc.creator | dc.creator.author | dc.creator.editor | dc.creator.corporateauthor |
    dc.contributor |
    dc.contributor.illustrator | dc.contributor.translator |
    dc.contributor.author | dc.contributor.editor |
    dc.contributor.compiler | dc.contributor.moderator |
    dc.publisher | dc.publisher.disseminator |
    dc.date | dc.description | dc.description.summary | dc.description.abstract |
    dc.format | dc.identifier |
    dc.language |
    dc.relation | dc.relation.isformatof | dc.relation.ispartof |
    dc.rights |
    dc.subject |
    dc.title |
    dc.type '
>

<!-- Eventually. I really, really want to say attlist %SomeElements; SomeElements; etc, but XML is mean and nasty
at least we can parameterize the attribute names etc, which doesn't
buy us anything right now, but later we might want to add enums, so
that author roles might be "author or editor", contributor roles
might be translator, illustrator, etc.
-->

<!ENTITY % author.role.atts     "role CDATA    #IMPLIED " >
<!ENTITY % contrib.role.atts    "role CDATA    #IMPLIED " >
<!ENTITY % publisher.role.atts  "role CDATA    #IMPLIED " >

<!ATTLIST dc.creator                     %author.role.atts;>
<!ATTLIST dc.creator.author              %author.role.atts;>
<!ATTLIST dc.creator.corporateauthor     %author.role.atts;>
<!ATTLIST dc.creator.editor              %author.role.atts;>


<!ELEMENT dc.creator                    (#PCDATA) >
<!ELEMENT dc.creator.author             (#PCDATA) >
<!ELEMENT dc.creator.editor             (#PCDATA) >
<!ELEMENT dc.creator.corporateauthor    (#PCDATA) >

<!ATTLIST dc.creator                     %DCattrs;>
<!ATTLIST dc.creator.author              %DCattrs;>
<!ATTLIST dc.creator.editor              %DCattrs;>
<!ATTLIST dc.creator.corporateauthor     %DCattrs;>

<!ATTLIST dc.contributor                 %contrib.role.atts;>
<!ATTLIST dc.contributor.author          %contrib.role.atts;>
<!ATTLIST dc.contributor.editor          %contrib.role.atts;>
<!ATTLIST dc.contributor.illustrator     %contrib.role.atts;>
<!ATTLIST dc.contributor.translator      %contrib.role.atts;>
<!ATTLIST dc.contributor.compiler        %contrib.role.atts;>
<!ATTLIST dc.contributor.moderator       %contrib.role.atts;>


<!ELEMENT dc.contributor                (#PCDATA) >
<!ELEMENT dc.contributor.illustrator    (#PCDATA) >
<!ELEMENT dc.contributor.translator     (#PCDATA) >
<!ELEMENT dc.contributor.editor         (#PCDATA) >
<!ELEMENT dc.contributor.author         (#PCDATA) >
<!ELEMENT dc.contributor.moderator      (#PCDATA) >

<!ATTLIST dc.contributor                 %DCattrs;>
<!ATTLIST dc.contributor.illustrator     %DCattrs;>
<!ATTLIST dc.contributor.translator      %DCattrs;>
<!ATTLIST dc.contributor.compiler        %DCattrs;>
<!ATTLIST dc.contributor.moderator       %DCattrs;>
<!ATTLIST dc.contributor.editor          %DCattrs;>
<!ATTLIST dc.contributor.author          %DCattrs;>


<!ELEMENT dc.publisher                  (#PCDATA) >
<!ELEMENT dc.publisher.disseminator     (#PCDATA) >

<!ATTLIST dc.publisher                   %DCattrs;>
<!ATTLIST dc.publisher                   %publisher.role.atts;>
<!ATTLIST dc.publisher.disseminator      %DCattrs;>
<!ATTLIST dc.publisher.disseminator      %publisher.role.atts;>


<!ELEMENT dc.date          (#PCDATA) >
<!ATTLIST dc.date %DCattrs;>

<!ELEMENT dc.description          (#PCDATA) >
<!ATTLIST dc.description %DCattrs;>

<!ELEMENT dc.description.summary          (#PCDATA) >
<!ATTLIST dc.description.summary %DCattrs;>

<!ELEMENT dc.description.abstract          (#PCDATA) >
<!ATTLIST dc.description.abstract %DCattrs;>

<!ELEMENT dc.format        (#PCDATA) >
<!ATTLIST dc.format %DCattrs;>

<!ELEMENT dc.identifier    (#PCDATA) >
<!ATTLIST dc.identifier %DCattrs;>

<!ELEMENT dc.language      (#PCDATA) >
<!ATTLIST dc.language %DCattrs;>

<!ELEMENT dc.relation      (#PCDATA) >
<!ATTLIST dc.relation %DCattrs;>

<!ELEMENT dc.relation.isformatof      (#PCDATA) >
<!ATTLIST dc.relation.isformatof %DCattrs;>


<!ELEMENT dc.relation.ispartof      (#PCDATA) >
<!ATTLIST dc.relation.ispartof %DCattrs;>


<!ELEMENT dc.rights      (#PCDATA) >
<!ATTLIST dc.rights %DCattrs;>

<!ELEMENT dc.subject         (#PCDATA) >
<!ATTLIST dc.subject %DCattrs;>

<!ELEMENT dc.title         (#PCDATA) >
<!ATTLIST dc.title %DCattrs;>

<!ELEMENT dc.type          (#PCDATA) >
<!ATTLIST dc.type %DCattrs;>

<!ELEMENT indexdata ( rec+ ) >

<!ELEMENT rec ( %DCElements; | %CoOLElements; )* >
<!ATTLIST rec id	ID	    #IMPLIED>