15.7 Building an XML DTD
Now that we've emerged from
the gory details of XML DTDs, let's see how they
work by creating a simple example. You can create a DTD with any text
editor and a clear idea of how you want to mark up your XML
documents. You'll need an XML parser and processing
application to actually interpret and use your DTD, as well as a
style sheet to permit XML-capable browsers to display your document.
15.7.1 An XML Address DTD
Let's create a simple XML DTD that defines a markup
language for specifying documents containing names and
addresses. We start with an
address element, which contains other elements
that tag the address contents. Our address element
has a single attribute indicating whether it is a work or home
address:
<!ELEMENT address (name, street+, city, state, zip?)>
<!ATTLIST address type (home|business) #REQUIRED>
Voila! The first declaration creates an element named
address that contains a name element, one or more
street elements, a city and state element, and an optional zip
element. The address element has a single
attribute, type, that must be specified and can
have a value of either home or
business.
Let's define the name elements
first:
<!ELEMENT name (first, middle?, last)>
<!ELEMENT first (#PCDATA)>
<!ELEMENT middle (#PCDATA)>
<!ELEMENT last (#PCDATA)>
The name element also contains other
elements — a first name, an optional middle name, and a last
name — each of which are defined in the subsequent DTD lines.
These three elements have no nested tags and contain only parsed
character data; i.e., the actual name of the person.
The remaining address elements are easy, too:
<!ELEMENT street (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT zip (#PCDATA)>
<!ATTLIST zip length CDATA "5">
All these elements contain parsed character data. The
zip element has an attribute named
length that indicates the length of the zip code.
If the length attribute is not specified, it is
set to 5.
15.7.2 Using the Address DTD
Once defined, we can use our address DTD to mark up address
documents. For example:
<address type="home">
<name>
<first>Chuck</first>
<last>Musciano</last>
</name>
<street>123 Kumquat Way</street>
<city>Cary</city>
<state>NC</state>
<zip length="10">27513-1234</zip>
</address>
With an appropriate XML parser and an application to use this data,
we can parse and store addresses, create addresses to share with
other people and applications, and create display tools that would
publish addresses in a wide range of styles and media. Although our
DTD is simple, it has defined a standard way to capture address data
that is easy to use and understand.
|