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.