Automatická kontrola struktury dokumenty

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é.

Příklad 1. DTD pro fakturu

<!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í.

Obrázek 1. Parser nám většinou dobře napoví, kde máme jakou chybu

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.

Obrázek 2. Je jedno jaký použijeme parser, odhalené chyby by měly být vždy stejné

© Jiří Kosek 2000-2001