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
>