XML DTD Elements – Declare Structure and Content Rules for XML Nodes
Introduction – Why Learn DTD Elements?
In any XML document, elements form the backbone of the data structure. To ensure consistency and validity, XML DTD uses the <!ELEMENT> declaration to define the allowed elements, their nesting, and content types. Whether you’re designing a simple note structure or a complex catalog, understanding how to declare elements is essential for validating and organizing your XML data.
In this guide, you’ll learn:
- How to declare XML elements in DTD
- The different content models used in
<!ELEMENT> - Examples of nested, empty, and mixed content declarations
- Validation rules and best practices
What Is <!ELEMENT> in DTD?
<!ELEMENT> is a DTD directive that defines an XML element’s name and the type of content it can hold.
Basic Syntax
<!ELEMENT element-name content-model>
Content Models in DTD Elements
| Model | Description | Example |
|---|---|---|
#PCDATA | Text content only | <!ELEMENT title (#PCDATA)> |
EMPTY | No content allowed | <!ELEMENT line-break EMPTY> |
ANY | Any content is allowed | <!ELEMENT note ANY> |
| Child Elements | Specific element sequence or structure | <!ELEMENT book (title, author)> |
| Mixed Content | Text + child elements | `<!ELEMENT p (#PCDATA |
Example – Simple Element with Text
<!ELEMENT name (#PCDATA)>
Accepts:
<name>John Doe</name>
Invalid:
<name><first>John</first></name>
Example – Element with Nested Children
<!ELEMENT book (title, author, price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
Accepts:
<book>
<title>XQuery Basics</title>
<author>Jane Doe</author>
<price>499</price>
</book>
Example – Repetition and Choice
| Syntax | Meaning | Example |
|---|---|---|
* | 0 or more occurrences | (chapter*) |
+ | 1 or more occurrences | (section+) |
? | 0 or 1 occurrence | (subtitle?) |
| ` | ` | Either one element (choice) |
, | All elements in sequence | (title, author) |
<!ELEMENT library (book*)>
<!ELEMENT book (title, (author | editor), price)>
Example – Empty Element Declaration
<!ELEMENT br EMPTY>
Accepts:
<br/>
Invalid:
<br>Line break</br>
Example – Mixed Content
<!ELEMENT message (#PCDATA | bold | italic)*>
<!ELEMENT bold (#PCDATA)>
<!ELEMENT italic (#PCDATA)>
Accepts:
<message>Welcome to <bold>XQuery</bold> class!</message>
Best Practices for DTD Element Declarations
- ✔️ Use
#PCDATAfor plain text-only elements - ✔️ Use clear and structured child declarations for complex data
- ✔️ Use mixed content only when truly necessary (e.g., in HTML-like markup)
- Don’t mix
#PCDATAwith,(sequential elements)—that’s invalid in DTD - Avoid using
ANYunless flexibility is required and controlled
Summary – Recap & Next Steps
DTD elements define the structure and constraints for XML content. Whether you’re enforcing a document schema or validating configuration files, element declarations ensure your XML is consistent and predictable.
Key Takeaways:
- Use
<!ELEMENT>to define what goes inside each XML tag - Choose content models based on expected data: text, children, or both
- Use symbols like
*,+,|, and?to allow flexibility where needed
Real-world relevance: Used in data exchange formats, content publishing (e.g., DocBook), software configs, and legacy web markup (like XHTML).
FAQs – XML DTD Elements
What is #PCDATA in DTD?
It stands for Parsed Character Data, used for text-only content.
What’s the difference between EMPTY and ANY?
EMPTY means no content allowed. ANY allows any content—text or elements.
Can I declare elements in any order?
No. In sequences (title, author), the order is strictly validated.
Can an element have both text and child elements?
Yes, but you must declare it as mixed content using (#PCDATA | child)*.
What happens if the element content doesn’t match the declaration?
The XML document is invalid according to the DTD.
Share Now :
