DTD

تعریف نوع سند (DTD) — قدیمی‌ترین روش تعریف ساختار و اعتبارسنجی XML

DTD چیست؟

DTD مخفف Document Type Definition (تعریف نوع سند) است؛ قدیمی‌ترین روش برای تعریف ساختار مجاز یک سند XML. DTD مشخص می‌کند:

مثال: سند XML با DTD داخلی

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
    <!ELEMENT note (to, from, heading, body)>
    <!ELEMENT to (#PCDATA)>
    <!ELEMENT from (#PCDATA)>
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body (#PCDATA)>
]>
<note>
    <to>علی</to>
    <from>سارا</from>
    <heading>یادآوری</heading>
    <body>جلسه را فراموش نکن</body>
</note>

تجزیه DTD

اعلانمعنی
<!DOCTYPE note [...]>شروع DTD برای سند note
<!ELEMENT note (to, from, heading, body)>عنصر note باید دقیقاً به این ترتیب این ۴ فرزند را داشته باشد
<!ELEMENT to (#PCDATA)>عنصر to فقط متن قابل‌پارس شامل می‌شود (متن ساده)

تعریف عناصر با تکرار

علامتمعنی
بدون علامتدقیقاً یک‌بار
+یک‌بار یا بیشتر
*صفر یا بیشتر
?صفر یا یک‌بار (اختیاری)
|یا (یکی از چند گزینه)
<!ELEMENT library (book+)>              <!-- یک یا چند کتاب -->
<!ELEMENT book (title, author*, isbn?)> <!-- عنوان اجباری، چند نویسنده، شابک اختیاری -->
<!ELEMENT chapter (para | table)+>       <!-- پاراگراف یا جدول، یک‌بار یا بیشتر -->

تعریف ویژگی‌ها با ATTLIST

<!ATTLIST قیمت
    واحد CDATA #REQUIRED
    تخفیف CDATA #IMPLIED
>
مقدارمعنی
#REQUIREDویژگی اجباری است
#IMPLIEDویژگی اختیاری است
#FIXED "value"مقدار ثابت — همیشه همین
"default"مقدار پیش‌فرض

انواع مقدار ویژگی

نوعتوضیح
CDATAمتن دلخواه (رشته کاراکتری)
(v1|v2|v3)فهرست مقادیر مجاز (شمارشی)
IDشناسه یکتا در کل سند
IDREFارجاع به یک ID موجود

DTD خارجی

DTD را می‌توان در فایل جداگانه گذاشت و به آن ارجاع داد:

<!DOCTYPE note SYSTEM "note.dtd">

محتوای note.dtd:

<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

موجودیت‌ها در DTD

می‌توانید میانبر تعریف کنید:

<!ENTITY writer "سارا محمدی">
<!ENTITY copyright "© ۲۰۲۴">

<!-- استفاده -->
<message>&writer;©right;</message>

محدودیت‌های DTD

به همین دلایل، XML Schema (XSD) جایگزین مدرن DTD شده است — درس بعد! اما DTD هنوز در اسناد قدیمی، HTML (doctype!) و سیستم‌های سازمانی دیده می‌شود.

این مبحث بخشی از دوره آموزش کامل XML است.

ابزارهای مرتبط