تعريف نوع المستند

**تعريف نوع المستند (DTD)** عبارة عن مجموعة من *التعريفات المتفق عليها عالميا (markup declarations) * التي بدورها تحدد *نوع المستند المستخدم في * لغات البرمجة التي تتبع لغة الترميز القياسي العام:

* لغة الترميز القياسي العام: لغة التوصيف العامة القياسية
* لغة الترميز القابلة للامتداد: نظام متّفق عليه لتشكيل النّصوص
* لغة ترميز النص الفائق: لغة تستعمل في بناء وثائق النّصّ المتشعّب أو المتصفّحات وتسمى الويب). وتعريف نوع المستند هو نوع من تطبيقات XML كنظام متّفق عليه لتشكيل النّصوص.

تعريف نوع المستند (DTD) يستخدم قواعد صارمه من خلالها تُحدد بدقة أي العناصر والمراجع (references) التي قد تظهر في موقع ما في وثيقة من نوع معين، وما هو مضمون العناصر وصفاتها (attributes). تعريف نوع المستند (DTD) يعرّف أيضا الكيانات (entities) التي يمكن استخدامها في مستند* ما.*

لغة الترميز القابلة للامتداد يستخدم مجموعة فرعية من تعريف نوع المستند(DTD) التابع لـ SGML DTD.

 النسخة الأحدث من XML Namespace-aware schema languages(لغات توصف بنية مخطط XML) (مثل W3C XML schema:مجموعة الشبكة العالمية لمتصفحات الويب و ISO RELAX NG :مجموعة من اللغات توصف XML) قد حلت إلى حد كبير على DTD. نسخة namespace-aware من DTD جاري تطويرها كجزء 9 http://www.dsdl.org/ لل ISO DSDL:مخطط وثيقة تعريف اللغات. تعريف نوع المستند (DTD) لا تزال قائمة في التطبيقات التي تحتاج إلى نشر أحرف خاصة مثل ال [XML وHTML Character Entity References، والتي كانت مستمدة من مجموعات أكبر محدّدة كجزء من ISO SGML.
## ربط DTD مع المستندات
تعريف نوع المستند يربط DTD مع مستندات XML. تعريف نوع المستند يظهر في جزء القواعد *doctypedecl* قرب بدء مستند اكس ام ال. التعريف ينص على أن المستند هو مثيل من النوع الذي حدده DTD المشار إليه.

DTD تقدم نوعين من التعريفات:

# *جزء داخلي*
# *جزء خارجي*

التعريفات التي تأخذ شكل الجزء الداخلي تكون جزءا من تعريف نوع المستند في المستند نفسه. أما التعريفات في الجزء الخارجي تكون موجودة في ملف نصي منفصل. الجزء الخارجي قد يُشار إليه عن طريق مُعامل مُعرف عام* * و/ أو معامل مُعرف في النظام *[[system identifier.]]* برامج قراءة المستندات قد لا تكون ملزمه لقراءة الجزء الخارجي.

### مثال

في المثال التالي لتعريف نوع مستند يحتوي على كِلا النوعين من المعاملات العامة public identifier ومعاملات النظام system identifier:


```xml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
```


جميع مستندات HTML 4.01 مُتوقعة  لتتوافق مع واحد من ثلاثة SGML DTD: أنواع لتعريف مستند SGML. public identifiers لهذه ال DTD ثابتة وهي كما يلي:

* `[http://www.w3.org/TR/html4/strict.dtd -//W3C//DTD HTML 4.01//EN]`
* `[http://www.w3.org/TR/html4/loose.dtd -//W3C//DTD HTML 4.01 Transitional//EN]`
* `[http://www.w3.org/TR/html4/frameset.dtd -//W3C//DTD HTML 4.01 Frameset//EN]`

system identifiers لهذه ال DTD، إذا كانت موجودة في تعريف نوع المستند، ستكون على شكل URI references:العنوان العام للمورد System identifiers يمكن أن تختلف، ولكنها من المتوقع معرفتها  للإشارة إلى مجموعة محددة من التعريفات في موقع للحل. SGML يسمح لل public identifiers ليتم تعيينها إلى system identifiers في الكتالوجات التي يتم اختياريا وضعها متاحة لحل URL عن طريق برامج تحليل المستند.
## ترميزية التعريفات
DTD يصف البنية لفئة المستند عن طريق العنصر وتعريفات قائمة محتويات ذلك العنصر (attribute-list declarations). اسم تعريفات العنصر (Element declarations name) مجموعة من العناصر المسموح بها ضمن المستند، وتحدد ما إذا كان وكيف تعرّف هذه العناصر ونوع الداتا التي قد تكون واردة داخل كل عنصر. Attribute-list declarations name المجموعة المسموح بها من سمات (attribute) لكل عنصر مُعرف، بما في ذلك النوع لكل قيمة من السمات، إن لم يكن مجموعة واضحة من قيم صالحة.

تعريفات ترميزية DTD تعرّف نوع العنصر، وقائمة السمات (attribute lists) والكيانات(entities) والرموز المسموح بها في بنية الفئة المقابلة لمستندات اكس ام ال.

### تعريفات نوع العنصر

تعريف نوع العنصر يحدد العنصر ومضمونه الممكن. مستند XML الصحيح يحتوي فقط على العناصر التي تمّ تعريفها في DTD.

مجموعة من الكلمات الرئيسية المختلفة والحروف التي تحدد محتوى العنصر:

* EMPTY مضمون فارغ
* ANY لأي مضمون
* ، للأوامر
*
| للبدائل («إما... أو»)

* () للمجموعات
*  لأي عدد (صفر أو أكثر)
* + على الاقل مرة واحدة (واحد أو أكثر)
* ؟ علامة للاختياري (صفر أو واحد)
* إذا لم يكن هناك *، + أو؟، يجب أن يظهر العنصر مرة واحدة فقط.

أمثلة


```xml
<!ELEMENT html (head, body)>
<!ELEMENT p (#PCDATA | p | ul | dl | table | h1|h2|h3)*>
```


### محتوى قائمة تعريفات السمات (Attribute List)

قائمة سمة العنصر تحدد الاسم، نوع البيانات والقيمة الافتراضية لكل سمة (attribute) المرتبطة مع نوع عنصر معطى،  على سبيل المثال:


```xml
<!ATTLIST img
 id ID #IMPLIED
 src CDATA #REQUIRED
>
```


هناك أنواع للسمات (attributes) وهي كالتالي:

* CDATA (مجموعة الاحرف)
* ID
* IDREF وIDREFS
* NMTOKEN وNMTOKENS
* ENTITY و ENTITIES
* NOTATION و NOTATIONS
* Listings و NOTATION-listings

القيمة الافتراضية يمكن أن تحدد اين يجب ظهور السمة (#REQUIRED) أم لا (#IMPLIED), وما ان كان له قيمة ثابتة (#FIXED)، وأي قيمة ينبغي استخدامها كقيمة افتراضية ("...") في حالة منح السمة استبعد في علامة XML.

### كيان التعريفات

الكيانات (Entities) هي متغيرات تستخدم لتحديد المختصرات؛ الاستخدام النموذجي لإمكانية قراءة المستخدم أسماء لأحرف خاصة.
وبالتالي، الكيانات تساعد على تجنب التكرار وجعل التحرير أسهل. على وجه العموم، هناك نوعان رئيسيان مختلفة:

* الداخلية (مضمّن) كيانات تحدد مراجع كيان من أجل استبدال جمل معينة بنص مبدل. مضمون الكيان يعطى في التعريف.
* الخارجية (مضمّن) الكيانات تشير إلى كائنات تخزين خارجية.

### تدوين التعريفات

الترميزات تقرأ تنسيق الملف من وثائق خارجية غير موزعه لتشمل بيانات غير XML في مستند XML. على سبيل المثال صورة من صيغة GIF :


```xml
<!NOTATION GIF system "image/gif">
```


## XML تعريف نوع المستند (DTD)، والتحقق من صحة المخطط

 قواعد XML DTD واحدة من عدة لغات مخطط XML.

ثمة مفهوم خاطئ شائع يقتضي إلى ان ملف XML الغير متحقق من صحته لايجب عليه قراءة تعريف نوع المستند (DTD)، بينما هي في الواقع، لايزال يجب عليه أن يفحصها DTD لبناء قواعد صحيحة فضلا عن تعريفات الكيانات والسمات الافتراضية. عند عدم التحقق من صحة محلل، بغض النظر، قد لا تكون مؤهلة لقراءة *الكيانات الخارجية (external entities)*، بما في ذلك الجزء الخارجي لDTD. إذا كان مستند XML يعتمد على التعريفات الموجودة فقط في الكيانات الخارجية، فإنه يجب تأكيد `standalone="no"` في تعريف XML. التعرف على التحقق من صحة DTD يمكن أن يؤدى باستخدام كتالوجات (XML Catalogs).


```xml
<!DOCTYPEDOCTYPE html PUBLIC
 "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-tra
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<؟xml version="1.0" encoding="UTF-8"?>>
<!DOCTYPE people_list SYSTEM "example.dtd">
<people_list>
 <person>
 <name>Njandu Varuthude</name>
 <birthdate>04/02/1977</birthdate>
 <gender>Male</gender>
 </person>
</ people_list>
```

## مثال XML DTD
مثال بسيط جدا على XML DTD لوصف قائمة بأسماء الأشخاص الذين يمكن أن تتكون من:


```xml
<!ELEMENT people_list (person*)>
<!ELEMENT person (name, birthdate?, gender?, socialsecuritynumber?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT birthdate (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ELEMENT socialsecuritynumber (#PCDATA)>
```


لنأخذ الامثلة سطرا سطر:

# `people_list` هو اسم عنصر صحيح، وهذا العنصر يحتوي على أي عدد من عناصر `person` `*` يدل على أنه لا يمكن أن يكون صفر أو أكثر من عناصر `person` داخل العنصر `people_list`
# `person` هو اسم عنصر صحيح، وهذا العنصر يحتوي على عنصر واحد اسمه `name`، يليه آخر اسمه `birthdate` (اختياري)، ثم `gender` (أيضا اختياري) `socialsecuritynumber` (اختياري أيضا). `?` يشير إلى أن العنصر اختياري. الإشارة إلى عنصر `name` لا توجد فيها `?`، لذلك العنصر `person` *يجب أن* يحتوي على عنصر من `name`
# `name` هو اسم عنصر صحيح، وهذا العنصر يحتوي على عناصر تحتوي (parsed character data" (#PCDATA ".
# `birthdate` هو اسم عنصر صحيح، وهذا العنصر يحتوي على parsed character data.
# `gender` هو اسم عنصر صحيح، وهذا العنصر يحتوي على parsed character data.
# `socialsecuritynumber` هو اسم عنصر صحيح، وهذا العنصر يحتوي على parsed character data..

المثال التالي لملف XML الذي يستخدم ويتفق مع DTD. فإنه يفترض أن نتمكن من تحديد DTD مع مراجع URL ذات ارتباط "example.dtd"؛ وpeople_list "" after"!DOCTYPE "يخبرنا أن السمات الجذرية، أو العنصر الأول في تعريف DTD، يسمى" people_list ":


```xml
<؟اxml version="1.0" encoding="UTF-8"?>>
<!DOCTYPE people_list SYSTEM "example.dtd">
<people_list>
 <person>
 <name>Fred Bloggs</name>
 <birthdate>27/11/2008</birthdate>
<gender>Male</gender>
 <gender>Male</gender>
 </person>
</ people_list>
```


يمكن للشخص أن يفعل هذا في XML-enabled browser (مثل IE5:متصفح أو  عن طريق لصق وحفظ جزء DTD أعلى الملف النصي المسمى *example.dtd* وملف XML في ملف نصي مختلف المسمى، ويتم فتح ملف XML بواسطة المتصفح. كلا الملفين يجب حفظهما في نفس المجلد. بغض النظر، العديد من المتصفحات لا تتأكد من أن مستند XML يتفق مع القواعد الواردة في DTD، بل هي مطلوبة فقط للتأكد من أن بناء جمل DTD صحيحة. لأسباب أمنية، كما أنها قد تختار عدم قراءة DTD الخارجية.

البدائل المتاحة ل DTD :

* XML schema، التي يشار إليها أيضا في صيغة تعريف مخطط XML Schema Definition (XSD)، وقد حقق مركز التوصية ضمن W3C، ويحظى بشعبية في «البيانات الموجهة» (وهذا يعني، أن XML ذا طابع معاملات لا طابع نشر)اُستخدم XML لأنه أقوى في الكتابة وأسهل في تحويله لJava declarations : لغة من لغات برمجة الحاسب الآلي. معظم دول النشر العالمية وجدت أن إضافة XSD المعقدة لن تحقق لهم أي منافع محددة ، ولذلك DTD لا يزال بعيدا أكثر شعبية. XML Schema Definition هو في حد ذاته مستند XML بينما DTD ليس كذلك.
* RELAX NG، الذي هو أيضا جزء من DSDL، يعتبر معيار ISO الدولي. هو أكثر تعبيرا من XSD، في حين يوفر قواعد بسيطة، ولكن دعم البرمجيات التجارية كان بطيئا في التوفير.

## مراجع

تصنيف:لغات ترميزية