Dtd je zabranjen od strane ruskog registra. XML jezik - Definicije tipa dokumenata (DTD). Što je DTD u XML-u i zašto je potreban?

04.11.2020 Vijesti

U XML dokumentima, DTD definira skup važećih elemenata, identificira elemente koji mogu biti sadržani unutar drugih elemenata i definira važeće atribute za svaki od njih. Sintaksa DTD-ova je vrlo jedinstvena i zahtijeva dodatne napore od strane autora-programera prilikom izrade takvih dokumenata (složenost DTD-ova je jedan od razloga zašto upotreba SGML-a, koji zahtijeva definiranje DTD-a za bilo koji dokument, nije postala toliko raširena kao što je npr. HTML). Kao što je navedeno, nije potrebno koristiti DTD-ove u XML-u - dokumente stvorene bez ovih pravila obradit će ispravno parser ako zadovoljavaju osnovne zahtjeve XML sintakse. Međutim, kontrola nad vrstama elemenata i ispravnošću odnosa između njih u ovom će slučaju u potpunosti biti na autoru dokumenta. Sve dok se ne opiše gramatika našeg novog jezika, samo ćemo se mi moći njime služiti, a za to ćemo biti prisiljeni koristiti posebno razvijen softver, a ne univerzalne programe parsera.

DTD za XML koristi sljedeće vrste pravila: pravila za elemente i njihove atribute, opise kategorija (makro definicije), opise formata binarnih podataka. Svi oni opisuju osnovne konstrukcije jezika - elemente, atribute, simboličke konstante, vanjske binarne podatkovne datoteke.

Kako bismo koristili DTD u našem dokumentu, možemo ga opisati u vanjska datoteka a kada opisujete DTD, jednostavno označite poveznicu na ovu datoteku ili, izravno unutar samog dokumenta, odaberite područje u kojem ćete definirati potrebna pravila. U prvom slučaju, dokument navodi naziv datoteke koja sadrži DTD opise:

...

Unutar dokumenta, DTD deklaracije su uključene kako slijedi:

... ... ]> ...

U slučaju da se interni i eksterni opisi koriste istovremeno, program analizatora će prvo razmotriti interne, tj. prioritet im je veći. Prilikom provjere valjanosti dokumenta, XML procesor prvo traži DTD unutar dokumenta. Ako pravila unutar dokumenta nisu definirana i atribut nije postavljen samostalan="da", tada će program učitati navedenu vanjsku datoteku i pravila sadržana u njoj bit će pročitana od tamo. Ako atribut samostalan ima značenje "Da", tada će uporaba vanjskih DTD opisa biti zabranjena.

Definicija elementa

Element u DTD-u definiran je ručkom! ELEMENT, koji specificira naziv elementa i strukturu njegovog sadržaja.

Na primjer, za element može se definirati sljedeće pravilo:

Ključna riječ ELEMENT označava da će ova izjava opisati XML element. Unutar ove instrukcije navedeni su naziv elementa (cvijet) i vrsta njegovog sadržaja.

U definiciji elementa prvo specificiramo naziv elementa (cvijet), a zatim njegov sadržajni model - određujemo koji se drugi elementi ili tipovi podataka mogu pojaviti unutar njega. U ovom slučaju, sadržaj elementa cvijeta bit će određen korištenjem posebnog markera PCDATA (što znači podatke o znakovima koji se mogu raščlaniti - sve informacije s kojima program analizatora može raditi). Postoje još dvije naredbe koje definiraju tip sadržaja: EMPTY,ANY. Prvi označava da element treba biti prazan (na primjer, ), drugo je da sadržaj elementa nije posebno opisan.

Niz podređenih objekata za trenutni element naveden je kao popis naziva elemenata odvojenih zarezima. U ovom slučaju, kako bi se označio broj ponavljanja uključivanja ovih elemenata, simboli +, *, ? :

Ovaj primjer specificira da unutar elementa moraju biti definirani elementi naslova, autora i sadržaja, pri čemu je element naslova obavezan element i može se pojaviti samo jednom, element autora može se pojaviti više puta, a element tablice sadržaja je neobavezan, tj. može nedostajati. Ako postoji više mogućih opcija za sadržaj definiranog elementa, potrebno ih je odvojiti simbolom "|". :

