Pro naÜe dokumenty si DTD vytvo°φme p°edevÜφm tehdy, kdy₧ chceme automaticky kontrolovat, zda dokument vyhovuje DTD. Tuto prßci pro nßs provede parser. V minulΘm dφle jsme si ukßzali, jak pracujφ parsery zabudovanΘ p°φmo v prohlφ₧eΦi. Dnes na doprovodnΘm CD-ROMu Softwarov²ch novin naleznete parsery, kterΘ fungujφ jako samostatnΘ programy. Oproti parser∙m v prohlφ₧eΦφch umo₧≥ujφ kontrolovat dokument oproti DTD. Pokud dokument vyhovuje danΘmu DTD, °φkßme o n∞m, ₧e je validnφ. Pokud DTD nevyhovuje, je invalidnφ. Samoz°ejm²m p°edpokladem pro to, aby byl dokument validnφ, je aby byl i sprßvn∞ strukturovan².
VÜe si ukß₧eme na jednoduchΘm p°φklad∞. Dejme tomu, ₧e chceme jednoduchΘ faktury uklßdat jako XML dokumenty a automaticky kontrolovat, zda obsahujφ vÜe pot°ebnΘ.
<!ELEMENT faktura (odberatel, dodavatel, polozka+)> <!ELEMENT odberatel (nazev, adresa, ico, dic)> <!ELEMENT dodavatel (nazev, adresa, ico, dic)> <!ELEMENT polozka (popis?, cena, dph, ks?)> <!ELEMENT nazev (#PCDATA)> <!ELEMENT adresa (#PCDATA)> <!ELEMENT ico (#PCDATA)> <!ELEMENT dic (#PCDATA)> <!ELEMENT popis (#PCDATA)> <!ELEMENT cena (#PCDATA)> <!ELEMENT dph (#PCDATA)> <!ELEMENT ks (#PCDATA)> <!ATTLIST faktura cislo CDATA #REQUIRED vystaveni CDATA #REQUIRED splatnost CDATA #REQUIRED vystavil CDATA #IMPLIED> <!ATTLIST cena mena CDATA "CZK">
Podφvßme se te∩ na to, jak se parser zachovß, kdy₧ mu ke kontrole p°edßme dokument s chybou. Na ukßzce 2 je XML dokument, ve kterΘm chybφ atribut s Φφslem faktury.
P°φklad 2. Ukßzkov² dokument s chybou (faktura.xml)
<?xml version="1.0" encoding="windows-1250"?> <?xml-stylesheet href="faktura.css" type="text/css"?> <!DOCTYPE faktura SYSTEM "faktura.dtd"> <faktura vystaveni="2.2.2000" splatnost="16.2.2000"> <odberatel> <nazev>Pou│en£, a.s.</nazev> <adresa>ハirok£ 21, Praha 1, 110 00</adresa> <ico>0987654321</ico> <dic>007-0987654321</dic> </odberatel> <dodavatel> <nazev>XMLCompany, s.r.o.</nazev> <adresa>Dlouh£ 12, Praha 1, 110 00</adresa> <ico>1234567890</ico> <dic>007-1234567890</dic> </dodavatel> <polozka> <popis>Anal�za nasazen■ XML v podnikov←m IS</popis> <cena>50000</cena> <dph>5 %</dph> </polozka> <polozka> <popis>XML Editor - 10 licenc■</popis> <cena mena="USD">5000</cena> <dph>5 %</dph> </polozka> </faktura>
Mezi nejlepÜφ parsery jednoznaΦn∞ pat°φ SP od Jamese Clarka. Naleznete jej na p°ilo₧enΘm CD. Kontrolu dokumentu spustφme pomocφ p°φkazu
nsgmls -wxml -s faktura.xml
Na obrßzku 1 vidφme, jak nßs na chybu parser upozornφ.
M∙₧eme pou₧φt i jak²koliv jin² parser. Nap°φklad parser od Microsoftu mß tu v²hodu, ₧e je k dispozici jako COM objekt. M∙₧eme ho tedy vyu₧φvat v libovolnΘ aplikaci. Na obrßzku 2 vidφme v²sledek validace chybnΘho dokumentu pomocφ skriptu, kter² vyu₧φvß MS parser.