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