thredds catalogs, new version

After trying to implement nested datasets in a Java object model, ive come
to the conclusion that the distinction between collections and datasets
complicates life too much. So, here is yet another version of the catalog
DTD. I hope this is the last major change to subject you to.

http://www.unidata.ucar.edu/projects/THREDDS/xml/InvCatalog.0.6.dtd


specification at

http://www.unidata.ucar.edu/projects/THREDDS/tech/InvCatalogSpecification2.h
tml


I have an alpha version Java library implemented, code will be available in
a few days, javadoc is at:

http://www.unidata.ucar.edu/projects/THREDDS/tech/catalog/javadoc/


comments are requested.
<!-- see http://www.unidata.ucar.edu/thredds -->
<!ENTITY % DataType "Grid | Image | Station">
<!ENTITY % ServiceType "DODS | ADDE | NetCDF | Catalog | FTP | WMS | WFS
| WCS | WSDL | Compound | Other">
<!ENTITY % MetadataType "THREDDS | Aggregation | DublinCore | DIF | ADN
| FGDC | LAS | Other">
<!-- top-level element -->
<!ELEMENT catalog (dataset)>
<!ATTLIST catalog
        name CDATA #REQUIRED
        version CDATA #REQUIRED
        xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink";
        xmlns CDATA #FIXED "http://www.unidata.ucar.edu/thredds";
>
<!-- only service type Compound can have nested services-->
<!ELEMENT service (property*, service*)>
<!ATTLIST service
        name CDATA #REQUIRED
        serviceType (%ServiceType;) #REQUIRED
        base CDATA #REQUIRED
        suffix CDATA #IMPLIED
>
<!-- use access elements when there are multiple services -->
<!ELEMENT dataset (service*, (documentation | metadata | property)*,
access*, (dataset | catalogRef)*)>
<!ATTLIST dataset
        name CDATA #REQUIRED
        dataType (%DataType;) #IMPLIED
        authority CDATA #IMPLIED
        ID ID #IMPLIED
        alias IDREF #IMPLIED
        serviceName CDATA #IMPLIED
        urlPath CDATA #IMPLIED
>
<!-- use serviceID and relative URL -OR- serviceType and absolute URL
-->
<!ELEMENT access EMPTY>
<!ATTLIST access
        urlPath CDATA #REQUIRED
        serviceName CDATA #IMPLIED
        serviceType (%ServiceType;) #IMPLIED
>
<!-- display this info to the user during the selection process -->
<!ELEMENT documentation (#PCDATA)>
<!ATTLIST documentation
        xlink:type (simple) #FIXED "simple"
        xlink:href CDATA #IMPLIED
        xlink:title CDATA #IMPLIED
        xlink:show (new | replace | embed) "new"
>
<!-- these are optional structured metadata, not typically shown to the
user in the dataset chooser -->
<!ELEMENT metadata ANY>
<!ATTLIST metadata
        xlink:type (simple) #FIXED "simple"
        xlink:href CDATA #IMPLIED
        metadataType (%MetadataType;) #REQUIRED
>
<!-- external catalog gets added as a collection -->
<!ELEMENT catalogRef (documentation*) >
<!ATTLIST catalogRef
        xlink:type (simple) #FIXED "simple"
        xlink:href CDATA #REQUIRED
        xlink:title CDATA #REQUIRED
>
<!-- arbitrary name/value pairs to associate with the dataset,
collection or service -->
<!ELEMENT property EMPTY>
<!ATTLIST property
        name CDATA #REQUIRED
        value CDATA #REQUIRED
>