The Infovis Contest DTD
The full dtd can be found here: A local copy of the DTD
<!ELEMENT tree (declarations?, (branch | leaf)* )>
This line says that there is an element (Elements are the main building blocks of both XML and HTML documents) with the name tree. It has children of type declarations (have to come first) and of type branch or leaf. The * sign in the example above declares that the child elements branch or leaf can occur zero or more times inside the tree element. The ? sign in the example above declares that the child element declarations can occur zero or one times inside the tree element.
version CDATA #FIXED "1.0" src CDATA #IMPLIED desc CDATA #IMPLIED date CDATA #IMPLIED author CDATA #IMPLIED >
In the DTD, XML element attributes are declared with an ATTLIST declaration. CDATA stands for character data. The first line states that this is the attribute list for the tree element. It contains an attribute named version which is of type CDATA and has a default value of 1.0. #FIXED stands for a fixed attribute value and #IMPLIED stands for an attribute that does not have to be included.
<!ELEMENT declarations (attributeDecl+)>
This line declares an element called declarations. It has a child called attributeDecl. The + sign in the example above declares that the child element message must occur one or more times inside the note element.
<!ELEMENT attributeDecl EMPTY>
This line declares the child element of declarations called attributeDecl. It does not have any children.
name CDATA #REQUIRED type (Int|Integer|Long|Float|Real|String|Date|Category) "Int" control CDATA #IMPLIED >
The attribute name is of character data and is required. The attribute type can have many different types, Int, Integer, Float, ... The default value is "Int". The attribute control is of character type and does not have to be included.
<!ELEMENT branch ( attribute*, (branch | leaf)* ) > The element branch can have 0 or more children of type attribute or zero or more children of type branch or leaf.
label CDATA #IMPLIED >
The element branch has an attribute called label. It does not have to be there since it is an implied value.
<!ELEMENT leaf (attribute*) > The element leaf can have zero or more children of type attribute.
label CDATA #IMPLIED >
The element leaf can have an attribute named label with character data included.
<!ELEMENT attribute (#PCDATA) > The element attribute can contain #PCDATA. PCDATA means that the element contains data that IS going to be parsed by a parser.
name CDATA #REQUIRED value CDATA #REQUIRED >
The attributes for the element atrribute contain a required field of type name and a required field of type value.
Here is a small example:
<?xml version="1.0" standalone="no"?> <!DOCTYPE tree SYSTEM "http://www.cs.umd.edu/hcil/iv03contest/datasets/treeml.dtd"> <tree> <declarations> <attributeDecl name="name" type="String"/> <attributeDecl name="number" type="Real"/> <attributeDecl name="type" type="String"/> </declarations> <branch> <attribute name="name" value="sample things"/> <branch> <attribute name="name" value="plants"/> <leaf> <attribute name="name" value="oak"/> <attribute name="number" value="10"/> <attribute name="type" value="wild"/> </leaf> </branch> </tree>