* u ovom primjeru označava da se niz unutarnjih elemenata koji se definiraju može ponoviti nekoliko puta ili se uopće ne koristiti.

Ako definicija elementa navodi "mješoviti" sadržaj, tj. tekstualne podatke ili skup elemenata, prvo morate navesti PCDATA, a zatim ih odvojiti znakom "|" popis elemenata.

Primjer valjanog XML dokumenta:

]> ...

Marksova avenija
12-12-12 46-23-62 [e-mail zaštićen]

Definiranje atributa

Popisi atributa elemenata definirani su pomoću ključne riječi! ATTLIST. Unutar njega navedeni su nazivi atributa, vrste njihovih vrijednosti i dodatni parametri. Na primjer, za element

Mogu se definirati sljedeći atributi:

U u ovom primjeru za element članak definirana su tri atributa: id, oko I tip, koji imaju tipove ID (identifikator), CDATA i popis mogućih vrijednosti. Postoji ukupno šest mogućih tipova vrijednosti atributa:

  • CDATA - sadržaj dokumenta može biti bilo koji karakterni podatak
  • ID - definira jedinstveni identifikator elementa u dokumentu
  • IDREF(IDREFS) - označava da vrijednost atributa treba biti naziv (ili nekoliko takvih naziva, odvojenih razmacima u drugom slučaju) jedinstvenog identifikatora elementa definiranog u ovom dokumentu
  • ENTITY(ENTITIES) - vrijednost atributa mora biti naziv (ili popis imena ako se koristi ENTITIES) komponente (makro definicije) definirane u dokumentu
  • NMTOKEN (NMTOKENS) - sadržaj elementa može biti samo jedna riječ (tj. ovaj parametar je ograničena varijanta CDATA)
  • Popis valjanih vrijednosti - definiran popis vrijednosti, koje ovaj atribut može imati.

Također možete koristiti sljedeće parametre u definiciji atributa:

  • #REQUIRED - definira obavezni atribut koji mora biti postavljen na svim elementima ove vrste
  • #IMPLIED - atribut nije obavezan
  • #FIKSNA "vrijednost" - označava da atribut mora imati samo navedenu vrijednost, međutim, sama definicija atributa nije obavezna, ali će tijekom procesa parsiranja njegova vrijednost u svakom slučaju biti proslijeđena programu analizatora
  • Vrijednost - postavlja zadanu vrijednost atributa

Definiranje komponenti (makro definicije)

Entitet predstavlja definicije čiji se sadržaj može ponovno koristiti u dokumentu. U drugim programskim jezicima slični elementi nazivaju se makrodefinicije. Komponente DTD-a stvaraju se pomoću naredbe!ENTITY:

Program analizatora, gledajući prije svega sadržaj DTD definicijskog područja, obradit će ovu instrukciju iu daljnjem parsiranju dokumenta koristiti sadržaj DTD komponente na mjestu gdje se pojavljuje njen naziv. Oni. Sada u dokumentu možemo koristiti izraz koji će biti zamijenjen linijom "Drago nam je što vas pozdravljamo"

Općenito, unutar DTD-a mogu se definirati tri vrste makro definicija:

Interne makro definicije- dizajnirani su za definiranje konstante niza; uz njihovu pomoć možete organizirati poveznice na informacije koje se često mijenjaju, čineći dokument čitljivijim. Interne komponente uključene su u dokument pomoću znaka &

Postoji pet unaprijed definiranih internih znakovnih konstanti u XML-u:

  • < - символ "<"
  • > - simbol ">"
  • & - simbol "&"
  • " - simbol apostrofa """
  • " - dvostruki navodnik """

Vanjske makro definicije- pokazuju na sadržaj vanjske datoteke, a taj sadržaj može biti tekstualni ili binarni podatak. U prvom slučaju bit će umetnuto mjesto gdje se koristi makro tekstualni nizovi, u drugom - binarni podaci koje analizator ne razmatra i koriste ih vanjski programi

Definicije makronaredbi pravila- makro definicije parametara mogu se koristiti samo unutar DTD područja i označene su posebnim % simbolom umetnutim prije naziva makronaredbe. U tom će slučaju sadržaj komponente biti smješten izravno u tekst DTD pravila

Na primjer, za sljedeći fragment dokumenta:

