Verifying Structure with a DTD
Problem
Up to now, I have simply provided XML and asserted that it is valid. Now you want to verify the structure using a Document Type Definition (DTD).
Solution
Write the DTD and refer to it in one or more XML documents.
Discussion
This is not the place for a full dissertation on creating a Document
Type Definition. Briefly, a DTD consists of a header and a list of
the elements and any attributes. The DTD is written in a special
language that allows you to specify the elements and attributes.
Example 21-7 is
people.dtd
, a DTD for the
people.xml file used earlier in this chapter.
Example 21-7. people.dtd
<!ELEMENT people (person)*> <!ELEMENT person (name, email, country)> <!ELEMENT name (#PCDATA)> <!ATTLIST email type CDATA #IMPLIED> <!ELEMENT email (#PCDATA)> <!ELEMENT country (#PCDATA)>
To verify that a file conforms to a DTD, you do two things:
Refer to the DTD from within the XML file, as is sometimes seen in HTML documents. The
<!DOCTYPE>line should follow the<?xml>line but precede any actual data.<?xml version="1.0"?> <!DOCTYPE people SYSTEM "people.dtd"> <people> <person> <name>Ian Darwin</name> <email>ian@darwinsys.com</email> <country>Canada</country> </person>
Pass
trueas a second argument to thecreateXMLDocument( )method;truemeans “enforce document validity.”XmlDocument doc = XmlDocument.createXmlDocument(uri);
Now any elements found in the document that are not valid according to the DTD will result in an exception being thrown.