Valid XML Documents
After you have created an XML document and confirmed that it is "well formed",
the next step is to link the XML file to a DTD to ensure that the XML document
is valid. The purpose of this section is to show how to assign a DTD to an XML file.
In addition, several examples will be presented to further demonstrate the concepts
presented in the preceeding sections.
A DTD can be assigned to an XML file in two ways. The DTD can be declared or coded
inline inside of the XML file, or the DTD can be declared or coded externally and
then linked to the XML document.
Below is the format for an inline DTD:
<!DOCTYPE root-element [element-declarations]>
Listing 2-10. Inline DTD.
An inline DTD is assigned to an XML file below:
employees.xml
<?xml version="1.0"?>
<!DOCTYPE Employee [
<!ELEMENT Employee (SSN,FirstName,LastName,Salary,Department)>
<!ELEMENT SSN (#PCDATA)>
<!ELEMENT FirstName (#PCDATA)>
<!ELEMENT LastName (#PCDATA)>
<!ELEMENT Salary (#PCDATA)>
<!ELEMENT Department(#PCDATA)>
<!ATTLIST Employee id CDATA>
]>
<Employee id="1111">
<SSN>111-11-1111</SSN>
<FirstName>Ann</FirstName>
<LastName>Adams</LastName>
<Salary>65000.00</Salary>
<Department>Accounting</Department>
</Employee>
Listing 2-11. Inline DTD assigned.
The inline DTD is coded below the XML declaration
<?xml version="1.0"?>
. First,
!DOCTYPE Employee
defines that the root element of this document
is Employee. Next, !ELEMENT Employee
defines that the Employee
element contains four child elements: "SSN, FirstName, LastName, Salary, and
Department". Third, all of the child elements are defined and designated type
#PCDATA. Finally, id
is defined as an attribute of the Employee
element.
The final step is to test whether the XML document is valid or conforms to the
rules specified in the DTD. This can be done using any XML editor program.
In most cases, it is best to separate the XML from the DTD. This can be done
using an external DTD declaration. The general format is shown below:
<!DOCTYPE root-element SYSTEM "filename">
Listing 2-12. External DTD declaration.
The example above is presented again using an external DTD.
employees.xml
<?xml version="1.0"?>
<!DOCTYPE Employee SYSTEM "employees.dtd">
<Employee id="1111">
<SSN>111-11-1111</SSN>
<FirstName>Ann</FirstName>
<LastName>Adams</LastName>
<Salary>65000.00</Salary>
<Department>Accounting</Department>
</Employee>
Listing 2-13. External DTD example (XML).
employees.dtd
<!ELEMENT Employee (SSN,FirstName,LastName,Salary,Department)>
<!ELEMENT SSN (#PCDATA)>
<!ELEMENT FirstName (#PCDATA)>
<!ELEMENT LastName (#PCDATA)>
<!ELEMENT Salary (#PCDATA)>
<!ELEMENT Department(#PCDATA)>
<!ATTLIST Employee id CDATA>
Listing 2-14. External DTD example (DTD).
Here the XML is separate from the DTD. They are linked together by the external
declaration <!DOCTYPE Employee SYSTEM "employees.dtd">
.