An XML document can contain a DTD. DTD stands for Document Type Declaration. A DTD begins with <!DOCTYPE root-element-name >
where doc-element-name
must match the name of the so-called document element (the one element at the top-level).
<?xml version="1.0"?>
<!DOCTYPE document>
<document>
<!-- the rest of the document -->
</document>
A DTD can contain entity declarations.
<?xml version="1.0"?>
<!DOCTYPE document [
<!ENTITY my-entity "This is the replacement text">
]>
<document>
<!-- the rest of the document -->
</document>
Entities are described in details in this topic.
A DTD is referred to as an internal DTD if elements are declared within the XML files. To reference it as internal DTD, standalone attribute in XML declaration must be set to yes.
An XML that describes a note that contains property to, from and message along with internal DTD will look like:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,message>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT message (#PCDATA)>
]>
<note>
<to>Mr.X</to>
<from>Mr.Y</from>
<message>Stack Overflow is awesome </message>
</note>
In external DTD elements are declared outside the XML file. They are accessed by specifying the system attributes which may be either the legal .dtd file or a valid URL. To reference it as external DTD, the standalone attribute in the XML declaration must be set as no.
An XML that describes a note that contains property to, from and the message is given below.
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Mr.X</to>
<from>Mr.Y</from>
<message>Stack Overflow is awesome</message>
</note>
External DTD for the above XML, note.dtd is given below
<!DOCTYPE note [
<!ELEMENT note (to,from,message>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT message (#PCDATA)>
]>