Hujjat turini aniqlash - Document type definition

A hujjat turini aniqlash (DTD) to'plamidir qo'shimcha deklaratsiyalar a ni belgilaydigan hujjat turi uchun SGML - oila belgilash tili (GML, SGML, XML, HTML ).

DTD XML hujjatning haqiqiy qurilish bloklarini belgilaydi. U tasdiqlangan elementlar va atributlar ro'yxati bilan hujjat tuzilishini belgilaydi. DTD-ni XML hujjat ichida yoki tashqi ma'lumotnoma sifatida e'lon qilish mumkin.[1]

XML ning pastki to'plamidan foydalanadi SGML DTD.

2009 yildan boshlab, yangi XML nom maydoni - bilish sxema tillari (kabi W3C XML sxemasi va ISO RELAX NG ) asosan almashtirilgan DTD-larga ega. DTD-larning nomlar maydonidan xabardor bo'lgan versiyasi ISO ning 9-qismi sifatida ishlab chiqilmoqda DSDL. DTD'lar maxsus nashr belgilariga muhtoj bo'lgan dasturlarda davom etadi, masalan XML va HTML belgilar uchun mos yozuvlar, ning qismi sifatida belgilangan katta to'plamlardan kelib chiqadi ISO SGML standarti harakat.

DTDlarni hujjatlar bilan bog'lash

DTD a yordamida XML yoki SGML hujjati bilan bog'langan hujjat turi deklaratsiyasi (DOCTYPE). DOCTYPE sintaktik qismda ko'rinadi doctypedecl XML hujjati boshlanishiga yaqin.[2] Deklaratsiya hujjatning havola qilingan DTD tomonidan belgilangan turdagi namunasi ekanligini tasdiqlaydi.

DOCTYPE ikki xil deklaratsiyani amalga oshiradi:

  • ixtiyoriy tashqi pastki qism
  • ixtiyoriy ichki qism.

Ichki ichki qismdagi deklaratsiyalar hujjatning o'zida DOCTYPE ning bir qismini tashkil qiladi. Tashqi ichki qismdagi deklaratsiyalar alohida matnli faylda joylashgan. Tashqi ichki qismga a orqali murojaat qilish mumkin ommaviy identifikator va / yoki a tizim identifikatori. Hujjatlarni o'qish uchun dasturlardan tashqi ichki qismni o'qish talab etilmasligi mumkin.

