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.