Možete koristiti kraći obrazac:

Makronaredbe se često koriste za opisivanje parametara u pravilima atributa. U ovom slučaju postaje moguće koristiti iste definicije atributa za različite elemente:

Upisivanje podataka

Vrlo često, prilikom izrade XML elementa, programer mora odrediti koju vrstu podataka može koristiti kao njegov sadržaj. Oni. ako definiramo element 10.10.98, tada želimo biti sigurni da će u dokumentu na ovom mjestu biti niz koji predstavlja datum, a ne broj ili proizvoljan niz znakova. Koristeći tipkanje podataka, možete stvoriti elemente čije se vrijednosti mogu koristiti, na primjer, kao parametri u SQL upitima. U tom slučaju klijentski program mora znati kojem tipu podataka pripada trenutna vrijednost elementa i, ako odgovara, generira SQL upit.

Ako se verifikacijski XML procesor koristi kao program na strani klijenta, tada se informacija o tipu može prenijeti pomoću elementa posebno kreiranog za ovaj atribut koji ima odgovarajuću DTD definiciju. Tijekom procesa parsiranja, parser će proslijediti vrijednost ovog atributa klijentskoj aplikaciji, koja može koristiti ove informacije prema očekivanjima. Na primjer, da odredite da sadržaj elementa mora biti dugi cijeli broj, možete koristiti sljedeću DTD definiciju:

Postavljanjem atributa na zadanu vrijednost LONG i definiranjem kao FIXED, omogućili smo klijentskom programu da dobije potrebne informacije o vrsti sadržaja ovog elementa, a sada može neovisno odrediti odgovara li vrsta sadržaja navedenoj u DTD definiciji.

Ovdje je primjer XML dokumenta koji definira i koristi nekoliko elemenata s različitim tipovima podataka:

... 5 2 32.5 pravi 18346 34 trljati. 28 k. ...

Kao što se može vidjeti iz primjera, mehanizam za stvaranje elemenata dokumenta nije se uopće promijenio. Sve informacije potrebne za provjeru tipova podataka uključene su u definicije elemenata unutar DTD bloka.

Zaključno, želio bih napomenuti da nam DTD pruža vrlo prikladan mehanizam za kontrolu sadržaja dokumenta. Danas gotovo svi internetski programi za pregledavanje dokumenata koriste DTD pravila. Međutim, ovo nije jedini način provjere ispravnosti dokumenta. Trenutno razmatra konzorcij W3 novi standard jezik za opisivanje strukture dokumenata, nazvan sheme podataka. Sljedeći odjeljak posvećen je radu s njima.

3

Pokušavam otvoriti XML datoteku u programu Excel 2013, ali piše da to ne može jer "DTD nije dopušten." Tražio sam rješenje, ali sve što sam našao bili su isječci koda koji bi trebali riješiti problem.

Ali ja ovo ne razumijem! Koja šifra? Samo otvaram datoteku, ne pišem program ili nešto slično. Trebam li pročitati ovaj kod naglas prije otvaranja datoteke ili što? Oprostite, ali smatram ovo stvarno apsurdnim.

Postoji li neko rješenje za jednostavno otvaranje datoteke bez pisanja programa za nju? A ako ne, što da radim s ovim kodom?

kod govorim o sljedećem

Postavi xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") xmlDoc.setProperty "ProhibitDTD",False xmlDoc.load xmltoload.xml

Otkrio sam da bi se datoteka možda trebala otvoriti u Wordu, Excel ne, ali Word 2013 daje mi istu pogrešku.

Odgovor:
Činilo se da se datoteka ipak mora otvoriti u Excelu. Našao sam na internetu da Office 2007 i stariji ne zabranjuju DTD, što god to bilo. Tako sam uspješno zaobišao problem otvaranjem potrebne datoteke u programu Excel 2003.

  • 3 odgovora
  • Sortiranje:

    Aktivnost

1

svi XML dokumenti temelje se na određivanju koja polja smiju postojati i koje vrijednosti smiju postojati u svakom od tih polja. Oni su definirani u svakoj XML datoteci referencom na definiciju vrste dokumenta ("DTD") ili XML datoteka-shema.

Koliko razumijem, Excel 2007 i noviji NE podržavaju DTD-ove. Umjesto toga, očekuju da vaša XML datoteka upućuje na XML shemu.

