Rozšiřitelný editor XML dokumentů. Tomáš Diviš

Rozměr: px
Začít zobrazení ze stránky:

Download "Rozšiřitelný editor XML dokumentů. Tomáš Diviš"

Transkript

1 České vysoké učení technické v Praze Fakulta elektrotechnická ČVUT FEL katedra počítačů Diplomová práce Rozšiřitelný editor XML dokumentů Tomáš Diviš Vedoucí práce: Ing. Martin Kačer Studijní program: Elektrotechnika a informatika dobíhající magisterský Obor: Informatika a výpočetní technika leden 2007

2 ii

3 iii

4 Poděkování Děkuji svým rodičům za podporu v celém průběhu mého studia. Dále děkuji mému vedoucímu diplomové práce Ing. Martinu Kačerovi za pomoc a nápady pro mou práci. iv

5 v

6 Prohlášení Prohlašuji, že jsem svou diplomovou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu 60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změněa některých zákonů(autorský zákon). VŘežidne vi

7 Abstract ThisworkpresentsaprogramforeditingXMLfiles.InthefirstpartXMLschemesareanalyzed, namely DTD schemes, W3C XML schemes and Relax NG schemes. The second part presents aprogramforeditingxmlfiles,whichusesxmlschematoassistuserswhilecreatingand editing XML. Strengths of this program are extensibility, portability and usage of alternative XML syntax, which is simpler to create and more human friendly. Main features of the program are auto-completion and automatic validation against XML schema. vii

8 Abstrakt Tato práce pojednává o tvorbě speciálního editoru XML souborů. První část se věnuje XML schématům, konkrétně DTD schématům, W3C XML schématům a Relax NG schématům. Druhá část prezentuje program pro editaci XML souborů, který využívá možnosti XML schématu pro ulehčení práce při vytváření a editaci XML. Přednostmi programu jsou rozšířitelnost, multiplatformnost a použití alternativní syntaxe XML, která je pro člověka lépe čitelná. Program podporuje vlastnosti jako jsou automatické dokončování a automatická kontrola validace oproti XML schématu během psaní dokumentu. viii

9 Obsah Seznam obrázků xiii 1 Úvod 1 2 Popis problému, specifikace cíle FunkceeditorůzdrojovéhokóduXML Dalšípožadavky Shrnutípožadavků XML Schémata StručnýúvoddoXML PůvodXML SyntaxeXMLdokumentu Well-formedXMLdokument KčemujeXMLschémadobré Validita DTDschéma Elementyaatributy PřipojeníDTDkdokumentu W3CXMLschéma Jednoduchédatovétypy Komplexnídatovétypy Normalizacehodnot Jmennéprostory PřipojeníWXSkdokumentu Modularizaceschémat RelaxNGschéma Úvod Opakovánívzorů Seskupování,výběraprolínání Datovétypy Parametrydatovýchtypů Výčtovétypy Nepovolenéhodnoty Seznamy Modularizaceschémat Jmennéprostory ShrnutívlastnostíXMLschémat Analýza Podobnéexistujícíprojekty ix

10 4.1.1 Emacs+nXMLmód Kate Jaxe TeddyXMLEditor KXMLEditor xmloperator Shrnutí Výběrtechnologií Programovacíjazyk GUIKnihovna Komponentaproeditacitextu Vývojovéprostředí KnihovnaproprácisXML Realizace AlternativníXMLsyntaxe ZápiszákladníchprvkůvSOXsyntaxi Vnořování Bíléznaky Textvuvozovkách Implementace Strukturaprogramu Popiskomponentajejichzávislostí Testování Testovacípodmínky Prvníspuštění Transparentníukládání Zvýrazněnísyntaxe Chybyodparseru Validaceaauto-completion Vyhledávání Pročištěníadresářesoxdir PřiřazeníDTDschématukdokumentu Rychlost Závěr Shrnutí Možnávylepšení Literatura 59 A Seznam použitých zkratek 61 x

11 B Uživatelská/ instalační příručka 63 B.1 Instalace B.1.1 Závislosti B.1.2 Vlastníinstalace B.2 Základnírozděleníokna B.3 Otevřenísouboru B.4 PřiřazeníDTDschématukdokumentu B.5 Položkymenu B.6 Transparentníukládání B.7 Zvýrazněníchyb B.8 Auto-completion B.9 Konfigurace B.10Programovánívlastníchmodulů C Obsah přiloženého CD 69 xi

12 xii

13 Seznam obrázků 3.1 HierarchiedatovýchtypůWXS(převzatoz[11]) ScreenshotprogramuEmacs ScreenshotprogramuKate ScreenshotprogramuJaxe ScreenshotprogramuTeddyXMLEditor ScreenshotprogramuKXMLEditor Screenshotprogramuxmloperator StrukturaXMLeditoru ZavislostičástíXMLeditoru Konečnýautomatprojedenelement B.1 Screenshothlavníhookna B.2 Dialogpročišněníadresářesoxdir B.3 Funkceauto-completion xiii

14 xiv

15 KAPITOLA 1. ÚVOD 1 1 Úvod FormátXMLjetextovýformát,kterýjevdnešnídoběhojněpoužíván.Jehopoužitíjevelmi různorodé, od ukládání dat všeho druhu až po psaní textových dokumentů jako jsou internetové stránky. K jeho přednostem patří rozšířitelnost, jasně specifikované standardy a tím pádem také možnost zpracování na téměř jakékoliv platformě. Základními prvky jazyka XML jsou elementy, které se skládají z počáteční a koncové značky a obsahu mezi nimi. Počáteční značka dále může obsahovat atributy. Rozšířitelnost jazyka spočívá v tom, že si každý může vytvořit své vlastní elementy a atributy. Ale aby mohl být takový dokument automaticky zpracován dalším programem, musí být zřejmá struktura takto zaznamenaných dat, tj. jaké elementy a atributy dotyčný použil, jak se do sebe mohou vnořovat apod. Z toho důvodu vznikla tzv. XML schémata, která popisují strukturu takto zaznamenaných dat. XML schéma je tedy jakýmsi předpisem, který říká, jaká data jsou v XML dokumentu přípustná a v jaké struktuře mohou být zapsána. Programy potom mohou pomocí XML schématu ověřit, zda konkrétní dokument odpovídá tomuto schématu a tedy zda je možné bez problémů tento dokument zpracovat. Struktuře definované XML schématem se také někdy říká XML aplikace. Nejznámějšími XML aplikacemi jsou např. XHTML pro tvorbu webových stránek nebo DocBook pro psaní technické dokumentace. V jednom dokumentu můžeme používat i více XML aplikací. Např. do dokumentu napsaného v DocBooku můžeme vkládat SVG(XML aplikace popisující vektorovou grafiku), nebo MathML(popisuje matematické vzorce). Doposud jsme mluvili o programech, které používají XML pro ukládání a výměnu dat. Se zdrojovým kódem XML dokumentů však přicházejí do styku i lidé. Ačkoli je XML textový formát,pročlověkajeažpříliš upovídaný atakéhůřečitelný.protoprotextovédokumenty vznikajírůznégrafickéeditorytypuwysiwyg( Whatyouseeiswhatyouget česky co vidíš,todostaneš ),kdejeuživatelodstíněnodzdrojovéhoxmlkódu. Avšak člověk často potřebuje měnit či vytvářet i zdrojový kód datových XML souborů. Příkladem mohou být stále se rozmáhající konfigurační XML soubory pro různé programy v unixovém světě. Oproti klasickým textovým souborům mají XML soubory výhodu v jednodušším zpracování programem, avšak unixový administrátoři z nich nebývají moc nadšeni, právě protože jsou většinou hůře čitelné a náročnější na vytváření. Z toho důvodu i zde prezentovaný editor XML souborů používá speciální alternativní syntaxi, která je stručnější a lépe čitelná pro člověka. Základními rysy jsou používání méně speciálních znaků, vypuštění koncové značky a s tím související odsazování bloků. Další věcí, která může člověku usnadnit editaci XML dokumentu, je použití tzv. automatického dokončování. To je umožněno XML schématem, které XML editor načte a podle struktury v něm obsažené může uživateli napovídat, jaké elementy a atributy v daném místě může dokument obsahovat, a případně dokončovat jejich názvy. Velmi užitečnou vlastností XML editoru může být také automatická validace(ověření správnosti) podle XML schématu za běhu. Uživatel je tedy během editování upozorněn na nesprávnost vytvářeného dokumentu (například podtržením), tudíž je téměř nemožné, aby vytvořil nevalidní dokument.

16 2 KAPITOLA 2. POPIS PROBLÉMU, SPECIFIKACE CÍLE 2 Popis problému, specifikace cíle V dnešní době se často používá textového formátu XML k výměně různorodých dat. XML je používáno kvůli své jednoduchosti a jasné specifikaci, která umožňuje jednoduché zpracování dat softwarovými nástroji. XML tedy nejčastěji používají počítačové programy. Často však nastávají situace, kdy je člověk nucen k editaci zdrojového kódu XML. Nejčastějším příkladem je vytváření dokumentů jako jsou XHTML. Další příklad, který v dnešní době nastává stále častěji, je editace konfiguračních souborů k programům, která nahrazuje tradiční textové konfigurační soubory známé například z unixových systémů. Pro unixové administrátory(ale i obyčejné uživatele používající takový program), je editace takovýchto souborů náročná s porovnáním editace obyčejného textového souboru. Je to z důvodů přílišné upovídanosti XML(například nutnost psát dvakrát jméno elementu v počáteční a koncové značce), a používání relativně velkého množství speciálních znaků, které se nepíšou snadno a na některých národních klávesnicích se ani nevyskytují. Právě především pro účely editace konfiguračních souborů v XML jsem se rozhodl vytvořit editor, který by uživatelům tuto práci co nejvíce usnadnil. Nicméně předpokládám možnost použití i pro jiné účely, především datově orientované XML dokumenty. Budu se tedy specializovat spíše na tyto typy dokumentů a nikoliv směrem k textově orientovaným dokumentům jako např. XHTML. 2.1 Funkce editorů zdrojového kódu XML Pro usnadnění editace textových souborů, které odpovídají nějaké předem známé gramatice, se nejčastěji používá zvýraznění syntaxe. To rozdělí text do určitých částí podle významu a tyto části barevně odliší. Uživateli tak zvýší čitelnost a orientaci v kódu. Např. ve zvýrazněné syntaxi pro XML uživatel na první pohled rozezná značky a atributy XML od textového obsahu těchto značek. Dalším prvkem, který je užitečný pro práci se zdrojovým kódem XML, je zkontrolování, zda je dokument správně formulovaný(well-formed). Takový dokument vyhovuje gramatice specifikované ve standardu XML a je proto zaručené, že jej mohou programy zpracovat(nejedná sezdevšakostrukturudat,tamůžebýtstálechybná). Významné ulehčení práce uživateli může být dosaženo pomocí XML schémat. Je jim věnována celá kapitola 3. Zjednodušeně řečeno, XML schéma obsahuje předpis struktury, v jaké se data v dokumentu vytvořeném podle tohoto schématu mohou vyskytovat. Jedná se např. oto,jakéelementyaatributymůžedokumentobsahovatajakjelzedosebevnořovat. Tyto informace lze použít právě k ulehčení práce uživateli editoru zdrojového kódu XML. Je možné, aby editor pomocí aktuálního stavu dokumentu a struktuře načtené z XML schématu napovídal uživateli, jaké prvky je možno použít v místě editace. To lze rozšířit o tzv. automatické dokončování(auto-completion), což znamená, že rozepsané jméno elementu nebo atributu může být dokončeno pomocí výběru z těchto prvků. Samozřejmostí je potom ověření správnosti(validace) dokumentu oproti načtenému schématu. Ideální je, aby toto editor dělal průběžně během editace a dal zřejmým způsobem uživateli najevo případné odchýlení od schématu(například podtrhnutím místa, kde vznikla chyba). Použití XML schématu pro možnosti automatického dokončovaní a validace je velmi efektivní, ale pokud uživatel edituje jeden druh dokumentu velmi často, uvítá i další možnosti. Proto je vhodné, pokud je editor rozšířitelný pomocí různých maker a dalších modulů. Velmi netradičním ulehčením uživatelům editoru zdrojového kódu XML může být použití

17 KAPITOLA 2. POPIS PROBLÉMU, SPECIFIKACE CÍLE 3 alternativní syntaxe XML, jako je např. SOX(Simple Outline XML)[3] nebo SLiP[9]. Takové alternativní syntaxe snižují množství psaného textu a speciálních symbolů, tudíž se zdrojový kód snáze vytváří. Zároveň se také člověk v takovémto textu daleko lépe orientuje, což je neméně důležité. Co by dle mého názoru editoru jakéhokoliv zdrojového textu nemělo chybět, je možnost efektivního používání klávesnice. Vzhledem k tomu, že při psaní textu má uživatel ruce na klávesnici,jepronějzdrženípřesouvatrucezklávesnicenamyšazpět.protobyeditorměl mít systém klávesových zkratek, který se pokud možno dá přizpůsobit zvyklostem uživatele. Pro uživatele píšící všemi deseti může být nepříjemné i přesouvání ruky ze základní pozice na kurzorové klávesy. Editor by proto měl umožnit uživateli namapovat i základní navigační akce jako jsou posuny kurzoru na klávesové zkratky, čímž se toto přesouvání minimalizuje. 2.2 Další požadavky Vzhledemktomu,žeXMLje,jakjižbylořečeno,používánonamnohaplatformách,ieditorby měl mít tu možnost a potenciál se uplatnit na více platformách. Sice vývoj multiplatformních aplikací bývá často náročnější, než vývoj pro jednu konkrétní, ale v tomto případě to dle mého názoru bude užitečné. I programy používající XML konfigurační soubory často bývají k dispozici pod více platformami. Jak s multiplatformností, tak s požadavkem na rozšířitelnost pomocí modulů souvisí použití některého z interpretovaných jazyků. Jsou dvě možnosti, jak provést začlenění takového jazyka. První možnost je napsat program v normálním kompilovaném jazyce a udělat navázání interpretovaného jazyka na tyto funkce. Druhá možnost je psát program přímo v takovém jazyce a případně využít již hotových knihoven kompilovaných jazyků(např. z důvodů rychlosti či odladěnosti takovýchto knihoven). Takový jazyk však musí podporovat možnost využívání knihoven napsaných v kompilovaných jazycích. S rozšířitelností také souvisí otevřenost takového programu. Proto by měl být program licencovaný pod open source licencí. Potom při veřejném vydání může vzniknout komunita, která editor dále vylepšuje a vytváří nové funkce, či vylepšuje stávájící. 2.3 Shrnutí požadavků Bude se jednat o XML editor se zaměřením na datové XML dokumenty, jako například konfigurační soubory k programům. Shrnutí požadavků napsaných v předchozích dvou kapitolách: Zvýrazněná syntaxe Kontrola, zda je XML dokument správně formulovaný(s grafickým znázorněním chyby) Automatické dokončování(auto-completion) XML tagů a atributů dle XML schématu Validace oproti XML schématu(s grafickým znázorněním chyby) Použití alternativní XML syntaxe(pro člověka čitelnější a jednodušší) Rozšířitelnost v podobě modulů Systém klávesových zkratek Multiplatformnost

18 4 KAPITOLA 2. POPIS PROBLÉMU, SPECIFIKACE CÍLE Open source licence Interpretovaný jazyk(alespoň pro moduly)

19 KAPITOLA 3. XML SCHÉMATA 5 3 XML Schémata 3.1 StručnýúvoddoXML Původ XML Původznačkovacíchjazyků(jednímznichjeiXML)saházhrubakzačátkům70.let.Jeden z prvních značkovacích jazyků byl GML(Generalized Markup Language), který se zrodil ve firmě IBM. Důvodem jeho vzniku byla potřeba označkovat části textu nejen pro určení jejich vzhledu,aleijejichvýznamu[8].principjazykagmlseosvědčil,aprotov80.letechvznikly nové značkovací jazyky. Přirozeně se objevila potřeba standardizace, a proto společným snažením několika sdružení vznikl standard SGML(Standard Generalized Markup Language). Obecnost jazyka SGML byla veliká, šlo vytvářet vlastní jazyky(soubory značek) definované pomocí jazyka DTD(Document Type Definition). Asi nejznámější z nich je HTML. Postupemčasusezjistilo,žejazykSGMLjepříliškomplexníažesemnohéjehočásti vůbec nevyužívají. Potřeba jednoduchého značkovacího jazyka vyústila vznikem nového jazyka, kterým je právě XML. Ten tvoří podmnožina jazyka SGML, která byla nejčastěji používána. XML se velmi rychle rozšířilo, protože díky své jednoduchosti je pro něj snadné implementovat parser a vývoj aplikací je tak levnější Syntaxe XML dokumentu Základním prvkem XML dokumentu jsou elementy. Každý element má počáteční a koncovou značku(značceseněkdytakéříká tag ),kteráseskládázespeciálníchznakůajménaelementu. Počátečníznačkajeuvozenaznakem < akončíznakem >.Koncováznačkajeuvozenadojicí znaků </ akončíznakem >.Výjimkoujeprázdnýelement,kterýmůžebýtzapsánjednou značkouuvozenouznakem < akončícíznaky />.Následujícípříkladznázorňujeklasický zápis elementu i zápis prázdného elementu jednou značkou. <element1>obsah</element1> <prazdny1></prazdny1> <prazdny2/> Dále element může obsahovat atributy. Ty jsou od jména elementu(a mezi sebou) oddělenymezerou.zajménematributujeznak = avuvozovkáchpříslušnáhodnotaatributu. Element s dvěma atributy může vypadat např. takto: <element2 atribut1="hod1" atribut2="hod2">obsah</element2> Obsahem elementu pak může být text nebo opět další elementy. Vzniká tak hierarchická struktura. V textovém obsahu se dále mohou vyskytovat tzv. entity. Ty se nejčastěji používají pro zápisspeciálníchznaků.entitajeuvozenaznakem & ajeukončenaznakem ;.Mezitěmito znakysenacházíbuďjménoentitynebočíselnáhodnotazapsanázaznakem #.Číselná hodnota může být zapsána i hexadecimálně, v takovém případě je před ní uvedeno písmeno x.následujípříkladyvšechzápisů: <p> Následující entity představují stejný znak (menší než):

20 6 KAPITOLA 3. XML SCHÉMATA < < < </p> Pokud je tento příklad zpracován např. jako XHTML odstavec, na výsledné webové stránceseobjevímístoentitznak < Well-formed XML dokument Aby se dal dokument zpracovat, musí splňovat několik pravidel. Potom se o dokumentu dá prohlásit, že je well-formed. Pravidla jsou následující[12]: 1. Dokument musí mít právě jeden kořenový element. 2. Každý element musí být uzavřený. 3. Elementy musí být správně vnořovány(nesmí se křížit). 4. Všechny hodnoty atributů musejí být uzavřeny v uvozovkách. 5. Jména elementů a atributů jsou case-sensitive(citlivá na malá a velká písmena) KčemujeXMLschémadobré Jednou z důležitých vlastností, proč je XML formát používán, je jeho snadná možnost rozšíření odalšítagyaatributy.nadruhoustranusipotřebujemedatauloženávxmlmezisebou vyměňovat, a proto je nutné, aby druhá strana datům rozuměla. Je tedy zapotřebí nějakým způsobem specifikovat, jak ona data budou vypadat. K tomu souží právě XML schémata. XML schémata tedy jednoznačně specifikují, jakým způsobem může XML dokument vypadat, např. jaké konkrétní atributy může mít daný element, kolikrát se může opakovat, jaké elementy je možné do něj vnořovat apod. Tím specifikujeme strukturu, kterou potom budou očekávat např. programy pro zpracování takového XML souboru. Program, který zpracovává daný XML soubor, nejdříve provede validaci tohoto souboru oproti danému XML schématu a pokud není dokument validní, může ho odmítnout. To může velmi usnadnit práci programátorům, kteří potom nemusí provádět kontroly pro každý vstupní údaj z XML dokumentu. Tím se můžou výrazně snížit náklady na vývoj takového softwaru Validita Pokud XML dokument splňuje formát předepsaný daným schématem, říkáme že je validní. Před tím, než můžeme provádět validitu, samozřejmě musí být XML dokument správně formulován (viz ). Během vývoje XML se uchytilo několik typů schémat. O nich budou následující podkapitoly. Nejstarší z nich je DTD schéma, které je součástí samotné specifikace XML. Novější a mocnější pak W3C XML schéma, které je doporučením organizace W3C. Nejnovějším je pak velmi mocné a elegantní schéma Relax NG.

21 KAPITOLA 3. XML SCHÉMATA DTD schéma DTDschémajenejstaršíschémaavdnešnídoběužvmnohémnedostačuje,přestosestále ještě často používá, pro svou jednoduchost a dobrou podporu v softwaru. Jeho největším nedostatkem je asi to, že nepodporuje datové typy a jmenné prostory. Zvláštníjetakéto,žeačsejednáoXMLschéma,samotnéDTDnenívXMLformátu Elementy a atributy DTD schéma zachycuje hierarchickou strukturu vnořování elementů a jejich atributů. Ty jsou obsaženyveznačkáchuvozenýchznaky <! akončícíznakem >. Elementy se deklarují značkou ELEMENT, která obsahuje jméno elementu a co daný element může nebo musí obsahovat: <!ELEMENT jméno_elementu obsah_elementu> Obsah elementu nejčastěji obsahuje element nebo seznam elementů, které může obsahovat. Seznam elementů se uvádí v kulatých závorkách. Pokud chceme vyjádřit to, že daný element obsahuje už pouze text, tak zde uvedeme slovo#pcdata. Obsah elementu také může obsahovat slovoempty, které značí, že element musí být prázdný, nebo naopak ANY, které znamená, že daný element může obsahovat jakýkoliv element nebo i text. Slovo ANY se však používá zřídka, protože moc uvolňuje strukturu dokumentu. Příklady: <!ELEMENT br EMPTY> <!ELEMENT vsechno ANY> Seznamelementů,kterédanýelementmůžeobsahovat,můžebýtbuďoddělenznakem, nebo.vprvnímpřípaděříkáme,žesedanéelementymusívyskytovatvpořadí,vjakémjsou zapsány. V druhém, že se v daném elementu může vyskytovat pouze jeden z těchto elementů. Příklady: <!ELEMENT html (head, body)> <!ELEMENT pohlavi (muz zena)> Prvnímu příkladu pak odpovídá pouze následující příklad(z pohledu elementu html, o obsah ostatních nyní nejde): <html> <head>obsah</head> <body>obsah</body> </html> Druhému příkladu pak odpovídá jeden z následujících: <pohlavi> <muz/> </pohlavi> <pohlavi> <zena/> </pohlavi>

22 8 KAPITOLA 3. XML SCHÉMATA Dále v seznamu můžeme udat i počet opakování elementů pomocí speciálních znaků za daným elementem. Pokud za elementem žádný znak neuvedeme, znamená to, že se může vyskytovatprávějednou.pokuduvedeme?,jednáseoelementnepovinný,tedymůžese vyskytovat maximálně jedenkrát nebo se nemusí vyskytovat vůbec. Pokud chceme specifikovat, že se daný element musí vyskytovat alespoň jednou, ale může se opakovat přidáme za něj znak +.Anakonecpronepovinnýelement,kterýsemůžeopakovatpoužijemeznak *. Příklady: <!ELEMENT osoba (jmeno, *)> <!ELEMENT kniha (nazev, kapitola+)> <!ELEMENT vuz (znacka, typ, klimatizace?)> Prvnímu příkladu pak odpovídá kterýkoliv z následujících: <osoba> <jmeno>jan Novak</jmeno> </osoba> <osoba> <jmeno>jan Novak</jmeno> < >novakj@seznam.cz</ > </osoba> <osoba> <jmeno>jan Novak</jmeno> < >novakj@seznam.cz</ > < >novak.jan@atlas.cz</ > < >honzanovak@centrum.cz</ > </osoba> V DTD bohužel není možné specifikovat konkrétní počet položek, musíme tedy vypsat daný počet elementů ručně. V případě, že chceme specifikovat rozsah, uvedeme minimální počet bezspeciálníhoznakuazbytekdomaximálníhoznakuseznakem +,tedypro2-3elementy kapitola uvedeme(kapitola, kapitola, kapitola?). Naštěstí tato situace v praxi nenastává moc často. Pokud chceme specifikovat, že daný element obsahuje text, ve kterém zároveň mohou být některé další atributy(tzv. smíšený obsah), můžeme to provést takto: <!ELEMENTpar (#PCDATA strong cite pre)> Tomu vyhovuje např: <par> Toto je <strong>odstavec</strong> se <cite>smíšeným obsahem</cite> </par> Atributy v DTD specifikujeme pro daný element ve značce ATTLIST, kde je uvedeno jméno elementu, jméno atributu, typ atributu, a standardní hodnota nebo také zda je atribut povinný apod.:

23 KAPITOLA 3. XML SCHÉMATA 9 <!ATTLIST jmeno_elementu jmeno_atributu typ_atributu standardni_hodnota> Pomocí jedné značky ATTLIST můžeme pro jeden element definovat i několik atributů. Typy atributů mohou být CDATA, NMTOKEN, NMTOKENS, ID, IDREF, IDREFS, ENTITY, ENTITIES, výčet. Typ CDATA umožňuje udat libovolný textový řetězec. NMTOKEN umožňuje zadat slovo skládající se z písmen, číslic a několika dalších znaků. NMTOKENS znamená několik slov oddělených mezerou. Typ ID udává identifikátor, na který se poté můžeme odkazovat pomocí IDREF a v případě, že chceme ukazovat na více identifikátorů, uvedeme IDREFS. Ty poté budou odděleny opět mezerou. Typy ENTITY, ENTITIES se dnes již prakticky nepoužívají, souvisí s vlastnostmi, které bylydoxmlpřevzatyzesgml,alevpraxiseneujaly. Výčtem specifikujeme množinu možných hodnot, uvádí se do kulatých závorek, kde jsou jednotlivéhodnotyoddělenyznakem. Dále ve značce ATTLIST můžeme definovat standardní hodnotu, kterou uvozujeme dvojitými uvozovkami. Pokud před standardní hodnotu napíšeme slovo#fixed, znamená to, že atribut může mít pouze tuto hodnotu. Mohou se zde vyskytovat i slůvka#required a#implied. První znamená, že je atribut povinný, druhý naopak nepovinný. Příklad: <!ATTLIST kniha název CDATA #REQUIRED autor CDATA #IMPLIED rozměry NMTOKENS#IMPLIED vazba (měkká tvrdá) tvrdá> Tomu vyhovuje např: <kniha název="xml schéma do každé rodiny" rozměry=" "> </kniha> Připojení DTD k dokumentu DTD schéma se připojuje k dokumentu pomocí značky DOCTYPE. DTD můžeme připojit buď přímododokumentunebohouložitdosamostatnéhosouboruavdokumentusenanějpouze odkázat. První případ může vypadat např. takto: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE vuz [ <!ELEMENT vuz (nazev, typ)> <!ATTLIST vuz id CDATA #REQUIRED> <!ELEMENT nazev (#PCDATA)> <!ELEMENT typ (#PCDATA)> ]> <vuz id="333"> <nazev>škoda Favorit</nazev> <typ>glx</typ> </vuz>

24 10 KAPITOLA 3. XML SCHÉMATA Druhá metoda je praktičtější, protože není třeba do každého dokumentu kopírovat celé schéma. Zápis může vypadat takto: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE vuz SYSTEM "vuz.dtd"> <vuz id="333"> <nazev>škoda Favorit</nazev> <typ>glx</typ> </vuz> Tyto možnosti můžeme i kombinovat: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE vuz SYSTEM "vuz.dtd"[ <!ATTLIST vuz objem CDATA #REQUIRED> ]> <vuz id="333" objem="1300ccm"> <nazev>škoda Favorit</nazev> <typ>glx</typ> </vuz> 3.3 W3CXMLschéma W3CXMLschéma(dáleužjenWXS)jemnohemmocnějšíschémovýjazyk,kterýjedoporučením dnes velmi důležité organizace W3C Consortium. Musím zde upozornit na možnou záměnuterminologie někdyjew3cxmlschémauváděnopouzepodjménem XMLschéma. Vtomtodokumentupodpojmem XMLschéma mámnamyslixmlschémajakéhokolivtypu (např. DTD, RelaxNG nebo W3C XML schéma). WXSpodporujejmennéprostoryadatovétypy.WXSjeužtakéXMLaplikací,tzn. zapsané schéma je také XML dokument. Nevýhodou je poměrně složitá a dlouhá specifikace. Základem WXS jsou datové typy. Ty mohou být jednoduché nebo komplexní. Jednoduchý typ se skládá pouze z jedné hodnoty, jako např. číslo, řetězec nebo datum. Komplexní datový typjetyp,kterýseskládázdalšíchatributůaelementů. Pro názornost hned uvedeme příklad, který zachycuje schéma pro zápis informací o automobilu, u kterého nás zajímá jeho značka, typ, rok výroby a hmotnost. Automobil dále bude mít atribut id. V příkladu se vyskytují jmenné prostory(prefixy u jmen elementů oddělené dvojtečkou). Jmenným prostorům se budeme věnovat dále. <xs:schema xmlns:xs=" <xs:element name="vuz"> <xs:complextype> <xs:sequence> <xs:element name="znacka" type="xs:string"/> <xs:element name="typ" type="xs:string"/> <xs:element name="vyrobeno" type="xs:gyear"/> <xs:element name="hmotnost" type="xs:decimal"/> </xs:sequence> <xs:attribute name="id" type="xs:integer"/> </xs:complextype>

25 KAPITOLA 3. XML SCHÉMATA 11 </xs:element> </xs:schema> Zde vidíme, že obsah elementu vuz je komplexní typ, jelikož se skládá z několika jiných elementů a jednoho atributu. Vnitřní elementy a atribut jsou naopak jednoduché typy Jednoduché datové typy XML schéma běžně zachycuje vlastnosti objektů které se vyjadřují číselně, řetězcem apod. Proto má WXS definováno mnoho jednoduchých typů jako jsou celá a desetiná čísla, řetězce, logické hodnoty, datum, čas a mnohé další. Jejich hierarchii zobrazuje obr Velká síla WXS spočívá v možnosti si z těchto základních typů odvodit svoje vlastní datové typy. Nejčastěji se nový typ odvozuje pomocí restrikce, kde zúžíme obor hodnot bázového typu pomocí integritních omezení. Dále můžeme nové typy odvodit vytvořením seznamu nebo sjednocením existujících typů. Restrikcí číselných typů můžeme omezovat přípustné hodnoty zdola pomocí elementů mininclusive a minexclusive, shora pak pomocí maxinclusive a maxexclusive. První možnost znamená, že specifikovaná hranice do intervalu patří, druhá naopak že nepatří. <xs:simpletype name="tydenvroce"> <xs:restriction base="xs:decimal"> <xs:mininclusive value="1"/> <xs:maxexclusive value="52"/> <xs:fractiondigits value="0"/> </xs:restriction> </xs:simpletype> Takto definovaný typ pak jednoduše použijeme takto: <xs:element name="tydenvroce" type="tydenvroce"/> Dále můžeme restrikci uplatnit nad řetězci. Zde to bývá typicky omezení délky atributy minlength a maxlength, např.: <xs:simpletype name="znackatype"> <xs:restriction base="xs:string"> <xs:minlength value="1"/> <xs:maxlength value="20"/> </xs:restriction> </xs:simpletype> Můžeme taktéž vyjmenovat množinu přípustných hodnot pomocí výčtového typu: <xs:simpletype name="znackatype"> <xs:restriction base="xs:string"> <xs:enumeration value="škoda"/> <xs:enumeration value="ford"/> <xs:enumeration value="lamborghini"/> </xs:restriction> </xs:simpletype>

26 12 KAPITOLA 3. XML SCHÉMATA Obrázek 3.1: Hierarchie datových typů WXS(převzato z[11])

27 KAPITOLA 3. XML SCHÉMATA 13 Silným nástrojem pro omezování řetězců jsou regulární výrazy, které umožňují zapsat vzor, jemuž musí daná hodnota odpovídat. Příkladem budiž poštovní směrovací číslo, které se skládá ze tří dekadických čísel, mezery a dvou dekadických čísel. <xs:simpletype name="psctype"> <xs:restriction base="xs:string"> <xs:pattern value="\d{3}\d{2}"/> </xs:restriction> </xs:simpletype> Element, který nemá žádný obsah, lze chápat jako element, který obsahuje prázdný řetězec. Ale podobně jako v relačních databázích je i v datech zapsaných v XML potřeba nedefinovaná hodnota NULL. To, že element může mít nedefinovanou hodnotu, vyjádříme ve WXS atributem nillable nastaveným na hodnotu true a poté danému(prázdnému) elementu v XML dokumentu nastavíme atribut xsi:nil také na hodnotu true. <xs:element name="datum" nillable="true" type="xs:date"/> <datum xsi:nil="true"/> Často také potřebujeme objekty jednoznačně definovat nějakou unikátní hodnotou- klíčem, jako v relačních databázích. Aby se prováděla kontrola jedinečnosti klíčového atributu, je potřeba přidat integritní omezení typu key nebo unique, přičemž druhé zmiňované se liší od prvního tím, že pokud se daný atribut nevyskytuje, validátor neohlásí chybu. Toto integritní omezení je třeba umístit do definice elementu, který v sobě obsahuje elementy, které chceme jednoznačně identifikovat. Pro definici klíčů se používá dotazovací jazyk XPath. Na následujícím příkladě vidíme zápis takového případu a také XML vyhovující tomuto zápisu. <xs:element name="vozy"> <xs:complextype> <xs:sequence> <xs:element ref="vuz" maxoccurs="unbounded"/> </xs:sequence> </xs:complextype> <xs:unique name="id_je_unikatni"> <xs:selector xpath="vuz"/> <xs:field xpath="@id"/> </xs:unique> </xs:element> <vozy> <vuz id="2"> <!-- obsah --> </vuz> <vuz id="4"> <!-- obsah --> </vuz> </vozy> Další věc převzatá z relačních databází je referenční integrita. Také ve WXS můžeme definovat klíč a na něj ukazující cizí klíč. To se dělá pomocí integritního omezení keyref, kde definujeme pomocí atributu refer, na jaký klíč se daný cizí klíč odkazuje.

28 14 KAPITOLA 3. XML SCHÉMATA Komplexní datové typy Modelování struktury dokumentu se dělá pomocí komplexních datových typů. Jak jsme již uvedli, komplexní typ se může skládat z dalších elementů a atributů. U elementů zde můžeme určit, zda jsou povinné nebo volitelné, kolikrát se mohou opakovat a také pořadí elementů, ve kterém se mohou v dokumentu vyskytnout. Atributy se v definici komplexního typu musí vyskytovat až na konci, a lze specifikovat, zda jsou povinné či volitelné. Uvnitř elementu complextype můžeme specifikovat pořadí elementů pomocí elementu sequence. Uvedené elementy se potom musí vyskytovat v přesně daném pořadí, jak jsou uvedeny. Pokud chceme, aby pořadí elementů bylo libovolné, specifikujeme to pomocí elementu all. Poslední možností je element choice, který říká, že se může vyskytnout právě jeden z uvedených elementů. Tyto elementy můžeme do sebe téměř libovolně vnořovat(až na výjimky, které by způsobily nejednoznačnost): <xs:element name="clanek"> <xs:complextype> <xs:sequence> <xs:element name="nazev" type="xs:string"/> <xs:element name="autor" type="xs:string" minoccurs="0" maxoccurs="unbounded"/> <xs:choice minoccurs="1" maxoccurs="unbounded"> <xs:element name="odstavec" type="xs:string"/> <xs:element name="obrazek" type="xs:base64binary"/> </xs:choice> </xs:sequence> </xs:complextype> </xs:element> Tomu potom vyhovuje následující příklad: <clanek> <nazev>reliktní záření v dnešním vesmíru</nazev> <autor>jakub Nováček</autor> <autor>jaroslav Novotný</autor> <odstavec> Z reliktního záření je možné vyvodit, jak vypadal vesmír 384 tisíc let po velkém třesku. </odstavec> </clanek> Na tomto příkladu vidíme vnoření elementu choice do elementu sequence. Pomocí vyjádření počtu opakování atributy minoccurs a maxoccurs vyjadřujeme počet opakování. Hodnota unbounded označuje že se daný element může opakovat v libovolném počtu. Elementem all říkáme, že se v něm obsažené elementy mohou vyskytovat v libovolném pořadí. Aby model nebyl příliš složitý je zde povolen počet opakování elementů pouze v rozmezí 0až1.Elementallmůžebýtpoužitpouzepřímouvnitřkomplexníhotypu.Tatoomezenísepak musejí obcházet např. skupinou elementů sequence, které vyjadřují všechny možné kombinace elementů. PodobnějakovDTDumožňujeWXSdefinovatsmíšenýobsah,tj.kdyžjetextnastejné úrovni kombinován s dalšími elementy. Ve WXS toho docílíme přidáním atributu mixed s hodnotou true do elementu complextype. Ale smíšený obsah ve WXS funguje trochu jinak. V DTD

29 KAPITOLA 3. XML SCHÉMATA 15 jsme definovali, že text a elementy na stejné úrovní se libovolně kombinovat. Ve WXS pomocí atributu mixed s hodnotou true specifikujeme, že se text může objevit kdekoliv mezi obsaženýmielementy.takžesmíšenýobsahvesmyslu,jakjejznámezdtd,semusídefinovatpomocí elementu choice, který má libovolný počet výskytů: <xs:element name="odstavec"> <xs:complextype mixed="true"> <xs:choice minoccurs="0" maxoccurs="unbounded"> <xs:element name="pojem" type="xs:string"/> <xs:element name="odkaz"> <xs:complextype> <xs:simplecontent> <xs:extension base="xs:string"> <xs:attribute name="url" type="xs:anyuri" use="required"/> </xs:extension> </xs:simplecontent> </xs:complextype> </xs:element> </xs:choice> </xs:complextype> </xs:element> Čemuž vyhovuje např. následující příklad: <odstavec> Vesmír se skládá ze 73% z <pojem>temné energie</pojem>. O ní se můžete více dočíst na stránkáchmudrce <odkaz url=" Diviše</odkaz>. </odstavec> Zde je také vidět, jak se musí obcházet situace, kdy chceme definovat element, který už neobsahuje žádné další elementy, ale obsahuje atribut. Musíme tedy definovat komplexní typ, obsahující rozšíření jednoduchého typu s hodnotou typu řetězec o atribut url. Také je zde vidět vyjádření povinnosti atributu atributem use s hodnotou required. Hodnota optional naopak značí, že atribut je nepovinný. U atributů můžeme také určit standardní hodnotu pomocí atributu default Normalizace hodnot Při validaci validační program nejprve udělá tzv. normalizaci hodnot. Tato operace nejprve nahradí všechny bílé znaky jako např. konce řádků a tabulátory mezerou. V dalším kroku ořízne mezery ze začátku a konce hodnot a vícenásobný výskyt mezer nahradí jednou mezerou. Normalizace se provádí na všechny datové typy s výjimkou string a normalizedstring a od nich odvozený uživatelských typů. U typu string se neprovádí normalizace vůbec a u typu normalizedstring se pouze znaky konce řádků a tabulátory převedou na znak mezera Jmenné prostory Aby byly elementy a atributy jednoznačné v rámci více schémat, zařazují se schémata do jmenných prostorů. Tak zamezíme možným konfliktům a umožníme používání více schémat

30 16 KAPITOLA 3. XML SCHÉMATA v jednom dokumentu. Příkladem může být např. XHTML stránka se SVG obrázkem, nebo dokumentace v DocBook s matematickými vzorci podle MathML. Jmenné prostory jsou identifikovány URL adresou, na které se ovšem nic konkrétního nenachází, ta souží pouze jako identifikátor daného jmenného prostoru. Elementu lze přiřadit jmenný prostor pomocí atributu xmlns. Pro zkrácení zápisu je možné definovat prefix daného jmenného prostoru, zápis elementu se poté zapíše jednoduše prefix:element Připojení WXS k dokumentu Pokud chceme říci parseru, kde se nachází schéma našeho dokumentu, použijeme značky z jmenného prostoru Jestliže používáme jmenné prostory, použijeme atribut schemalocation, jehož hodnota obsahuje dvojice hodnot URI a umístění schématu, kde dvojice jsou odděleny bílými znaky, jako např. mezera: <vuz xmlns="urn:schemas:vuz:1.0" xmlns:xsi=" xsi:schemalocation="urn:schemas:vuz:1.0 vuz.xsd"> <!--obsah--> </vuz> Pokud jmenné prostory nepoužíváme, stačí nám atribut nonamespaceschemalocation, jehožhodnotoujeurladresa,kdesenacházíschéma.tamůžebýtirelativní,např.zde vidíme, že se soubor se schématem nachází přímo v adresáři s dokumentem: <vuz xmlns:xsi=" xsi:nonamespaceschemalocation="vuz.xsd"> <!--obsah--> </vuz> Modularizace schémat Často naše schéma nabobtná do takových rozměrů, že je obtížné a nepřehledné s ním pracovat v jednom souboru. Proto můžeme schéma rozdělit do několika souborů, a ty pomocí elementu include vložit do našeho souboru: <xs:include schemalocation="cast-schematu.xsd"/> 3.4 Relax NG schéma Úvod Relax NG je nejnovější ze zde popisovaných schémat. Bylo vyvinuto konsorciem OASIS a standardizováno organizací ISO. Jedná se o velmi mocný, ale zároveň elegantní jazyk pro zápis XML schémat. Ačkoliv jeho specifikace je daleko jednodušší a do počtu stránek kratší než u WXS, Relax NG se jeví býti hlavním formátem pro XML schémata. Tomu nasvědčuje i fakt,

31 KAPITOLA 3. XML SCHÉMATA 17 že Kohsuke Kawaguchi ze společnosti Sun pracuje na programu Sun Multi-Schema Validator (MSV),kterýmábýtvalidátoremproDTDschémata,RELAXNGschémataaW3CXML Schemata. Přitom všechna schémata jsou při kontrole převedena do vnitřní formy, která je jednoduše Relax NG. To demonstruje, že vyjadřovací síla Relax NG[10] je tak silná a flexibilní, že 99% omezeních, které lze vyjádřit v ostatních jazycích, lze zapsat v Relax NG. NarozdílodWXS,kteréjezaloženonadatovýchtypech,jeRelaxNGzaloženonavzorech. Schéma napsané v Relax NG je vzor dokumentu, který se skládá z vzorů pro elementy, atributy a textové uzly. U těchto vzorů pak můžeme určovat, zda jsou povinné, počet opakování, dále je lze kombinovat do uspořádaných i neuspořádaných skupin. Tímto jednoduchým způsobem můžeme specifikovat i složité struktury v dokumentu. StejnějakoWXS,iRelaxNGjezapisovánovXMLjazyce.AleoprotiWXSRelaxNG nabízí i jinou formu zápisu. Jedná se o tzv. kompaktní syntaxi, která je člověkem mnohem lépe čitelná než XML zápis a samozřejmě se také lépe vytváří. Přitom jsou oba způsoby zápisu mezi sebou plně převeditelné. XML zápis se obvykle umísťuje do souboru s koncovkou rng, kompaktní syntaxe pak do souboru s koncovkou rnc. Pro porovnání si uvedeme příklady obou zápisů(stejně tak i u většiny následujících příkladů v této podkapitole). Schéma, které budou popisovat, je schéma dokumentu popisující vozy,ukterýchnászajímáznačka,typ,rokvýrobyahmotnost.každývůzbudemítsvůj identifikátor id jako atribut. Nejprve příklad XML zápisu: <element xmlns=" name="vuz"> <attribute name="id"> <text/> </attribute> <element name="znacka"> <text/> <element name="typ"> <text/> <element name="vyrobeno"> <text/> <element name="hmotnost"> <text/> A nyní totéž schéma zapsané v kompaktní syntaxi: element vuz { attributeid { text }, elementznacka { text }, elementtyp { text }, element vyrobeno { text }, element hmotnost { text } } Tomu potom vyhovuje následující XML:

32 18 KAPITOLA 3. XML SCHÉMATA <vuz id="3"> <znacka>škoda</znacka> <typ>fabia Combi</typ> <vyrobeno>2006</vyrobeno> <hmotnost>1150kg</hmotnost> </vuz> Na předchozích příkladech vidíme 3 elementy základních typů vzorů, ze kterých se Relax NG schéma skládá, pro elementy je to element element, pro atributy je to element attributeaprotextovéuzlyjetoelementtext.narozdílodwxs,vrelaxnglzetyto elementy libovolně kombinovat(ve WXS mohly být atributy pouze na konci), což umožňuje při kombinaci s dalšími elementy mnohem větší vyjadřovací schopnost Opakování vzorů Pokud chceme vyjádřit počet opakování některého vzoru, vložíme ho do elementů pro opakování. Například pro vyjádření toho, že vzor je nepovinný(počet opakování 0 až 1), vzor vložíme do elementu optional, např. pro vyjádření toho, že element hmotnost je nepovinný bude schéma vypadat takto: <element name="vuz"> <element name="znacka"> <text/> <element name="typ"> <text/> <optional> <element name="hmotnost"> <text/> </optional> V kompaktní syntaxi se počet opakování vyjadřuje speciálním znakem za vzorem, jehož počet opakování chceme ovlivnit. V případě že opět chceme vyjádřit že hmotnost je nepovinná, jespeciálnímznakemznak? : element vuz { element znacka { text }, element typ { text }, element hmotnost { text }? } Stejným způsobem se vyjadřují i ostatní počty opakování. Pokud chceme vyjádřit, že se atribut vyskytuje alespoň jednou, ale může se libovolně opakovat, vložíme vzor do elementu oneormore,resp.vkompaktnísyntaxiumístímezavzorznak +.Pokudsevzoropakuje libovolně, ale je nepovinný, umístíme ho do elementu zeroormore, resp. v kompaktní syntaxi zanějvložímeznak *. Pro přehlednost uvádím tabulku s elementy a znaky(tab 3.1).

33 KAPITOLA 3. XML SCHÉMATA 19 Počet opakování RNG RNC 1 0 až 1 optional? 1 a více oneormore + 0 nebo více zeroormore * Tabulka 3.1: Počty opakování vzorů V Relax NG není možnost přímo specifikovat přesný počet opakování jako ve WXS pomocí atributů minoccurs a maxoccurs. Naštěstí v praxi situace, kdy toto potřebujeme, nastává velmizřídka.ipřestotolzeobejíttak,žeuvedemevzortolikrát,kolikjeminimumvýskytůa poté zbytek do maxima výskytů uvedeme v elementech optional resp. v kompaktní syntaxi se znakem?.např.provyjádření,žedanýelementmápočetopakování3až5uvedemeelement 3x a poté ještě dvakrát uvozený v elementu optional. Pro větší počty a složitější schémata je tento způsob ale nepřehledný. V takovém případě může být ulehčením využití pojmenovaných vzorů(viz. dále). Pro vyjádření toho, že má být obsah elementu prázdný, slouží vzor empty. Typicky se používá v XHTML pro horizontální oddělovače hr, nebo odřádkování br Seskupování, výběr a prolínání Základní vzory lze seskupovat do skupin. S těmito skupinami můžeme pak zacházet stejně, jako s jednoduchými vzory, tj. například vyjádřit počet opakování, ale i další možnosti o kterých bude tato kapitola. Seskupení vzorů do skupiny provedeme tak, že vzory, které chceme seskupit, vložíme do elementu group, resp. v kompaktní syntaxi je uvedeme v kulatých závorkách a oddělíme čárkou. Pokudchcemeveschématuvyjádřit,žesezurčitéskupinyvzorůmávdokumentuvyskytovat právě jeden, vložíme tyto vzory do elementu choice, resp. v kompaktní syntaxi tyto variantyoddělujemeznakem. Posledním vzorem, který je v Relax NG v kombinaci s ostatními vzory velmi mocný, můžeme vyjádřit to, že se dané vzory mohou vyskytovat v libovolném pořadí. Vyjádříme to tak, že dané vzory uvedeme uvnitř elementu interleave, resp. v kompaktní syntaxi je oddělíme znakem &. Velká vyjadřovací síla Relax NG spočívá v kombinaci těchto vzorů. Vzory je možné téměř libovolně kombinovat. Podmínkou je, aby bylo výsledné schéma jednoznačné(touto problematikou se zabývá např.[10]). Na několika příkladech si ukážeme, jak je možné tyto vzory kombinovat. V první části následujícího příkladu umožňujeme pro osobu zadat buď element jmeno nebo oba elementy krestni a prijmeni. To uděláme kombinací vzoru pro skupiny s vzorem provýběr.vdruhéčástipotomvyjádřímeto,že můžebýtbuďatribut,neboelement.zde jevidětjakémožnostizískávárelaxngdíkytomu,žesevzorproatributymůževyskytovat kdekoliv mezi ostatními vzory. <element name="osoba"> <choice> <element name="jmeno"> <text/>

34 20 KAPITOLA 3. XML SCHÉMATA <group> <element name="krestni"> <text/> <element name="prijmeni"> <text/> </group> </choice> <choice> <element name=" "> <text/> <attribute name=" "/> </choice> element osoba { (element jmeno { text } (elementkrestni { text }, element prijmeni { text })), (element { text } attribute { text }) } Tomu potom vyhovují např. následující příklady: <osoba ="tollan@tauri.com"> <krestni>jan</krestni> <prijmeni>tollan</prijmeni> </osoba> <osoba> <jmeno>jan Tollan</jmeno> < >tollan@tauri.com</ > </osoba> Pomocí vzoru interleave můžeme např. jednoduše zapsat smíšený obsah, který se často používá v textově orientovaných XML aplikacích jako je XHTML nebo Docbook. Typickým příkladem je odstavec(para) s elementy pro zvýraznění(strong) a odkaz(link) ve kterém se mezi těmito elementy může libovolně vykytovat text: <element name="para"> <interleave> <zeroormore> <element name="strong"> <text/> </zeroormore> <zeroormore> <element name="link">

35 KAPITOLA 3. XML SCHÉMATA 21 <attribute name="url"/> <text/> </zeroormore> <text/> </interleave> element odstavec{ elementpojem { text }* & element odkaz { attributeurl { text }, text }* & text } Vzor text odpovídá jak prázdnému řetězci, tak libovolnému počtu opakování, proto u něj není třeba zdůrazňovat počet opakování. Jelikož se smíšený obsah v textově orientovaných XML aplikacích používá často, zavádí Relax NG element mixed, který přímo vyjadřuje, že mezi vzory, které obsahuje, může být i text, tudíž už není třeba uvádět vzor text: <element name="para"> <mixed> <zeroormore> <element name="strong"> <text/> </zeroormore> <zeroormore> <element name="link"> <attribute name="url"/> <text/> </zeroormore> </mixed> element odstavec{ mixed { element pojem { text }* & element odkaz { attributeurl { text }, text }* } } Těmto předpisům vyhovuje např.: <para> Hmota jak ji známe tvoří pouze <strong>4%</strong> <link url="godsuniverse.org">vesmíru</link>. </para>

36 22 KAPITOLA 3. XML SCHÉMATA Datové typy Samotné Relax NG mnoho datových typů nenabízí, ale má zabudovaný mechanismus, který dovoluje používat datové typy z libovolných externích knihoven. Nejčastěji se používají datové typyzw3cxmlschémat.tudížmůžemeivrelaxngkontrolovat,zdahodnotaelementuči atributu vyhovuje datovému typu. Datový typ určíme pomocí vzoru data. Jeho atribut type určuje datový typ. Knihovnu datových typů určíme pomocí dalšího atributu vzoru data datatypelibrary. Na příkladu vidíme knihovnu datových typů WXS určenou jejím URL: <element name="hmotnost"> <data type="decimal" datatypelibrary=" Specifikovat knihovnu datových typů pro každý element a atribut, u kterého chceme určit datový typ, by bylo pracné. Proto stačí specifikovat knihovnu jednou, pouze v kořenovém elementu a všechny vzory uvnitř tohoto elementu dědí definici aktuální knihovny datových typů. V kompaktní syntaxi se pak datové typy zapisují pomocí prefixu, který si vytvoříme pro danou datovou knihovnu, dvojtečky a samotného jména datového typu: datatypes xs = " element hmotnost{ xs:decimal} Jelikož se typy z WXS používají zdaleka nejčastěji, je pro ně předdefinována předpona xsd: element hmotnost{ xsd:decimal} Parametry datových typů Pro datové typy lze určit další upřesňující parametry. Pro datové typy z WXS tak můžeme určit většinu integritních omezení, která známe z předchozí kapitoly o WXS. Pro nastavení parametru daného datového typu se používá atribut name, který specifikuje jméno parametru a jehož obsahem je hodnota tohoto parametru. <element name="adresa" xmlns=" datatypelibrary=" <element name="mesto"> <data type="string"> <param name="minlength">2</param> <param name="maxlength">25</param> </data> <element name="cp"> <data type="decimal"> <param name="mininclusive">1</param> <param name="maxexclusive">100000</param> </data>

37 KAPITOLA 3. XML SCHÉMATA 23 <element name="psc"> <data type="string"> <param name="pattern">\d{3}\d{2}</param> </data> element adresa { element mesto { xsd:string{minlength = "2" maxlength="25" } }, elementcp { xsd:decimal{ mininclusive = "1" maxexclusive = "100000"} }, element psc { xsd:string{pattern = "\d{3} \d{2}" } } } Tomuto předpisu vyhovuje např.: <adresa> <mesto>aš</mesto> <cp>211</cp> <psc>250 11</psc> </adresa> Výčtové typy Relax NG nabízí možnost specifikovat možné hodnoty atributu nebo elementu. Proto je zakázáno používání parametru datového typu enumeration. Pro vytvoření seznamu přípustných hodnot se používá vzorů value uvedené ve vzoru choice: <attribute name="znacka"> <choice> <value>škoda</value> <value>ford</value> <value>lamborghini</value> </choice> </attribute> attribute znacka { "Škoda" "Ford" "Lamborghini"}, Pokud nám stačí pouze jedna přípustná hodnota, můžeme vzor choice vynechat. U atributu elementu můžeme také specifikovat datový typ pomocí atributu type. Má to smysl např. pokud chceme zakázat normalizaci bílých znaků. To provedeme specifikováním datového typu string. V kompaktní syntaxi se tento datový typ zapisuje jednoduše před danou hodnotu.

38 24 KAPITOLA 3. XML SCHÉMATA Nepovolené hodnoty Někdy je vhodnější specifikovat hodnoty, kterých element či atribut nabývat nesmí. Vyjádření tohoto požadavku se zapisuje pomocí vzoru except. <element name="jehlicnany"> <data type="string"> <except> <choice> <value>dub</value> <value>buk</value> <value>bříza</value> </choice> </except> </data> element jehlicnany{ string - (("dub" "buk" "bříza")) } Seznamy Pro některé aplikace XML se hodí pro zkrácení zápisu zapsat několik hodnot do jedné hodnoty elementu nebo atributu. Z hlediska filozofie XML to není sice nejlepší, ale pro různé aplikace to může výrazně zkrátit a zpřehlednit zápis dat. Např. zapsat 3D souřadnice bodu každou do zvláštního elementu či atributu by bylo možno zkrátit následovně: <trojuhelnik> <bod> </bod> <bod> </bod> <bod> </bod> </trojuhelnik> Ve schématu toho docílíme pomocí seznamu, který se uvádí elementem list. Jeho obsahem jsou datové typy nebo hodnoty, které se v daném atributu nebo elementu mohou nacházet oddělené mezerou. <element name="bod"> <list> <data type="decimal"/> <data type="decimal"/> <data type="decimal"/> </list> element bod { list { xsd:decimal, xsd:decimal, xsd:decimal} }

39 KAPITOLA 3. XML SCHÉMATA Modularizace schémat Často se stává, že se jisté vzory vyskytují na více místech, typickým příkladem je adresa, která bude jak u zaměstnanců podniku, tak u dodavatele a odběratele na faktuře apod. Proto Relax NG umožňuje pro tyto vzory definovat jméno, na které se potom jednoduše odkážeme. Definice jména nebo více jmen musí být v tagu grammar, aby byla splněna podmínka XML, že každý dokument musí mít právě jeden kořenový element. Jméno potom specifikujeme elementem define. Pokud používáme tyto definice, tak musíme ještě pomocí tagu start definovat, kde validace začíná. <grammar xmlns=" <start> <element name="faktura"> <element name="adresadodavatele"> <ref name="adresa"/> <element name="adresaodberatele"> <ref name="adresa"/> </start> <define name="adresa"> <element name="mesto"> <text/> <element name="ulice"> <text/> <element name="psc"> <text/> </define> </grammar> start = element faktura { element adresadodavatele{ adresa }, element adresaodberatele{ adresa } } adresa = elementulice { text }, elementměsto { text }, elementpsč { text } Jmenné prostory Stejně jako WXS i Relax NG umožňuje deklarovat elementy a atributy patřící do jmenného prostoru. Náležitost k jmennému prostoru pro vzor atributu či elementu se vyjádří atributem

40 26 KAPITOLA 3. XML SCHÉMATA ns, jehož hodnotou je jméno jmenného prostoru. V praxi by samozřejmě bylo pracné psát u každého elementu atribut ns se jménem jmenného prostoru, a proto elementy dědí jmenný prostor od svých předků. Toto však platí jen pro elementy, nikoliv pro atributy, u těch jmenný prostor uvádět musíme. <element xmlns=" name="a" ns="urn:schemas:pokus"> <element name="b"> <text/> <element name="c"> <text/> Pokud definujeme schéma, které používá více jmenných prostorů, můžeme si nadefinovat prefixy pro dané jmenné prostory, které potom budeme používat před danými elementy a atributy. Mezi prefixem a jménem elementu bude dvojtečka. V kompaktní syntaxi se prefix definuje slůvkem namespace: <element xmlns=" name="vu:vuz" xmlns:vu="urn:schemas:vuz" xmlns:car="urn:schemas:car"> <element name="car:weight"> <text/> namespace vu = "urn:schemas:vuz" namespace car = "urn:schemas:car" element vu:vuz { element car:weight{ text } } Často definujeme schéma, kde je většina atributů a elementů z jednoho jmenného prostoru a jen několik málo jich je z jiných jmenných prostorů. Proto se hodí definovat implicitní jmenný prostor, do kterého potom patří všechny elementy, které jsou uvedeny bez prefixu. Toto opět platí pouze pro elementy, protože i v dokumentu psaném podle schématu se implicitní jmenný prostor na atributy nevztahuje. Implicitní jmenný prostor se v kompaktní syntaxi definuje slůvky default namespace, v XML syntaxi mu pak odpovídá zápis na příkladu výše, kde se pomocí atributu ns definuje jmenný prostor, který se poté dědí všechny elementy uvnitř kořenového elementu. default namespace vu = "urn:schemas:vuz" namespace car = "urn:schemas:car" element vuz { element car:weight{ text } }

41 KAPITOLA 3. XML SCHÉMATA Shrnutí vlastností XML schémat Nejstaršími a nejrozšířenějšími XML schématy jsou DTD schémata. Dnes už mají mnohdy nedostačující vyjadřovací schopnosti. Nepodporují datové typy ani jmenné prostory. Ačkoliv jsou schématem pro XML, tak nejsou zapisovány v XML notaci. Velkou předností je jednoduchost a podpora v software. Základem W3C XML jsou datové typy. W3C XML schémata mohou vyjádřit mnohem složitější omezení než DTD. Jsou zapisovány XML notací a podporují jmenné prostory. Velkou nevýhodou je složitost a délka specifikace. Relax NG schémata jsou nejmladší z uvedených. Jejich vyjadřovací síla je asi největší a zároveň jejich specifikace je mnohem kratší než u W3C XML schémat. Podporují dva způsoby zápisu, jeden je XML notací, druhý tzv. kompaktní notací. Druhý uvedený je vhodný pro editaci člověkem, protože je daleko lépe čitelný a také kratší. Oba zápisy jsou mezi sebou plně převeditelné. Relax NG schémata sice přímo moc datových typů nepodporují, ale mají mechanismus pro využití externích knihoven, včetně datové knihovny W3C XML schématu. Také jmenné prostory jsou podporovány. Nevýhoda je poměrně malá podpora v software, jelikož jsou např. oproti DTD relativní novinkou.

42 28 KAPITOLA 4. ANALÝZA 4 Analýza 4.1 Podobné existující projekty V této kapitole provedu průzkum podobných projektů, aby bylo zřejmé, že tento projekt přinese něco nového a užitečného. Tímto průzkumem také jistě získám řadu poučení a dobrých nápadů. Průzkum se bude týkat především open source a také freeware projektů, které spadají do stejné nebo podobné kategorie[2], jako tento projekt Emacs+nXMLmód Platformy: Linux, Windows a mnoho dalších Zvýraznění syntaxe: Ano XML schéma: Ano(RelaxNG, W3C Schema, DTD) Domovská stránka: Licence: GPL Samotný editor Emacs asi není nutno představovat. Ve zkratce se jedná o velmi mocný editor, který má vlastní vnitřní skriptovací jazyk založený na jazyku Lisp, jménem Emacs Lisp. Má také velmi dobře propracovaný systém zkratek, který je standardně navolen tak, že uživatel nemusí přesouvat ruce k navigační části klávesnice(šipky, atd.). Velká výhoda tohoto přístupu je v tom, že uživatel neztratí základní polohu prstokladu na klávesnici, a tudíž je psaní a editace jakéhokoliv textu rychlejší. Navíc funkce této navigace nejenže nahrazují tuto část klávesnice, ale jsou i mnohem efektivnější. Např. umožňují navigaci a editaci po slovech, větách apod. Samozřejmostí je možnost si tyto zkratky předefinovat, dále je možné na klávesové zkratky namapovat libovolné funkce editoru. Pro usnadnění editace XML kódu můžeme použít nxml mód. Samozřejmostí je zvýraznění syntaxe a automatické odsazení tagů dle jejich hierarchie. Hlavní vlastnost tohoto módu je možnost načtení XML schéma a s tím související velmi užitečné možnosti. Editor s načteným XML schématem umožňuje klávesovou zkratkou vyvolat nápovědu, která např. vkládání tagu(či atributů) uživateli říká, který tag je dle schématu a kontextu současné pozice kurzoru možné vložit. Pokud jsou uvedena počáteční písmena, editor zobrazuje už jen tagy začínající těmito písmeny. Nicméně i zde by se dalo hodně zlepšit. Například by editor sám mohl vkládat koncové tagy při vkládání počátečních nebo automaticky doplňovat jména tagů či elementů, když je dle schématu jednoznačně dané, který tag na dané pozici musí povinně být. Bohužel seznam možných elementů a atributů k dokončení se zobrazuje velmi nevhodným způsobem. Okno editoru se rozpůlí na dvě části a nápověda tak zabere celou spodní půlku editoru. To je pravděpodobně způsobeno zastaralou GUI knihovnou editoru Emacs, která toho kromě velmi mocné komponenty pro editování textu moc nenabízí. Na druhou stranu tento editor jako jediný z uvedených lze provozovat i v textovém terminálu. Další vlastnost, kterou tento editor disponuje, je validace dokumentu dle načteného schématu, která probíhá za běhu. Jako snad jediná z uvedených editorů podporuje kromě kontroly jmen tagů, atributů a jejich hierarchie i kontrolu obsahu elementu a hodnot atributů podle uvedeného datového typu ve schématu. Pokud uvedeme hodnotu, která neodpovídá příslušnému typu, editor ji podtrhne.

43 KAPITOLA 4. ANALÝZA 29 Obrázek 4.1: Screenshot programu Emacs Zhodnocení JednáseovelmimocnýeditorsnejlepšípodporouXMLschématzevšechzdeuvedených editorů. Bohužel má už dnes poněkud zastaralé grafické uživatelské rozhraní, které např. pro nápovědu dokončení XML tagu otevře nové okno přes půlku editoru Kate Platformy: Linux(KDE) Zvýraznění syntaxe: Ano Domovská stránka: XML schéma: ANO(pouze DTD) Licence: GPL Jedná se o obecný editor pro KDE. Podporuje zvýraznění syntaxe nejen pro XML, ale i pro mnoho programovacích jazyků a jiných formátů souborů. Kromě toho pro něj existují pluginy XML Completion a XML Validation. Díky XML Completion můžeme načíst DTD schéma a podle něj program při vkládání tagu(povloženíznaku < )dáuživatelivybratztagů,kteréjsoudleschématupřípustné.

44 30 KAPITOLA 4. ANALÝZA Stejnětakjetomuuatributů.Nabízenémožnostiseobjevívmalémokněhnedpodkurzorem, a když uživatel píše, tak se automaticky okruh možného výběru zmenšuje na ty, které stejně začínají. Bohužel editor trpí několika zbytečnými nedostatky, např. po vložení tagu pomocí vybrání taguzvýběrumožnýchsesicedoplníikoncovýtag,alekurzorskočíažzatentokoncovýtag, tudížseuživatelmusívracetzpět,pokudchcevložitněcodotagunebomupřidatatribut (drtivá většina případů). Další nepříjemnost je, že pokud uživatel psaní jména tagu nedokončí a přesuneme kurzor jinam a pak se na místo vrátí, není možné již dokončování vyvolat. PluginXMLValidationnapovelzmenuzhodnotí,zdajeXMLsoubordleschématu validní a podá detailní hlášení o chybách včetně místa, kde jsou. Mnohem lepší by však bylo, kdyby program prováděl validaci automaticky a např. podtrhával chyby, aby uživatel včas zjistil, že píše nevalidní dokument. Jelikož program umí pracovat pouze s DTD schématy, neumí kontrolovat typ obsahu tagů a atributů. Obrázek 4.2: Screenshot programu Kate Zhodnocení Tento editor má pěkně zpracované GUI pro výběr možných tagů a atributů dle DTD schématu. Bohužel trpí několika nedostatky, které rychlou editaci XML kódu znesnadňují. Také možnost kontroly validity je omezena pouze na DTD schéma a validace se musí explicitně vyvolat a nepodtrhává chyby v textu(pouze dá hlášení o chybách).

45 KAPITOLA 4. ANALÝZA Jaxe Platformy: Java Zvýraznění syntaxe: Ano Domovská stránka: XML schéma: Ne Licence: GPL Tento editor je napsaný v jazyce Java, tím pádem přenositelný na mnoho platforem. Jedná se o editor, který má blíže k vizuálním editorům. Umožňuje editovat několik typů XML souborů(xhtml, W3C XML schéma, XSLT, a částečně DocBook). Pro tyto XML soubory jsou v programu nadefinovány speciální konfigurační soubory, které definují vzhled jednotlivých elementů, ale i např. možnost přidávání pouze správných tagů a atributů dle kontextu. Pomocí těchto souborů je tedy možné i např. aby byly matematické vzorce(které se zapíší obyčejným textovým editorem jako text) zobrazovány vizuálně, tak jak skutečně vypadají, přímo v editovaném dokumentu. V pravé části okna programu je vlastní dokument, v levé pak několik užitečných záložek. V první je hierarchické zobrazení XML pomocí stromu. V druhé potom nápověda, které elementy je možné vkládat v daném kontextu. Třetí pak možné atributy pro vybraný element. Velkou nevýhodou tohoto editoru je, že lze editovat pouze soubory, pro které existuje příslušný konfigurační soubor. Nicméně je tu i možnost si tyto soubory vytvořit. Bohužel klávesové zkratky pro různé akce jsou spíše výjimkou. Zhodnocení Tento program umožňuje editaci několika vybraných typů XML souborů, a to částečně vizuální formou. Je však i rozšířitelný, tudíž je možné dopsat speciální konfigurační soubory i pro jiné typy XML souborů Teddy XML Editor Platformy: Linux, Windows, Max OS X Zvýraznění syntaxe: Ne Domovská stránka: XML schéma: Ne Licence: GPL Tento editor se od ostatních odlišuje. Autor měl zajímavý nápad editovat XML pomocí tabulky podobné sešitu z programů MS Excel či OpenOffice Cacl. Uživatel je tak odstíněn od zdrojového kódu XML. Hierarchické úrovně jsou zde znázorněny pomocí odsazení o jeden sloupec. Element, atributy, hodnoty atributů a text jsou buňky sešitu a jsou odlišovány různou barvou pozadí. Názvy atributů jsou o řádek výše než element a nad příslušnou hodnotou atributu(tvoří hlavičku tabulky atributů). To umožňuje pro skupinu stejných elementů uvést název atributu pouze jednou jako hlavičku sloupce pro několik řádků najednou(viz. screenshot na obr. 4.4).

46 32 KAPITOLA 4. ANALÝZA Obrázek 4.3: Screenshot programu Jaxe Program má na každou akci klávesovou zkratku, bohužel tyto zkratky nelze předefinovat dle přání uživatele. Program sám sice neumožňuje přímou editaci XML kódu, ale je možné vyvolat nabídkou z menu externí editor, který si uživatel může zvolit. V prostředí KDE je jako výchozí nastaven výše zmíněný editor Kate. Zhodnocení Editor se zajímavým způsobem editace XML přes rozhraní podobné tabulkovým procesorům. Nepodporuje však žádný způsob dokončování či validace na bázi XML schémat KXMLEditor Platformy: Linux(KDE) Zvýraznění syntaxe: Ano XML schéma: Ne Domovská stránka: Licence: GPL Jedná se o XML editor, v kterém probíhá editace pomocí editace uzlů hierarchického XMLstromu,kterýjevlevéčástiobrazovky.Pokudjeaktivníelement,taksevpravéčásti

47 KAPITOLA 4. ANALÝZA 33 Obrázek 4.4: Screenshot programu Teddy XML Editor nachází tabulka s atributy. Pokud je aktivní textový uzel, tak je zde přímo zobrazený text. Dále editor zobrazuje XML kód podstromu, jehož kořenem je vybraný uzel stromu. Uživatel tedy je při tvorbě odstíněn od zdrojového XML kódu, ale zároveň na něj může nahlédnout. Pro vkládání elementů, atributů atd. jsou zde definovány klávesové zkratky, které je možné i předefinovat. Je možná i přímá editace kódu, ovšem bez jakékoliv asistence, pouze k orientaci pomáhá zvýrazněná syntaxe. Užitečné je, že při ukončování editace se udělá alespoň základní kontrolu XML, takže je uživatel upozorněn na invalidní kód. Zhodnocení Editor nad XML stromem(strom pomocí GUI), který umožňuje i přímou editaci XML kódu, avšak bez jakékoliv pomoci uživateli. Nepodporuje žádné XML schéma xmloperator Platformy: Java Zvýraznění syntaxe: Ne XML schéma: ANO(DTD, RelaxNG) Domovská stránka:

48 34 KAPITOLA 4. ANALÝZA Obrázek 4.5: Screenshot programu KXMLEditor Licence: BSD-style Jedná se o XML editor napsaný v javě, využívající knihovnu Xerces. V editoru vytváříme a editujeme XML soubor vizuálně pomocí stromu. Do stromu vkládáme uzly jakožto elementy XML, struktura stromu pak znázorňuje vnořování elementů. Velkou výhodou tohoto editoru je, žepodporujexmlschémata,atodtdarelaxng.pokudmámenačtenéschéma,taknámpři vkládání elementů a atributů dá editor na výběr jen z možností povolených v daném kontextu. Také pokud jsou některé elementy či atributy povinné, tak je hned sám doplní. Velkou výhodou je, že takto vytvořený dokument je vždy validní. Další výhodou je, že každá akce má svou klávesovou zkratku, což velmi urychluje vytváření a editaci XML souboru. Bohužel není možné klávesové zkratky předefinovat. Editor má ale i mnoho často zbytečných nedokonalostí. Např. není vidět, že je označen uzel stromu, který je prázdný text, takže uživatel ztrácí přehled, kde se v dokumentu nachází. Další zbytečnou nedokonalostí je, že po vložení elementu, který může dle schématu obsahovat jiné elementy, program při vkládání jeho obsahu nenabízí možnost vybrat si z těchto elementů, ale pouze vloží prázdný text. Teprve když tento text změníme na nějaký element, tak nám program při vkládání obsahu do prvně vloženého elementu nabídne možnost vybrat si elementy dle schématu. Podobná chyba je i opačným směrem, tj. když chceme vložit text do elementu, který obsahuje jiný element, tak nám není tato možnost při vkládání dána, proto musíme nejdříve vložit libovolný element a poté ho změnit na text. Editor sice podporuje přímou editaci XML kódu, ale po uložení pomocí save v dialogu editace se dokument nesesynchronizuje s načteným dokumentem, tudíž je v programu načtená

49 KAPITOLA 4. ANALÝZA 35 neaktuální kopie a při uložení o data z editace XML souboru přijdeme. Musíme tedy ještě předtím provést znovuotevření téhož dokumentu(reopen). Také v okně přímé editace není ani zvýrazněná syntaxe, ani se neprovádějí žádné kontroly, proto není problém napsat nevalidní kód. Další nevýhodou tohoto programu je, že výstupní XML soubor je pouze jedna dlouhá řádka,tudížčlověkemtéměřnečitelný.editorsiceobsahujevolbu indentelements (odsazení elementů), která dokument přehledně odřádkuje a odsadí podle úrovně vnoření, nicméně po aplikování této transformace se před a za každý element ve stromu editoru doplní prázdné textovéuzly.tensepoténačnedostromu,tudížjezasetéměřnemožnésevyznatpřistandardním editování ve stromu, protože se počet uzlu ztrojnásobí. Obrázek 4.6: Screenshot programu xmloperator Zhodnocení Jedná se o vizuální XML editor, který k editaci používá strom XML uzlů. Jeho předností je možnost používání XML schémat. Bohužel obsahuje mnoho malých chyb, který ho dělají obtížně použitelným Shrnutí Žádný z editorů plně neodpovídá požadavkům na tento projekt specifikovaným v kapitole 2.3, jako např. zjednodušená XML syntaxe a jednoduchou možnost rozšíření. Jako jediný editor s dobrou podporou XML schémat se ukázal být Emacs, který má dnes již velmi zastaralé grafické uživatelské rozhraní. Použitelným se jeví i editor Kate, který však nepodporuje automatickou validaci dle schématu během editování a trpí jinými menšími chybami.

50 36 KAPITOLA 4. ANALÝZA Myslím že projekt prezentovaný v této práci přinese do světa open source a freeware něco nového a že bude užitečným nástrojem pro efektivní editaci datových a především konfiguračních XML souborů. 4.2 Výběr technologií V této podkapitole probereme jednotlivé možnosti nástrojů potřebných k implementaci projektu. Diskutovat se zde budou programovací jazyky, GUI a jiné podpůrné knihovny, vývojové nástroje apod Programovací jazyk V dnešní době se již běžně používají jazyky, které se nekompilují přímo do strojového kódu procesoru, ale používají např. virtuální stroje či se jiným způsobem interpretují. Jejich výhoda je větší efektivita programátora, protože se např. starají o uvolňování paměti(pomocí tzv. garbage collectoru). Vzhledem k požadavkům na multiplatformnost byly nejlepšími kandidáty Java a Python. Oba jazyky jsou dostatečně rozšířené, mají velkou podporu ze strany knihoven třetích stran a jsou zdarma. Na základě průzkumu i vlastních zkušeností jsem pro implementaci vybral Python. Podobně jako programování v Javě je několikrát produktivnější, než např. v C++, tak i programování v Pythonu je několikanásobně produktivnější než v Javě[5][1]. Stejně tak z důvodů podpory vytváření rozšíření editoru se více hodí Python, který se nemusí nikterak kompilovat a jeho syntaxe je jednodušší a kratší. Dalšími odstavci toto tvrzení podepřu několika příklady a vysvětleními. Jeden z největších rozdílů mezi Javou a Pythonem je v typové kontrole. Oba jazyky jsou sice silně typované, ale Java je staticky typovaný jazyk, tzn. že ke každé proměnné musí být explicitnězadanýijejítyp,kterýjetímpádemznámjižpřipřekladu. Oproti tomu Python je dynamicky typovaný jazyk, proměnná(ani její typ) se zde nikdy nedeklaruje. V pythonu je objekt vše, včetně obyčejných celočíselných konstant. Proměnná se sváže s objektem pomocí operátoru přiřazení. Pokud je proměnné přiřazen objekt, může ji být později přiřazen i objekt jiného typu. Ale Python je stále silně typovaným jazykem, neboť v každém okamžiku víme, jakého typu je daná proměnná. Kontejnery v Pythonu, jako např. seznamy(lists) a asociativní pole (dictionaries) ukládají objekty libovolného typu, což samozřejmě znamená i čísla či jiné kontejnery. Pokud vyzvednete objekt z kontejneru, stále si pamatuje svůj typ, tudíž není nutné přetypování. VPythonutakémůžemenajítpolymorfismusvpravémslovasmyslu,tj.nejenuobjektů, které dědí z jednoho potomka(pomocí dědičnosti), ale i polymorfismus nad společným protokolem. To znamená, že stačí, aby dva objekty implementovali stejně se jmenující metodu a jsou nad touto metodou polymorfní, přitom od sebe nedědí a nemají společného předka(kromě Object). Další vlastností Javy je upovídanost, tzn. že obsahuje více slov, než je nezbytné. Python oproti tomu vyjádří hodně v několika málo slovech, obvykle přesně, stručně, bez nadbytečností. V kódu jazyka Python se pak také lépe člověk orientuje. UpovídanostJavyilustrujeklasickýpříkladprogramu Helloworld! : public class HelloWorld {

51 KAPITOLA 4. ANALÝZA 37 } public static void main (String[] args) { System.out.println("Hello world!"); } Oproti Pythonu: print "Hello world!" Dalším příkladem je objekt, který potřebujeme inicializovat s jedním, dvěma či třemi parametry. V Javě musíme napsat tři konstruktory: public class Employee { private String myemployeename; private int mytaxdeductions = 1; private String mymaritalstatus = "single";... // constructor# public Employee(String argemployename) { myemployeename = argemployeename; } // constructor# public Employee(String argemployename, int argtaxdeductions) { myemployeename = argemployeename; mytaxdeductions = argtaxdeductions; } // constructor# public Employee(String argemployename, int argtaxdeductions, String argmaritalstatus) { myemployeename = argemployeename; mytaxdeductions = argtaxdeductions; mymaritalstatus = argmaritalstatus; } Oproti tomu v Pythonu díky vlastnosti implicitní hodnoty parametrů nám stačí pouze jeden konstruktor: class Employee: def init (self,

52 38 KAPITOLA 4. ANALÝZA argemployename, argtaxdeductions = 1, argmaritalstatus = "single"):... self.employeename = argemployeename self.taxdeductions = argtaxdeductions self.maritalstatus = argmaritalstatus Další příklad se týká počtu chyb, které programátor může udělat při psaní kódu. Vezměme třeba jednoduchou konstrukci if, ta v Javě vypadá následovně: if (a > b) { a = b; b = c; } AvPythonu: if a > b: a = b b = c Javamá6míst,kdesevyskytujířídícíznaky( {, }, (, ), ; ),avestejném příkladu má Python pouze jeden(dvojtečku). Programátor tak u Javy stráví mnohem více času uspokojováním kompileru, místo toho aby se soustředil na problém, který má řešit. Python má ještě jeden kontrolní znak, který jiné jazyky jako Java na první pohled nemají, tj. odsazovaní bloků. Jeho používání je ale prakticky nutnost u všech jazyků, protože bez odsazování se téměř nedá přehledný kód napsat. Samozřejmě Pythonmá isvé nevýhody,např.kvůlitomu, že sejednáodynamicky typovanýjazyk,semusímnohokontrolprovádětažzaběhuprogramu.vjavěužjemnoho ztěchtokontroludělánopřipřekladu.tojejedenzdůvodů,pročjepythononěcopomalejší nežjava.obajazykymajívdnešnídobějit(justintime)kompiler,kterýurychlujeběh programu. Výkon Pythonu není ale až tak velký problém, částečně proto, že počítače jsou dnes již na většinu problémů dostatečně rychlé, částečně z dobré podpory jazyka k ladění výkonu a dobré spolupráci s jazykem C/C++. Python má totiž v sobě zabudovaný profiler, kterým(v případě že nám výkon programu nevyhovuje, což se zas tak často nestává) můžeme jednoduše najít úzké hrdlo programu a to poté optimalizovat, popřípadě pomocí Python C API relativně jednoduše přepsat do jazyka C či C++. Pomocí tohoto API se také dají namapovat funkce již existující knihovny napsané vc/c++napythonazpythonupakjednodušepoužít GUI Knihovna S jazykem Python spolupracuje většina známých multiplatformních knihoven pro práci s grafickým uživatelským rozhraním. Jmenujme např. QT známé především z linuxového prostředí KDE, GTK+, které používá linuxové prostředí GNOME nebo třeba knihovnu wxwindows. Jelikož mám dobré zkušenosti s použitím GTK+ pod jazykem Python, rozhodl jsem se právě pro

53 KAPITOLA 4. ANALÝZA 39 tuto knihovnu. K tomuto výběru mě také vedla možnost vizuální tvorby GUI pomocí nástroje GTKGladebuilder,vkterémjemožnoGUIvytvořitjednodušepomocímyši,uložithodoXML souboru a ten poté načíst do vlastní aplikace. V Pythonu se GTK+ používá prostřednictvím knihovny PyGTK. GTK+ GTK+ je multiplatformní knihovna pro vytváření grafického uživatelského rozhraní. Nabízí kompletní sadu komponent a hodí se jak pro vytváření malých projektů tak i pro velké aplikace. Je to open source software a je distribuován pod licencí GNU LGPL, která dovoluje tuto knihovnu použít všemi vývojáři včetně těch co vyvíjí proprietární software a to bez jakýchkoliv poplatků. GTK+ je postavena na třech knihovnách vyvíjených GTK+ týmem: GLib je nízkoúrovňová knihovna, která je základním jádrem GTK+. Poskytuje datové struktury pro programovací jazyk C, portabilní wrappery a rozhraní pro takové funkce jako dynamické načítání a objektový systém. Pango je knihovna pro vykreslování a renderování textu s důrazem na multijazyčnost. Je tojádroprozacházenístextemafontyprogtk ATK je knihovna, která poskytuje rozhraní pro přístupnost. Podporou ATK rozhraní může být aplikace použita s takovými zařízeními jako je čtečka obrazovky, lupy a alternativní vstupní zařízení. GTK+ bylo od začátku navrženo tak, aby podporovalo mnoho jiných programovacích jazyků, ne jen C/C++. Používání GTK+ z takových jazyků, jako je Python(obzvláště v kombinaci s používáním aplikace pro grafické vytváření GUI Glade GUI builder) poskytuje velmi efektivní metodu pro rapidní vývoj aplikací. PyGTK PyGTK[6] poskytuje rozhraní pro pohodlné programování v GTK knihovně s použitím programovacího jazykapython.staráseomnoho nudných detailůjakojesprávapamětia přetypování datových typů. StejnějakoGTK+,iPyGTKjeopensource,atopodlicencíGNULGPL,tudížjepoužitelná jak pro svobodný software tak i proprietární aplikace. PyGTK používá mnoho aplikací, od malých jednoúčelových až po velké aplikace Komponenta pro editaci textu Základním prvkem tohoto projektu bude komponenta pro editaci textu. V GTK k tomu slouží komponenta TextView. Ta i umožňuje obarvování textu, které bude potřeba pro zvýrazněnou syntaxi. Ale přímo pro tyto účely TextView dělaná není a tak je obarvování textu poněkud obtížnější. Proto vznikla komponenta GTKSourceView, která se specializuje na editoru zdrojových kódů a umožňuje jednodušším způsobem dosáhnout obarvení syntaxe. To se provádí pomocí definice zapsané ve speciálním XML souboru, který obsahuje např. klíčová slova a vzory syntaktických entit.

54 40 KAPITOLA 4. ANALÝZA Nakonec mě nejvíce oslovila komponenta pro editaci textu s názvem Scintilla, která je jádrem editoru SciTE[7]. Je však vydávána zvlášť jako samostatná knihovna. Je taktéž open source licence a multiplatformní. V Pythonu se používá přes knihovnu PyGTKScintilla. Kromě definice pro obarvování syntaxe pomocí speciálního souboru také dovoluje napojit vlastní lexikální analyzátor. Může se zde využít i vícevrstvé obarvování- např. pro náš problém to může znamenat v první fázi zvýraznění syntaxe, v druhé fázi kontrola, zda je dokument well-formed(a zvýraznění případných chyb), a v třetí fázi totéž s kontrolou validity dle XML schématu. Tato komponenta také umožňuje přístup ke svým funkcím pomocí volání metod (od pohybu kurzoru přes hromadné odsazení řádků v označeném bloku až po vyhledávání v textu pomocí regulárních výrazů). Tyto funkce poté bude možno namapovat na klávesové zkratky a také bude možno pomocí jejich skládání vytvářet moduly rozšiřující funkce editoru Vývojové prostředí Mezi vývojovými nástroji pro programování v Pythonu u mně mezi projekty jako např. Eric3, Wing IDE, SPE atd. vyhrálo známé vývojové prostředí Eclipse. Eclipse je open source systém, který je založen na modulární technologii. Primárně je určen pro programování v Javě, ale díky své modularitě je možno Eclipse rozšířit o mnoho další funkcionality. Pro vývoj v Pythonu je zde plugin PyDev. Tento plugin obsahuje funkce jako je code copletion, zvýrazňování syntaxe, analýza syntaxe za pomoci PyLint, refaktoring, ladění a mnoho dalších. PyLint je analyzátor zdrojového kódu napsaného v jazyce Python, který odhaluje chyby a nízkou kvalitu kódu KnihovnaproprácisXML ProtentoprojektjevelmidůležitáprácesXML.ProjazykPythonjenavýběrřadaknihoven. Od knihoven napsaných v čistém Pythonu po knihovny napsané v C/C++, které v sobě často obsahují i vazbu na Python, popřípadě vazby na Python těchto knihoven poskytuje třetí strana. Výhody knihoven napsaných v C jsou především ve velké rychlosti zpracování dat. Nevýhodou je, že se musí pro danou platformu kompilovat a že ze skriptovacího jazyka není snadné proniknout do nitra této knihovny. Oproti tomu knihovny napsané v čistém Pythonu není třeba kompilovat pro dané platformy a jádro knihovny je průhledné, což se pro programování této práce může hodit. Mezi nejznámější XML knihovny napsané v C, které mají vlastní Python vazbu patří libxml. Je to open source sada nástrojů pro práci s XML, implementující celou řadu standardů jakonapř.sax,dom,xpath,validacepodleschématrelaxngaw3cxmlschémat,xslt a jiné. Kromě zabudované vazby na Python můžeme pro tuto knihovnu nalézt ještě jednu vazbu pro Python, tj. lxml. Tato knihovna vznikla proto, že standardní vazba na Python obsažená v samotné libxml je až příliš podobná samotnému jazyku C. Knihovna lxml tedy umožňuje jednodušší použití stylem, jaký jsou programátoři v Pythonu zvyklí. Dále přidává i několik vlastností navíc. Příkladem knihovny pro XML napsané v Pythonu je PyXML. Obsahuje nástroje pro parsování SAX a DOM, XSLT transformace, DTD schémata a další. Má zabudované rozhraní PyExpat pro přidání rozšíření napsané v C, což mnohdy znamená násobné zrychlení procesu parsování.

55 KAPITOLA 4. ANALÝZA 41 V následující sekci popíši příklady použití těchto technologií s použitím knihovny PyXML, kterou jsem nakonec vybral právě kvůli tomu, že je jednoduše z Pythonu přístupná až do svého jádra. PrácesXMLpomocíSAX Zkratka SAX znamená Simple API for XML. Jedná se o styl parsování řízený událostmi, které vznikají procházením XML dokumentu jako např. událost počáteční element, koncový element. Na tyto události programátor vytvoří reakce v podobě callback funkcí. Programování v SAX je obecně pro programátora více pracnější, než pomocí DOM, ale výhodouje,ženenítřebamítcelýdokumentvpaměti,cožvněkterýchpřípadechmůžebýt zásadní požadavek. Pomocí callback funkcí musí programátor udržovat informace o aktuálním stavu parsování dokumentu[4]. V následujících příkladech použijeme knihovnu PyXML na vyhledání čísla mobilního telefonu v adresáři reprezentovaným následujícím dokumentem: <addressbook> <person> <name>eric Idle</name> <phone type= fix > </phone> <phone type= mobile > </phone> <address> <street>12, spam road</street> <city>london</city> <zip>h4b 1X3</zip> </address> </person> <person> <name>terry Gilliam</name> <phone type= mobile > </phone> <phone type= fix > </phone> <address> <street>3, Brazil Lane</street> <city>leeds</city> <zip>f2a 2S5</zip> </address> </person> </addressbook> Kód k takovému vyhledávání může s použitím PyXML vypadat např. takto: import sys from xml.sax import make_parser, SAXException from xml.sax.handler import ContentHandler class PhoneContentHandler(ContentHandler): def init (self,name): self.look_for = name self.is_name = False self.is_mobile = False

56 42 KAPITOLA 4. ANALÝZA self.buffer= def startelement(self, name, attrs): if name == phone and attrs.get( type ) == mobile : self.is_mobile = True elif name == name : self.is_name = True def endelement(self, name): self.buffer= if self.is_name: self.current_name = self.buffer.strip() self.is_name = False elif self.is_mobile: if self.current_name == self.look_for: self.mobile = self.buffer raise SAXException( Found mobile phone )# stop parsing else: self.is_mobile = False def characters(self, chars): if self.is_name or self.is_mobile: self.buffer += chars def find_mobile_phone(name): handler = PhoneContentHandler(name) parser = make_parser() parser.setcontenthandler(handler) try: parser.parse(open( addressbook.xml )) except SAXException: return handler.mobile return None if name == main : name =.join(sys.argv[1:]) phone = find_mobile_phone(name) if phone: print Mobile phone is, phone else: print No mobile phone found for, name Program nejprve přečte parametr, který představuje jméno osoby, jejíž mobilní číslo chceme najít. Toto jméno předáme funkci find mobile phone, která vytvoří instanci naší třídy PhoneContentHandler. Tato třída je odvozena od třídy ContentHandler. Přetížení jejích metod mapujeme naše reakce na události vyvolávané během parsování. Ve funkcích si držíme stav, ve kterém se parsování dokumentu nachází, přesněji pouze pro nás zajímavé situace, tj. pokud se nacházíme v elementu name nebo phone s atributem mobile. V případě nalezení požadovaného čísla osoby ukončíme parsování vyhozením výjimky. Celý proces parsování odstartujeme metodou parse objektu parser.

57 KAPITOLA 4. ANALÝZA 43 PrácesXMLpomocíDOM DOM neboli Document Object Model je standard vytvořen pro W3C konzorciem pro práci sxmlahtmldokumenty.jednáseosaduapi,kterájevespecifikacireprezentovánapomocí jazyka IDL(Interface Definition Language). Díky použití IDL je tato specifikace nezávislá na jazyku a standard DOM je tudíž implementován téměř v každém moderním jazyce. Specifikace DOM je modulární, tj. skládá se z povinného modulu Core a ostatních modulů, které jsou volitelné k implementaci. Tak mohou programátoři různých aplikací implementovat jen ty moduly, které pro svou práci potřebují. DOM drží celý dokument v paměti pomocí stromové hierarchie objektů. Všechny tyto objekty implementují rozhraní Node. Z tohoto rozhraní dále dědí specializovanější objekty, jako jsou například Document, Element atd. API dále obsahuje specifikaci rozhraní pro jednoduché procházení takto vytvořené hierarchie(objektového modelu), stejně jako vytváření, editaci a mazání jejích uzlů. Z charakteristiky specifikace DOM vyplývají i výhody a nevýhody použití tohoto rozhraní. DOM je vhodné použít pokud potřebujeme přehled nad celým dokumentem, jeho jednoduché procházení nebo změnu. Není vhodné ho použít pro velké dokumenty, pro velké nároky na operační paměť(celý dokument je držen v operační paměti). Jako příklad použití v PyXML uveďme opět nalezení mobilního čísla podle jména osoby z adresáře z předchozí sekce: import sys from xml.dom.ext.reader import PyExpat def findmobilephone(xmldomobject, lookforname): personnames = xmldomobject.getelementsbytagname( name ) for personname in personnames: if personname.firstchild.nodevalue == lookforname: phones = personname.parentnode.getelementsbytagname( phone ) for phone in phones: if phone.getattribute( type ) == mobile : return phone.firstchild.nodevalue if name == main : name =.join(sys.argv[1:]) reader = PyExpat.Reader() xmldomobject = reader.fromuri( addressbook.xml ) phone = findmobilephone(xmldomobject, name) if phone: print Mobile phone is, phone else: print No mobile phone found for, name reader.releasenode(xmldomoobject)

58 44 KAPITOLA 4. ANALÝZA V příkladu nejdříve vytvoříme objekt reader, kterým poté načteme soubor a vytvoříme objekt XML DOM. Pak už jednoduše procházíme objekty modelu a hledáme elementy, které nás zajímají. Jevidět,žeprácesDOMpotřebnákvytvořenítakovéhoprogramujeasimenší,nežpři použitísax.takéjeasizřejmé,žeproúčelytohotoprojektubudepotřebamítpřístupkcelému stromu(např. pro automatické dokončování či validaci), a proto bude použit pravděpodobně DOM.

59 KAPITOLA 5. REALIZACE 45 5 Realizace 5.1 Alternativní XML syntaxe Požadavek na tento projekt je použití alternativní XML syntaxe, která by byla lépe čitelná a editovatelná pro člověka. Pro tento účel jsem se velmi inspiroval syntaxí zvanou SOX(Simple XML Outline)[3]. Výsledná použitá syntaxe byla přizpůsobena tomu, že editor je určen především k editaci konfiguračních souborů(konkrétně přidání komentářů a odebrání víceřádkového řetězce v trojitých uvozovkách). V tomto dokumentu budeme dále zkratkou SOX označovat tuto upravenou verzi. Pro představu uveďme hned příklad, jak může vypadat klasické XHTML, vlevo normální a vpravo zapsaný SOX syntaxí: SOX <html> <head> <title>my Page</title> </head> <body> <h1>homepage</h1> <table summary="prices"> <caption>prices</caption> <tr> <td>ball</td> <td>90,-</td> </tr> <tr> <td>racket</td> <td>395,-</td> </tr> </table> </body> </html> Normální XML html> head> title> My Page body> h1> Homepage table> summary=prices caption> Prices tr> td> Ball td> 90,- tr> td> Racket td> 395, Zápis základních prvků v SOX syntaxi Elementjezapsánsvýmjménemanásledovánznakem >.Obsahelementujepakvodsazeném bloku. Díky odsazení žádný koncový tag v SOX syntaxi není. SOX element> Normální XML <element>......

60 46 KAPITOLA 5. REALIZACE Atributsezapisujesvýmjménemanásledněznakem =.Všeodznaku = aždokonceřádku je hodnota atributu. Atribut musí být umístěn uvnitř elementu a nesmí mu na stejné úrovni předcházet element nebo textový uzel. Jinými slovy na dané úrovní odsazení pro daný element se nejdříve zapisují atributy a poté teprve zbylý obsah daného elementu. SOX element> atribut=hodnota atributu... Normální XML <element atribut="hodnota atributu">... Řádek,kterýzačínáznakem # jekomentář. SOX element>... # komentar... Normální XML <element>... <!-- komentar!>... Všechny ostatní řádky jsou pak Textové uzly. SOX element>... textový uzel... Normální XML <element>... textový uzel Vnořování Obsah elementu se zapisuje na další řádky o jednu úroveň vnoření větší. Pro zpřehlednění lze však použít i zápis, kde se první uzel obsahu elementu zapíše na stejný řádek. Následující dva zápisy jsou tedy ekvivalentní. SOX element> obsah elementu... Ekvivalentní zápis SOX element> obsah elementu... Avšak pokud se na stejném řádku za elementem objeví další element, je obsahem prvního elementu pouze druhý element a vše v následujícím odsazeném bloku patří druhému elementu. Následující dva zápisy jsou tedy opět ekvivalentní.

61 KAPITOLA 5. REALIZACE 47 SOX Ekvivalentní zápis SOX element> druhyelement> attr=hod obsah elementu... element> druhyelement> attr=hod obsah elementu Bílé znaky S bílými znaky(mezera a tabulátor) je zacházeno podle následujících pravidel: 1. Řádek obsahující pouze bílé znaky je ignorován 2. Odsazení určují bílé znaky ze začátku řádku. Jedna úroveň je tabulátor nebo 4 mezery (v programu lze přenastavit) 3. Z normálního textového uzlu(není v uvozovkách) jsou odstraněny bílé znaky ze začátku akonce 4. V textových uzlech v uvozovkách jsou bílé znaky zachovány 5. Všechny ostatní bílé znaky jsou ignorovány Text v uvozovkách Text v uvozovkách zachovává bílé znaky i na začátku a konci textu. Dále převádí speciální znaky na entity(viz. kapitola 3.1.2). Samotné uvozovky lze zapsat přímo XML entitou(xml entityvsoxsyntaxisebezezměnypromítnoutdoxml). 5.2 Implementace Struktura programu Na obrázku 5.1 je znázorněna struktura programu. Hlavní program XMLEditor obsahuje dvě třídy odvozené od společného předka XMLColorScintilla, který je odvozen od komponenty Scintilla, která je popisována v kapitole Společný předek XMLColorScintilla obsahuje společné věci pro oba potomky, jako je nastavení barev pro zvýraznění syntaxe, které jsou načtené z konfiguračního souboru apod. Třída XMLScintilla slouží pro náhled výsledného XML, které vznikne uložením souboru. Tato třída pro zvýraznění syntaxe používá již hotový analyzátor, který je k dispozici v balíčku s knihovnou Scintilla. Třída GScintilla je hlavním jádrem programu a probíhá v ní editace za použití SOX syntaxe. Ke své funkci potřebuje SOXTokenizer, což je lexikální analyzátor SOX syntaxe. Ten je využíván pro zvýraznění syntaxe. Dále používá SOXParser, který umožňuje zvýraznit chyby porušenípravidelsoxaxml(jakonapř.žemůžebýtpouzejedenkořenovýelementvxml dokumentu či že atributy elementu jsou zapisovány před jeho obsahem). Další komponenta, která je využívána třídou GScintilla je ACVEngine, který slouží pro auto-completion a validaci dle XML schématu. Dále je využíván SOXFileWriter pro transparentní ukládání souborů. Z třídy Settings se vytvoří objekt, který souží pro načtení konfigurace z konfiguračních souborů a který je obsažen prakticky ve všech objektech. Pro přehlednost toto nebylo do

62 48 KAPITOLA 5. REALIZACE diagramu zakresleno. Všechny části diagramu budou detailněji popsány v následujících podkapitolách. Obrázek 5.1: Struktura XML editoru Popis komponent a jejich závislostí Na obrázku 5.2 jsou zakresleny komponenty a jejich vzájemné závislosti. Ty jsou označeny zkratkou skládající se z písmene a čísla. Tyto závislosti boudou v následujícím textu vysvětleny. Načítání konfigurace Objekt vytvořený z třídy Settings se stará o načtení konfigurace z textových konfiguračních souborů. Tento objekt je pak propagován prakticky do všech větších objektů(jejich třídy jsou znázorněny na diagramu). Pro zpřehlednění toho není zakresleno do diagramu závislostí jednotlivých částí programu. Volby jsou tříděny do logických celků(jako například klávesové zkratky, barvy pro zvýraznění syntaxe apod.). Každý logický celek je pak uložen v jednom textovém souboru. Tyto

63 KAPITOLA 5. REALIZACE 49 Obrázek 5.2: Zavislosti částí XML editoru celky se promítnou jako atributy objektu vytvořeného z třídy Settings. Atributy těchto celků jsou pak již konkrétní volby. Formát konfiguračních souborů je velice jednoduchý. Na každém řádku je nejdříve název volby, pak následuje mezera a za ní hodnota volby. Kdekoliv na řádku pak může být komentář, kterýjeuvozenznakem # akončíkoncemdanéhořádku.uveďmepříklad: # kolik mezer odpovida jedne urovni odsazeni spaces_in_tab 4 font_size 11 # velikost fontu Zvláštní formát má soubor s nastavením klávesových zkratek. Ten se skládá z klávesové zkratky, mezery a jména akce. Klávesová zkratka se skládá z modifikátorů (může jich být několik, ale také žádný) a jedné normální klávesy. Modifikátory a klávesa jsou mezi sebou oddělenyznakem -. Modifikátory mohou být zapsány několika způsoby, např. dlouhým názvem jako CONTROL, kratším názvem CTRL, nebo jedno či dvoupísmennou zkratkou, jako to bývá např. u editoru Emacs. Následující příklad to ilustruje. V reálném použití však pro přehlednost doporučuji zvolit si jednu možnost zápisu a tu použít pro všechny zkratky. Akce dále mohou mít parametry

64 50 KAPITOLA 5. REALIZACE uvedené v kulatých závorkách. Kromě akcí(metod) samotné hlavní komponenty GScintilla můžeme také volat metody hlavního okna editoru XMLEditor pomocí prefixu parent app. a pomocí znaků tečka přistupovat i k jeho atributům. CONTROL-P LineUp CTRL-B CharLeft C-F CharRight ALT-F WordRight A-B WordLeft M-C Akce1 M4-H Akce2(parametr1, parametr2) A-1 parent_app.notebook.set_current_page(0)# select first tab Zvýraznění syntaxe Pro zvýraznění syntaxe SOX volá hlavní komponenta pro editování GScintilla svůj objekt vytvořený dle třídy SOXTokenizer(na diagramu závislost G4). Ten je volán pouze na část textu, kterou je potřeba obarvit, nikoliv tedy na celý text. Výsledné lexikální symboly jsou předány zpět komponentě GScintilla a ta provede na daném úseku obarvení, dle nastavení přečteného z konfiguračního souboru. Zvýraznění syntaxe náhledu na výsledné XML je pak dosaženo pomocí lexikálního analyzátoru XML, který je přímo součástí balíku komponenty Scintilla. Samotný SOXTokenizer pracuje na bázi regulárních výrazů. Jednotlivé lexikální symboly mají definovány svůj regulární výraz. Zpracovávaný řetězec se prochází od začátku a zkouší, zda regulární výrazy v předem daném pořadí odpovídají začátku řetězce. Pokud regulární výraz odpovídá, je odpovídající část ze začátku vstupního řetězce odebrána. Dále je vytvořen odpovídající lexikální symbol a ten je poslán do výstupního seznamu symbolů. Každý symbol sitakéudržujeinformaceoúrovniapozici,nakterébylnalezen. Zvýraznění chyb od parseru K zvýraznění chyb od nedodržení pravidel XML či SOX(např. XML dokument musí mít právě jeden kořenový adresář, chybné odsazení úrovně nebo atribut elementu musí být uveden před jeho dalším obsahem) používá komponenta GScintilla objekt vytvořený dle třídy SOXParser (v diagramu závislostí označeno G5). Ten samozřejmě pro svou činnost potřebuje lexikální analyzátor SOXTokenizer(v diagramu označeno S1). Zdeužnenípřílišmožnézpracovatpouzemaloučástdokumentu,jakojetomuuobarvování syntaxe, protože na některé chyby je potřeba mít k dispozici celý dokument v DOM stromu. Proto parser zpracuje celý dokument a při nalezení chyby dá vědět zpátky komponentě GScintilla a ta danou chybu zvýrazní. Pokud chyba nalezena není, celý dokument v DOM formě se uloží do atributu komponenty GScintilla, aby mohl být použit pro další operace, jako např. validace či auto-completion. Jelikož parsování celého dokumentu může být(obzvláště pro větší dokumenty) časově náročnější, je parsování puštěno v paralelním vlákně. Pak je psaní dokumentu plynulé i pro velké dokumenty. Pokud uživatel změní text, vlákno s běžícím parsováním je ukončeno a začne od začátku pro aktuálně platný dokument. Zvýraznění chyby je možné udělat asynchronně se zvýrazněním SOX syntaxe díky tomu, že Scintilla používá pro zvýraznění systém masek. Pro zvýraznění syntaxe tak použijeme

65 KAPITOLA 5. REALIZACE 51 jinou masku než pro zvýraznění chyby dle parseru a jednotlivé typy zvýraznění se pak neovlivňují. Samotný SOXParser pracuje tak, že zavolá na daný parsovaný dokument(ve formě řetězce) SOXTokenizer a od něj obdrží seznam lexikálních symbolů. Ten je pak dále zpracován hlavním algoritmem SOXParseru. Výstupem je pak DOM strom a speciální struktura lineddoc,cožjeslovník,jehožklíčemjsouřádkyahodnotoujeseznamdomuzlůobsažených na daném řádku. Na obrázku 5.3 je znázorněn zjednodušený konečný automat, který je procházen pro každý element. NewLine Attribute Start Tag Tag Attribute Attr Text AttrVal Text, Comment Text, Comment AfterAttr Text, Comment Obrázek 5.3: Konečný automat pro jeden element Důležitou součástí parseru je zásobník úrovní odsazení. Pro každý zpracovávaný element je vždy na danou úroveň odsazení zásobníku uložena struktura s důležitými informacemi. Pokud se během procházení elementu narazí na další element, vznikne nová úroveň na zásobníku. Pokud se naopak narazí na menší úroveň odsazení textu, jsou úrovně nad touto úrovní ze zásobníku odstraněny a algoritmus pokračuje na nové úrovni tam, kde předtím skončil(díky informacím uložených na dané úrovni v zásobníku). Auto-completion a validace Funkce auto-completion a validace má na starosti třída ACVEngine. Tyto funkce jsou, jak bylo napsáno, v analýze zajištěny pomocí XML schématu. Jelikož je XML schémat více typů(dtd, Relax NG apod.), je tento objekt jakýmsi rozhraním, do kterého se zasune modul implementující funkce využívající příslušného typu XML schématu. Program pak pracuje s objektem vytvořeným dle třídy ACVEngine, a ten volá metody modulu, který byl do něj zasunut. To umožňuje podporu více typů XML schémat. Zatím byl implementován modul pro DTD, jelikož podpora tohoto typu schématu je začleněna přímo do knihovny PyXML. Pro schéma typu Relax NG bohužel v Pythonu není zatím žádná knihovna, která by byla dokončena a použitelná pro tyto účely. Jsou však již dvě vestádiuvývoje,taksnadbudealespoňjednadokončena,abyjibylomožnépoužítidotohoto projektu.

66 52 KAPITOLA 5. REALIZACE Dále je možné nalézt knihovny pro validaci dokumentu dle Relax NG schématu napsané v C/C++, avšak ty neodhalují vnitřní strukturu načteného Relax NG schématu, která by byla potřeba pro auto-completion. Pro doprogramování modulů pro validaci a auto-completion je potřeba, aby module splňoval dané(velmi jednoduché) rozhraní. Modul pro validaci musí implementovat metodu get ac(), která bere parametry lined doc(viz. podkapitola Zvýraznění chyb od parseru), dálehlavníkomponentugscintillaatypnápovědynabývajícíjednézhodnot attr, elem, all,kterýříká,zdamáseznamsnápovědouobsahovatpouzeatributy,pouzeelementynebo oboje. Tato metoda poté vrací seznam řetězců, tj. seznam položek nápovědy auto-completion. Stejně tak modul pro validaci musí splňovat pouze to, že implementuje jednu metodu. Je to metoda jménem validate, která opět bere parametr lined doc a dále parametr stop, který říká, že parsovaný dokument již není platný a tudíž má být validace zastavena. Pokud při validaci není nalezena chyba, tak metoda pouze vrátí hodnotu None. Pokud byla nalezena chyba, metoda vyhodí výjimku GValidationError, která obsahuje příslušnou pozici a uzel DOM stromu, kde byla nalezena chyba. Zatím jediný implementovaný modul pro validaci a auto-completion tedy využívá DTD schéma. Knihovna PyXML načte DTD schéma a vytvoří pro něj objekt, který mimo jiné obsahujeseznamelementůaprokaždýelementseznamatributů.cojevšakdůležitéje,žedálepro každý element vytvoří strukturu, která odpovídá stavům konečného automatu a přechodům do dalších stavu. Pro přechod do dalšího stavu pak slouží jméno elementu. Validaci pak provádím pomocí procházení těchto konečných automatů. Jako vstup slouží DOM strom, který vznikne při zvýrazňování chyb parserem. Pokud tedy parser nalezne chybu, už k validaci nedojde, protože není možné validovat dokument, který není XML. Elementy(a textové uzly) jsou použity jako vstup pro přechod do dalšího stavu konečného automatu. Pro každý element je pak rekurzivně zavoláno procházení automatu, jehož vstup se nachází na úrovni odsazení o jedna větší, než je úroveň onoho elementu(tj. vstupem je obsah elementu). Pokud přechod na další stav přes daný element neexistuje, knihovna vrátí chybový stav a ten je pak propagován do komponenty GScintilla, kde proběhne zvýraznění chyby, stejně jako např. u zvýraznění chyby od parseru(samozřejmě pod jinou maskou, aby se neovlivňovaly). Správnost atributů je pak kontrolována jednoduše nalezením daného atributu v seznamu atributů aktuálně procházeného elementu. Stejně jako validace, i auto-completion je možné pouze nad XML dokumentem. Pokud tedy parser nalezne chybu, funkce auto-completion je neaktivní. Funkce auto-completion využívá speciální strukturu lined doc(také vytvořený SOXParserem). Je to slovník, jehož klíči jsoučíslařádkůahodnotamijeseznamdomuzlůsdanoupozicínařádku.tytoinformace slouží k tomu, aby algoritmus zjistil, v jaké části DOM stromu se nachází kurzor. Když je zjištěna pozice, nalezne se element vlastnící úroveň na pozici kurzoru. Pro tento element se pak může jednoduše nalézt seznam atributů. Dále se prochází konečný automat daného elementu. Jako vstupy pro přechody jsou použity elementy(a textové uzly) na dané úrovni odsazení. Jako výsledný seznam, z kterého vybírá funkce auto-completion je seznam přechodů (tj. jmen elementů) pro stav automatu po zadání všech vstupních elementů a textových uzlů aždopozice,nakterésenacházíkurzor. Tento seznam je pak vrácen komponentě GScintilla, která nabídne příslušný seznam v boxu pod kurzorem. Jak uživatel píše, je v seznamu vyhledávána položka začínající příslušnými napsanými znaky. Nabídku lze také procházet šipkami a výsledné dokončení slova, které je aktuální v seznamu je možné provést klávesou enter.

67 KAPITOLA 5. REALIZACE 53 PřevodymeziSOXaXMLsyntaxí K převodu mezi SOX a normální XML syntaxí slouží objekt vytvořený z třídy PrettyPrinter. JehovstupemjeDOMstrom,kterýjezískánbuďzXMLstandardnímXMLparserem,nebo ze SOX SOXParserem. DOM strom je procházen do hloubky a pro každý element jsou vytisknuty jeho atributy a poté jeho obsah. Ukládá se úroveň odsazení, a ta je při výstupu převedena na odpovídající počet znaků pro odsazení(tabulátor). Transparentní ukládání souborů K ukládání souborů využívá komponenta GSCintilla objekt vytvořený z třídy SOXFileWriter (v diagramu závislostí označeno G2). Jelikož je tento program určen především pro editaci konfiguračních souborů, bylo by poněkud uživatelsky nepřívětivé používat systém explicitního exportu do normálního XML. SOXFileWriter tvoří vrstvu, která transparentně ukládá XML souborvnormálníxmlsyntaxinapůvodnímísto,kdebylsouborotevřen,azároveňvespeciálním adresáři ukládá SOX podobu, aby uživatel při opětovném otevření souboru obdržel soubor v SOX syntaxi tak, jak jej vytvořil. Pro tento účel je potřeba udržovat informaci, který SOX soubor ze speciálního adresáře patříkekterémuxmlsouboruvefilesystému.ktomusloužísouborsoxfilelist,vekterém je umístěna trojice obsahující původní cestu XML souboru, název SOX souboru a MD5 sumu obsahu XML souboru. Název SOX souboru vznikne z původního názvu XML souboru přidáním přípony.sox.pokuddojdekekolizijmenjedálekejménupřidánočíslo. Soubor sox file list je umístěn ve stejném speciálním adresáři, jako SOX soubory. Přístup k němu probíhá přes systém zamykání, aby se nestlalo, že dvě instance editoru do něj zapíšou zároveň, nebo přečtou neúplná data. Tento speciální soubor je umístěn standardně v podadresáři sox dir adresáře.relaxxed. Jeho umístění lze nastavit v konfiguračním souboru paths.abytentoadresářčasempříliš nenabobtnal,jeveditoruzabudovanýguidialog,ve kterém ho může uživatel pohodlně promazat. Při uložení souboru je SOX forma převedena na XML pomocí objektu vytvořeného pomocí třídy PrettyPrinter(na diagramu závislostí označeno G1). Pak je uložen XML soubor do dané cesty ve filesystému a SOX soubor do speciálního adresáře. Dále je vypočtena MD5 sumaxmlsouboruatatotrojicehodnotseaktualizujevsouborusoxfilelist(nebose vytvoří nový záznam, pokud zde ještě pro daný soubor nebyl). Při otevření XML souboru se nejprve zjistí, zda existuje odpovídající záznam v souboru sox file list. Pokud je zde cesta XML souboru nalezena, ještě se porovná datum poslední změnysoxaxmlsouboru.pokudjedatumsoxsouborumenší,znamenáto,žeproeditaci XML byl použit jiný editor a tudíž bude vytvořen SOX soubor(také pomocí PrettyPrinteru) z XML souboru. Pokud je SOX mladšího data, je načten SOX soubor ze speciálního adresáře. Pokud v souboru sox file list není nalezena cesta XML souboru, je ještě porovnána MD5 suma otvíraného XML souboru s uloženými sumami. To umožňuje aby byl otevřen správný SOXsouboripokudbylXMLsouborpřesunutnajinémístovefilesystému. Pokud není odpovídající SOX soubor nalezen ani přes cestu ani přes MD5 sumu(to znamená, že soubor ještě nebyl tímto editorem editován a uložen), vytvoří se SOX forma z XML souboru opět pomocí PrettyPrinteru.

68 54 KAPITOLA 5. REALIZACE Rozšíření Kromě rozšíření podpory dalších typů XML schémat, o kterém jsme mluvili výše, editor podporuje možnost doprogramování si téměř libovolné funkčnosti pomocí modulů. Tyto moduly jsou umístěny do v domovském adresáři uživatele v podadresářích.relaxxed/modules. Tato cesta také může být změněna v konfiguračním souboru paths. Přidání funkčnosti je v podstatě přidání metody ke komponentě GScintilla, nebo přímo hlavnímu třídě XMLEditor. V modulu můžeme používat jakékoliv objekty, které jsou součástí programu(např. parser), ale i libovolné jiné moduly. Metody v souboru s daným modulem, které chceme, aby byly přístupné, přiřadíme třídě GScintilla, např. takto: import GScintilla def pridavna(self, parametr):... GScintilla.pridavna = pridavna Tento modul pak uložíme do adresáře modules/modules scint a do souboru init.py v tomto adresáři vložíme import jmeno modulu. Takto naprogramované nové funkce poté můžeme namapovat na klávesové zkratky způsobem zmíněným výše(podkapitola Načítání konfigurace). Není tedy problém si vytvořit makro(posloupnost operací editoru), ale i třeba nový GUI dialog, který se zeptá uživatele na požadované informace a podle nich provede příslušné akce.

69 KAPITOLA 6. TESTOVÁNÍ 55 6 Testování 6.1 Testovací podmínky Jelikož je program určen především k editaci konfiguračních XML souborů, byl pro testování použit soubor pro nastavení programu fontconfig pro nastavení a přístup fontů v Linuxu. Tento souborpřímoobsahujeodkaznadtd.totodtdjsemnahráldoadresářeprodtdvpodadresáři dtds adresáře.relaxxed(viz. kapitola 5), který je v domovském adresáři uživatele. Testy proběhly na počítači s procesorem AMD Athlon s 1GB RAM v operačním systému Gentoo Linux. Následující podsekce jsou testy pracující s těmito startovními podmínkami. 6.2 První spuštění První spuštění správně vytvořilo v domovském adresáři podadresář.relaxxed a v něm podadresáře se správným obsahem. 6.3 Transparentní ukládání Otevření souboru proběhlo bez problémů jak z příkazové řádky, tak pomocí menu. Po změně, uložení a opětovném otevření se načetl správný SOX soubor(bylo zachováno formátování, které by automatická generace zrušila, např. obsah elementu na stejném řádku automatické vytvoření SOX souboru dá obsah vždy na nový řádek). Taktéž po přesunutí XML souboru a opětovném otevření se načetla správná mnou editovaná verze SOX. Také záložní kopie XML souboru byla vytvořena v adresáři backups. 6.4 Zvýraznění syntaxe OtevřenýsouborsenačetlvSOXsyntaxiasezvýrazněnousyntaxí.Připsaníimazáníse vždy bez problémů text vkládá a obarvuje se podle významu vkládaného textu. Po přepnutí na záložku XML Preview se zobrazí dokument v normální XML syntaxi se zvýrazněnou syntaxí. 6.5 Chyby od parseru Po vložení dvou kořenových elementů se druhý z ních podtrhl Po vložení řetězce uvozeného uvozovkou, ale neukončeného uvozovkou, se tento řetězec podtrhl Po vložení atributu do elementu za obsah tohoto elementu(obsahem byl text) se atribut podtrhl Po vložení jedné mezery jako odsazení se mezera podtrhla, protože to není správné odsazení(nastaveny jsou standardně 4) Povloženítextunaúroveňojednavyšší,nežjetextčiatributnapředešlémřádkuse tento text podtrhne(zvýšit úroveň lze jen po elementu)

70 56 KAPITOLA 6. TESTOVÁNÍ 6.6 Validace a auto-completion Po vložení elementu, atributu nebo textu, který na daném místě dle schématu nemá být, se tím vzniklá chyba podtrhla. Auto-completion pro zkoušené elementy správně napovídalo pouze atributy, které v nich dleschématumohoubýt.stejnětaknabízenéelementybylysprávnéatoipokudveschématu byla nadefinována posloupnost v daném pořadí(byl správně nabízen pouze element, který následuje po předchozím elementu ze sekvence). 6.7 Vyhledávání V editovaném souboru bylo pomocí vyhledávacího dialogu vyhledáno normální slovo, poté byly odzkoušeny volby pro vyhledávání celých slov a braní v úvahu velkých a malých. Stejně dobře fungovalonalezeníregulárníhovýrazub[o]*l,kterénašlojakvýraz bool,taki bl.vše odzkoušeno i pro reverzní směr vyhledávání. 6.8 Pročištění adresáře sox dir Pomocí menu Tools->clean sox dir byl vyvolán dialog k pročištění adresáře pro ukládání SOX souborů a příslušných položek souboru sox file list. Po zvolení jednoho, ale i více souborů ze seznamu a stisknutí tlačítka Delete se opravdu příslušné SOX soubory smazaly a příslušné řádky v souboru sox file list byly taktéž vymazány. 6.9 Přiřazení DTD schématu k dokumentu Tento test již nepracuje s uvedenými podmínkami. Nejprve jsem vytvořil nový soubor. K němu jsem pak pomocí nabídky File->Assign DTD.. přiřadil schéma. Pomocí nápověd funkce autocompletion jsem tvořil dokument a opět otestoval výše zmíněný test validace dle schématu Rychlost Během práce s konfiguračními soubory byla reakce programu téměř okamžitá. Pro jistotu jsem se program otestovat i s většími soubory. Největší konfigurační XML soubor s předepsaným DTD schématem, který jsem ve své distribuci našel měl 12kB, a ten byl vygenerovaný z několika menších souborů a nebyl určen pro přímou editaci. Přesto jsem test provedl. Editace textu byla bez problémů plynulá. Asi největší výkonnostní problém může nastat při vyvolání auto-completion ihned po změně obsahu tj. než parser vytvoří dokument ve formě DOM stromu. Reakce na vyvolání auto-completion ihned po editaci textu byla stále velmi dobrá, do 0,5 sekundy. Pro otestování ještě většího souboru jsem uměle rozmnožil celý obsah kořenového elementu tak, aby velikost souboru byla přes 50kB. Díky tomu, že parsování dokumentu je spuštěno v paralelním vlákně, ani zde nebyl problém s plynulostí editace textu. Avšak při vyvolání funkce auto-completion ihned po změně textu trvalo již méně příjemné 2 sekundy. Nicméně takto veliké konfigurační soubory se příliš často nevyskytují(tento byl vytvořen velmi umělým způsobem). Pokud by přece nastala nutnost editace velkých XML souborů, mohl by se do programu zabudovat tzv. inkrementální parser, který by uměl zpracovat a promítnout do DOM stromu pouze provedené změny.

71 KAPITOLA 7. ZÁVĚR 57 7 Závěr 7.1 Shrnutí V této práci se povedlo implementovat XML editor určený především pro editaci konfiguračních XML souborů. Tyto soubory je člověk nucen editovat, avšak oproti normálním textovým konfiguračním souborům je editace XML nepohodlná. Proto byla použita speciální zjednodušená XML syntaxe, která je přehlednější a člověku se snadněji vytváří. K dalšímu zpříjemnění práce při editaci XML byla využita XML schémata pro validaci dokumentu a funkci auto-completion. Modulární architektura části využívající XML schémata umožňuje tyto funkce realizovat libovolnými typy schémat. Zatím tyto funkce byly implementovány pro DTD schéma, ačkoliv do tohoto projektu by se spíše hodilo Relax NG schéma, které je svou kompaktní syntaxí příjemnější pro editaci člověkem, podobně jako zjednodušená syntaxe XML použitá v tomto editoru. Bohužel absence použitelné Relax NG knihovny pro jazyk Python toto neumožnila. Editor je plně konfigurovatelný pomocí textových souborů, volby mimo jiné zahrnují i možnost změny barev pro zvýraznění syntaxe a nastavení téměř jakékoliv akce na libovolnou klávesovou zkratku. V kapitole 2 byl proveden rozbor problému a stanoveny cíle. Všechny stanovené cíle se povedlo splnit. V kapitole 3 byl proveden rozbor možností nejznámějších typů XML schémat, jmenovitě DTDschémat,W3CXMLschémataRelaxNGschémat. V kapitole 4 byly porovnány XML editory s podobnými vlastnostmi, jako tento projekt. Nakonec byly vybrány technologie pro realizaci tohoto projektu. V kapitole 5 byla popsána zjednodušená XML syntaxe a popis implementace projektu. V kapitole 6 bylo provedeno testování projektu. Test proběhl úspěšně. 7.2 Možná vylepšení Až bude k dispozici vhodná Relax NG knihovna pro Python, neměl by problém vytvořit modul využívající tuto knihovnu pro funkce validace a auto-completion. Dále by bylo dobré zlepšit rychlost parsování dokumentu. Sice pro daný účel editace konfiguračních XML souborů rychlost plně dostačuje, ale s větší rychlostí by se pravděpodobně mohly najít i další možnosti uplatnění, jako např. editace velkých datových souborů. Také by bylo možné vytvořit tzv. inkrementální parser, který by uměl zpracovat a do výsledné datové struktury promítnout pouze změny, které byly v dokumentu provedeny. Pro větší pohodlí uživatele by mohla pomoci možnost konfigurace pomocí GUI rozhraní. Pro doprogramování téměř jakékoliv funkčnosti lze požít sytém modulů, který je v editoru zabudován. Ten umožňuje pro nové funkce využít jak komponent obsažených v editoru, tak libovolných jiných. Psaní modulů je velice jednoduché díky použití jazyka Python, který také dbá na svou přehlednost, jednoduchost a zároveň sílu. Další jeho výhoda je, že se nemusí kompilovat, což je pro uživatele píšícího modul jistě mnohem pohodlnější.

72 58 KAPITOLA 7. ZÁVĚR

73 KAPITOLA 8. LITERATURA 59 8 Literatura [1] Language comparsion, [2] Perfect xml- editors, [3] Arnold devos. Simple outline xml: Sox, [4] Alexandre Fayolle. Xml and python tutorial, [5] Steve Ferg. Python& java: a side-by-side comparison, [6] John Finlay. Pygtk 2.0 reference manual, [7] Neil Hodgson. Scite: A free source code editor, [8] Jiří Kosek. Xml pro každého, [9] Scott Sweeney. Sorta like python, [10] Eric van der Vlist. Relax NG. O Reilly, 1th edition, [11] W3C. W3c xml schema specification, [12] W3C. W3c xml specification,

74 60 KAPITOLA 8. LITERATURA

75 PŘÍLOHA A. SEZNAM POUŽITÝCH ZKRATEK 61 A Seznam použitých zkratek API Application Programming Interface ATK Accessibility Toolkit BSD Berkeley Software Distribution DOM Document Ojbect Model DTD Document Type Definition GML Generalized Markup Language GPL General Public License GTK the GIMP Toolkit GUI Graphical User Interface HTML HyperText Markup Language KDE K Desktop Environment RNC Relax NG Compact syntaxe RNG Relax NG syntaxe SAX SimpleAPIforXML SGML Standard Generalized Markup Language SOX Simple Outline XML URI Uniform Resource Identifiers URL Uniform Resource Locator W3C World Wide Web Consortium WXS W3CXMLSchéma WYSIWYG WhatYouSeeIsWhatYouGet XML extensible Markup Language XSLT extensible Stylesheet Language Transformation

76 62 PŘÍLOHA A. SEZNAM POUŽITÝCH ZKRATEK

77 PŘÍLOHA B. UŽIVATELSKÁ/ INSTALAČNÍ PŘÍRUČKA 63 B Uživatelská/ instalační příručka B.1 Instalace B.1.1 Závislosti Pro svůj běh potřebuje program nainstalované následující závislosti. U každé položky je uvedena webová stránka. Dále jsou tyto závislosti na přiloženém CD v adresáři dependencies. Python 2.4 a vyšší- PyGTK 2.8 a vyšší- PyXML a vyšší- GTK Scintilla a vyšší- PyGTK-Scintilla a vyšší- Pozn.: Doporučuji použít PygtkScintilla fixbytd.tar.gz přiloženou na CD, v které jsem opravil chybu (týká se obarvení textu). Autorovi jsem ji nahlásil, ale novou verzi na stránkách ještě neuveřejnil. B.1.2 Vlastní instalace Po nainstalování všech závislostí stačí z adresáře src zkopírovat adresář relaxxed, ve spouštěcím skriptu(pro Windows relaxxed.bat, pro Linux a jiné relaxxed.sh) změnit proměnnou APPPATH na cestu, kam jste adresář relaxxed nahráli a tento skript spustit. Při prvním spuštění program vytvoří v domovském adresáři uživatele adresář.relaxxed, kde se mimo jiné nachází konfigurace v textových souborech. Doporučuji si projít soubor s klávesovými zkratkami keys. Uživatelé zvyklí na rozložení programu Emacs pravděpodobně uvítají alternativní soubor keys.emacs, ve kterém je nastaveno několik základních navigačních kláves dle zvyklostí Emacsu. Pokud se rozhodnete tento soubor použít, stačí jím nahradit původní soubor keys. B.2 Základní rozdělení okna Hlavní okno editoru(obr. B.1) se skládá z několika částí. Nahoře je umístěno hlavní menu. Pod ním se nalézají záložky, které představují jednotlivé otevřené soubory. V každé záložce je pak samotná komponenta pro editování textu. Pod komponentou pro editování textu je možnost zvolit jednu ze dvou záložek. První nazvaná SOX je editování XML souboru v zjednodušené SOX syntaxi. Druhá záložka nazvaná XML Previev znázorní náhled na výsledný dokument, který vypadá tak, jak bude uložen do XML souboru. B.3 Otevření souboru Soubor lze otevřít dvěma způsoby. Prvním způsobem je při spuštění programu z příkazové řádky, kde jako parametr zadáme cestu k souboru. Druhý způsob je při spuštěném programu výběrem menu File->Open... a vybráním souboru, který chceme otevřít.

78 64 PŘÍLOHA B. UŽIVATELSKÁ/ INSTALAČNÍ PŘÍRUČKA Obrázek B.1: Screenshot hlavního okna B.4 Přiřazení DTD schématu k dokumentu K otevřenému dokumentu přiřadíme schéma tak, že v menu File zvolíme položku Assign DTD... To vyvolá dialog, ve kterém nalezneme daný DTD soubor. Dalším krokem je dialog, ve kterém vybereme, jaký z elementů ve schématu má být kořenovým. B.5 Položky menu File: New Vytvořínovýprázdnýsoubor Open.. Vyvolá dialog k otevření souboru Assign DTD.. Vyvolá dialog pro přiřazení DTD schématu k dokumentu Save Uloží právě editovaný dokument Save as Vyvolá dialog k uložení právě editovaného dokumentu do určité cesty Close tab Uzavře záložku s právě editovaným dokumentem Quit Ukončí program

79 PŘÍLOHA B. UŽIVATELSKÁ/ INSTALAČNÍ PŘÍRUČKA 65 Edit: Undo Vrátíposledníprovedenouoperacizpět Redo Reverzní operace k předešlé položce Cut Smaže vybraný text a umístí ho do schránky Copy Zkopíruje vybraný text do schránky Paste Vloží text ze schránky na pozici kurzoru Find Vyvolá dialog pro vyhledávání v dokumentu Tools: Clean sox dir.. Vyvolá dialog k pročištění adresáře sox dir B.6 Transparentní ukládání Aby nebylo nutné používat nepřímý export souborů ze zjednodušené syntaxe SOX do XML souboru, editor transparentně ukládá přímo XML. Zároveň s uloženým XML se ukládá i SOX forma do speciálního adresáře sox dir, který je standardně umístěn v podadresáři.relaxxed domovského adresáře. Uživateli tak zůstane zachován SOX soubor tak, jak ho vytvořil. Abytentoadresářčasempříliš nenaboptnal,jeveditoruzabudovándialogprojehovyčištění (obr. B.2). Uživatel zaškrtne již nepotřebné soubory a program je a odebere z databáze a smaže z adresáře sox dir(xml soubory zůstanou zachovány). Obrázek B.2: Dialog pro čišnění adresáře sox dir

24. XML. Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML.

24. XML. Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML. 24. XML Úvod Značkovací jazyk XML (extensible Markup Language) vznikl ze staršího a obecnějšího jazyku SGML (Standard Generalized Markup Language). XML byl vyvinut konsorciem W3C, aby poskytl standardní

Více

Správnost XML dokumentu

Správnost XML dokumentu Realizováno za finanční podpory ESF a státního rozpočtu ČR v rámci v projektu Zkvalitnění a rozšíření možností studia na TUL pro studenty se SVP reg. č. CZ.1.07/2.2.00/29.0011 Správnost XML dokumentu Správně

Více

Obsah prezentace. Co je to XML? Vlastnosti. Validita

Obsah prezentace. Co je to XML? Vlastnosti. Validita Obsah prezentace Co je to XML? Vlastnosti Validita Co je to XML? EXtensible Markup Language Účelem je usnadnit sdílení dat napříč informačními systémy Popis dokumentu z hlediska věcného obsahu Vyvinuto

Více

Teoretické a pokročilé aspekty XML technologií

Teoretické a pokročilé aspekty XML technologií PRG039 Teoretické a pokročilé aspekty XML technologií - (Ne)standardní jazyky pro popis schématu XML dat - Metody odvozování XML schématu Irena Mlýnková, Martin Nečaský, Jaroslav Pokorný KSI MFF UK, ZS

Více

XML schémata XML teorie a praxe značkovacích jazyků (IZI238)

XML schémata XML teorie a praxe značkovacích jazyků (IZI238) XML teorie a praxe značkovacích jazyků (IZI238) Jirka Kosek Poslední modifikace: $Date: 2006/12/29 15:51:25 $ Obsah Úvod... 4 Proč potřebujeme schéma dokumentů XML... 5 Přínosy použití schématu... 6 Jazyky

Více

XML schémata. Jiří Kosek

XML schémata. Jiří Kosek XML schémata Jiří Kosek XML schémata Jiří Kosek Copyright 2003-2005 Jiří Kosek Vydáno 18. srpna 2005 Tento dokument je určen výhradně pro osobní potřebu seznámení se schémovými jazyky. Jakékoliv jiné použití,

Více

XML schémata. Agenda. Přínosy použití schématu. Proč potřebujeme schéma dokumentů XML. Tutoriál. Agenda. proč a nač jsou schémata

XML schémata. Agenda. Přínosy použití schématu. Proč potřebujeme schéma dokumentů XML. Tutoriál. Agenda. proč a nač jsou schémata Agenda XML schémata Tutoriál Jirka Kosek proč a nač jsou schémata Agenda přehled nejpoužívanějších jazyků pro popis schématu dokumentu základy jazyka W3C XML Schema jednoduché datové typy komplexní datové

Více

XML a DTD. <!DOCTYPE kořenový_element [deklarace definující vlastnosti jednotlivých elementů a atributů]> externí deklarace:

XML a DTD. <!DOCTYPE kořenový_element [deklarace definující vlastnosti jednotlivých elementů a atributů]> externí deklarace: XML a DTD Kapitola seznamuje se specifikací souboru XML pomocí souboru DTD Klíčové pojmy: Definice typu dokumentu. DTD DEFINICE TYPU DOKUMENTU slouží k bližší definici XML dokumentu textový soubor s uvedenými

Více

XML schémata. Jiří Kosek

XML schémata. Jiří Kosek XML schémata Jiří Kosek XML schémata Jiří Kosek Copyright 2003-2012 Jiří Kosek Datum vydání 24. května 2013 Tento dokument je určen výhradně pro osobní potřebu seznámení se schémovými jazyky. Jakékoliv

Více

Analýza dat a modelování. Speciální struktury

Analýza dat a modelování. Speciální struktury Analýza dat a modelování Speciální struktury XML extensible Markup Language jazyk pro popis struktury dat (zejména se používá pro dokumenty) výrazná podobnost s HTML proč? protože má stejný původ v jazyce

Více

APLIKACE XML PRO INTERNET

APLIKACE XML PRO INTERNET APLIKACE XML PRO INTERNET Jaroslav Ráček Fakulta Informatiky, Masarykova Universita Brno Abstrakt Text je věnován možnostem využití XML technologie pro prezentaci dokumentů pomocí Internetu. V úvodu je

Více

Distanční opora předmětu: Databázové systémy Tématický blok č. 4: XML, DTD, XML v SQL Autor: RNDr. Jan Lánský, Ph.D.

Distanční opora předmětu: Databázové systémy Tématický blok č. 4: XML, DTD, XML v SQL Autor: RNDr. Jan Lánský, Ph.D. Distanční opora předmětu: Databázové systémy Tématický blok č. 4: XML, DTD, XML v SQL Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 XML 2 DTD 2.1 Atributy 2.2 Entity 3. XML v SQL Serveru Studijní cíle

Více

podnikatele ve formě PDF dokumentu nebo budou jednotlivé datové položky rozvedeny v XML subelementech.

podnikatele ve formě PDF dokumentu nebo budou jednotlivé datové položky rozvedeny v XML subelementech. Popis XML rozhraní Veřejného webu RŽP verze 2.2 Veřejný web RŽP slouží k zobrazení veřejných informací o podnikatelských subjektech v České republice. Jeho provozovatelem je Ministerstvo průmyslu a obchodu.

Více

Popis XML rozhraní Veřejného webu RŽP

Popis XML rozhraní Veřejného webu RŽP Popis XML rozhraní Veřejného webu RŽP verze 2.5 Veřejný web RŽP slouží k zobrazení veřejných informací o podnikatelských subjektech v České republice. Jeho provozovatelem je Ministerstvo průmyslu a obchodu.

Více

Syntaxe XML XML teorie a praxe značkovacích jazyků (4IZ238)

Syntaxe XML XML teorie a praxe značkovacích jazyků (4IZ238) XML teorie a praxe značkovacích jazyků (4IZ238) Jirka Kosek Poslední modifikace: $Date: 2009/10/01 19:46:33 $ Obsah Základy syntaxe... 3 Elementy a atributy... 4 Znakový model XML... 5 Komentáře... 6 Instrukce

Více

SCHÉMOVÉ JAZYKY. Přednáška z předmětu KMA/POK. Otakar ČERBA Západočeská univerzita v Plzni

SCHÉMOVÉ JAZYKY. Přednáška z předmětu KMA/POK. Otakar ČERBA Západočeská univerzita v Plzni SCHÉMOVÉ JAZYKY Přednáška z předmětu KMA/POK Otakar ČERBA Západočeská univerzita v Plzni Poslední aktualizace: 16. 10. 2010 Schémové jazyky Jazyky pro popis dokumentu XML schémata XML Schema Languages

Více

Popis XML rozhraní Veřejného webu RŽP

Popis XML rozhraní Veřejného webu RŽP Popis XML rozhraní Veřejného webu RŽP verze 1.1 Veřejný web slouží k zobrazení veřejných informací o podnikatelských subjektech v České republice, provozovatelem je Ministerstvo průmyslu a obchodu. Jeho

Více

Jazyk XSL XPath XPath XML. Jazyk XSL - rychlá transformace dokumentů. PhDr. Milan Novák, Ph.D. KIN PF JU České Budějovice. 9.

Jazyk XSL XPath XPath XML. Jazyk XSL - rychlá transformace dokumentů. PhDr. Milan Novák, Ph.D. KIN PF JU České Budějovice. 9. Jazyk XSL - rychlá transformace dokumentů 9. prosince 2010 Osnova 1 Jazyk XSL Úvod Princip zpracování pomocí stylů Formátování dokumentu pomocí XSL FO Osnova 1 Jazyk XSL Úvod Princip zpracování pomocí

Více

Jazyky pro popis dat

Jazyky pro popis dat Realizováno za finanční podpory ESF a státního rozpočtu ČR v rámci v projektu Zkvalitnění a rozšíření možností studia na TUL pro studenty se SVP reg. č. CZ.1.07/2.2.00/29.0011 Jazyky pro popis dat Pavel

Více

Příloha č. 1E národního standardu pro elektronické systémy spisové služby

Příloha č. 1E národního standardu pro elektronické systémy spisové služby Příloha č. 1E národního standardu pro elektronické systémy spisové služby Schéma XML pro výměnu dokumentů a jejich metadat

Více

Úvod do databázových systémů B

Úvod do databázových systémů B Úvod do databázových systémů B RNDr. Jan Lánský, Ph.D. 5. přednáška XML Slajdy 2-45 převzaty z Mlýnková, Nečaský: Technologie XML (DBI026, MFF UK) 1 Motivace Místo A Chceme přenést informaci Místo B 2

Více

XML terminologie a charakteristiky. Roman Malo

XML terminologie a charakteristiky. Roman Malo XML terminologie a charakteristiky Roman Malo XML extensible Markup Language (rozšiřitelný značkovací jazyk) Verze 1.0, 1.1 http://www.w3.org/xml Rozdíly v podpoře různých znakových sad a práci s řídícími

Více

Základy XML struktura dokumentu (včetně testových otázek)

Základy XML struktura dokumentu (včetně testových otázek) Základy XML struktura dokumentu (včetně testových otázek) Otakar Čerba Oddělení geomatiky Katedra matematiky Fakulta aplikovaných věd Západočeská univerzita v Plzni Přednáška z předmětu Počítačová kartografie

Více

Výukový materiál KA č.4 Spolupráce se ZŠ

Výukový materiál KA č.4 Spolupráce se ZŠ Výukový materiál KA č.4 Spolupráce se ZŠ Modul: Téma workshopu: Výpočetní technika Co je to internet? Jak si udělat vlastní www stránku? Vypracovala: Ing. Lenka Hellová Termín workshopu: 30. říjen 2012

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Schéma XML pro výměnu dokumentů a jejich metadat

Schéma XML pro výměnu dokumentů a jejich metadat Příloha č. 1A národního standardu pro elektronické systémy spisové služby Schéma XML pro výměnu dokumentů a jejich metadat

Více

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM CÍLE KAPITOLY Využívat pokročilé možnosti formátování, jako je podmíněné formátování, používat vlastní formát čísel a umět pracovat s listy. Používat

Více

XML Schema. Irena Mlýnková. Karlova Univerzita Matematicko-fyzikální fakulta Katedra softwarového inženýrství Malostranské náměstí Praha 1

XML Schema. Irena Mlýnková. Karlova Univerzita Matematicko-fyzikální fakulta Katedra softwarového inženýrství Malostranské náměstí Praha 1 XML Schema Irena Mlýnková Karlova Univerzita Matematicko-fyzikální fakulta Katedra softwarového inženýrství Malostranské náměstí 25 118 00 Praha 1 irena.mlynkova@mff.cuni.cz Anotace. Jedním z nejpoužívanějších

Více

Značkovací jazyky a spol. HTML/XHTML XML JSON YAML Markdown, Texy!

Značkovací jazyky a spol. HTML/XHTML XML JSON YAML Markdown, Texy! Značkovací jazyky a spol. HTML/XHTML XML JSON YAML Markdown, Texy! Značkovací jazyky Angl. termín "MARKUP" ("vyznačování") Smyslem je přidat do textu metainformace: formátovací sémantické Výsledek je prostý

Více

HROMADNÉ ÚPRAVY NAJÍT A NAHRADIT

HROMADNÉ ÚPRAVY NAJÍT A NAHRADIT HROMADNÉ ÚPRAVY NAJÍT A NAHRADIT Funkce Najít a nahradit slouží k rychlému vyhledávání určitých slov a jejich nahrazování jinými slovy. Lze hledat i určité varianty slov a nahrazovat je buď hromadně (všechny

Více

<xs:maxlength value="50"/> </xs:restriction> </xs:simpletype>

<xs:maxlength value=50/> </xs:restriction> </xs:simpletype> Příloha č. 2 národního standardu pro elektronické systémy spisové služby Schéma XML pro zaznamenání popisných metadat uvnitř datového balíčku SIP

Více

Relační databáze. V dnešní době existuje řada komerčních DBMS, nejznámější jsou:

Relační databáze. V dnešní době existuje řada komerčních DBMS, nejznámější jsou: Relační databáze Pojem databáze, druhy databází Databází se myslí uložiště dat. V době začátků využívání databází byly tyto členěny hlavně hierarchicky, případně síťově (rozšíření hierarchického modelu).

Více

Tabulkový procesor. Základní rysy

Tabulkový procesor. Základní rysy Tabulkový procesor Tabulkový procesor je počítačový program zpracovávající data uložená v buňkách tabulky. Program umožňuje použití vzorců pro práci s daty a zobrazuje výsledné hodnoty podle vstupních

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Další XML technologie

Další XML technologie XML teorie a praxe značkovacích jazyků (4IZ238) Jirka Kosek Poslední modifikace: $Date: 2012/05/17 18:58:55 $ Obsah Odkazy... 3 Odkazy v rámci jednoho dokumentu... 4 XLink (XML Linking Language)... 5 XLink

Více

HTML - Úvod. Zpracoval: Petr Lasák

HTML - Úvod. Zpracoval: Petr Lasák HTML - Úvod Zpracoval: Petr Lasák Je značkovací jazyk, popisující obsah HTML stránek Je z rodiny SGML jazyků, jako např. XML, DOCX, XLSX Nejedná se o programovací ale značkovací jazyk Dynamičnost dodávají

Více

PRG036 Technologie XML

PRG036 Technologie XML PRG036 Technologie XML Přednáší: Irena Mlýnková (mlynkova@ksi.mff.cuni.cz) Martin Nečaský (necasky@ksi.mff.cuni.cz) LS 2010 Stránka přednášky: http://www.ksi.mff.cuni.cz/~mlynkova/prg036/ 1 Osnova předmětu

Více

Tvorba WWW stránek. Mojmír Volf mojmir.volf@tul.cz https://www.nti.tul.cz/wiki/wikiuser:mojmir.volf 485 353 675

Tvorba WWW stránek. Mojmír Volf mojmir.volf@tul.cz https://www.nti.tul.cz/wiki/wikiuser:mojmir.volf 485 353 675 Tvorba WWW stránek Mojmír Volf mojmir.volf@tul.cz https://www.nti.tul.cz/wiki/wikiuser:mojmir.volf 485 353 675 Zdroje KRUG: Web design - nenuťte uživatele přemýšlet.. Computer Press, 2003. PROKOP M.: CSS

Více

Inovace výuky prostřednictvím šablon pro SŠ

Inovace výuky prostřednictvím šablon pro SŠ Název projektu Číslo projektu Název školy Autor Název šablony Název DUMu Stupeň a typ vzdělávání Vzdělávací oblast Vzdělávací obor Tematický okruh Inovace výuky prostřednictvím šablon pro SŠ CZ.1.07/1.5.00/34.0748

Více

HTML Hypertext Markup Language

HTML Hypertext Markup Language HTML Hypertext Markup Language je jazyk určený na publikování a distribuci dokumentů na Webu velmi jednoduchý jazyk používá ho mnoho uživatelů má výkonné prostředky (příkazy) k formátování dokumentů (různé

Více

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů.

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů. Modely datové Existují různé úrovně pohledu na data. Nejvyšší úroveň je úroveň, která zachycuje pouze vztahy a struktury dat samotných. Konceptuální model - E-R model. Další úrovní je logická úroveň Databázové

Více

Systém elektronického rádce v životních situacích portálu www.senorady.cz

Systém elektronického rádce v životních situacích portálu www.senorady.cz Systém elektronického rádce v životních situacích portálu www.senorady.cz Obec Senorady Miroslav Patočka 2006 Obsah: 1. Úvodní informace 1.1 Informace pro uživatele 1.1.1 Přístupnost HTML, PDA, WAP, XML

Více

DUM 12 téma: Příkazy pro tvorbu databáze

DUM 12 téma: Příkazy pro tvorbu databáze DUM 12 téma: Příkazy pro tvorbu databáze ze sady: 3 tematický okruh sady: III. Databáze ze šablony: 7 Kancelářský software určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie vzdělávací

Více

České vysoké učení technické v Praze Fakulta stavební Katedra mapování a kartografie

České vysoké učení technické v Praze Fakulta stavební Katedra mapování a kartografie České vysoké učení technické v Praze Fakulta stavební Katedra mapování a kartografie Doktorská disertační práce Využití webových služeb v Katastru nemovitostí 15. února 2008 Radek Chromý České vysoké učení

Více

Vstupní data pro program Deformace ve formátu XML

Vstupní data pro program Deformace ve formátu XML geocaktualizace:22.11.2004 Vstupní data pro program Deformace ve formátu XML Pro formát vstupních dat je využit jazyk XML pro popis strukturovaných dat. Formát je definován v souladu s definicí jazyka

Více

Databázový systém označuje soubor programových prostředků, které umožňují přístup k datům uloženým v databázi.

Databázový systém označuje soubor programových prostředků, které umožňují přístup k datům uloženým v databázi. Databáze Základní pojmy Pojem databáze označuje obecně souhrn informací, údajů, dat o nějakých objektech. Úkolem databáze je hlídat dodržení všech omezení a dále poskytovat data při operacích. Objekty

Více

Tvorba webu. Úvod a základní principy. Martin Urza

Tvorba webu. Úvod a základní principy. Martin Urza Tvorba webu Úvod a základní principy Martin Urza World Wide Web (WWW) World Wide Web (doslova celosvětová pavučina ) je označení pro mnoho dokumentů rozmístěných na různých serverech po celém světě. Tyto

Více

Úvod do aplikací internetu a přehled možností při tvorbě webu

Úvod do aplikací internetu a přehled možností při tvorbě webu CVT6 01a Úvod do aplikací internetu a přehled možností při tvorbě webu Internet a www Internet? Služby www ftp e-mail telnet NetNews konference IM komunikace Chaty Remote Access P2P aplikace Online games

Více

Proč celé lidstvo nemluví esperantem. XML Prague

Proč celé lidstvo nemluví esperantem. XML Prague Proč celé lidstvo nemluví esperantem. XML Prague Václav Trojan, Jiří Kamenický, Jiří Měska email: info@syntea.cz http://xdef.syntea.cz Anotace: Příspěvek se věnuje prostředkům pro popis XML dokumentů.

Více

POPIS STANDARDU CEN TC278/WG7. 1 z 5. draft prenv Geografická silniční databáze. Oblast: ZEMĚPISNÁ DATA V SILNIČNÍ DOPRAVĚ ( GRD)

POPIS STANDARDU CEN TC278/WG7. 1 z 5. draft prenv Geografická silniční databáze. Oblast: ZEMĚPISNÁ DATA V SILNIČNÍ DOPRAVĚ ( GRD) POPIS STANDARDU CEN TC278/WG7 Oblast: ZEMĚPISNÁ DATA V SILNIČNÍ DOPRAVĚ ( GRD) Zkrácený název: GEOGRAFICKÁ DATABÁZE Norma číslo: 14825 Norma název (en): GDF GEOGRAPHIC DATA FILES VERSION 4.0 Norma název

Více

Uspořádání klient-server. Standardy pro Web

Uspořádání klient-server. Standardy pro Web Návrh a tvorba WWW stránek 1/11 Uspořádání klient-server klient na straně uživatele (browser, prohlížeč) server program obsluhující požadavky uživatele Standardy pro Web HTTP Hypertext Transfer Protocol

Více

Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu

Typy souborů ve STATISTICA. Tento článek poslouží jako přehled hlavních typů souborů v programu StatSoft Typy souborů ve STATISTICA Tento článek poslouží jako přehled hlavních typů souborů v programu STATISTICA, ukáže Vám jejich možnosti a tím Vám dovolí využívat program efektivněji. Jistě jste již

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra informatiky Database Research Group Úvod do databázových systémů Cvičení 3 Ing. Petr Lukáš petr.lukas@vsb.cz

Více

Mgr. Stěpan Stěpanov, 2013

Mgr. Stěpan Stěpanov, 2013 Mgr. Stěpan Stěpanov, 2013 Abstrakt V tomto kurzu se seznámíme se základními pojmy HTML, klíčovými pravidly pro práci se značkami a atributy a strukturou dokumentu. Také se dozvíte, jak a v čem lze vytvářet

Více

2 PŘÍKLAD IMPORTU ZATÍŽENÍ Z XML

2 PŘÍKLAD IMPORTU ZATÍŽENÍ Z XML ROZHRANÍ ESA XML Ing. Richard Vondráček SCIA CZ, s. r. o., Thákurova 3, 160 00 Praha 6 www.scia.cz 1 OTEVŘENÝ FORMÁT Jednou z mnoha užitečných vlastností programu ESA PT je podpora otevřeného rozhraní

Více

Úvod do XML Technologie

Úvod do XML Technologie 4 TVEZEWXYHMNR LSTVSKVEQY-RJSVQEXMOENITSHTSVSZ RETVSNIOXIQRERGSZER Q ^)ZVSTWO LSWSGM PR LSJSRHYEVS^TS XYLPEZR LSQ WXE4VEL] 4VELE)9-RZIWXYNIQIHSZE% FYHSYGRSWXM Úvod do XML Technologie BI-TWA Peter Vojtáš

Více

Příklad buňka tabulky

Příklad buňka tabulky Realizováno za finanční podpory ESF a státního rozpočtu ČR v rámci v projektu Zkvalitnění a rozšíření možností studia na TUL pro studenty se SVP reg. č. CZ.1.07/2.2.00/29.0011 Pojmenované šablony Pojmenované

Více

X L M L v v Of O f f i f ce 2 0 2 0 0 7 XML OBECNĚ VBA pro Excel Petr Blaha XML v MS Office Michal Theodor

X L M L v v Of O f f i f ce 2 0 2 0 0 7 XML OBECNĚ VBA pro Excel Petr Blaha XML v MS Office Michal Theodor Osnova XML v Office 2007 Michal Theodor XML obecně Co to je XML Příklad XML dokumentu Využití Office Open XML Struktura dokumentu MS Office 2007 Úprava dokumentu MS Office 2007 pomocí XML Přizpůsobení

Více

Úvod do tvorby internetových aplikací

Úvod do tvorby internetových aplikací CVT6 01a Úvod do tvorby internetových aplikací Osnova předmětu (X)HTML a tvorba webu pomocí přímého zápisu kódu Tvorba web designu a skládání stránek z kousků Skriptovací jazyky na webu Návrh software

Více

Fakulta elektrotechnická

Fakulta elektrotechnická České vysoké učení technické v Praze Fakulta elektrotechnická DIPLOMOVÁ PRÁCE Název diplomové práce Praha, 2002 Autor: Jirka Roubal Prohlášení Prohlašuji, že jsem svou diplomovou (bakalářskou) práci vypracoval

Více

Univerzita Karlova v Praze

Univerzita Karlova v Praze [Vzor: Pevná deska diplomové práce není součástí elektronické verze] [Verze 3/2013 platná od 18.3.2013 dostupná z http://www.mff.cuni.cz/studium/bcmgr/prace] Univerzita Karlova v Praze Matematicko-fyzikální

Více

Databáze. Logický model DB. David Hoksza

Databáze. Logický model DB. David Hoksza Databáze Logický model DB David Hoksza http://siret.cz/hoksza Osnova Relační model dat Převod konceptuálního schématu do logického Funkční závislosti Normalizace schématu Cvičení převod do relačního modelu

Více

Vývoj Internetových Aplikací

Vývoj Internetových Aplikací 5 Vývoj Internetových Aplikací AJAX, JSON, XML Ing. Michal Radecký, Ph.D. www.cs.vsb.cz/radecky Co je to AJAX - Asynchronous JavaScript and XML - Kombinace technologií, která umožňuje měnit části webové

Více

Vývoj Internetových Aplikací

Vývoj Internetových Aplikací 2 Vývoj Internetových Aplikací HTML a CSS Ing. Michal Radecký, Ph.D. www.cs.vsb.cz/radecky HTML a CSS - Tvorba webových stránek - Struktura - Obsah - Vzhled - Funkcionalita zdroj: http://www.99points.info

Více

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče. Primární a cizí klíč Kandidát primárního klíče (KPK) Je taková množina atributů, která splňuje podmínky: Unikátnosti Minimálnosti (neredukovatelnosti) Primární klíč (Primary Key - PK) Je právě jedna množina

Více

Publikování map na webu - WMS

Publikování map na webu - WMS Semestrální práce z předmětu Kartografická polygrafie a reprografie Publikování map na webu - WMS Autor: Ondřej Dohnal, Martina Černohorská Editor: Filip Dvořáček Praha, duben 2010 Katedra mapování a kartografie

Více

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 3 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování 4 fáze vytváření

Více

l Kontakt s klientem SSP Popis automatizované komunikace s ÚP ČR v součinnosti a exekuci

l Kontakt s klientem SSP Popis automatizované komunikace s ÚP ČR v součinnosti a exekuci l Kontakt s klientem SSP automatizované komunikace s ÚP ČR v součinnosti a exekuci Obsah: 1. SEZNAM POUŽITÝCH ZKRATEK... 3 2. POPIS SLUŽBY... 4 2.1 Forma a struktura rozhraní... 4 2.2 Dostupnost služby...

Více

Návrh technických pravidel pro tvorbu SIP

Návrh technických pravidel pro tvorbu SIP Návrh technických pravidel pro tvorbu SIP Použití některých elementů XML schématu dle přílohy 3 národního standardu pro elektronické systémy spisové služby verze: 7 Národní standard pro elektronické systémy

Více

Návrh stránek 4IZ228 tvorba webových stránek a aplikací

Návrh stránek 4IZ228 tvorba webových stránek a aplikací 4IZ228 tvorba webových stránek a aplikací Jirka Kosek Poslední modifikace: $Date: 2013/12/12 20:40:58 $ Obsah Úvod... 3 Recept na dobré webové stránky... 4 Použitelnost... 5 Jak se pozná použitelný web...

Více

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý Uživatelský manuál Aplikace GraphViewer Vytvořil: Viktor Dlouhý Obsah 1. Obecně... 3 2. Co aplikace umí... 3 3. Struktura aplikace... 4 4. Mobilní verze aplikace... 5 5. Vytvoření projektu... 6 6. Části

Více

Tvorba fotogalerie v HTML str.1

Tvorba fotogalerie v HTML str.1 Tvorba fotogalerie v HTML str.1 obr. A obr. B 1) Spustíme PsPad, vytvoříme nový dokument a otevře se nám okno nový soubor, kde si můžeme zvolit jaký chceme typ. My označíme HTML a potvrdíme. 2) Pro správné

Více

Interaktivní typová kontrola XML a ladění XML transformací

Interaktivní typová kontrola XML a ladění XML transformací MASARYKOVA UNIVERZITA V BRNĚ FAKULTA INFORMATIKY Interaktivní typová kontrola XML a ladění XML transformací BAKALÁŘSKÁ PRÁCE Marek Posolda Brno, jaro 2005 Prohlášení Prohlašuji, že tato bakalářská práce

Více

13. Vytváření webových stránek

13. Vytváření webových stránek 13. Vytváření webových stránek značkovací jazyk HTML, základní členění dokumentu, odkazy, tabulky, seznamy, obrázky, HTML editory Značkovací jazyk HTML HTML - Hypertext markup Language (hypertextový značkovací

Více

Systém souborů (file system, FS)

Systém souborů (file system, FS) UNIX systém souborů (file system) 1 Systém souborů (file system, FS)! slouží k uchování dat na vnějším paměťovém médiu a zajišťuje přístup ke struktuře dat! pro uživatele možnost ukládat data a opět je

Více

Tvorba informačních systémů

Tvorba informačních systémů Tvorba informačních systémů Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2006/2007 c 2006 2007 Michal Krátký Tvorba informačních systémů 1/37 Obsah 8.

Více

Pokyny k vypracování absolventské práce

Pokyny k vypracování absolventské práce Základní škola a Mateřská škola Bělá pod Pradědem, příspěvková organizace tel.: 584 412 084 e-mail: zsadolfovice@jen.cz Adolfovice 170 web: http://zsadolfovice.cz IČO: 75029456 790 01 Jeseník Pokyny k

Více

Validace souborů DS3

Validace souborů DS3 Validace souborů DS3 Verze: 1.33 1. Rozsah...1 1.1 Identifikace systému...1 1.2 Přehled systému...1 2. Přehled verzí a změny v nich...1 3. Použité dokumenty...2 4. Shrnutí údajů o programovém vybavení...4

Více

Inovace výuky prostřednictvím šablon pro SŠ

Inovace výuky prostřednictvím šablon pro SŠ Název projektu Číslo projektu Název školy Autor Název šablony Název DUMu Stupeň a typ vzdělávání Vzdělávací oblast Vzdělávací obor Tematický okruh Inovace výuky prostřednictvím šablon pro SŠ CZ.1.07/1.5.00/34.0748

Více

ZARÁŽKY A TABULÁTORY V MS OFFICE WORD

ZARÁŽKY A TABULÁTORY V MS OFFICE WORD ZARÁŽKY A TABULÁTORY V MS OFFICE WORD Tabulátory a odrážky slouží k přesnějšímu formátování textů, které mají tabulkový nebo výčtový charakter. Tento text objasní základní práci s těmito funkcionalitami

Více

Univerzita Karlova v Praze

Univerzita Karlova v Praze [Vzor: Pevná deska bakalářské práce není součástí elektronické verze] Univerzita Karlova v Praze Matematicko-fyzikální fakulta BAKALÁŘSKÁ PRÁCE Rok Jméno a příjmení autora [Vzor :Titulní strana bakalářské

Více

IMPORT DAT DO DATABÁZE

IMPORT DAT DO DATABÁZE Úvod do problematiky IMPORT DAT DO DATABÁZE Databázové tabulky lze naplňovat i již dříve pořízenými údaji. Můžeme tak snadno načíst do databáze data pořízená v textovém editoru WORD nebo v tabulkovém procesoru

Více

NSWI096 - INTERNET. Úvod do HTML

NSWI096 - INTERNET. Úvod do HTML NSWI096 - INTERNET Úvod do HTML XHTML CO TO JE? XML extensible Markup Language Sada pravidel, jak kódovat dokumenty Podle těchto pravidel lze vytvořit nekonečně mnoho různých jazyků HTML HyperText Markup

Více

STŘEDNÍ ŠKOLA INFORMAČNÍCH TECHNOLOGIÍ A SOCIÁLNÍ PÉČE

STŘEDNÍ ŠKOLA INFORMAČNÍCH TECHNOLOGIÍ A SOCIÁLNÍ PÉČE STŘEDNÍ ŠKOLA INFORMAČNÍCH TECHNOLOGIÍ A SOCIÁLNÍ PÉČE WEBOWÉ STRÁNKY TŘÍD KAMIL POPELKA ZÁVĚREČNÁ MATURITNÍ PRÁCE BRNO 2011 Prohlášení Prohlašuji, že maturitní práce je mým původním autorským dílem, které

Více

Dokument a jeho části oddíly, záhlaví, zápatí

Dokument a jeho části oddíly, záhlaví, zápatí Dokument a jeho části oddíly, záhlaví, zápatí Nejčastějším úkolem bývá ukončení stránky a pokračování textu na další stránce nebo vložení stránky před napsaný text. Podobným úkolem je jiné svislé zarovnání

Více

Provozní dokumentace. Seznam datových schránek. Datové soubory. Vytvořeno dne: 29. 4. 2013 Aktualizováno: 2.5.2013 Verze: 1.

Provozní dokumentace. Seznam datových schránek. Datové soubory. Vytvořeno dne: 29. 4. 2013 Aktualizováno: 2.5.2013 Verze: 1. Provozní dokumentace Seznam datových schránek Datové soubory Vytvořeno dne: 29. 4. 2013 Aktualizováno: 2.5.2013 Verze: 1.1 2013 MVČR Obsah Datové soubory s údaji držitelů datových schránek 1 Úvod...3 1.1

Více

Obecný popis struktury souborů a rozhraní pro třetí strany společného technického zařízení správců daně (Podatelny EPO)

Obecný popis struktury souborů a rozhraní pro třetí strany společného technického zařízení správců daně (Podatelny EPO) Obecný popis struktury souborů a rozhraní pro třetí strany společného technického zařízení správců daně (Podatelny EPO) Verze 1.6 Strana 1 (celkem 20) Popis struktury souborů Základní společnou vlastností

Více

HTML - pokračování. Co už víme?

HTML - pokračování. Co už víme? HTML - pokračování Co už víme? HTML slouží ke strukturovanému zápisu informací HTML dokument je jako skládačka Je to text uvozený značkou Základní části jsou HEAD a BODY Nadpisy pomocí

Více

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných Tematický celek 03 3.1 Proměnné Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace. 3.1.1 Deklarace proměnných Dim jméno_proměnné [As typ] - deklarace uvnitř procedury platí pouze pro

Více

Kontingenční tabulky v MS Excel 2010

Kontingenční tabulky v MS Excel 2010 Kontingenční tabulky v MS Excel 2010 Autor: RNDr. Milan Myšák e-mail: milan.mysak@konero.cz Obsah 1 Vytvoření KT... 3 1.1 Data pro KT... 3 1.2 Tvorba KT... 3 2 Tvorba KT z dalších zdrojů dat... 5 2.1 Data

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4 Obsah Obsah 1 Jednoduché datové typy 1 2 Strukturované datové typy 2 2.1 Pole.................................. 2 2.2 Záznam................................ 3 2.3 Množina................................

Více

GIS Geografické informační systémy

GIS Geografické informační systémy GIS Geografické informační systémy Obsah přednášky Prostorové vektorové modely Špagetový model Topologický model Převody geometrií Vektorový model Reprezentuje reálný svět po jednotlivých složkách popisu

Více

Programujeme v softwaru Statistica

Programujeme v softwaru Statistica Programujeme v softwaru Statistica díl druhý Newsletter Statistica ACADEMY Téma: Programování, makra, skripty Typ článku: Návody V tomto článku si ukážeme další možnosti při psaní maker v softwaru Statistica.

Více

Aplikace pro srovna ní cen povinne ho ruc ení

Aplikace pro srovna ní cen povinne ho ruc ení Aplikace pro srovna ní cen povinne ho ruc ení Ukázkový přiklad mikroaplikace systému Formcrates 2010 Naucrates s.r.o. Veškerá práva vyhrazena. Vyskočilova 741/3, 140 00 Praha 4 Czech Republic tel.: +420

Více

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema:

Principy XQuery. funkcionální jazyk vše je výraz, jehož vyhodnocením vznikne určitá hodnota základní typy stejné jako v XML Schema: Realizováno za finanční podpory ESF a státního rozpočtu ČR v rámci v projektu Zkvalitnění a rozšíření možností studia na TUL pro studenty se SVP reg. č. CZ.1.07/2.2.00/29.0011 XQuery XQuery dotazovací

Více