Požadavky na dynamiku zpracování informací kladou v dnešní době nároky, které je v některých případech výhodné řešit pomocí značkovacích jazyků. Zvláště pokud hledáme nástroj vhodný pro popis a následující hromadné zpracování elektronických dokumentů co možná nejméně závislý na konkrétní SW platformě. Některé vlastnosti značkovacích jazyků a následnou vhodnost jejich použití jsme diskutovali v předchozím čísle Zpravodaje1. V tomto článku bychom se chtěli více zaměřit na jeden ze značkovacích jazyků - na XML (eXtended Markup Language). Výběr právě tohoto jazyka byl veden jeho vlastnostmi, které umožní předvést většinu rysů značkovacího jazyka tak, jak jsme se o nich zmiňovali v předchozím článku. Navíc je XML v současné době pravděpodobně nejčastěji užívaným značkovacím jazykem s deklarativními značkami.
Tento článek je rozdělen do několika částí. Druhá a třetí část jsou podobně jako celý předchozí článek určeny převážně čtenářům, kteří s XML dosud nepracují prakticky. V těchto částech jsou stručně popsány základy XML z pohledu uživatele. Ve čtvrté části jsou krátce zmíněny některé WWW stránky týkající se XML, na kterých může čtenář nalézt bližší údaje a podrobnosti jak o vlastním jazyku XML, tak o následných jazycích a nástrojích.
V této části článku se budeme věnovat popisu struktury XML dokumentu. Důraz je zde kladen především na pojmy, se kterými se čtenář může setkat při jednoduchém užití XML dokumentů.
Jednou z podstatných výhod jazyka XML je existence dostupných a široce akceptovaných doporučení. Tato doporučení (nazývaná XML schema, případně schémata jazyka XML) jednoznačně definují strukturu dokumentu XML. XML schema je definováno v dokumentech [2], [3], [4] a [5], které popisují uvedená doporučení z různých pohledů a současně vymezují pravidla, kterým musí odpovídat XML dokument, případně SW nástroj.
Tyto dokumenty jsou spravovány organizací W3C [7], která XML schema nejen udržuje, ale současně koordinuje jeho další vývoj.
Jedním ze základních problémů při hromadném zpracování dokumentů je dodržení jejich formální struktury při pořizování a současně ověření, jsou-li tyto dokumenty formálně správné před vlastním zpracováním. Pouze dokumenty formálně správné poté postupují do dalšího zpracování. Základní pravidla, která určují, jak má být sestaven správný XML dokument, nejsou příliš složitá.
Značka označující začátek prvku nazev_prvku je definována ve tvaru <nazev_prvku>, značka označující konec prvku je definována ve tvaru </nazev_prvku>. Prvek musí mít explicitně označen jak počátek, tak konec. Příkladem může být následující prvek <prijmeni>Valter</prijmeni>. Pokud se v textu vyskytují znaky, které jsou vyhrazeny pro definice značky, je třeba užít zástupných řetězců. Například '<' zapíšeme jako <. Prvek zapsaný s užitím otazníků <?poznamka?> není standardními XML nástroji zpracováván. Tyto prvky se užívají buď jako prostor pro poznámky autora dokumentu, nebo jako prostor, kam si SW nástroje třetích stran mohou zapisovat svá data. Pak mají tyto poznámky zpravidla tvar <?ProgramXYZ potrebna data?>. Jednotlivé prvky se mohou vzájemně vnořovat, tj. jeden prvek může jako svou součást obsahovat jiné prvky. Příklad tohoto vnořování:
<osoba> <jmeno>Jan</jmeno> <prijmeni>Valter</prijmeni> <narozen>1999</narozen> </osoba>
Při vnořování není dovoleno vzájemně "křížit" značky. Křížením rozumíme stav, kdy je jedna část textu bezprostřední součástí dvou a více prvků. Příkladem takové chyby je následující fragment <jaro>duben květen<leto>červen </jaro>červenec srpen září</leto> kde je text červen současně částí prvku <jaro> i prvku <leto>. Taková konstrukce není v XML povolena. Správně definovaný dokument v XML může na nejvyšší úrovni obsahovat právě jeden prvek. Všechny ostatní prvky do něj musí být vhodným způsobem vnořeny.
Dokument
<osoba><jmeno>Jan</jmeno>...</osoba> <osoba><jmeno>Dan</jmeno>...</osoba> <osoba><jmeno>Igor</jmeno>...</osoba>
je nesprávný. Z formálních důvodů je třeba dokument doplnit o prvek, který zmíněné prvky zastřeší:
<seznam> <osoba><jmeno>Jan</jmeno>...</osoba> <osoba><jmeno>Dan</jmeno>...</osoba> <osoba><jmeno>Igor</jmeno>...</osoba> </seznam>
Další pravidla, která je třeba dodržet při definování XML dokumentu, je možné najít například na [1] a [9].
V předchozím odstavci jsme stručně upozornili na některá pravidla, která deklarují strukturu XML dokumentu. Jazyk XML ale dovoluje definovat mnohem složitější konstrukce, které popisují i velice složité dokumenty. Aby bylo možno s těmito složitými dokumenty pracovat, je třeba definovat DTD (Document Type Definition) zachycující podobu "správného dokumentu". Pojmem "správné DTD" zde rozumíme DTD popisující takový druh (typ) dokumentu, který uživatel potřebuje pro konkrétní účel - DTD knihy, DTD článku do odborného časopisu, DTD obchodního dopisu, ...
Při hromadném zpracování XML dokumentů je jedním z prvních kroků validace konkrétního XML dokumentu proti konkrétnímu DTD. Za validní dokument považujeme takový dokument, který má všechny části, které jsou považovány za povinné, a současně nemá takové části, které nejsou u konkrétního typu dokumentu přípustné. Je ale možné pracovat s volitelnými částmi dokumentu.
Validitu dokumentů proti DTD vyhodnocují nástroje (parsery), z nichž některé je možno volně stáhnout z WWW [8].
DTD je deklarativní popis, pomocí něhož je možné popsat třídu dokumentů, vyznačující se explicitně definovanými vlastnostmi. Samotný pojem DTD je obecnější a je používán i pro jiné značkovací jazyky než jen pro XML. Fyzicky je DTD zpravidla vyjádřen zvláštním textovým souborem, který je současně validním XML dokumentem. V tomto článku budeme chápat DTD pouze jako popis XML.
Dokument XML je tvořen, jak bylo naznačeno výše, jediným prvkem, který v sobě obsahuje vnořeny všechny další prvky. Podobně i DTD popisuje dokument XML jako postupný rozklad základního prvku XML dokumentu na jeho vnořené prvky. Postupně v následujících částech tohoto článku nastíníme některé z možností, které umožňují definovat vlastnosti XML dokumentu pomocí DTD.
Základním stavebním kamenem, který využijeme pro popis XML dokumentu, je prvek. Pro XML dokument seznam osob (tento XML dokument je součástí příkladu v předchozí kapitole) definujeme jeho DTD.
Prvek v rámci DTD deklarujeme pomocí klauzule:
<! ELEMENT "Jmeno_prvku" ("seznam_jmen_vnorenych_prvku") >
Jako příklad lze uvést :
<! ELEMENT seznam (osoba+) > <! ELEMENT osoba (jmeno, prijmeni, narozen?, telefon*) > <! ELEMENT jmeno (#PCDATA) > <! ELEMENT prijmeni (#PCDATA) > <! ELEMENT narozen (#PCDATA) > <! ELEMENT telefon (#PCDATA) >
Uvedenou posloupností klauzulí jsme definovali prvek seznam, který obsahuje nejméně jeden prvek osoba (znak '+' značí požadavek alespoň jednoho prvku). Prvek osoba obsahuje prvky jmeno a prijmeni, dále obsahuje nepovinný prvek narozen (nepovinnost je naznačena znakem '?') a dále může obsahovat žádný, jeden nebo více prvků telefon (znak '*'). Pro prvky, které dále neobsahují vnořené prvky, ale přímo text, je místo seznamu vnořených prvků uvedeno #PCDATA (Parsed Character Data).
Pro každý prvek deklarovaný v rámci DTD lze deklarovat libovolný počet jeho atributů. Atribut lze chápat jako doplňující informaci ke konkrétnímu prvku. Tato informace může mít nejrůznější charakter. V našem příkladě můžeme jako doplňující informaci k prvku seznam deklarovat atribut, který bude identifikovat stát, kde žijí popisované osoby.
Atribut deklarujeme následující klauzulí:
<! ATTLIST "jmeno_prvku" "seznam_deklaraci_atributu" >
Jako příklad lze deklarovat atributy prvku seznam:
< !ATTLIST seznam nazev CDATA stat ( cz | evropa | svet ) 'cz' >
V uvedeném příkladu jsou pro prvek seznam deklarovány následující atributy: atribut nazev deklarován jako řetězec (Character data) a stat jako výčtový typ, s defaultně vyplňovanou hodnotou 'cz'.
Dále je uveden příklad XML dokumentu, který obsahuje atributy deklarované podle předchozího DTD.
<seznam nazev="kolegové" stat="cz"> <osoba><jmeno>Jan</jmeno>...</osoba> <osoba><jmeno>Dan</jmeno>...</osoba> <osoba><jmeno>Igor</jmeno>...</osoba> </seznam>
Uvedené rozšíření DTD popisovaného XML dokumentu umožňuje například pracovat s několika různými seznamy odlišenými jejich jménem. Současně je možno doplnit další údaje o seznamu (v tomto případě stát). Podobně jako v případě deklarace prvku ani popis deklarace atributu není vyčerpávající.
V předchozích kapitolách jsme krátce nastínili, jakým způsobem lze definovat pro konkrétní XML dokument popis DTD, který explicitně popíše jeho strukturu. Lze předpokládat, že dokumenty, které je třeba zpracovávat, jsou velice komplikované a zahrnují prvky, které zasahují do různých aplikačních oblastí. Lze si představit dokument seznam osob, který je třeba rozšířit i o prvky z finanční oblasti a prvky z oblasti "popisu budovy", budeme-li chtít do textu navíc zapracovat i patro a místnost, v níž má dotyčná osoba pracovnu.
Jednou z cest je definice jediného DTD deklarujícího všechny zmíněné prvky. Definice DTD budovaná podobným přístupem by byla jen velice těžko udržovatelná, zvláště pokud připustíme i velice komplikované dokumenty. Navíc by bylo jen obtížně realizovatelné sdílení DTD deklarující například prvky popisující budovu v několika rozdílných typech dokumentů.
Jazyk XML v těchto případech dovoluje užití tzv. jmenných prostorů (namespaces). Jmenný prostor si lze zjednodušeně představit jako popis DTD, který je v rámci konkrétního XML dokumentu pojmenován. V rámci XML dokumentu je poté možno užívat prvky deklarované v pojmenovaném DTD s jménem DTD jako prefixem. Jeden XML dokument může na základě tohoto mechanismu využívat prvky deklarované v několika DTD. Dokument XML v tomto případě obsahuje klauzuli: xmlns:jmeno="soubor DTD" kde xmlns je slovo rezervované v XML jazyce pro deklaraci jmenného prostoru. Řetězec jmeno bude v XML dokumentu užíván jako prefix identifikující jednotlivé prvky konkrétního jmenného prostoru. Řetězec soubor DTD identifikuje soubor obsahující deklarace konkrétního DTD. (Lze užít nejen identifikace v rámci systému souborů, ale obecně URI dokumentu.)
Následující příklad ilustruje užití jmenných prostorů:
<prehled xmlns:seznam="/xml/seznam.dtd" xmlns:platy="/xml/finance.dtd" xmlns:lokalita="/xml/budovy.dtd"> <seznam:prijmeni>Valter </seznam:prijmeni> <seznam:jmeno>Jan</seznam:jmeno> <platy:odmeny>1000.00</platy:odmeny> <lokalita:pracovna>731 </lokalita:pracovna> </prehled>
Tato deklarace zavádí tři jmenné prostory seznam, platy a lokalita. První z nich je jmenný prostor definovaný nad DTD, které jsme definovali v předchozích příkladech. Další dva jmenné prostory představují ta DTD, která deklarují, mimo jiné, prvky odměny a pracovna.
Mechanismus jmenných prostorů umožňuje využívat v XML dokumentech i "knihovny" předefinovaných prvků dokumentů a tak redukovat čas a chybovost při vytváření nových typů dokumentů.
Vzhledem k faktu, že XML a jeho předchůdci se vyvíjejí delší dobu, jsou k dispozici některá široce využitelná DTD. Jako příklad lze uvést DocBook pro popis technické dokumentace nebo Dublin Core pro popis elektronických zdrojů [6].
Při výčtu výhod, které přináší užití jazyka XML, jsme uvedli mimo jiné i dostupnost nástrojů a možnost validace jednotlivých implementací pomocí doporučení přístupných na WWW. Vzhledem k tomu, že na WWW je publikováno veliké množství materiálu a ještě větší množství stránek s odkazy na tyto materiály, nebudeme zde uvádět desítky stránek, které si případný zájemce může nalézt pomocí vhodného hledače na Internetu sám. Zaměříme se raději na bližší popis tří stránek, z nichž se každá zabývá jazykem XML a navazujícími nástroji z jiného pohledu.
Tato stránka je oficiální stránkou konsorcia W3C, které spravuje řadu doporučení týkajících se i XML. Vzhledem k faktu, že W3C také koordinuje vývoj těchto doporučení, lze zde nalézt nejaktuálnější verze jednotlivých doporučení. Současně je zachycena kompletní historie dokumentů. V některých případech stránka obsahuje i pracovní verze, případně záměry dalšího vývoje. Vždy je ale tato skutečnost explicitně uvedena.
Odkazy na tuto stránku jsou uváděny snad na všech stránkách týkajících se XML. Případného zájemce ale upozorňujeme, že tyto stránky neoplývají podrobnějším popisem případných aplikací jednotlivých doporučení. Jsou však velice užitečné v případě potřeby ověření konkrétní informace.
Další stránka, kterou zde krátce představíme, obsáhle popisuje XML a související nástroje v co možná nejširším kontextu. Součástí této stránky jsou i tutoriály jak XML, tak navazujících technologií (XSL, ...) a desítky příkladů aplikací na různém stupni obtížnosti. Stránka uvádí i některé SW nástroje, které lze s výhodou užít pro práci s XML dokumenty.
Tuto stránku je možno doporučit čtenáři, který by se rád s XML seznámil podrobněji, než mu to umožnily jednoduché příklady uvedené v tomto článku.
Jako poslední zde stručně zmíníme stránku, která je na rozdíl od obou předchozích zaměřena převážně na SW, který podporuje práci s XML dokumenty. Každý nástroj, který je na této stránce uveden, je stručně charakterizován. Současně jsou zde uvedeny informace o producentovi konkrétního SW. Stránka obsahuje odkazy jak na komerční nástroje nebo na jejich trial verze (komerční verze SW, která je zdarma poskytnuta k testování po dobu zpravidla 1-3 měsíce), tak na stránky volných nástrojů, a to někdy včetně knihoven zdrojových textů například v Javě nebo Perlu.
SW nástroje jsou na této stránce členěny do 17 kategorií, ze kterých vybíráme: Database Systems, DTD/Schema Editors/Tools, Search engines, XML Browsers, XML Editors, XML Parsers/Processors a další. Pokud by se čtenář zabýval vývojem systému, který využívá XML jazyk, je možné, že na uvedené stránce najde buď přímo některou z potřebných komponent nebo alespoň inspiraci.
[1] | J. Kosek. XML pro každého. Praha : Grada Publishing,
2000. 163 s.
... zpět do textu |
[2] | XML Schema Part 0 : Primer http://www.w3.org/TR/xmlschema-0 ... zpět do textu |
[3] | XML Schema Part 1 : Structures http://www.w3.org/TR/xmlschema-1 ... zpět do textu |
[4] | XML Schema Part 2 : Datatypes http://www.w3.org/TR/xmlschema-2 ... zpět do textu |
[5] | http://www.w3.org/TR/2000/REC-xml-20001006
... zpět do textu |
[6] | Dublin Core http://www.ics.muni.cz/dublin_core/ ... zpět do textu |
[7] | W3C http://www.w3.org ... zpět do textu |
[8] | XML Software http://www.xmlsoftware.com ... zpět do textu |
[9] | XML Schema Part 0 : Primer http://www.w3.org/TR/xmlschema-0 ... zpět do textu |
1 | J. Vochozka. Značkovací jazyky a XML.
Zpravodaj ÚVT MU. ISSN 1212-0901, 2000, roč. 11, č. 2,
s. 7-11.
... zpět do textu |