Dakle, vaš glavni problem je taj što vaša XML datoteka upućuje na DTD datoteku i morate pretvoriti svoju DTD datoteku u datoteku XML sheme (možete to provjeriti tako da otvorite dokument s programom kao što je Notepad++ i pogledate neobrađeni tekst.)

Postoje mnogi alati koji će vam pomoći u tome, ali da budem iskren, pokušavao sam ih sve pokrenuti satima, a Excel još uvijek ne otvara moj XML (prošao sam kroz ovaj post dok sam googlao isti kod pogreške. )

Ako samo jednom pokušavate otvoriti XML datoteku, vjerojatno ne želite uložiti puno truda u to, ali ako smislim brzo i jednostavno rješenje. oni.

Ako ga samo trebate otvoriti, postoji besplatan program, koji se može preuzeti, koji pretvara XML u CSV:

Isprobao sam i radilo je odlično - odmah sam otvorio svoju datoteku u programu Excel 2013. Na ovaj trenutak problem riješen.

Naravno, smisao XML-a je da se podaci mogu povezati s drugim podacima s kontekstom i izgubiti bez odgovarajuće sheme ili DTD datoteke. Ali ako samo želite da se datoteka otvori, ovo bi za sada trebalo raditi (za one koji još nemaju Excel 2003, iako mislim da je vama jednako jednostavno.)

Ovo je sljedeći članak u nizu “Osnove XML-a” i u njemu ćemo se osvrnuti na osnove opisivanja strukture XML podaci koristeći DTD. Ovo je prilično star način opisivanja strukture XML dokumenata, ali se još uvijek koristi, pa ćemo ga još pogledati.

Također bih želio istaknuti da je ovo sjajan način da se pokaže kako XML provjerava sadržaj dokumenta, gramatiku itd. Pogledat ćemo noviji i napredniji način opisivanja strukture XML dokumenata pomoću tehnologije XML Schema u sljedećem članku, ali za sada prijeđimo izravno na proučavanje XML DTD-a.

U ovom ćemo članku pogledati nekoliko njih važne točke. Ovo je ono što je XML DTD i za što je potreban, razgovarajmo o nedostacima DTD-a, a također naučimo kako samostalno sastaviti vlastiti DTD za provjeru valjanosti XML dokumenata. Sve će to, kao i obično, biti prikazano korak po korak, što je moguće kraće i jasnije kako bismo uštedjeli Vaše vrijeme.

Dakle, počnimo.

Što je DTD u XML-u i zašto je potreban?

Ukratko, DTD u XML-u koristi se za provjeru gramatike dokumenta i njegove usklađenosti sa standardom (onim koji ste smislili programer ili vi). To omogućuje parseru (procesoru) da u fazi obrade utvrdi ispunjava li dokument naše zahtjeve. Odnosno, XML dokument je potvrđen.

Potreba za provjerom gramatike XML dokumenata je sljedeća:

  • XML dokument možda nije namijenjen vašem sustavu.
  • XML dokument može sadržavati netočne podatke.
  • XML dokument može sadržavati pogreške u strukturi ().

Dakle, shvatili smo što je XML DTD i zašto je potreban. Pogledajmo sada ukratko nedostatke DTD-ova, a zatim prijeđimo na proces stvaranja DTD datoteka za provjeru valjanosti XML dokumenata.

Nedostaci XML DTD-a

  • Sintaksa jezika različita od XML-a. To uzrokuje mnoge probleme, kao što su problemi kodiranja ili nemogućnost praćenja pogrešaka.
  • Nema provjere vrste podataka. U DTD postoji samo jedan tip - string.
  • Nema DTD. Ne možete spojiti dva ili više DTD opisa s dokumentom.

Bilo je kratki popis DTD nedostaci, koji su uspješno ispravljeni u XML shemama, o čemu ćemo govoriti u narednim člancima.

Deklariranje elemenata, atributa i entiteta u DTD-u. Modifikatori “*”, “?”, “+”

Posebne deklaracije i modifikatori koriste se za deklariranje elemenata, atributa i entiteta u DTD-u. Da bismo sve detaljno razumjeli, prvo pogledajmo teoretske informacije, a zatim ćemo u drugom dijelu članka prijeći na praktične primjere.

