Open In App

Document Type Definition – DTD

Improve
Improve
Like Article
Like
Save
Share
Report

A Document Type Definition (DTD) describes the tree structure of a document and something about its data. It is a set of markup affirmations that actually define a type of document for the SGML family, like GML, SGML, HTML, XML. 

A DTD can be declared inside an XML document as inline or as an external recommendation. DTD determines how many times a node should appear, and how their child nodes are ordered.

There are 2 data types, PCDATA and CDATA

  • PCDATA is parsed character data.
  • CDATA is character data, not usually parsed.

Syntax:

<!DOCTYPE element DTD identifier
[
   first declaration
   second declaration
   .
   .
   nth declaration
]>

Example:

DTD for the above tree is:

XML document with an internal DTD:

XML




<?xml version="1.0"?>
<!DOCTYPE address [
<!ELEMENT address (name, email, phone, birthday)>
<!ELEMENT name (first, last)>
<!ELEMENT first (#PCDATA)>
<!ELEMENT last (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT birthday (year, month, day)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT month (#PCDATA)>
<!ELEMENT day (#PCDATA)>
]>
  
<address>
    <name>
        <first>Rohit</first>
        <last>Sharma</last>
    </name>
    <email>sharmarohit@gmail.com</email>
    <phone>9876543210</phone>
    <birthday>
        <year>1987</year>
        <month>June</month>
        <day>23</day>
    </birthday>
</address>


The DTD above is interpreted like this:

  • !DOCTYPE address defines that the root element of this document is address.
  • !ELEMENT address defines that the address element must contain four elements: “name, email, phone, birthday”.
  • !ELEMENT name defines that the name element must contain two elements: “first, last”.
    •  !ELEMENT first defines the first element to be of type “#PCDATA”.
    • !ELEMENT last defines the last element to be of type “#PCDATA”.
  • !ELEMENT email defines the email element to be of type “#PCDATA”.
  • !ELEMENT phone defines the phone element to be of type “#PCDATA”.
  • !ELEMENT birthday defines that the birthday element must contain three elements “year, month, day”.
    • !ELEMENT year defines the year element to be of type “#PCDATA”.
    • !ELEMENT month defines the month element to be of type “#PCDATA”.
    • !ELEMENT day defines the day element to be of type “#PCDATA”.

XML document with an external DTD:

XML




<?xml version="1.0"?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
    <name>
        <first>Rohit</first>
        <last>Sharma</last>
    </name>
    <email>sharmarohit@gmail.com</email>
    <phone>9876543210</phone>
    <birthday>
        <year>1987</year>
        <month>June</month>
        <day>23</day>
    </birthday>
</address>


address.dtd:

  • <!ELEMENT address (name, email, phone, birthday)>
  • <!ELEMENT name (first, last)>
    • <!ELEMENT first (#PCDATA)>
    • <!ELEMENT last (#PCDATA)>
  • <!ELEMENT email (#PCDATA)>
  • <!ELEMENT phone (#PCDATA)>
  • <!ELEMENT birthday (year, month, day)>
    • <!ELEMENT year (#PCDATA)>
    • <!ELEMENT month (#PCDATA)>
    • <!ELEMENT day (#PCDATA)>

Output:



Last Updated : 06 Nov, 2020
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads