تعريف نوع المستند
تعريف نوع المستند ( DTD ) هو ملف مواصفات يحتوي على مجموعة من تعريفات الترميز التي تحدد نوع مستند لإحدى لغات الترميز التابعة لعائلة SGML ( GML ، SGML ، XML ، HTML ). ويمكن استخدام ملف مواصفات DTD للتحقق من صحة المستندات.
يُعرّف تعريف نوع المستند (DTD) العناصر الأساسية الصالحة لمستند XML. فهو يُحدد بنية المستند من خلال قائمة بالعناصر والخصائص المُعتمدة. يمكن تعريف تعريف نوع المستند (DTD) بشكل مباشر داخل مستند XML، أو كمرجع خارجي. [ 1 ]
تستمر تعريفات نوع المستند (DTD) في التطبيقات التي تتطلب أحرف نشر خاصة، مثل مراجع كيانات الأحرف في XML وHTML ، والتي تُشتق من مجموعات أكبر مُعرّفة كجزء من جهد معيار ISO SGML . يستخدم XML مجموعة فرعية من تعريف نوع المستند SGML . وقد طُوّرت محاولة لإنشاء تعريفات نوع مستند مُدركة لمساحات الأسماء كجزء 9 من ISO DSDL ، ولكن تم سحبها في نهاية المطاف. [ 2 ]
اعتبارًا من عام 2009لقد حلت لغات المخططات الأحدث التي تراعي مساحة اسم XML (مثل W3C XML Schema و ISO RELAX NG ) محل DTDs إلى حد كبير كطريقة أفضل للتحقق من صحة بنية XML.
ربط تعريفات نوع المستند (DTD) بالمستندات
يرتبط تعريف نوع المستند (DTD) بمستند XML أو SGML من خلال تعريف نوع المستند (DOCTYPE). يظهر تعريف نوع المستند في الجزء النحوي doctypedecl قرب بداية مستند XML. [ 3 ] يُثبت هذا التعريف أن المستند هو نسخة من النوع المُعرَّف بواسطة تعريف نوع المستند المُشار إليه.
تُقدّم تعريفات أنواع المستندات نوعين من التصريحات:
- مجموعة فرعية خارجية اختيارية
- مجموعة فرعية داخلية اختيارية .
تُشكّل التصريحات في المجموعة الفرعية الداخلية جزءًا من تعريف نوع المستند (DOCTYPE) في المستند نفسه. أما التصريحات في المجموعة الفرعية الخارجية فتوجد في ملف نصي منفصل . ويمكن الإشارة إلى المجموعة الفرعية الخارجية عبر مُعرّف عام و/أو مُعرّف نظام . وقد لا يُشترط على برامج قراءة المستندات قراءة المجموعة الفرعية الخارجية.
أي مستند SGML أو XML صالح يشير إلى مجموعة فرعية خارجية في DTD الخاص به، أو يحتوي جسمه على مراجع إلى كيانات خارجية تم تحليلها معلنة في DTD الخاص به (بما في ذلك تلك المعلنة داخل مجموعته الفرعية الداخلية )، قد يتم تحليله جزئيًا فقط ولكن لا يمكن التحقق منه بالكامل عن طريق محللات SGML أو XML في وضعها المستقل (هذا يعني أن محللات التحقق هذه لا تحاول استرداد هذه الكيانات الخارجية، ولا يمكن الوصول إلى نص الاستبدال الخاص بها).
مع ذلك، تظل هذه المستندات قابلة للتحليل بالكامل في الوضع غير المستقل للمحللات المُدققة، والذي يُشير إلى وجود خطأ إذا تعذر تحديد موقع هذه الكيانات الخارجية باستخدام مُعرّفها العام المُحدد (FPI) أو مُعرّف النظام (URI)، أو إذا كانت غير قابلة للوصول. (تشير الرموز المُعلنة في DTD أيضًا إلى كيانات خارجية، ولكن هذه الكيانات غير المُحللة غير مطلوبة للتحقق من صحة المستندات في الوضع المستقل لهذه المحللات: يُترك التحقق من صحة جميع الكيانات الخارجية المُشار إليها بواسطة الرموز للتطبيق الذي يستخدم محلل SGML أو XML). قد تُحاول المحللات غير المُدققة في نهاية المطاف تحديد موقع هذه الكيانات الخارجية في الوضع غير المستقل (عن طريق تفسير DTD جزئيًا فقط لحل كياناتها القابلة للتحليل المُعلنة)، ولكنها لا تتحقق من صحة نموذج محتوى هذه المستندات.
أمثلة
يحتوي المثال التالي لـ DOCTYPE على كل من المعرفات العامة ومعرفات النظام:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >تتوافق جميع مستندات HTML 4.01 مع أحد تعريفات نوع المستند (DTD) الثلاثة الخاصة بلغة SGML. المعرّفات العامة لهذه التعريفات ثابتة، وهي كالتالي:
تُعدّ مُعرّفات النظام لهذه التعريفات النوعية للمستندات (DTDs)، إن وُجدت في تعريف نوع المستند (DOCTYPE)، مراجعَ URI . ويشير مُعرّف النظام عادةً إلى مجموعة مُحدّدة من التصريحات في موقع قابل للتحليل. يسمح SGML بربط المُعرّفات العامة بمُعرّفات النظام في الفهارس المُتاحة اختياريًا لمُحلِّلات URI التي تستخدمها برامج تحليل المستندات .
لا يمكن أن يظهر تعريف نوع المستند (DOCTYPE) إلا بعد تعريف XML الاختياري وقبل نص المستند، إذا كان بناء جملة المستند متوافقًا مع XML. ويشمل ذلك مستندات XHTML .
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- يبدأ نص مستند XHTML هنا --> <html xmlns= "http://www.w3.org/1999/xhtml" > ... </html>يمكن أيضًا توفير مجموعة فرعية داخلية إضافية بعد المجموعة الفرعية الخارجية:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ <!-- يمكن تضمين مجموعة فرعية داخلية هنا --> ]> <!-- يبدأ نص مستند XHTML هنا --> <html xmlns= "http://www.w3.org/1999/xhtml" > ... </html>أو بدلاً من ذلك، يمكن توفير المجموعة الفرعية الداخلية فقط:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html [ <!-- يمكن تضمين مجموعة فرعية داخلية هنا --> ]> <!-- يبدأ نص مستند XHTML هنا --> <html xmlns= "http://www.w3.org/1999/xhtml" > ... </html>وأخيرًا، قد لا يتضمن تعريف نوع المستند أي مجموعة فرعية على الإطلاق؛ في هذه الحالة، فإنه يحدد فقط أن المستند يحتوي على عنصر واحد من المستوى الأعلى (وهذا شرط ضمني لجميع مستندات XML وHTML الصالحة، ولكن ليس لأجزاء المستندات أو لجميع مستندات SGML، التي قد تختلف عناصرها من المستوى الأعلى عن عنصر الجذر الضمني)، ويشير إلى اسم نوع عنصر الجذر:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html> <!-- يبدأ نص مستند XHTML هنا --> <html xmlns= "http://www.w3.org/1999/xhtml" > ... </html>إعلانات الترميز
تصف تعريفات نوع المستند (DTD) بنية فئة من المستندات عبر تعريفات العناصر وقوائم السمات. تُحدد تعريفات العناصر مجموعة العناصر المسموح بها داخل المستند، وتُبين ما إذا كان يُمكن احتواء كل عنصر على عناصر مُعرَّفة وسلاسل بيانات نصية، وكيفية احتواء كل عنصر عليها. أما تعريفات قوائم السمات، فتُحدد مجموعة السمات المسموح بها لكل عنصر مُعرَّف، بما في ذلك نوع قيمة كل سمة، إن لم تكن مجموعة صريحة من القيم الصالحة.
تُحدد تعريفات ترميز DTD أنواع العناصر وقوائم السمات والكيانات والرموز المسموح بها في بنية فئة مستندات XML المقابلة . [ 4 ]
تعريفات أنواع العناصر
يُعرّف تعريف نوع العنصر العنصر ومحتواه المحتمل. لا تحتوي وثيقة XML الصالحة إلا على العناصر المُعرّفة في تعريف نوع المستند (DTD).
تحدد كلمات مفتاحية وأحرف متنوعة محتوى العنصر:
EMPTYلتحديد أن العنصر المحدد لا يسمح بأي محتوى، أي أنه لا يمكن أن يحتوي على أي عناصر فرعية، ولا حتى عناصر نصية (إذا كانت هناك مسافات بيضاء، فسيتم تجاهلها)؛ANYلتحديد أن العنصر المحدد يسمح بأي محتوى، دون قيود، أي أنه قد يحتوي على أي عدد (بما في ذلك لا شيء) ونوع من العناصر الفرعية (بما في ذلك عناصر النص)؛- أو تعبير يحدد العناصر الوحيدة المسموح بها كعناصر فرعية مباشرة في محتوى العنصر المحدد؛ ويمكن أن يكون هذا المحتوى إما:
- المحتوى المختلط ، مما يعني أن المحتوى قد يتضمن عنصر نص واحد على الأقل وصفر أو أكثر من العناصر المسماة، ولكن لا يمكن تقييد ترتيبها وعدد مرات ظهورها؛ وهذا يمكن أن يكون:
(#PCDATA): تاريخياً، تعني بيانات الأحرف المحللة ، وهذا يعني أنه لا يُسمح إلا بعنصر نصي واحد في المحتوى (لا يُسمح باستخدام محدد الكمية)؛(#PCDATA|''elementname''|...)*: يمكن استخدام اختيار محدود (في قائمة حصرية بين قوسين مفصولة بأحرف "|" ومنتهية بالمحدد الكمي المطلوب "*") لعنصرين فرعيين أو أكثر (بما في ذلك عناصر النص فقط أو العناصر المسماة المحددة) بأي ترتيب وعدد مرات ظهور في المحتوى.
- محتوى العنصر ، ما يعني أنه يجب ألا تحتوي العناصر الفرعية للمحتوى على أي عناصر نصية (يتم تجاهل جميع المسافات البيضاء المشفرة بين العناصر الفرعية، تمامًا مثل التعليقات). يُحدد محتوى العنصر هذا كجسيم محتوى بصيغة باكوس-ناور المعدلة، بدون رموز نهائية، وتُستخدم أسماء العناصر كرموز غير نهائية. يتكون محتوى العنصر من:
- يمكن أن يكون عنصر المحتوى إما اسم عنصر مُعلن عنه في تعريف نوع المستند (DTD)، أو قائمة تسلسلية أو قائمة اختيار . وقد يتبعه مُحدد كمي اختياري .
- تعني قائمة التسلسل قائمة مرتبة (محددة بين قوسين ومفصولة بفاصلة "
,") من جسيم محتوى واحد أو أكثر : يجب أن تظهر جميع جسيمات المحتوى بالتتابع كأبناء مباشرين في محتوى العنصر المحدد، في الموضع المحدد والترتيب النسبي؛ - تعني قائمة الاختيار قائمة حصرية متبادلة (محددة بين قوسين ومفصولة بحرف "
|") من اثنين أو أكثر من جسيمات المحتوى : لا يمكن أن يظهر سوى واحد من جسيمات المحتوى هذه في محتوى العنصر المحدد في نفس الموضع.
- تعني قائمة التسلسل قائمة مرتبة (محددة بين قوسين ومفصولة بفاصلة "
- المُكمِّم هو حرف واحد يتبع العنصر المحدد الذي ينطبق عليه مباشرةً، لتقييد عدد مرات ظهور هذه العناصر بشكل متتابع في الموضع المحدد في محتوى العنصر؛ وقد يكون أحد ما يلي:
+لتحديد أنه يجب أن يكون هناك ظهور واحد أو أكثر للعنصر - قد يختلف المحتوى الفعلي لكل ظهور؛*لتحديد أنه يُسمح بأي عدد (صفر أو أكثر) من مرات الظهور - العنصر اختياري وقد يختلف المحتوى الفعلي لكل ظهور؛?لتحديد أنه يجب ألا يكون هناك أكثر من ظهور واحد - العنصر اختياري؛- إذا لم يكن هناك مُحدد كمي، فيجب أن يظهر العنصر المحدد مرة واحدة بالضبط في الموضع المحدد في محتوى العنصر.
- يمكن أن يكون عنصر المحتوى إما اسم عنصر مُعلن عنه في تعريف نوع المستند (DTD)، أو قائمة تسلسلية أو قائمة اختيار . وقد يتبعه مُحدد كمي اختياري .
- المحتوى المختلط ، مما يعني أن المحتوى قد يتضمن عنصر نص واحد على الأقل وصفر أو أكثر من العناصر المسماة، ولكن لا يمكن تقييد ترتيبها وعدد مرات ظهورها؛ وهذا يمكن أن يكون:
على سبيل المثال:
<!ELEMENT html ( head , body ) > <!ELEMENT p ( #PCDATA | p | ul | dl | table | h1 | h2 | h3 )* >يتم تجاهل تعريفات أنواع العناصر بواسطة محللات SGML و XML غير المدققة (في هذه الحالات، يتم قبول أي عناصر بأي ترتيب، وبأي عدد من مرات الظهور في المستند الذي تم تحليله)، ولكن لا يزال يتم التحقق من هذه التعريفات من حيث الشكل والصحة.
تعريفات قائمة السمات
تحدد قائمة السمات لنوع عنصر معين قائمة بجميع السمات الممكنة المرتبطة بهذا النوع. ولكل سمة ممكنة، تحتوي القائمة على ما يلي:
- الاسم المُعلن للخاصية،
- نوع بياناته (أو تعداد لقيمه الممكنة)،
- وقيمتها الافتراضية. [ 5 ]
على سبيل المثال:
<!ATTLIST img src CDATA #REQUIRED id ID #IMPLIED sort CDATA #FIXED "true" print ( yes | no ) "yes" >فيما يلي بعض أنواع السمات التي يدعمها كل من SGML و XML:
CDATA- هذا النوع يعني بيانات الأحرف ويشير إلى أن القيمة الفعالة للسمات يمكن أن تكون أي قيمة نصية، ما لم يتم تحديد السمة على أنها ثابتة (قد توثق التعليقات في DTD القيم المقبولة بشكل فعال، لكن بناء جملة DTD لا يسمح بمثل هذا التحديد الدقيق)؛
ID- يجب أن تكون القيمة الفعلية للخاصية مُعرّفًا صالحًا، وتُستخدم لتحديد العنصر الحالي وربطه بالعنصر المستهدف للمراجع التي تستخدم هذا المُعرّف المُحدد (بما في ذلك مُعرّفات أجزاء المستند التي قد تُحدد في نهاية URI بعد علامة "#")؛ ويُعد خطأً إذا كانت عناصر مختلفة في نفس المستند تُعرّف نفس المُعرّف؛ كما أن قيد التفرد يعني أن المُعرّف نفسه لا يحمل أي دلالات أخرى، وأنه يجب التعامل مع المُعرّفات على أنها مبهمة في التطبيقات؛ كما يُعرّف XML مُسبقًا الخاصية الزائفة القياسية " "
xml:idبهذا النوع، دون الحاجة إلى أي إعلان في DTD، لذا فإن قيد التفرد ينطبق أيضًا على هذه المُعرّفات المُحددة عندما يتم تحديدها في أي مكان في مستند XML. IDREFأوIDREFS- لا يمكن أن تكون القيمة الفعالة للسمات إلا معرفًا صالحًا (أو قائمة مفصولة بمسافات من هذه المعرفات) ويجب أن تشير إلى العنصر الفريد المحدد في المستند بسمة معلنة بالنوع
IDفي DTD (أو العنصر الفريد المحدد في مستند XML بسمة زائفة "xml:id") وقيمته الفعالة هي نفس المعرف؛ NMTOKENأوNMTOKENS- لا يمكن أن تكون القيمة الفعالة للسمية إلا رمز اسم صالح (أو قائمة مفصولة بمسافات من رموز الأسماء هذه)، ولكنها لا تقتصر على معرف فريد داخل المستند؛ قد يحمل هذا الاسم دلالات تكميلية وتعتمد على التطبيق وقد يتطلب قيود تسمية إضافية، ولكن هذا خارج نطاق DTD؛
ENTITYأوENTITIES- لا يمكن أن تكون القيمة الفعالة للسمية إلا اسم كيان خارجي غير محلل (أو قائمة مفصولة بمسافات من هذه الأسماء)، والتي يجب أيضًا الإعلان عنها في إعلان نوع المستند؛ هذا النوع غير مدعوم في محللات HTML، ولكنه صالح في SGML و XML 1.0 أو 1.1 (بما في ذلك XHTML و SVG )؛
(value1|...)- لا يمكن أن تكون القيمة الفعالة للسمات إلا واحدة من القائمة المعددة (المحددة بين قوسين ومفصولة بحرف "
|") للقيم النصية، حيث يمكن تحديد كل قيمة في التعداد بين علامتي اقتباس'مفردة'أو"مزدوجة"إذا لم تكن رمز اسم بسيط؛ NOTATION (notation1|...)- لا يمكن أن تكون القيمة الفعالة للخاصية إلا واحدة من القائمة المعددة (المحددة بين قوسين ومفصولة بحرف "
|") لأسماء التدوين، حيث يجب أيضًا تعريف كل اسم تدوين في التعداد في تعريف نوع المستند؛ هذا النوع غير مدعوم في محللات HTML، ولكنه صالح في SGML و XML 1.0 أو 1.1 (بما في ذلك XHTML و SVG).
يمكن للقيمة الافتراضية أن تحدد ما إذا كان يجب أن تظهر السمة ( #REQUIRED) أم لا ( #IMPLIED)، أو ما إذا كانت لها قيمة ثابتة ( #FIXED)، أو القيمة التي يجب استخدامها كقيمة افتراضية ("...") في حالة حذف السمة المعطاة في علامة XML.
يتم تجاهل إعلانات قائمة السمات بواسطة محللات SGML و XML غير المدققة (في هذه الحالات يتم قبول أي سمة داخل جميع عناصر المستند الذي تم تحليله)، ولكن لا يزال يتم التحقق من صحة هذه الإعلانات من حيث الشكل والصلاحية.
إعلانات الكيانات
الكيان يشبه الماكرو . يُعيّن تعريف الكيان قيمةً له تُحفظ في جميع أنحاء المستند. ومن الاستخدامات الشائعة له استخدام اسمٍ أكثر وضوحًا من مرجعٍ رقميٍّ لحرفٍ غير مألوف. [ 6 ] تُساعد الكيانات على تحسين سهولة قراءة نص XML. وبشكلٍ عام، يوجد نوعان: داخلي وخارجي.
- تربط الكيانات الداخلية (المحللة) اسمًا بأي محتوى نصي مُحدد في تعريفها (والذي قد يكون ضمن المجموعة الفرعية الداخلية أو الخارجية من تعريف نوع المستند المُعلن عنه في المستند). عند مصادفة مرجع كيان مُسمى في بقية المستند (بما في ذلك بقية تعريف نوع المستند)، وإذا كان اسم هذا الكيان قد تم تعريفه فعليًا ككيان مُحلل، يتم استبدال المرجع نفسه فورًا بالمحتوى النصي المُحدد في الكيان المُحلل، ويستمر التحليل ضمن هذا النص البديل.
- تُشبه كيانات الأحرف المُسماة المُعرّفة مُسبقًا الكيانات الداخلية، إلا أن خمسة منها تُعامل معاملة خاصة في جميع مُحللات SGML وHTML وXML. تختلف هذه الكيانات قليلًا عن الكيانات المُحللة العادية، لأنه عند مُصادفة مرجع لكيان حرف مُسمى في المستند، يُستبدل المرجع فورًا بمحتوى الحرف المُعرّف في الكيان، لكن يستمر التحليل بعد نص الاستبدال، الذي يُدرج حرفيًا في الرمز المميز المُحلل حاليًا (إذا كان هذا الحرف مسموحًا به في القيمة النصية لهذا الرمز المميز). يسمح هذا بتجاوز بعض الأحرف الضرورية لبنية HTML أو XML الأساسية من دورها النحوي الخاص (لا سيما "&" المحجوز لمراجع الكيانات البادئة، و"<" أو ">" اللذان يُحددان علامات الترميز، وعلامات الاقتباس المزدوجة أو المفردة التي تُحدد قيم السمات وتعريفات الكيانات). تتضمن كيانات الأحرف المحددة مسبقًا أيضًا مراجع الأحرف الرقمية التي يتم التعامل معها بنفس الطريقة ويمكن استخدامها أيضًا للهروب من الأحرف التي تمثلها، أو لتجاوز القيود في مجموعة الأحرف التي يدعمها ترميز المستند.
- في الملفات التعريفية الأساسية لـ SGML أو في مستندات HTML، لا يمكن الإعلان عن الكيانات الداخلية (لأن مجموعات DTD الخارجية لا يتم استردادها، ومجموعات DTD الداخلية غير مدعومة في هذه الملفات التعريفية الأساسية).
- بدلاً من ذلك، تحدد معايير HTML مسبقًا مجموعة كبيرة من عدة مئات من كيانات الأحرف المسماة، والتي لا يزال من الممكن التعامل معها ككيانات محللة قياسية محددة في DTD المستخدم بواسطة المحلل.
- تشير الكيانات الخارجية إلى كائنات التخزين الخارجية. يتم تعريفها باسم فريد في المستند، وتُحدد بمعرف عام (FPI) و/أو معرف نظام (يُفسر على أنه URI ) يُحدد مصدر محتواها. وهي موجودة في الواقع بنوعين:
- الكيانات الخارجية المحللة (التي يتم تعريفها في أغلب الأحيان بمعرف النظام الذي يشير إلى URI لمحتواها) والتي لا ترتبط في تعريفها بتعليق مسمى، وفي هذه الحالة تقوم محللات XML أو SGML للتحقق من الصحة باسترداد محتوياتها وتحليلها كما لو تم تعريفها ككيانات داخلية (الكيان الخارجي الذي يحتوي على نص الاستبدال الفعال الخاص بها)؛
- الكيانات الخارجية غير المحللة التي يتم تعريفها وربطها باسم تعليق توضيحي، وفي هذه الحالة يتم التعامل معها كمراجع مبهمة ويتم الإشارة إليها على هذا النحو للتطبيق باستخدام محلل SGML أو XML: يتم ترك تفسيرها واسترجاعها وتحليلها للتطبيق، وفقًا لأنواع التعليقات التوضيحية التي يدعمها (انظر القسم التالي حول التعليقات التوضيحية وللحصول على أمثلة على الكيانات الخارجية غير المحللة).
- لا يتم دعم الكيانات الخارجية في الملفات التعريفية الأساسية لـ SGML أو في مستندات HTML، ولكنها صالحة في التطبيقات الكاملة لـ SGML وفي XML 1.0 أو 1.1 (بما في ذلك XHTML و SVG، حتى لو لم تكن هناك حاجة ماسة إليها في أنواع المستندات هذه).
مثال على تعريفات الكيانات الداخلية (هنا في مجموعة فرعية داخلية من DTD لمستند SGML) هو:
<!DOCTYPE sgml [ <!ELEMENT sgml ANY > <!ENTITY % std "standard SGML" > <!ENTITY % signature " — &author;.” > <!ENTITY % question "Why could’t I publish my books directly in %std;?" > <!ENTITY % author "William Shakespeare" > ]><sgml> &question;&signature; </sgml>يمكن تعريف الكيانات الداخلية بأي ترتيب، طالما لم تتم الإشارة إليها وتحليلها في تعريف نوع المستند (DTD) أو في متن المستند، وفقًا لترتيب تحليلها: من الصحيح تضمين مرجع إلى كيان لم يُعرَّف بعد ضمن محتوى كيان مُحلَّل، ولكن من غير الصحيح تضمين أي مرجع لكيان مُسمّى في أي مكان آخر قبل تعريف هذا الكيان بالكامل، بما في ذلك جميع الكيانات الداخلية الأخرى المشار إليها في محتواه المُعرَّف (يمنع هذا أيضًا التعريفات الدائرية أو المتكررة للكيانات الداخلية). يتم تحليل هذا المستند كما لو كان:
<!DOCTYPE sgml [ <!ELEMENT sgml ANY > <!ENTITY % std "standard SGML" > <!ENTITY % signature " — &author;." > <!ENTITY % question "Why could not I publish my books directly in standard SGML?" > <!ENTITY % author "William Shakespeare" > ]><sgml> لماذا لا أستطيع نشر كتبي مباشرةً بصيغة SGML القياسية ؟ — وليم شكسبير . </sgml>لا يتم استبدال الإشارة إلى الكيان الداخلي "author" في نص الاستبدال الخاص بالكيان الداخلي "signature". بدلاً من ذلك، يتم استبدالها فقط عند تحليل مرجع الكيان "signature" ضمن محتوى عنصر "sgml"، ولكن فقط بواسطة المحللات المُدققة (لا تستبدل المحللات غير المُدققة مراجع الكيانات التي تظهر ضمن محتويات العنصر أو ضمن قيم السمات، في متن المستند).
يُمكن تحقيق ذلك لأن نص الاستبدال المُحدد في تعريفات الكيانات الداخلية يسمح بالتمييز بين مراجع كيانات المعلمات (التي تُعرَض بواسطة الرمز "%" ويُطبَّق استبدالها على محتويات DTD المُحلَّلة) ومراجع الكيانات العامة (التي تُعرَض بواسطة الرمز "&" ويتأخر استبدالها حتى يتم تحليلها والتحقق من صحتها بشكل كامل). يفقد الرمز "%" المُستخدم لإدخال مراجع كيانات المعلمات في DTD دوره الخاص خارج DTD، ويُصبح رمزًا حرفيًا.
ومع ذلك، يتم استبدال الإشارات إلى كيانات الأحرف المحددة مسبقًا أينما وردت، دون الحاجة إلى محلل للتحقق (يتم إدخالها فقط بواسطة الحرف "&").
إعلانات الترميز
تُستخدم الرموز في لغتي SGML وXML. وهي توفر مرجعًا كاملاً للكيانات الخارجية غير المُحللة، والتي يُترك تفسيرها للتطبيق (الذي يُفسرها مباشرةً أو يسترجع الكيان الخارجي بنفسه)، وذلك من خلال إسناد اسم بسيط لها، يُمكن استخدامه في متن المستند. على سبيل المثال، يُمكن استخدام الرموز للإشارة إلى بيانات غير XML في مستند XML 1.1. على سبيل المثال، لشرح صور SVG لربطها بمُعالج عرض مُحدد.
<!NOTATION type-image-svg SYSTEM "image/svg" >يُحدد هذا نوع الوسائط للصور الخارجية من هذا النوع، ويربطه باسم تدوين "type-image-svg". ومع ذلك، عادةً ما تتبع أسماء التدوينات اصطلاح تسمية خاصًا بالتطبيق الذي يُنشئ التدوين أو يستخدمه: تُفسر التدوينات على أنها بيانات وصفية إضافية يكون محتواها الفعلي كيانًا خارجيًا، إما مُعرّف إطار عمل عام (PUBLIC FPI) مُسجل في الفهارس التي تستخدمها مُحللات XML أو SGML، أو مُعرّف موارد موحد (URI) خاص بالنظام، والذي يعتمد تفسيره على التطبيق (هنا نوع MIME، يُفسر كمُعرّف موارد موحد نسبي، ولكنه قد يكون مُعرّف موارد موحد مطلقًا لمُعالج عرض مُحدد، أو مُعرّف URN يُشير إلى مُعرّف كائن خاص بنظام التشغيل مثل UUID).
يجب أن يكون اسم الترميز المُعلن عنه فريدًا ضمن جميع تعريفات أنواع المستندات، أي في المجموعة الفرعية الخارجية وكذلك المجموعة الفرعية الداخلية، على الأقل من أجل التوافق مع XML. [ 7 ] [ 8 ]
يمكن ربط الرموز بالكيانات الخارجية غير المُحللة المُضمنة في نص مستند SGML أو XML. يُحدد المعامل PUBLIC`or` SYSTEMلهذه الكيانات الخارجية مُعرّف FPI و/أو URI حيث توجد البيانات غير المُحللة للكيان الخارجي، بينما NDATAيُحدد المعامل `additional` لهذه الكيانات المُعرّفة الرمز الإضافي (أي نوع MIME في هذه الحالة). على سبيل المثال:
<!DOCTYPE sgml [ <!ELEMENT sgml ( img )* ><!ELEMENT img EMPTY > <!ATTLIST img data ENTITY #IMPLIED ><!ENTITY example1SVG SYSTEM "example1.svg" NDATA example1SVG-rdf > <!NOTATION example1SVG-rdf SYSTEM "example1.svg.rdf" > ]><sgml> <img data= "example1SVG" /> </sgml>في متن مستند SGML، لا يتم استبدال هذه الكيانات الخارجية المشار إليها (التي يتم تحديد اسمها بين "&" و ";") مثل الكيانات المسماة المعتادة (المحددة بقيمة CDATA)، ولكن يتم تركها كرموز مميزة غير محللة يمكن استخدامها إما كقيمة لسمة عنصر (كما هو موضح أعلاه) أو داخل محتويات العنصر، بشرط أن يسمح DTD بهذه الكيانات الخارجية في نوع المحتوى المعلن للعناصر أو في النوع المعلن للسمات (هنا نوع ENTITYالسمة data)، أو أن محلل SGML لا يتحقق من صحة المحتوى.
يمكن أيضًا ربط الرموز مباشرةً بالعناصر كبيانات وصفية إضافية، دون ربطها بكيان خارجي آخر، وذلك بإعطاء أسمائها كقيم محتملة لبعض السمات الإضافية (المُعلنة أيضًا في تعريف نوع المستند ضمن تعريف العنصر). على سبيل المثال:<!ATTLIST...>
<!DOCTYPE sgml [ <!ELEMENT sgml ( img )* > <!-- لا يمكن تعيين قيمة السمة "type" الاختيارية إلا بهذه الصيغة. --> <!ATTLIST sgml type NOTATION ( type-vendor-specific ) #IMPLIED ><!ELEMENT img ANY > <!-- المحتوى الاختياري لا يمكن تحليله إلا كبيانات SGML أو XML --> <!-- يجب أن تكون قيمة السمة "title" الاختيارية قابلة للتحليل كنص. يتم تعيين قيمة السمة "data" الاختيارية إلى كيان خارجي غير مُحلل. يمكن أن تكون قيمة السمة "type" الاختيارية واحدة فقط من الصيغتين التاليتين. --> <!ATTLIST img title CDATA #IMPLIED data ENTITY #IMPLIED type NOTATION ( type-image-svg | type-image-gif ) #IMPLIED ><!-- تشير الرموز إلى كيانات خارجية ويمكن تحديدها في سمات "type" أعلاه، أو يجب الإشارة إليها بواسطة أي كيانات خارجية مُعرَّفة لا يمكن تحليلها. --> <!NOTATION type-image-svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > <!NOTATION type-image-gif PUBLIC "image/gif" > <!NOTATION type-vendor-specific PUBLIC "application/VND.specific+sgml" ><!ENTITY example1SVGTitle "عنوان example1.svg" > <!-- كيان داخلي مُحلل --> <!ENTITY example1SVG SYSTEM "example1.svg" > <!-- كيان خارجي مُحلل --> <!ENTITY example1GIFTitle "عنوان example1.gif" > <!-- كيان داخلي مُحلل --> <!ENTITY example1GIF SYSTEM "example1.gif" NDATA type-image-gif > <!-- كيان خارجي غير مُحلل --> ]><sgml type= "type-vendor-specific" > <!-- يمكن تحليل صورة SVG كنص SGML أو XML صالح --> <img title= "&example1SVGTitle;" type= "type-image-svg" > &example1SVG; </img><!-- يمكن الإشارة إليه أيضًا ككيان خارجي غير مُحلل --> <img title= "&example1SVGTitle;" data= "example1SVG" /><!-- صورة GIF غير قابلة للتحليل ولا يمكن الرجوع إليها إلا ككيان خارجي --> <img title= "&example1GIFTitle;" data= "example1GIF" /> </sgml>يوضح المثال أعلاه ترميزًا باسم "type-image-svg" يشير إلى مُعرّف FPI العام القياسي ومُعرّف النظام (URI القياسي) لمستند SVG 1.1، بدلًا من تحديد مُعرّف النظام فقط كما في المثال الأول (والذي كان URI نسبيًا يُفسَّر محليًا كنوع MIME). يُشار إلى هذا الترميز مباشرةً ضمن السمة "type" غير المُحلَّلة لعنصر "img"، ولكن لا يتم استرداد محتواها. كما يُعلن عن ترميز آخر لتطبيق خاص بمورِّد معين، لتعليق عنصر الجذر "sgml" في المستند. في كلتا الحالتين، يُستخدم الترميز المُعلن عنه مباشرةً في السمة "type" المُعلن عنها، والتي يُحدد محتواها في DTD باستخدام السمة "NOTATION" type (تُعلن هذه السمة "type" لعنصر "sgml"، وكذلك لعنصر "img").
ومع ذلك، فإن السمة "title" لعنصر "img" تحدد الكيان الداخلي "example1SVGTitle" الذي لا يحدد تعريفه أي تعليق توضيحي، لذلك يتم تحليله بواسطة المحللات المدققة ويكون نص استبدال الكيان هو "عنوان example1.svg".
يشير محتوى عنصر "img" إلى كيان خارجي آخر "example1SVG"، والذي لا يُعرّف تعريفه أيضًا أي ترميز، لذا يتم تحليله بواسطة محللات التحقق، ويتم تحديد نص استبدال الكيان بواسطة مُعرّف النظام المُعرّف "example1.svg" (والذي يُفسّر أيضًا كمعرّف موارد موحد نسبي). المحتوى الفعلي لعنصر "img" هو محتوى هذا المورد الخارجي الثاني. يكمن الاختلاف مع صورة GIF في أن صورة SVG تُحلل داخل مستند SGML، وفقًا للتعريفات في DTD، بينما تُشار إلى صورة GIF ككائن خارجي مُبهم (غير قابل للتحليل باستخدام SGML) عبر سمة "data" الخاصة بها (التي نوع قيمتها كيان مُبهم).
لا يمكن تحديد سوى اسم ترميز واحد في قيمة سمات الكيان (لا يدعم SGML أو XML 1.0 أو XML 1.1 أسماء ترميز متعددة في نفس الكيان الخارجي المُعلن عنه، لذا يلزم استخدام سمات منفصلة). مع ذلك، يمكن الإشارة إلى كيانات خارجية متعددة (في قائمة أسماء مفصولة بمسافات) في السمات المُعلنة من نوع الكيانات، حيث يُعلن عن كل كيان خارجي مُسمى بترميزه الخاص.
تعتبر الرموز مبهمة تمامًا بالنسبة لمحللات XML و SGML، لذلك لا يتم تمييزها حسب نوع الكيان الخارجي الذي قد تشير إليه (بالنسبة لهذه المحللات، فإن لها اسمًا فريدًا مرتبطًا بمعرف عام (FPI) و/أو معرف نظام (URI)).
تسمح بعض التطبيقات (وليس محللات XML أو SGML نفسها) بالإشارة إلى الرموز بشكل غير مباشر عن طريق تسميتها في "URN:''name''"قيمة سمة CDATA القياسية، في أي مكان يُمكن فيه تحديد معرّف موارد موحد (URI). مع ذلك، فإن هذا السلوك خاص بكل تطبيق، ويتطلب من التطبيق الاحتفاظ بفهرس لمعرّفات الموارد الموحدة المعروفة لتحويلها إلى الرموز التي تم تحليلها في محلل SGML أو XML قياسي. يتيح هذا الاستخدام تعريف الرموز فقط في تعريف نوع المستند (DTD) المخزن ككيان خارجي، والإشارة إليها فقط كمجموعة فرعية خارجية من المستندات، مما يسمح لهذه المستندات بالبقاء متوافقة مع محللات XML أو SGML التي لا تدعم الرموز بشكل مباشر.
لا تُستخدم الرموز في لغة HTML، أو في الملفات التعريفية الأساسية لـ XHTML و SVG، وذلك للأسباب التالية:
- تتم الإشارة إلى جميع الكيانات الخارجية المستخدمة بواسطة أنواع المستندات القياسية هذه بواسطة سمات بسيطة، معلنة بنوع CDATA في DTD القياسي الخاص بها (مثل سمة "href" لعنصر "a" الرابط، أو سمة "src" لعنصر "img" الصورة، والتي يتم تفسير قيمها على أنها URI، دون الحاجة إلى أي كتالوج من المعرفات العامة، أي FPI المعروف).
- تتم الإشارة إلى جميع الكيانات الخارجية الخاصة بالبيانات الوصفية الإضافية إما عن طريق:
- سمات إضافية (مثل النوع ، الذي يشير إلى نوع MIME للكيان الخارجي، أو سمة مجموعة الأحرف ، التي تشير إلى ترميزه)
- عناصر إضافية (مثل الرابط أو البيانات الوصفية في HTML و XHTML) ضمن سماتها الخاصة
- السمات الزائفة القياسية في XML و XHTML (مثل xml:lang أو xmlns و xmlns:* لتصريحات مساحة الاسم).
حتى عند التحقق من صحة محللات SGML أو XML 1.0 أو XML 1.1، لا تسترجع المحللات نفسها الكيانات الخارجية المشار إليها بواسطة FPI و/أو URI في التدوينات المُعلنة تلقائيًا. بدلاً من ذلك، تُزوّد هذه المحللات التطبيق بـ FPI و/أو URI المُحلل المرتبط بالتدوينات الموجودة في مستند SGML أو XML المُحلل، مع توفير قاموس يحتوي على جميع أسماء التدوينات المُعلنة في DTD. كما تتحقق هذه المحللات من تفرد تعريفات أسماء التدوينات، وتُبلغ عن خطأ في التحقق إذا استُخدمت بعض أسماء التدوينات في أي مكان في DTD أو في متن المستند دون إعلانها.
- إذا لم يتمكن التطبيق من استخدام أي ترميز (أو إذا كان FPI و/أو URI الخاص به غير معروف أو غير مدعوم في الكتالوج المحلي الخاص به)، فقد يتم تجاهل هذه الترميزات بصمت من قبل التطبيق أو قد يشير التطبيق إلى وجود خطأ.
- وإلا، فإن التطبيقات تقرر بنفسها كيفية تفسيرها، ثم ما إذا كان يجب استرداد الكيانات الخارجية ثم تحليلها بشكل منفصل.
- قد تشير التطبيقات بعد ذلك إلى وجود خطأ، إذا فشل هذا التفسير أو الاسترجاع أو التحليل المنفصل.
- لا ينبغي أن تمنع الرموز غير المعترف بها والتي قد تتسبب في قيام التطبيق بالإشارة إلى وجود خطأ تفسير المستند الذي تم التحقق من صحته باستخدامها.
تعريفات نوع المستند XML والتحقق من صحة المخطط
يُعدّ بناء جملة XML DTD أحد لغات مخطط XML العديدة . مع ذلك، لا تحلّ العديد من لغات المخطط محلّ XML DTD بشكل كامل. والجدير بالذكر أن XML DTD يسمح بتعريف الكيانات والرموز التي لا يوجد لها مكافئات مباشرة في XML بدون DTD (لأن الكيانات الداخلية والكيانات الخارجية القابلة للتحليل ليست جزءًا من لغات مخطط XML، ولأن الكيانات والرموز الخارجية الأخرى غير المُحللة لا يوجد لها مكافئات بسيطة في معظم لغات مخطط XML).
معظم لغات مخططات XML هي مجرد بدائل لتصريحات العناصر وقوائم السمات، مما يُتيح تحليل مستندات XML باستخدام محللات XML غير المُدققة (إذا كان الغرض الوحيد من مجموعة DTD الخارجية هو تعريف المخطط). إضافةً إلى ذلك، يجب تحليل مستندات هذه اللغات بشكل منفصل، لذا فإن التحقق من صحة مخطط مستندات XML في وضع مستقل تمامًا غير ممكن عمليًا باستخدام هذه اللغات: يبقى تعريف نوع المستند ضروريًا على الأقل لتحديد (باستخدام فهرس XML ) المخطط المستخدم في مستند XML المُحلل والذي يتم التحقق من صحته بلغة أخرى.
هناك اعتقاد خاطئ شائع مفاده أن محلل XML غير المدقق لا يحتاج إلى قراءة تعريفات نوع المستند، بينما في الواقع، لا يزال يتعين فحص تعريفات نوع المستند للتأكد من صحة بناء الجملة وصحة التعريفات، ولا يزال يتعين على المحلل تحليل جميع تعريفات الكيانات في المجموعة الفرعية الداخلية ، واستبدال النصوص البديلة للكيانات الداخلية التي تظهر في أي مكان في تعريف نوع المستند أو في نص المستند.
ومع ذلك، قد يختار المحلل غير المدقق عدم قراءة الكيانات الخارجية القابلة للتحليل (بما في ذلك المجموعة الفرعية الخارجية )، ولا يتعين عليه احترام قيود نموذج المحتوى المحددة في إعلانات العناصر وفي إعلانات قائمة السمات.
إذا كان مستند XML يعتمد على كيانات خارجية قابلة للتحليل (بما في ذلك المجموعة الفرعية الخارجية المحددة ، أو الكيانات الخارجية القابلة للتحليل المُعلنة في المجموعة الفرعية الداخلية )، فيجب أن يُؤكد ذلك standalone="no"في تعريف XML الخاص به . ويمكن تحديد DTD المُتحقق منه باستخدام كتالوجات XML لاسترداد المجموعة الفرعية الخارجية المحددة .
في المثال أدناه، تم تعريف مستند XML باستخدام standalone="no"لأنه يحتوي على مجموعة فرعية خارجية في تعريف نوع المستند الخاص به:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE people_list SYSTEM "example.dtd"> <people_list />إذا تضمن تعريف نوع مستند XML أي مُعرّف SYSTEM للمجموعة الفرعية الخارجية، فلا يمكن معالجته بشكل مستقل: يجب استرجاع URI، وإلا فقد توجد كيانات أحرف مُسماة غير معروفة، والتي قد يلزم تعريفها لتحليل بنية XML الفعالة بشكل صحيح في المجموعة الفرعية الداخلية أو في نص المستند (يتم عادةً تحليل بنية XML بعد استبدال جميع الكيانات المُسماة، باستثناء الكيانات الخمسة المُعرّفة مسبقًا في XML والتي يتم استبدالها ضمنيًا بعد تحليل مستند XML إلى رموز معجمية). أما إذا تضمن أي مُعرّف PUBLIC فقط، فيمكن معالجته بشكل مستقل، إذا كان مُعالج XML يعرف هذا المُعرّف PUBLIC في فهرسه المحلي، حيث يمكنه استرجاع كيان DTD المرتبط به.
مثال على مخطط XML DTD
قد يتكون مثال على تعريف نوع المستند (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العنصر على عنصر .namenameهو اسم عنصر صالح، وتحتوي نسخة من هذا العنصر على "بيانات الأحرف المحللة" (#PCDATA).birthdateهو اسم عنصر صالح، وتحتوي نسخة من هذا العنصر على بيانات أحرف تم تحليلها.genderهو اسم عنصر صالح، وتحتوي نسخة من هذا العنصر على بيانات أحرف تم تحليلها.socialsecuritynumberهو اسم عنصر صالح، وتحتوي نسخة من هذا العنصر على بيانات أحرف تم تحليلها.
فيما يلي مثال على ملف XML يستخدم هذا التعريف لنوع المستند (DTD) ويتوافق معه. يُشار إلى التعريف هنا كمجموعة فرعية خارجية، عبر مُحدد SYSTEM ومعرّف الموارد الموحد (URI). يفترض هذا المثال أنه يمكننا تحديد التعريف باستخدام مرجع URI النسبي "example.dtd"؛ يشير "people_list" بعد "!DOCTYPE" إلى أن الوسوم الجذرية، أو العنصر الأول المُعرّف في التعريف، يُسمى "people_list".
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE people_list SYSTEM "example.dtd"> <people_list> <person> <name> Fred Bloggs </name> <birthdate> 2008-11-27 </birthdate> <gender> Male </gender> </person> </people_list>يمكن عرض هذا في متصفح يدعم XML (مثل إنترنت إكسبلورر أو موزيلا فايرفوكس ) عن طريق لصق وحفظ مكون DTD المذكور أعلاه في ملف نصي باسم example.dtd ، وحفظ ملف XML في ملف نصي آخر باسم مختلف، ثم فتح ملف XML باستخدام المتصفح. يجب حفظ كلا الملفين في نفس المجلد. مع ذلك، لا تتحقق العديد من المتصفحات من مطابقة مستند XML لقواعد DTD، بل تكتفي بالتحقق من صحة DTD نحويًا. ولأسباب أمنية، قد تختار المتصفحات عدم قراءة DTD الخارجي.
يمكن أيضًا تضمين نفس تعريف نوع المستند (DTD) مباشرةً في مستند XML نفسه كمجموعة فرعية داخلية، وذلك عن طريق وضعه بين قوسين مربعين [square brackets] في تعريف نوع المستند، وفي هذه الحالة لم يعد المستند يعتمد على كيانات خارجية ويمكن معالجته في وضع مستقل:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE people_list [ <!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> <name> فريد بلوغز </name> <birthdate> 2008-11-27 </birthdate> <gender> ذكر </gender> </person> </people_list>البدائل
تتوفر بدائل لـ DTDs (لتحديد المخططات):
- حصل مخطط XML ، المعروف أيضًا باسم تعريف مخطط XML (XSD)، على توصية من اتحاد شبكة الويب العالمية (W3C) [ 9 ] ، وهو شائع الاستخدام في تطبيقات XML "الموجهة نحو البيانات" (أي المعاملات غير المتعلقة بالنشر) نظرًا لقوة نظام كتابة البيانات فيه وسهولة تحويله إلى تعريفات Java. وقد وجد معظم العاملين في مجال النشر أن التعقيد الإضافي لـ XSD لا يُحقق لهم أي فوائد ملموسة، لذا لا تزال تعريفات نوع المستند (DTD) أكثر شيوعًا في هذا المجال. يُذكر أن تعريف مخطط XML هو في حد ذاته مستند XML، بينما تعريف نوع المستند (DTD) ليس كذلك.
- RELAX NG ، وهو جزء من DSDL ، معيار دولي معتمد من ISO. [ 10 ] يتميز RELAX NG بقدرة تعبيرية أكبر من XSD، مع توفير بنية أبسط، إلا أن دعم البرامج التجارية له كان بطيئًا.
حماية
يمكن استخدام تعريف نوع المستند XML لإنشاء هجوم حجب الخدمة عن طريق تعريف كيانات متداخلة تتوسع بشكل كبير، أو عن طريق إرسال محلل XML إلى مورد خارجي لا يعود أبدًا. [ 11 ]
لهذا السبب، يوفر إطار عمل .NET خاصية تسمح بمنع أو تخطي تحليل DTD، [ 11 ] وترفض الإصدارات الحديثة من تطبيقات Microsoft Office ( Microsoft Office 2010 وما فوق) فتح ملفات XML التي تحتوي على تعريفات DTD.
انظر أيضاً
- JATS (مجموعة علامات المقالات الصحفية)
- الويب الدلالي
- مخطط XML (W3C)
- مقارنة لغات مخطط XML - مقارنة بلغات مخطط XML الأخرى.
مراجع
- ↑ "مقدمة إلى DTD" .
- ↑ "ISO/IEC 19757-9:2008 (مسحوب) - الجزء 9: تعريف مساحة الاسم ونوع البيانات في تعريفات نوع المستند (DTD)" . ISO . تم الاطلاع عليه بتاريخ 30-03-2026 .
- ↑ "doctypedecl" . لغة الترميز القابلة للتوسيع (XML) 1.1 . W3C.
- ↑ وات، أندرو هـ. (2002). سامز: تعلم لغة XML بنفسك في 10 دقائق . دار نشر سامز. رقم ISBN 9780672324710.
- ↑ إعلان قائمة السمات ، مواصفات لغة الترميز القابلة للتوسيع (XML) 1.1، W3C.
- ↑ "كيانات DTD" . برنامج تعليمي حول DTD . W3Schools.
- ↑ إعلانات الترميز ، مواصفات لغة الترميز القابلة للتوسيع (XML) 1.0، W3C.
- ↑ إعلانات الترميز ، مواصفات لغة الترميز القابلة للتوسيع (XML) 1.1، W3C.
- ↑ "مخطط XML الجزء 1: الهياكل (الطبعة الثانية)" . W3C. 2004. تم الاطلاع عليه بتاريخ 2022-01-02 .
- ↑ "ISO/IEC 19757-2:2008 - تكنولوجيا المعلومات - لغة تعريف مخطط المستند (DSDL) - الجزء 2: التحقق القائم على القواعد النحوية المنتظمة - RELAX NG" . ISO . تم الاطلاع عليه بتاريخ 17-05-2011 .
- 1 2 برايان سوليفان (نوفمبر 2009). "هجمات حجب الخدمة عبر XML والدفاعات ضدها" . مجلة MSDN . تم الاطلاع عليه بتاريخ 21 أكتوبر 2013 .
روابط خارجية
- SGML
- XML