Definiranje XML elementa i niza XML elemenata

Element knjige sadrži jedan element naslova, autora, cijene i opisa.

Alternative elementa

Element Cjenik sadrži elemente naslov, cijenu i jedan od tri elementa na izbor – autor, tvrtka ili uzorak.

Prazni elementi

Element none mora biti prazan.

Deklaracija atributa

Element Cjenik može sadržavati dva atributa - atribut id i atribut name. U ovom slučaju, id atribut je obavezan, budući da je naveden #REQUIRED, a atribut name je neobavezan (naveden je #IMPLIED). S druge strane, CDATA pokazuje rukovatelju da nema potrebe analizirati sadržaj atributa.

Definiranje entiteta

Ako se naiđe na entitet "", tada će se umjesto njega automatski zamijeniti "Dmitrij Denisov".

Modifikatori (objašnjavaju ponavljanja elemenata)

* - nula ili mnogo.
? – nula ili jedan.
+ - jedan ili više.

Element knjige može sadržavati jedan ili više elemenata knjige.

Sada pogledajmo kako to sve izgleda s više praktičnih primjera.

Izrada DTD datoteke za validaciju XML dokumenta na primjeru cjenika knjiga

Neka nam bude isti cjenik knjiga koje koristimo kao primjere u gotovo svakom članku o XML-u. Sam XML dokument izgledat će otprilike ovako.

knjiga 1 &myname; Cijena 1 Opis

Naravno, gornji primjer nije krajnji san, ali poslužit će kao primjer. Kao što možete vidjeti iz primjera, imamo cjenik korijenskog elementa koji sadrži ugniježđene elemente knjige. Unutar elemenata knjige nalaze se elementi naslova, autora, cijene i eventualno opisa, koji mogu sadržavati neke tekstualne podatke.

Za potvrdu ovog cjenika možemo koristiti sljedeći DTD dokument.

Sada pogledajmo sve detaljnije.

  • — deklariramo root element books i u zagradama naznačimo što može sadržavati. U tom slučaju može sadržavati jedan ili više elemenata knjige (znak plus znači jedan ili više, vidi gore).
  • — definirati element knjige. Element knjige može sadržavati jedan element naslova, jedan ili više elemenata autora (znak plus), jedan element cijene i jedan ili nijedan element opisa (upitnik).
  • — definirati naslovni element. Navodimo #PCDATA kao sadržaj elementa. To znači da je parser dužan analizirati ono što se nalazi unutar ovog elementa.
  • Na sličan način definiramo elemente autor, cijena, opis.
  • — definiramo bit. Prvo napišemo sam entitet, a zatim pod navodnicima što će biti prikazano na njegovom mjestu. Prema zadanim postavkama samo su 3 entiteta definirana u XML-u. Ovo je više (">" -<), меньше («<» — >) i ampersand ("&" - &). Ako želite, ovom metodom možete kreirati neograničen broj entiteta. Značenja mogu biti ne samo riječi, već i cijele rečenice značajne duljine.
Povezivanje DTD-a za provjeru XML dokumenata

Deklarativna metoda

Ova se metoda vrlo rijetko koristi, budući da je njezina suština stvaranje samodostatnih dokumenata. To jest, dokument će odmah sadržavati i DTD i XML. Sljedeća konstrukcija koristi se za dodavanje DTD-a u XML.

gdje umjesto DOKUMENT označavamo korijenski element XML dokumenta.

Radi jasnoće, pogledajmo primjer gotovog samodostatnog dokumenta s deklarativnim načinom uključivanja DTD-a.

]>

Vanjska DTD definicija - povezivanje DTD dokumenta

Suština ovu metodu je povezati DTD datoteku s XML dokumentom pomoću sljedeće konstrukcije.

gdje DOKUMENT – označavamo korijenski element XML dokumenta.
file.dtd – poveznica na DTD datoteku.

Radi jasnoće, razmotrite sljedeći primjer.

XML dokument

Time završavamo ovaj članak. Pogledali smo sve glavne točke pri radu s XML DTD-om i, nadam se, uspio sam sve jasno objasniti. Ako ne želite propustiti druge XML i XSLT tutorijale, preporučujem da se pretplatite na bilten putem obrasca u nastavku.

To je sve. Sretno i uspješno u učenju XML-a!