Skip to content

DTD Examples

Document Type Definitions (DTDs) are a way to define the legal structure and elements of an XML document. They provide a basic grammar for a specific XML format.

While DTDs were an early standard, XML Schema Definition (XSD) is the modern, more powerful, and widely used standard for defining XML structure, data types, and constraints. XSD offers richer features like data typing (integers, strings, dates), namespaces support, and more complex structural rules.

However, understanding DTDs can be helpful for working with legacy systems or simpler XML formats. Below are some examples illustrating DTD syntax.

Learn more about XML Schema (XSD)

This DTD defines the structure for a simple TV schedule.

<!DOCTYPE TVSCHEDULE [
<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ELEMENT CHANNEL (BANNER, DAY+)>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE, (HOLIDAY | PROGRAMSLOT+)+)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME, TITLE, DESCRIPTION?)>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ATTLIST TITLE RATING CDATA #IMPLIED
LANGUAGE CDATA #IMPLIED>
<!ELEMENT DESCRIPTION (#PCDATA)>
]>

Key points:

  • TVSCHEDULE must contain one or more (+) CHANNEL elements.
  • CHANNEL must contain exactly one BANNER and one or more DAY elements.
  • DAY contains a DATE and then a sequence of one or more elements, where each can be either a HOLIDAY or one or more PROGRAMSLOTs.
  • DESCRIPTION within PROGRAMSLOT is optional (?).
  • #PCDATA means Parsed Character Data (text).
  • #REQUIRED attributes must be present; #IMPLIED attributes are optional.

This DTD defines a structure for newspaper articles and includes entity definitions.

<!DOCTYPE NEWSPAPER [
<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE, BYLINE, LEAD, BODY, NOTES)>
<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED
EDITOR CDATA #IMPLIED
DATE CDATA #IMPLIED
EDITION CDATA #IMPLIED>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)>
<!ENTITY NEWSPAPER "Vervet Logic Times">
<!ENTITY PUBLISHER "Vervet Logic Press">
<!ENTITY COPYRIGHT "Copyright 2023 Vervet Logic Press">
]>

Key points:

  • NEWSPAPER contains one or more ARTICLE elements.
  • ARTICLE requires HEADLINE, BYLINE, LEAD, BODY, and NOTES in that sequence.
  • ARTICLE requires an AUTHOR attribute.
  • ENTITY definitions create shortcuts. For example, &NEWSPAPER; used within an XML document conforming to this DTD would be replaced by “Vervet Logic Times”.

This DTD demonstrates more complex attribute definitions, including enumerated types and default values.

<!DOCTYPE CATALOG [
<!ELEMENT CATALOG (PRODUCT+)>
<!ELEMENT PRODUCT (SPECIFICATIONS+, OPTIONS?, PRICE+, NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool | Table | ShopProfessional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh | Milwaukee | Chicago) "Chicago"
INVENTORY (InStock | Backordered | Discontinued) "InStock">
<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>
<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS
FINISH (Metal | Polished | Matte) "Matte"
ADAPTER (Included | Optional | NotApplicable) "Included"
CASE (HardShell | Soft | NotApplicable) "HardShell">
<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>
<!ELEMENT NOTES (#PCDATA)>
<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">
]>

Key points:

  • The PRODUCT element has attributes with enumerated possible values (e.g., CATEGORY can only be one of the listed options).
  • Default values are provided for some attributes (e.g., if CATEGORY is omitted, it defaults to “HandTool”).
  • SPECIFICATIONS must appear one or more times (+).
  • OPTIONS and NOTES are optional (?).