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: DTD خودش با سینتکس XML نوشته نمیشود
- پشتیبانی از فضای نام ندارد
- کنترل محدود: نمیتوان الگوهای پیچیده تعریف کرد
به همین دلایل، XML Schema (XSD) جایگزین مدرن DTD شده است — درس بعد! اما DTD هنوز در اسناد قدیمی، HTML (doctype!) و سیستمهای سازمانی دیده میشود.
این مبحث بخشی از دوره آموزش کامل XML است.