Ga ishora qiladigan har qanday haqiqiy SGML yoki XML hujjati tashqi pastki qism uning DTD-da yoki tanasi havolalarni o'z ichiga olgan ajratilgan tashqi mavjudotlar uning DTD-da e'lon qilingan (shu jumladan uning ichida e'lon qilinganlar) ichki qism), faqat qisman tahlil qilinishi mumkin, ammo uni to'liq tasdiqlash mumkin emas tasdiqlash SGML yoki XML tahlilchilarida mustaqil rejimi (bu shuni anglatadiki, ushbu tekshiruvchi tahlilchilar ushbu tashqi ob'ektlarni olishga urinishmaydi va ularning o'rnini bosuvchi matnga kirish mumkin emas).

Biroq, bunday hujjatlar hali ham to'liq tahlil qilinishi mumkin bo'lmagan-saytni tekshirishning mustaqil rejimi, agar u ushbu tashqi ob'ektlarni aniqlangan holda topa olmasa, xatoga yo'l qo'yadi ommaviy identifikator (FPI) yoki tizim identifikatori (URI) yoki kirish imkoni yo'q. (DTD da e'lon qilingan eslatmalar tashqi sub'ektlarga ham tegishli, ammo bu taqqoslanmagan shaxslarga hujjatlarni tasdiqlash uchun kerak emas mustaqil ushbu tahlilchilarning rejimi: SGML yoki XML ajralmasidan foydalangan holda, barcha tashqi ob'ektlarni tasdiqlash dasturga qoldirilgan). Tasdiqlanmagan tahlilchilar mumkin oxir-oqibat ushbu tashqi mavjudotlarni bo'lmagan- mustaqil rejim (DTD-ni faqat ularning e'lon qilingan ajraladigan shaxslarini hal qilish uchun qisman talqin qilish orqali), lekin ushbu hujjatlar tarkibini tasdiqlamaydi.

Misollar

DOCTYPE ning quyidagi misolida umumiy va tizim identifikatorlari mavjud:

 HTML IJTIMOIY "- // W3C // DTD XHTML 1.0 O'tish // EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Barcha HTML 4.01 hujjatlari uchta SGML DTD-dan biriga mos keladi. Ushbu DTDlarning umumiy identifikatorlari doimiy va quyidagilar:

Ushbu DTDlarning tizim identifikatorlari, agar ular DOCTYPE-da mavjud bo'lsa URI ma'lumotnomalari. Tizim identifikatori odatda aniqlanadigan joyda ma'lum bir deklaratsiya to'plamiga ishora qiladi. SGML umumiy identifikatorlarni tizim identifikatorlariga xaritalashga imkon beradi kataloglar ixtiyoriy ravishda hujjat tomonidan ishlatiladigan URI echimlari uchun mavjud bo'lgan tahlil qilish dasturiy ta'minot.

Ushbu DOCTYPE faqat paydo bo'lishi mumkin keyin ixtiyoriy XML deklaratsiyasi, va hujjat sintaksisining XML ga mos keladigan bo'lsa, hujjat tanasidan oldin. Bunga quyidagilar kiradi XHTML hujjatlar:

<?xml version="1.0" encoding="utf-8"?>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><!-- the XHTML document body starts here--> xmlns ="http://www.w3.org/1999/xhtml"> ...</html>

Tashqi ichki to'plamdan keyin qo'shimcha ichki to'plam ham taqdim etilishi mumkin:

<?xml version="1.0" encoding="utf-8"?>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [  <!-- an internal subset can be embedded here -->]><!-- the XHTML document body starts here--> xmlns ="http://www.w3.org/1999/xhtml"> ...</html>

Shu bilan bir qatorda, faqat ichki ichki qism taqdim etilishi mumkin:

<?xml version="1.0" encoding="utf-8"?>  <!-- an internal subset can be embedded here -->]><!-- the XHTML document body starts here--> xmlns ="http://www.w3.org/1999/xhtml"> ...</html>

Va nihoyat, hujjat turining ta'rifi hech qanday kichik to'plamni o'z ichiga olmaydi; u holda, u hujjatning bitta yuqori darajadagi elementiga ega ekanligini belgilaydi (bu barcha amaldagi XML va HTML hujjatlari uchun yopiq talab, lekin hujjat qismlari yoki yuqori darajadagi elementlari boshqacha bo'lishi mumkin bo'lgan barcha SGML hujjatlari uchun emas. nazarda tutilgan ildiz elementidan) va u ildiz elementining turini ko'rsatadi:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html><!-- the XHTML document body starts here--> xmlns ="http://www.w3.org/1999/xhtml"> ...</html>

Belgilangan deklaratsiyalar

DTDlar elementlar va atributlar ro'yxati deklaratsiyalari orqali hujjatlar sinfining tuzilishini tavsiflaydi. Element deklaratsiyalari hujjat ichidagi ruxsat berilgan elementlar to'plamini nomlaydi va e'lon qilingan elementlar va belgilar ma'lumotlari har bir element tarkibida bo'lishi yoki yo'qligini belgilaydi. Xususiyatlar ro'yxati deklaratsiyalari har bir e'lon qilingan element uchun atributlarning ruxsat etilgan to'plamini, shu jumladan turi har bir atribut qiymatining qiymati, agar aniq qiymatlar to'plami bo'lmasa.

DTD markirovka deklaratsiyalari qaysi birini e'lon qiladi element turlari, atributlar ro'yxatlari, sub'ektlar va yozuvlar XML hujjatlarining tegishli klassi tarkibida ruxsat etiladi.[3]

Element turi deklaratsiyalari

Element turi deklaratsiyasi elementni va uning mumkin bo'lgan tarkibini belgilaydi. Yaroqli XML hujjatida faqat DTD-da aniqlangan elementlar mavjud.

Turli xil kalit so'zlar va belgilar element tarkibini belgilaydi:

  • Bo'sh belgilangan element tarkib topishiga yo'l qo'ymasligini belgilash uchun, ya'ni unda biron bir element, hatto matn elementlari ham bo'lmaydi (agar bo'sh joylar bo'lsa, ularga e'tibor berilmaydi);
  • HAMMA belgilangan element har qanday tarkibga cheklovlarsiz, ya'ni har qanday son (shu jumladan yo'q) va bolalar elementlari turiga (shu jumladan, matn elementlariga) ega bo'lishini ko'rsatishi uchun;
  • yoki belgilangan element tarkibida to'g'ridan-to'g'ri bolalar sifatida ruxsat berilgan yagona elementlarni ko'rsatadigan ifoda; ushbu tarkib quyidagilar bo'lishi mumkin:
    • a aralash tarkibbu shuni anglatadiki, tarkib tarkibida kamida bitta matn elementi va nol yoki undan ortiq nomlangan element bo'lishi mumkin, ammo ularning tartibini va paydo bo'lish sonini cheklab bo'lmaydi; bu bo'lishi mumkin:
      • ( #PCDATA ): tarixiy ma'no belgi ma'lumotlarini tahlil qilish, bu shuni anglatadiki, tarkibida faqat bitta matn elementiga ruxsat beriladi (hech qanday miqdoriy ko'rsatkichga yo'l qo'yilmaydi);
      • ( #PCDATA | ''element ism'' | ... )*: cheklangan tanlov (qavslar orasidagi maxsus ro'yxatda va ajratilgan "|"quvur belgilari va kerakli bilan tugatilgan"*"miqdoriy ko'rsatkich" ikki yoki undan ortiq bolalar elementlari (faqat matn elementlari yoki ko'rsatilgan nomlangan elementlarni o'z ichiga olgan holda) tarkibidagi istalgan tartibda va tartibda ishlatilishi mumkin.
    • an element tarkibi, bu tarkib tarkibidagi bolalar elementlarida hech qanday matn elementlari bo'lmasligi kerakligini anglatadi (keyin bolalar elementlari o'rtasida kodlangan barcha bo'sh joylar, xuddi sharhlar kabi hisobga olinmaydi). Bunday element tarkibi quyidagicha ko'rsatilgan tarkibidagi zarracha variantida Backus-Naur shakli terminal belgilari va element nomlari terminal bo'lmagan belgilar sifatida. Element tarkibi quyidagilardan iborat:
      • a tarkibidagi zarracha yoki DTD da e'lon qilingan element nomi yoki a bo'lishi mumkin ketma-ketlik ro'yxati yoki tanlov ro'yxati. Undan keyin ixtiyoriy bo'lishi mumkin miqdoriy.
        • a ketma-ketlik ro'yxati tartiblangan ro'yxatni bildiradi (qavslar orasida ko'rsatilgan va "bilan ajratilgan","vergul belgisi) bir yoki bir nechta tarkibidagi zarralar: hammasi tarkibidagi zarralar belgilangan element tarkibida, belgilangan pozitsiyada va nisbiy tartibda ketma-ket to'g'ridan-to'g'ri bolalar sifatida paydo bo'lishi kerak;
        • a tanlov ro'yxati o'zaro eksklyuziv ro'yxatni bildiradi (qavslar orasida ko'rsatilgan va "bilan ajratilgan"|"quvur belgisi) ikki yoki undan ortiq tarkibidagi zarralar: ulardan faqat bittasi tarkibidagi zarralar aniqlangan element tarkibida xuddi shu holatda paydo bo'lishi mumkin.
      • A miqdoriy element tarkibida ushbu pozitsiyaning ketma-ket paydo bo'lish sonini cheklash uchun qo'llaniladigan belgilangan elementni darhol ta'qib qiladigan bitta belgi; u ham bo'lishi mumkin:
        • + buyumning bir yoki bir nechta ko'rinishi bo'lishi kerakligini belgilash uchun - har bir hodisaning samarali tarkibi har xil bo'lishi mumkin;
        • * har qanday raqamga (nol yoki undan ko'p) ruxsat berilganligini ko'rsatish uchun - element ixtiyoriy va har bir hodisaning samarali tarkibi boshqacha bo'lishi mumkin;
        • ? bir martadan ortiq bo'lmagan bo'lishi kerakligini belgilash uchun - element ixtiyoriy;
        • Agar o'lchovchi bo'lmasa, ko'rsatilgan element element tarkibidagi belgilangan holatda to'liq bir marta sodir bo'lishi kerak.

Masalan:

 HTML (bosh, tanasi)> p (#PCDATA | p | ul | dl | stol | h1|h2|h3)*>

Element turi deklaratsiyalari tomonidan e'tiborga olinmaydi yaroqsiz SGML va XML tahlilchilari (bu holda har qanday elementlar istalgan tartibda va tahlil qilingan hujjatdagi istalgan sonda qabul qilinadi), ammo baribir ushbu deklaratsiyalar shakli va amal qilish muddati uchun tekshiriladi.

Xususiyatlar ro'yxati deklaratsiyalari

Atributlar ro'yxati berilgan element turi uchun ushbu turga bog'liq bo'lgan barcha atributlar ro'yxatini belgilaydi. Har bir mumkin bo'lgan atribut uchun quyidagilar mavjud:

  • atributning e'lon qilingan nomi,
  • uning ma'lumot turi (yoki uning mumkin bo'lgan qiymatlarini sanash),
  • va uning asl qiymati.[4]

Masalan:

 img   src    CDATA          # TALAB   id     ID             # MAVJUD   saralash   CDATA          #FIXED "rost"   chop etish  (ha | yo'q) "ha">

SGML va XML tomonidan qo'llab-quvvatlanadigan ba'zi bir atribut turlari:

CDATA
bu tip degani belgilar ma'lumotlari va atributning samarali qiymati har qanday matn qiymati bo'lishi mumkinligini bildiradi, agar atribut aniq belgilangan bo'lmasa (DTD-dagi izohlar qo'shimcha ravishda qabul qilingan qiymatlarni hujjatlashtirishi mumkin, ammo DTD sintaksisi bunday aniq spetsifikatsiyaga yo'l qo'ymaydi);
ID
atributning samarali qiymati haqiqiy identifikator bo'lishi kerak va ushbu identifikator (shu jumladan hujjat sifatida) yordamida havolalar maqsadini aniqlash va joriy elementga bog'lash uchun ishlatiladi. fragment identifikatorlari URI oxirida "#" belgisidan keyin ko'rsatilishi mumkin); agar bitta hujjatdagi alohida elementlar bir xil identifikatorni aniqlasa, bu xato; o'ziga xoslikning cheklanishi, shuningdek identifikatorning o'zi boshqa semantikaga ega emasligini va identifikatorlar dasturlarda shaffof emas deb hisoblanishini nazarda tutadi; XML standart soxta atributni oldindan belgilaydi "xml: id"DTD-da hech qanday deklaratsiyani talab qilmasdan, ushbu turdagi bilan, shuning uchun o'ziga xoslik cheklovi ushbu belgilangan identifikatorlarga ular XML hujjatining istalgan joyida ko'rsatilganda ham tegishli.
IDREF yoki IDREFS
atributning samarali qiymati faqat haqiqiy identifikator bo'lishi mumkin (yoki bunday identifikatorlarning bo'shliq bilan ajratilgan ro'yxati) va hujjatda belgilangan noyob elementga turi bilan e'lon qilingan atribut bilan murojaat qilish kerak ID DTD-da (yoki XML hujjatida pseudo-attribute bilan aniqlangan noyob element "xml: id") va uning samarali qiymati bir xil identifikatorga ega;
NMTOKEN yoki NMTOKENS
atributning samarali qiymati faqat haqiqiy ism belgisi (yoki bunday nom belgilarining intervalgacha ajratilgan ro'yxati) bo'lishi mumkin, ammo u hujjat ichida yagona identifikator bilan cheklanmagan; ushbu nom qo'shimcha va dasturga bog'liq semantikani o'z ichiga olishi va qo'shimcha nomlash cheklovlarini talab qilishi mumkin, ammo bu DTD doirasidan tashqarida;
TASHKILOT yoki Yuridik shaxslar
atributning samarali qiymati faqat taqsimlanmagan tashqi tashkilotning nomi (yoki bo'shliq bilan ajratilgan bunday nomlarning ro'yxati) bo'lishi mumkin, ular hujjat turi deklaratsiyasida ham e'lon qilinishi kerak; bu tur HTML-tahlilchilarda qo'llab-quvvatlanmaydi, lekin SGML va XML 1.0 yoki 1.1-da (XHTML va SVG-ni o'z ichiga olgan holda) amal qiladi;
(''qiymati1''|...)
atributning samarali qiymati faqat sanab o'tilgan ro'yxatdan biri bo'lishi mumkin (qavs orasida ko'rsatilgan va "bilan ajratilgan"|"quvur belgisi) matnli qiymatlar, bu erda sanab o'tilgan har bir qiymat o'rtasida belgilanishi mumkin 'bitta' yoki "ikki baravar" tirnoq belgilari, agar bu oddiy ism belgisi bo'lmasa;
QAYD (''notatsiya1''|...)
atributning samarali qiymati faqat sanab o'tilgan ro'yxatning har qanday biri bo'lishi mumkin (qavslar orasida ko'rsatilgan va "bilan ajratilgan"|"quvur belgisi) yozuvlar nomlari, bu erda sanab o'tilgan har bir belgi nomi ham hujjat turi deklaratsiyasida e'lon qilinishi kerak; bu tur HTML tahlilchilarida qo'llab-quvvatlanmaydi, lekin SGML va XML 1.0 yoki 1.1 (XHTML va SVG-ni o'z ichiga olgan holda) .

Odatiy qiymat atribut bo'lishi kerakligini aniqlay oladi (# TALAB) yoki yo'qmi (# MAVJUD) yoki u belgilangan qiymatga ega (#FIXED), yoki berilgan atribut XML yorlig'ida qoldirilgan bo'lsa, qaysi qiymat standart qiymat sifatida ishlatilishi kerak ("...").

Xususiyatlar ro'yxati deklaratsiyalari tomonidan e'tiborga olinmaydi yaroqsiz SGML va XML tahlilchilari (bu holda har qanday atribut tahlil qilingan hujjatning barcha elementlarida qabul qilinadi), ammo bu deklaratsiyalar hali ham yaxshi shakllanganligi va haqiqiyligi uchun tekshiriladi.

Tashkilot deklaratsiyalari

Tashkilot a ga o'xshaydi so'l. Korxona deklaratsiyasi unga hujjat davomida saqlanadigan qiymatni beradi. Odatiy foydalanish noma'lum belgi uchun raqamli belgilarga qaraganda taniqli ismga ega bo'lishdir.[5] Tashkilotlar XML matnining tushunarli bo'lishini yaxshilashga yordam beradi. Umuman olganda, ikki xil: ichki va tashqi.

  • Ichki (tahlil qilingan) shaxslar o'zlarining deklaratsiyasida belgilangan har qanday o'zboshimchalik bilan matnli tarkib bilan ismni bog'lashmoqda (ular ichida bo'lishi mumkin ichki qism yoki ichida tashqi pastki qism hujjatda e'lon qilingan DTD ning). Keyinchalik hujjatning qolgan qismida (shu jumladan, DTDning qolgan qismida) nomlangan shaxsga tegishli ma'lumotlarga duch kelganda va agar ushbu shaxs nomi samarali ravishda ajralgan shaxs sifatida aniqlangan bo'lsa, ma'lumotnomaning o'zi darhol belgilangan matnli tarkib bilan almashtiriladi ajratilgan shaxs, va ajralish ushbu almashtirish matnida davom etadi.
    • Oldindan belgilangan nomlangan belgilar mavjudotlari ichki narsalarga o'xshashdir: ulardan 5 tasi shu bilan birga barcha SGML, HTML va XML tahlilchilarida ko'rib chiqiladi. Ushbu ob'ektlar odatdagi tahlil qilingan narsalardan bir oz farq qiladi, chunki hujjatda nomlangan belgilar mavjudligiga duch kelganda, mos yozuvlar darhol ob'ektda belgilangan belgilar tarkibi bilan almashtiriladi, ammo ajralish davom etadi keyin zudlik bilan hozirda ajratilgan belgida so'zma-so'z kiritiladigan almashtirish matni (agar bunday belgiga ushbu belgining matn qiymatida ruxsat berilsa). Bu HTML yoki XML asosiy sintaksisi uchun zarur bo'lgan ba'zi belgilarni o'zlarining maxsus sintaktik rollaridan qochib qutulishga imkon beradi (xususan, boshlang'ich sub'ektlar uchun ajratilgan "&", belgilash teglarini chegaralaydigan "<" yoki ">", va "ikkita" yoki "bitta" tirnoq belgilar, bu atributlar va shaxs ta'riflari qiymatlarini chegaralaydi). Belgilarning oldindan belgilab qo'yilgan ob'ektlariga, xuddi shu tarzda ishlov berilgan va ular ko'rsatgan belgilardan qochish uchun yoki hujjat kodlashi bilan qo'llab-quvvatlanadigan belgilar repertuaridagi cheklovlarni chetlab o'tish uchun ishlatilishi mumkin bo'lgan raqamli belgilar mos yozuvlar kiradi.
    • SGML uchun asosiy profillarda yoki HTML hujjatlarida ichki ob'ektlarni e'lon qilish mumkin emas (chunki tashqi DTD quyi to'plamlari olinmaydi va ichki DTD quyi to'plamlari ushbu asosiy profillarda qo'llab-quvvatlanmaydi).
    • Buning o'rniga, HTML standartlari bir necha yuz nomlangan belgilar mavjudotlarining katta to'plamini oldindan belgilaydi, ular hali ham ajraluvchi tomonidan ishlatiladigan DTD da aniqlangan standart tahlil qilingan ob'ektlar sifatida ko'rib chiqilishi mumkin.
  • Tashqi tashkilotlar tashqi saqlash ob'ektlariga murojaat qiling. Ular faqat hujjatdagi noyob nom bilan e'lon qilinadi va ommaviy identifikator (FPI) va / yoki tizim identifikatori ( URI ) ularning mazmuni manbai qaerda ekanligini aniqlash. Ular aslida ikkita variantda mavjud:
    • ajratilgan tashqi mavjudotlar (ko'pincha ularning tarkibidagi URI-ni ko'rsatadigan SYSTEM identifikatori bilan aniqlanadi) emas ularning ta'rifida nomlangan izoh bilan bog'langan, bu holda XML yoki SGML tahlilchilarining mazmuni olinadi va ularni ichki ob'ektlar deb e'lon qilinganidek tahlil qiladi (ularning samarali matnini o'z ichiga olgan tashqi ob'ekt);
    • taqqoslanmagan tashqi sub'ektlar annotatsiya nomi bilan belgilanadigan va bog'langan, bu holda ular shaffof bo'lmagan ma'lumotnomalar sifatida ko'rib chiqiladi va SGML yoki XML ajralmasidan foydalangan holda dasturga ishora qilinadi: ularni izohlash, qidirish va tahlil qilish dastur turiga ko'ra qoldiriladi. u qo'llab-quvvatlaydigan izohlar (izohlar haqidagi keyingi qismga va tashqi taqqoslanmagan shaxslar misollariga qarang).
    • Tashqi ob'ektlar SGML uchun asosiy profillarda yoki HTML hujjatlarida qo'llab-quvvatlanmaydi, lekin SGML-ning to'liq qo'llanilishida va XML 1.0 yoki 1.1-da (XHTML va SVG-ni o'z ichiga olgan holda, hatto ushbu hujjat turlarida qat'iyan kerak bo'lmasa ham) amal qiladi.

Ichki shaxs deklaratsiyasining namunasi (bu erda SGML hujjatining ichki DTD kichik to'plamida):

 sgml [   sgml HAMMA>   % std       "standart SGML">   % imzo "& # x2014; & muallif;.">   % savol  "Nega men kitoblarimni% std ;? to'g'ridan-to'g'ri nashr qila olmadim?">   % muallif    "Uilyam Shekspir">]>
<sgml>& savol; & imzo;</sgml>

Ichki sub'ektlar har qanday tartibda belgilanishi mumkin, agar ular DTD-da yoki hujjatning asosiy qismida havola qilinmasa va tahlil qilinmasa, ularni tahlil qilish tartibida: tarkibida hali aniqlanmagan ob'ektga havolani kiritish maqsadga muvofiqdir. ajratilgan ob'ektga tegishli, ammo ushbu ob'ekt to'liq aniqlanmaguncha, boshqa biron bir nomlangan ob'ektga tegishli ma'lumotni, shu jumladan uning tarkibidagi havola qilingan barcha boshqa ichki sub'ektlarni qo'shib qo'yish yaroqsiz (bu ichki ob'ektlarning dairesel yoki rekursiv ta'riflarini oldini oladi). Ushbu hujjat quyidagicha tahlil qilinadi:

 sgml [   sgml HAMMA>   % std       "standart SGML">   % imzo "- & muallif ;.">   % savol  "Nega men kitoblarimni to'g'ridan-to'g'ri standart SGML-da nashr qila olmadim?">   % muallif    "Uilyam Shekspir">]>
<sgml>Nega men kitoblarimni to'g'ridan-to'g'ri standart SGML-da nashr etolmadim? - Uilyam Shekspir.</sgml>

"Muallif" ichki sub'ektiga havola "imzo" ichki sub'ektining o'rnini bosuvchi matnda almashtirilmaydi. Buning o'rniga, u faqat "imzo" varaqasi "sgml" elementi tarkibida tahlil qilinganda o'zgartiriladi, lekin faqat tekshiruvchilarni tekshirish orqali (tasdiqlanmagan tahlilchilar element tarkibidagi yoki atribut qiymatlari tarkibidagi vujudga keltiruvchi ma'lumotlarning o'rnini bosmaydi), hujjatning asosiy qismida.

Buning imkoni bor, chunki ichki mavjudot ta'riflarida ko'rsatilgan almashtirish matni ajratishga imkon beradi parametr sub'ektning ma'lumotnomalari (ular "%" belgisi bilan kiritilgan va ularning o'rnini ajratilgan DTD tarkibiga taalluqli) va umumiy yuridik shaxslarga tegishli ma'lumotnomalar ("&" belgisi bilan kiritilgan va ularning o'rnini bosish, ular samarali tahlil qilinmaguncha va tasdiqlangunga qadar). DTD-da parametrlar varaqalari ma'lumotlarini kiritish uchun "%" belgisi DTDdan tashqarida o'z maxsus rolini yo'qotadi va u tom ma'noda belgiga aylanadi.

Biroq, oldindan belgilab qo'yilgan raqamli belgilar ob'ektlariga havolalar, ular qaerda bo'lmasin, ularning o'rnini bosuvchi tekshiruvchiga ehtiyoj sezmasdan almashtiriladi (ular faqat "&" belgisi bilan kiritiladi).

Notation deklaratsiyalari

Notations SGML yoki XML-da ishlatiladi. Ular sharhlari dasturga qoldirilgan (ularni to'g'ridan-to'g'ri sharhlaydigan yoki tashqi ob'ektni o'zlari qidirib topadigan) taqqoslanmagan tashqi shaxslarga to'liq ma'lumot beradi, ularga hujjat tarkibida foydalanish mumkin bo'lgan oddiy nom berish orqali. Masalan, XML 1.1 hujjatidagi XML bo'lmagan ma'lumotlarga murojaat qilish uchun yozuvlardan foydalanish mumkin. Masalan, SVG rasmlarini ma'lum bir ko'rsatuvchi bilan bog'lash uchun ularga izoh berish:

 turi-rasm-svg TIZIM "image / svg">

Bu e'lon qiladi MIME turi tashqi rasmlarning ushbu turiga kiradi va uni "type-image-svg" yozuv belgisi bilan bog'laydi. Shu bilan birga, yozuvlar nomlari odatda yozuvlarni yaratadigan yoki ishlatadigan dasturga xos bo'lgan nomlash qoidalariga amal qiladi: yozuvlar XML tomonidan ishlatiladigan kataloglarda ro'yxatdan o'tgan samarali tarkib tashqi ob'ekt bo'lgan yoki jamoat FPI bo'lgan qo'shimcha meta-ma'lumotlar sifatida talqin etiladi. Tafsiri dasturga bog'liq bo'lgan SGML-ajraluvchilar yoki SYSTEM URI (bu erda nisbiy URI sifatida talqin qilingan MIME tipi, lekin u aniq ko'rsatuvchi uchun mutlaq URI bo'lishi yoki OS kabi ob'ekt identifikatorini ko'rsatuvchi URN bo'lishi mumkin. UUID).

E'lon qilingan notatsiya nomi barcha hujjatlar turidagi deklaratsiyada, ya'ni tashqi va ichki to'plamlarda, hech bo'lmaganda XML ga muvofiqligi uchun noyob bo'lishi kerak.[6][7]

Eslatmalar SGML yoki XML hujjat tarkibiga kiritilgan, taqqoslanmagan tashqi ob'ektlar bilan bog'lanishi mumkin. The IJTIMOIY yoki TIZIM tashqi ob'ektlarning parametri tashqi ob'ektning taqqoslanmagan ma'lumotlari joylashgan FPI va / yoki URI-ni belgilaydi va qo'shimcha NDATA Ushbu belgilangan ob'ektlarning parametri qo'shimcha yozuvlarni belgilaydi (ya'ni, bu erda samarali MIME turi). Masalan:

 sgml [   sgml (img)*>   img Bo'sh>   img     ma'lumotlar TASHKILOT # MAVJUD>     example1SVG     TIZIM "example1.svg" NDATA example1SVG-rdf>   example1SVG-rdf TIZIM "example1.svg.rdf">]>
<sgml>   ma'lumotlar ="example1SVG" /></sgml>

SGML hujjati tarkibida ushbu havola qilingan tashqi ob'ektlar (ularning nomi "&" va ";" orasida ko'rsatilgan) emas odatdagidek nomlangan ob'ektlar kabi almashtirildi (CDATA qiymati bilan belgilanadi), lekin DTD ning bunday tashqi ko'rinishga ruxsat berishi sharti bilan (yoki yuqoridagi kabi) element atributining qiymati sifatida yoki element tarkibida ishlatilishi mumkin bo'lgan aniq taqqoslanmagan belgilar sifatida qoldiriladi. elementlarning e'lon qilingan tarkib turidagi yoki e'lon qilingan atributlar turidagi sub'ektlar (bu erda TASHKILOT uchun turi ma'lumotlar atributi), yoki SGML ajraluvchisi tarkibni tasdiqlamaydi.

Notatsiyalar, shuningdek, ba'zi bir qo'shimcha atributlarning mumkin bo'lgan qiymatlari sifatida ularning nomlarini berib, boshqa tashqi ob'ekt bilan bog'lamasdan, qo'shimcha meta-ma'lumotlar sifatida elementlarga bevosita bog'lanishi mumkin (shuningdek, DTD da ...> elementning deklaratsiyasi). Masalan:

 sgml [   sgml (img)*>   <!--     ixtiyoriy "tip" atribut qiymati faqat ushbu yozuvga o'rnatilishi mumkin.   -->   sgml    turi  QAYD (      sotuvchiga xos ) # MAVJUD>   img HAMMA> <!-- optional content can be only parsable SGML or XML data -->   <!--     Ixtiyoriy "sarlavha" atributining qiymati matn sifatida ajraladigan bo'lishi kerak.     Ixtiyoriy "ma'lumotlar" atributi qiymati taqqoslanmagan tashqi ob'ektga o'rnatiladi.     Ixtiyoriy "tip" atribut qiymati faqat ikkita belgidan bittasi bo'lishi mumkin.   -->   img    sarlavha CDATA              # MAVJUD    ma'lumotlar  TASHKILOT             # MAVJUD    turi  QAYD (      turi-rasm-svg |      turi-rasm-gif )       # MAVJUD>  <!--    Notatsiyalar tashqi ob'ektlarga murojaat qiladi va yuqoridagi "tip" atributlarida o'rnatilishi mumkin,    yoki tahlil qilish mumkin bo'lmagan har qanday aniqlangan tashqi ob'ektlar tomonidan havola qilinishi kerak.  -->   turi-rasm-svg       IJTIMOIY "- // W3C // DTD SVG 1.1 // EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">   turi-rasm-gif       IJTIMOIY "image / gif">   sotuvchiga xos IJTIMOIY "application / VND.specific + sgml">   example1SVGTitle "Example1.svg sarlavhasi"> <!-- parsed internal entity -->   example1SVG      TIZIM "example1.svg"> <!-- parsed external entity -->   example1GIFTitle "Example1.gif nomi"> <!-- parsed internal entity -->   example1GIF      TIZIM "example1.gif" NDATA turi-rasm-gif> <!-- unparsed external entity -->]>
 turi ="sotuvchiga xos">  <!-- an SVG image is parsable as valid SGML or XML text -->   sarlavha ="& example1SVGTitle;" turi ="type-image-svg">& example1SVG;</img>  <!-- it can also be referenced as an unparsed external entity -->   sarlavha ="& example1SVGTitle;" ma'lumotlar ="example1SVG" />  <!-- a GIF image is not parsable and can only be referenced as an external entity -->   sarlavha ="& example1GIFTitle;" ma'lumotlar ="example1GIF" /></sgml>

Yuqoridagi misolda birinchi tipdagi kabi faqat tizim identifikatorini ko'rsatish o'rniga standart ommaviy FPI va SVG 1.1 hujjatining tizim identifikatoriga (standart URI) murojaat qiladigan "type-image-svg" yozuvi ko'rsatilgan (bu mahalliy UMRI MIME turi sifatida talqin qilingan). Ushbu izohga to'g'ridan-to'g'ri "img" elementining ajratilmagan "tip" atributida havola beriladi, ammo uning mazmuni olinmaydi. Shuningdek, u hujjatdagi "sgml" root elementiga izoh berish uchun sotuvchiga tegishli dastur uchun yana bir belgini e'lon qiladi. Ikkala holatda ham nomlangan e'lon qilingan yozuv to'g'ridan-to'g'ri e'lon qilingan "type" atributida ishlatiladi, uning mazmuni DTD da "NOTATION" atribut turi bilan ko'rsatilgan (bu "type" atribut "sgml" elementi uchun ham e'lon qilingan) "img" elementiga kelsak).

Shu bilan birga, "img" elementining "title" atributida "example1SVGTitle" ichki sub'ekti ko'rsatilgan bo'lib, uning deklaratsiyasi annotatsiyani aniqlamaydi, shuning uchun uni tahlilchilar tekshirishi bilan tahlil qilinadi va ob'ektni almashtirish matni "Title1.svg sarlavhasi" dir.

"Img" elementining mazmuni yana bir tashqi "example1SVG" mavjudotiga murojaat qiladi, uning deklaratsiyasi ham belgini belgilamaydi, shuning uchun uni tahlilchilar tekshiruvi orqali tahlil qilinadi va ob'ektni almashtirish matni uning "example1.svg" aniqlangan SYSTEM identifikatori bilan joylashgan ( shuningdek, nisbiy URI sifatida talqin qilingan). "Img" elementi uchun samarali tarkib ushbu ikkinchi tashqi manbaning mazmuni bo'lishi mumkin. GIF tasvirining farqi shundaki, DTD deklaratsiyalariga binoan SVG tasviri SGML hujjati ichida tahlil qilinadi, bu erda GIF tasvir shunchaki shaffof bo'lmagan tashqi ob'ekt (bu SGML bilan ajratib bo'lmaydigan) deb nomlanadi. " data "atributi (qiymati turi shaffof bo'lmagan ENTITY).

ENTITY atributlari qiymatida faqat bitta yozuv nomi ko'rsatilishi mumkin (xuddi shu e'lon qilingan tashqi ENTITY-dagi bir nechta yozuv nomlari uchun SGML, XML 1.0 yoki XML 1.1-da qo'llab-quvvatlash mavjud emas, shuning uchun alohida atributlar kerak). Shu bilan birga, bir nechta tashqi ob'ektlar (bo'shliq bilan ajratilgan ismlar ro'yxatida) ENTITIES turi bilan e'lon qilingan atributlarda havola qilinishi mumkin va bu erda har bir nomlangan tashqi ob'ekt ham o'z yozuvlari bilan e'lon qilinadi).

Eslatmalar XML va SGML tahlilchilari uchun to'liq xira emas, shuning uchun ular murojaat etishi mumkin bo'lgan tashqi mavjudot turi bilan farqlanmaydi (bu tahlilchilar uchun ular faqat jamoat identifikatori (FPI) va / yoki tizim identifikatori (URI)).

Ba'zi dasturlar (lekin XML yoki SGML tahlilchilarining o'zi ham emas) bilvosita yozuvlarni nomlash orqali ularni havola qilishlariga ruxsat beradi. "URN: '' name ''" har qanday joyda URI ko'rsatilishi mumkin bo'lgan standart CDATA atributining qiymati. Biroq, bu xatti-harakatlar dasturga xosdir va dasturdan ma'lum URN-lar katalogini saqlashni talab qiladi, ularni standart SGML yoki XML-tahlilchisida tahlil qilingan yozuvlarga hal qilish. Ushbu foydalanish notatsiyalarni faqat tashqi mavjudot sifatida saqlanadigan va faqat hujjatlarning tashqi to'plami deb ataladigan DTD-da belgilashga imkon beradi va ushbu hujjatlarni notatsiya uchun to'g'ridan-to'g'ri qo'llab-quvvatlamaydigan XML yoki SGML tahlilchilariga mos kelishiga imkon beradi.

Notations HTML-da yoki XHTML va SVG uchun asosiy profillarda ishlatilmaydi, chunki:

  • Ushbu standart hujjat turlari tomonidan foydalaniladigan barcha tashqi ob'ektlarga o'zlarining standart DTD-larida CDATA turi bilan e'lon qilingan oddiy atributlar (masalan, "a" langar elementining "href" atributi yoki rasmning "src" atributi ") havola qilinadi. img "elementi, uning qiymatlari URI sifatida talqin etiladi, hech qanday identifikator katalogiga ehtiyoj sezilmaydi, ya'ni ma'lum bo'lgan FPI)
  • Qo'shimcha meta-ma'lumotlar uchun barcha tashqi ob'ektlarga quyidagilar havola qilinadi:
    • Qo'shimcha atributlar (masalan turi, bu tashqi mavjudotning MIME turini yoki charset kodlashini bildiruvchi atribut)
    • Qo'shimcha elementlar (masalan havola yoki meta HTML va XHTML-da) o'zlarining atributlari ichida
    • XML va XHTML-dagi standart psevdo-atributlar (masalan xml: lang, yoki xmlns va xmlns: * ism maydoni deklaratsiyalari uchun).

SGML yoki XML 1.0 yoki XML 1.1 tahlilchilarini tekshirishda ham FPI va / yoki URI tomonidan e'lon qilingan notatsiyada havola qilingan tashqi ob'ektlar ajraluvchilarning o'zi tomonidan avtomatik ravishda olinmaydi. Buning o'rniga, ushbu tahlilchilar dasturga faqat tahlil qilingan FPI va / yoki URI-ni ajratilgan SGML yoki XML hujjatida topilgan yozuvlar bilan va DTD da e'lon qilingan barcha yozuvlar nomlarini o'z ichiga olgan lug'at bilan ta'minlaydi; ushbu tasdiqlovchi tahlilchilar, shuningdek, yozuvlar nomi e'lonlarining o'ziga xosligini tekshiradi va agar ba'zi bir yozuv nomlari DTD yoki hujjat idorasida ishlatilgan, ammo e'lon qilinmagan bo'lsa, tasdiqlash xatosi haqida xabar beradi:

  • Agar dastur biron bir yozuvni ishlata olmasa (yoki ularning FPI va / yoki URI noma'lum bo'lsa yoki ularning mahalliy katalogida qo'llab-quvvatlanmasa), ushbu yozuvlar ilova tomonidan jimgina e'tiborga olinmasligi mumkin yoki dastur xatoga yo'l qo'yishi mumkin.
  • Aks holda, ilovalar ularni qanday talqin qilishni o'zlari hal qiladi, agar tashqi ob'ektlarni olish kerak bo'lsa, keyin ularni alohida tahlil qilish kerak bo'lsa.
  • So'ngra ilovalar xatoga ishora qilishi mumkin, agar bunday talqin, qidirish yoki alohida tahlil qilish bajarilmasa.
  • Ilova xatoga ishora qilishi mumkin bo'lgan tan olinmagan yozuvlar, ulardan foydalangan holda tasdiqlangan hujjatning izohlanishiga to'sqinlik qilmasligi kerak.

XML DTD va sxemalarni tasdiqlash

XML DTD sintaksisi bir nechta narsalardan biridir XML sxemasi tillar. Biroq, ko'plab sxema tillari XML DTD-ni to'liq o'rnini bosa olmaydi. XML DTD, DTD-bo'lmagan XML-da to'g'ridan-to'g'ri ekvivalenti bo'lmagan ob'ektlarni va yozuvlarni belgilashga imkon beradi (chunki ichki ob'ektlar va ajraladigan tashqi ob'ektlar XML sxemasi tillarining bir qismi emas, va boshqa ajratilmagan tashqi ob'ektlar va yozuvlarda oddiy ekvivalent xaritalash mavjud emas ko'pgina XML sxemalar tillari).

Ko'pgina XML sxemalar tillari faqat element e'lonlari va atributlar ro'yxati deklaratsiyalari o'rnini bosadi, shu bilan XML hujjatlarini tahlil qilish mumkin bo'ladi. yaroqsiz XML-tahlilchilar (agar tashqi DTD kichik to'plamining yagona maqsadi sxemani aniqlash bo'lsa). Bundan tashqari, ushbu XML sxema tillari uchun hujjatlar alohida tahlil qilinishi kerak, shuning uchun XML hujjatlari sxemasini sof mustaqil rejimda tasdiqlash bu tillar bilan haqiqatan ham mumkin emas: hujjat turi deklaratsiyasi hech bo'lmaganda identifikatsiyalash uchun zarur bo'lib qoladi ( XML katalogi ) tahlil qilingan XML hujjatida ishlatiladigan va boshqa tilda tasdiqlangan sxema.

Keng tarqalgan noto'g'ri tushuncha a yaroqsiz XML-tahlilchi hujjat turi to'g'risidagi deklaratsiyani o'qishi shart emas, aslida hujjat turi deklaratsiyalari hali ham to'g'ri sintaksis, shuningdek deklaratsiyalarning amal qilish muddati uchun skanerdan o'tkazilishi kerak va tahlilchi hali ham barcha deklaratsiyalarini tahlil qilishi kerak ichki qismva hujjat turi to'g'risidagi deklaratsiyaning har qanday joyida yoki hujjat idorasida joylashgan ichki tashkilotlarning almashtirish matnlarini almashtirish.

A yaroqsiz ammo tahlilchi ajralish masalasini o'qimaslikni tanlashi mumkin tashqi sub'ektlar (shu jumladan tashqi pastki qism) va element deklaratsiyalarida va atributlar ro'yxati deklaratsiyalarida belgilangan tarkib modeli cheklovlarini bajarishi shart emas.

Agar XML hujjati ajraladigan tashqi narsalarga bog'liq bo'lsa (shu jumladan, ko'rsatilgan) tashqi pastki qismyoki deklaratsiyalangan tashqi shaxslar ichki qism), buni tasdiqlash kerak mustaqil = "yo'q" unda XML deklaratsiyasi. DTD-ni tasdiqlash yordamida aniqlanishi mumkin XML kataloglari belgilanganini olish uchun tashqi pastki qism.

Quyidagi misolda XML hujjati bilan e'lon qilinadi mustaqil = "yo'q" chunki uning hujjat turi deklaratsiyasida tashqi to'plam mavjud:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE people_list SYSTEM "example.dtd"> />

Agar XML hujjat turi deklaratsiyasida tashqi to'plam uchun biron bir TIZIM identifikatori bo'lsa, uni mustaqil ravishda qayta ishlash mumkin emas: URI-ni olish kerak, aks holda samarali XML-ni to'g'ri tahlil qilish uchun kerak bo'lgan noma'lum nomlangan belgilar mavjud bo'lishi mumkin. sintaksis ichki ichki to'plamda yoki hujjat tanasida (XML sintaksisini tahlil qilish odatda bajariladi keyin oldindan nomlangan XML-da va to'g'ridan-to'g'ri almashtirilgan beshta mavjudlik bundan mustasno, barcha nomlangan ob'ektlarni almashtirish keyin XML hujjatini leksik belgilarga ajratish). Agar u faqat biron bir PUBLIC identifikatorini o'z ichiga olsa, u mumkin agar XML protsessor ushbu DAVLAT identifikatorini o'z mahalliy katalogida biladigan bo'lsa, u bilan bog'langan DTD ob'ektini olishi mumkin bo'lsa, mustaqil ravishda ishlov beriladi.

XML DTD sxemasi misoli

Shaxslar ro'yxati sxemasini tavsiflash uchun juda oddiy tashqi XML DTD-ning misoli quyidagilardan iborat bo'lishi mumkin:

 odamlar_ ro'yxati (shaxs)*> shaxs (ism, Tug'ilgan sana?, jins?, ijtimoiy Havfsizlik raqami?)> ism (#PCDATA)> Tug'ilgan sana (#PCDATA)> jins (#PCDATA)> ijtimoiy Havfsizlik raqami (#PCDATA)>

Ushbu satrdan satrga o'tish:

  1. odamlar_ ro'yxati haqiqiy element nomi va bunday elementning misoli har qanday sonni o'z ichiga oladi shaxs elementlar. The * 0 yoki undan ko'p bo'lishi mumkin bo'lgan belgilar shaxs ichida elementlar odamlar_ ro'yxati element.
  2. shaxs haqiqiy element nomi va bunday elementning bir nusxasi nomlangan bitta elementni o'z ichiga oladi ism, undan keyin nomlangan biri Tug'ilgan sana (ixtiyoriy), keyin jins (shuningdek, ixtiyoriy) va ijtimoiy Havfsizlik raqami (shuningdek, ixtiyoriy). The ? element ixtiyoriy ekanligini bildiradi. Ga havola ism element nomi yo'q ?, shuning uchun a shaxs element kerak o'z ichiga oladi ism element.
  3. ism yaroqli element nomi va bunday elementning misoli "belgi bo'yicha tahlil qilingan ma'lumotlarni" o'z ichiga oladi (#PCDATA).
  4. Tug'ilgan sana haqiqiy element nomi va bunday elementning namunasi tahlil qilingan belgilar ma'lumotlarini o'z ichiga oladi.
  5. jins haqiqiy element nomi va bunday elementning namunasi tahlil qilingan belgilar ma'lumotlarini o'z ichiga oladi.
  6. socialsecuritynumber is a valid element name, and an instance of such an element contains parsed character data.

An example of an XML file that uses and conforms to this DTD follows. The DTD is referenced here as an external subset, via the SYSTEM specifier and a URI. It assumes that we can identify the DTD with the relative URI reference "example.dtd"; the "people_list" after "!DOCTYPE" tells us that the root tags, or the first element defined in the DTD, is called "people_list":

<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE people_list SYSTEM "example.dtd"><people_list>  <person>    <name>Fred Bloglar</name>    <birthdate>2008-11-27</birthdate>    <gender>Erkak</gender>  </person></people_list>

One can render this in an XML-enabled brauzer (kabi Internet Explorer yoki Mozilla Firefox ) by pasting and saving the DTD component above to a text file named example.dtd and the XML file to a differently-named text file, and opening the XML file with the browser. The files should both be saved in the same directory. However, many browsers do not check that an XML document confirms to the rules in the DTD; they are only required to check that the DTD is syntactically correct. For security reasons, they may also choose not to read the external DTD.

The same DTD can also be embedded directly in the XML document itself as an internal subset, by encasing it within [square brackets] in the document type declaration, in which case the document no longer depends on external entities and can be processed in standalone mode:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>  <!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>Fred Bloglar</name>    <birthdate>2008-11-27</birthdate>    <gender>Erkak</gender>  </person></people_list>

Alternatives to DTDs (for specifying schemas) are available:

  • XML sxemasi, also referred to as XML Schema Definition (XSD), has achieved Recommendation status within the W3C,[8] and is popular for "data oriented" (that is, transactional non-publishing) XML use because of its stronger typing and easier round-tripping to Java declarations.[iqtibos kerak ] Most of the publishing world has found that the added complexity of XSD would not bring them any particular benefits,[iqtibos kerak ] so DTDs are still far more popular there. An XML Schema Definition is itself an XML document while a DTD is not.
  • RELAX NG, bu ham bir qismi DSDL, is an ISO international standard.[9] It is more expressive than XSD,[iqtibos kerak ] while providing a simpler syntax,[iqtibos kerak ] but commercial software support has been slow in coming.

Xavfsizlik

An XML DTD can be used to create a denial of service (DoS) attack by defining nested entities that expand exponentially, or by sending the XML parser to an external resource that never returns.[10]

For this reason, .NET Framework provides a property that allows prohibiting or skipping DTD parsing,[10] and recent versions of Microsoft Office applications (Microsoft Office 2010 and higher) refuse to open XML files that contain DTD declarations.

Shuningdek qarang

Adabiyotlar

  1. ^ "Introduction to DTD".
  2. ^ "doctypedecl". Kengaytiriladigan belgilash tili (XML) 1.1. W3C.
  3. ^ Watt, Andrew H. (2002). Sams teach yourself XML in 10 minutes. Sams Publishing. ISBN  9780672324710.
  4. ^ Attribute-list Declaration, Specifications of Kengaytiriladigan belgilash tili (XML) 1.1, W3C.
  5. ^ "DTD Entities". DTD Tutorial. W3Schools.
  6. ^ Notation Declarations, Specifications of Kengaytiriladigan belgilash tili (XML) 1.0, W3C.
  7. ^ Notation Declarations, Specifications of Kengaytiriladigan belgilash tili (XML) 1.1, W3C.
  8. ^ "XML Schema Part 1: Structures (Second Edition)". W3C. 2004 yil. Olingan 2011-05-17.
  9. ^ "ISO/IEC 19757-2:2008 - Information technology -- Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG". ISO. Olingan 2011-05-17.
  10. ^ a b Bryan Sullivan (November 2009). "XML Denial of Service Attacks and Defenses". MSDN jurnali. Olingan 2013-10-21.

Tashqi havolalar