1. Jazyk XML a formát jeho dokumentů



Podobné dokumenty
Správnost XML dokumentu

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.

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

Rozhraní pro práci s XML dokumenty. Roman Malo

Jemný úvod do spracovania XML

Tvorba informačních systémů

XML terminologie a charakteristiky. Roman Malo

APLIKACE XML PRO INTERNET

Jazyky pro popis dat

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

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

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.

Java a XML. 10/26/09 1/7 Java a XML

Obsah prezentace. Co je to XML? Vlastnosti. Validita

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

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Tvorba informačních systémů

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

Tvorba WWW stránek. Mojmír Volf

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

Podpora XML v.net. Podpora XML v.net. nezávislý publicista. Jirka Kosek.

Úvod do programovacích jazyků (Java)

API pro práci s XML. Jirka Kosek. Poslední modifikace: $Date: 2014/12/17 17:15:28 $ Copyright Jiří Kosek

Programování v Javě I. Únor 2009

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

X36DSV 3. cvičení. XML (extensible Markup Language) JavaScript. AJAX (Asynchronous JavaScript and XML) X36DSV. 2007/10 ver.2.0 1

Programování v Javě I. Leden 2008

Vývoj Internetových Aplikací

Algoritmizace a programování

Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

NSWI096 - INTERNET JavaScript

Úvod do programování - Java. Cvičení č.4

Výčtový typ strana 67

UJO Framework. revoluční architektura beans. verze

Dnešní téma. Oblasti standardizace v ICT. Oblasti standardizace v ICT. Oblasti standardizace v ICT

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Teoretické minimum z PJV

HTML Hypertext Markup Language

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

Programování v jazyce JavaScript

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

NSWI096 - INTERNET. Úvod do HTML

XML Š ABLONY A JEJICH INTEGRACE V LCMS XML TEMPLATES AND THEIN INTEGRATION IN LCMS

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

7. Datové typy v Javě

PREPROCESOR POKRAČOVÁNÍ

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

Úvod do XML Technologie

HTML XHTML JavaScript PHP ASP.Net Zajímavé odkazy

Úvod do tvorby internetových aplikací

1. Programování proti rozhraní

Generické programování

Předmluva k druhému vydání 13. Úvod 17. ČÁST 2 Vytváření dokumentů XML 65

Základy WWW publikování

Další XML technologie

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Distribuované systémy a výpočty (02)

Na tomto místě bude oficiální zadání vaší práce

1 Webový server, instalace PHP a MySQL 13

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Algoritmizace a programování

PŘETĚŽOVÁNÍ OPERÁTORŮ

Seminář Java II p.1/43

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Java a Caché IV: Manipulace s objekty

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

typová konverze typová inference

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Prezentace XML. XML popisuje strukturu dat, neřeší vzhled definice vzhledu:

EXTRAKT z mezinárodní normy

PRG036 Technologie XML

Příklad buňka tabulky

IRAE 07/08 Přednáška č. 1

Obrázek 6.14: Prohlížec nápovedy

Tvorba jednoduchých WWW stránek. VŠB - Technická univerzita Ostrava Katedra informatiky

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Návrh technických pravidel pro tvorbu SIP

Základy HTML (2. přednáška)

Software602 Form Designer

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

Škola: Gymnázium, Brno, Slovanské náměstí 7 III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

První kapitola úvod do problematiky

1. Téma 12 - Textové soubory a výjimky

Úvod do programovacích jazyků (Java)

XML snadno a rychle Martin Kuba, ÚVT MU

RMI Remote Method Invocation

PRG036 Technologie XML

Paměť počítače. alg2 1

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Zadání úlohy do projektu z předmětu IPP 2013/2014

Konstruktory překladačů

Uspořádaný seznam nula nebo více elementů, každý je typem ASN.1 (heterogenní seznam) uspořádaný seznam stejných elementů

Algoritmizace prostorových úloh

Abstraktní datové typy: zásobník

1. Dědičnost a polymorfismus

Transkript:

1 OOP_11 Java a XML

Obsah 2 1. Jazyk XML a formát jeho dokumentů 2. Využití DTD (Document Type Definition) při tvorbě gramatiky dokumentu XML 3. Zpracování a ověření platnosti dokumentu XML objektového modelu DOM (Document Object Model) 4. Jmenné prostory XML vyloučení nejednoznačnosti

1. Jazyk XML a formát jeho dokumentů 3 XML extensible Markup Language podobně jako XHTML odvozen od SGML (Stardard Generalized Markup Language) SGML jazyk pro popis a definici dat navržený, tak, aby se informace daly zpracovávat jako objekty, ne jako posloupnost znaků. SGML nesmírně flexibilní a výkonný avšak jeho použití složité a náročné.

Jazyk XML 4 XML navržen pro popis (vyjádření) dat nezávislé na platformě. XML je rozšiřitelný, samo-popisný a konzistentní. XML poskytuje rovněž metadata dají přenášeným datům širší kontext Data lze vložit do kontextu pomocí obklopujících značek, které definují datovou strukturu a poskytují dodatečné informace a atributy. XHTML omezuje uživatele, klade důraz na způsob prezentace v určitém kontextu

Atributy Osnova 5 <kniha> <nazev zanr= roman >Dáma s kaméliemi</nazev> <autor narodnost= fr >Alexandre Dumas ml.</autor> <nakladatelstvi>melantrich</nakladatelstvi> <rok>1981</rok> <kapitola>i</kapitola> <odstavec>...... </odstavec> <odstavec>...... </odstavec> <kapitola>ii</kapitola>... Elementy </kniha>

<?xml version="1.0" encoding= iso iso-8859 8859-2?> Osnova 6 <book> <title>professional Java Programming</title> <author>brett Spell</author> <publisher>wrox Press</publisher> XML <tableofcontents showpagenumbers="yes"> // atribut showpagenumbers <tocentry tocentry>printing</ >Printing</tocEntry tocentry> <tocentry tocentry>cut And Paste</tocEntry tocentry> <tocentry tocentry>drag And Drop</tocEntry tocentry> </tableofcontents tableofcontents> </book>

<HTML> <CENTER> <H1>Professional Java Programming</H1> </CENTER> <H4>Brett Spell</H4> <B> <H3>Table Of Contents</H3> <LI>Printing</LI> <LI>Cut and Paste</LI> <LI>Drag and Drop</LI> </B> <H4>Wrox Press</H4> <IMG ALT="Wrox Logo" SRC="http://www.wrox.com/images/wrox_logo100.gif"> HTML Osnova 7 </HTML>

XML nebo XHTML (HTML) 8 HTML je kombinací dat a instrukcí pro zobrazení v prohlížeči zobrazovací instrukce vyjádřeny formou formátovacích značek <CENTER> <H1> data HTML jsou v úzké vazbě s formátovacími značkami objektově orientovaný návrh, úzká vazba nežádoucí (omezuje opětovné použití) různé formáty v prohlížeči a např. černobílém tisku hypertextové odkazy ztrácí smysl v tištěné podobě - nahrazena např. poznámkou pod čarou

XML nebo XHTML (HTML) 9 Dokumenty HTML: neobsahují žádné informace pro vlastní popis dat (metadata) nemusí být správně uspořádány Jazyk XML: popisuje pouze data neobsahuje žádné informace o tom, jak zobrazit data strukturu dokumentu může definovat sám uživatel definuje způsob tvorby dokumentů a způsob jejich zpracování a výměny

Správně uspořádané dokumenty (well-formed) 10 každá počáteční značka musí mít koncovou značku (kromě prázdného elementu) hodnoty atributů musí být v uvozovkách speciální znaky používané k definici značek (tagů), jsou označeny jako rezervované znaky - & ; značky musí být do sebe vnořeny (jako bloky programu)

Element - atribut 11 Každá dvojice značek (počáteční a koncová) se označuje jako element. <jmeno_elementu> </jmeno_elementu> každý element může obsahovat další informace atributy atribut je součástí elementu a skládá se z názvu atributu a přiřazené hodnoty v uvozovkách narodnost= ceska

1 <?xml version = "1.0"?> 2 3 <!-- article.xml --> 4 <!-- Article structured with XML --> 5 6 <article> 7 8 <title>simple XML</title> 9 10 <date>july 15, 2003</date> 11 12 <author> 13 <firstname>carpenter Carpenter</firstName> 14 <lastname>cal Cal</lastName> 15 </author> 16 17 <summary>xml is pretty easy.</summary> 18 19 <content>once you have mastered m XHTML, XML is easily 20 learned. You must remember that XML is not for 21 displaying information but for managing information. 22 </content> 23 24 </article> article.xml Osnova 12

Rezervované znaky předdefinované znakové entity 13 Název menší než Znak < Sekvence změny < větší než > > apostrof &apos; uvozovka &qout; znak & & &

Znakové entity 14 Character reference Odkazují se na znaky v ISO/IEC 10646, které nejsou přímo přístupné ze vstupního zařízení zápis je následující: 1. Desítková reprezentace znaku: &#[0-9]; např. řetězec &#64 představuje zavináč 2. Hexadecimální reprezentace znaku: &#x[0-9a-fa-f]; např. &#x40 představuje opět znak zavináč

Použití XML 15 Popis dat přenášených mezi aplikacemi EJB deskriptory zavádění (deployment descriptors) je to vlastně konfigurační soubor, který popisuje způsob použití objektu modelu Enterptise JavaBeans. Serializované objekty byly z pohledu serveru neobyčejně pohodlným médiem, uživatelé posuzovali jejich užitečnost z hlediska možností jejich editace. XML snadno čitelný jak pro lidi, tak pro stroje.

Kořenové elementy 16 dodržení syntaktických pravidel navržených konsorciem W3C dokument obsahuje jeden nebo více elementů, přičemž jeden z nich je tzv. kořenový element (root element). kořenový element musí obsahovat všechny ostatní elementy

Osnova 17 <? <? <? <?xml xml xml xml version version version version='1.0' ='1.0' ='1.0' ='1.0' encoding encoding encoding encoding=' =' =' ='iso iso iso iso-8859 8859 8859 8859-2'?> 2'?> 2'?> 2'?> <slovnik slovnik slovnik slovnik> <nazev nazev nazev nazev>česko esko esko esko-anglický slovn anglický slovn anglický slovn anglický slovník</ k</ k</ k</nazev nazev nazev nazev> <slovo> <slovo> <slovo> <slovo> <cesky cesky cesky cesky>jablko</ >jablko</ >jablko</ >jablko</cesky cesky cesky cesky> <anglicky> <anglicky> <anglicky> <anglicky>apple apple apple apple</anglicky> </anglicky> </anglicky> </anglicky> <dalsi dalsi dalsi dalsi_vyznam vyznam vyznam vyznam>rajsk >rajsk >rajsk >rajské</ </ </ </dalsi dalsi dalsi dalsi_vyznam vyznam vyznam vyznam> <anglicky> <anglicky> <anglicky> <anglicky>tomato tomato tomato tomato</anglicky> </anglicky> </anglicky> </anglicky> <dalsi dalsi dalsi dalsi_vyznam vyznam vyznam vyznam>jablo >jablo >jablo >jabloň</ </ </ </dalsi dalsi dalsi dalsi_vyznam vyznam vyznam vyznam> <anglicky> <anglicky> <anglicky> <anglicky>appletree appletree appletree appletree</anglicky> </anglicky> </anglicky> </anglicky> </slovo> </slovo> </slovo> </slovo> <slovo> <slovo> <slovo> <slovo> <cesky cesky cesky cesky>jahod >jahod >jahod >jahod <koncovka> <koncovka> <koncovka> <koncovka>-a</koncovka> a</koncovka> a</koncovka> a</koncovka> <koncovka> <koncovka> <koncovka> <koncovka>-ový ový ový ový</koncovka> </koncovka> </koncovka> </koncovka> </ </ </ </cesky cesky cesky cesky> <anglicky> <anglicky> <anglicky> <anglicky>strawberry strawberry strawberry strawberry</anglicky> </anglicky> </anglicky> </anglicky> </slovo> </slovo> </slovo> </slovo> <slovo> <slovo> <slovo> <slovo> <cesky cesky cesky cesky>malin >malin >malin >malin <koncovka> <koncovka> <koncovka> <koncovka>-a</koncovka> a</koncovka> a</koncovka> a</koncovka> <koncovka> <koncovka> <koncovka> <koncovka>-ový ový ový ový</koncovka> </koncovka> </koncovka> </koncovka> </ </ </ </cesky cesky cesky cesky> <anglicky> <anglicky> <anglicky> <anglicky>raspberry raspberry raspberry raspberry</anglicky> </anglicky> </anglicky> </anglicky> </slovo> </slovo> </slovo> </slovo> </ </ </ </slovnik slovnik slovnik slovnik>

Osnova 18 <?xml version="1.0" encoding=" ="utf utf-8"?> <!DOCTYPE kucharka SYSTEM "kucharka" kucharka.dtd dtd"> <kucharka kucharka> <recept cislo="r01"> <nazev kategorie="zelenina" autor="jani janiäťka ka">t ">TÄ Ä stoviny se špenĂ penăˇtem</ tem</nazev nazev> <doba_pripravy pripravy>30 minut</doba_pripravy pripravy> <ingredience>400g tä stovin (farfalle farfalle)</ingredience> <ingredience>250g mraĺľ ĹľenĂ enă ho špenĂ penăˇtu (drcenă( drcenă nebo listy)</ingredience> <ingredience>150g tvrdă ho să ra ra</ingredience> <ingredience>100ml smetany na vaĺ enă enă</ingredience> <ingredience>4 strouĺľ Ĺľky ÄŤesneku esneku</ingredience> <ingredience>sĺś Ĺśl</ingredience> <ingredience>bilă bilă pepĺ </ingredience> <postup>tä Ä stoviny uvaĺ Ăme podle năˇvodu na obale. Ĺ penăˇt podusăme do rozmraĺľ ĹľenĂ enă osolăme me, opepĺ Ăme a pĺ idă idăˇme rozlisovană ÄŤesnek esnek. Nastrouháme să r. UvaĹ enă enă tä stoviny smăchă chăˇme se špenĂ penăˇtem. Zalejeme smetanou na vaĺ enă enă, zasypeme să rem a krăˇtce povaĺ Ăme me. &chut& chut; </postup> </recept> <recept cislo="r02"> <nazev kategorie="zelenina">tä Ä stoviny s rajäťaty aty a zelenă mi fazolkami</nazev nazev> <doba_pripravy pripravy>30 minut</doba_pripravy pripravy> <ingredience>400g tä stovin (farfalle farfalle)</ingredience> <ingredience>200g zelenă ch fazolek (mĺśĺľ( Ŝžou bă t i mraĺľ ĹľenĂ enă )</ingredience> <ingredience>4 rajäťata ata (nebo konzerva loupană ch rajäťat at)</ingredience> <ingredience>100g tvrdă ho să ra ra</ingredience> <ingredience>3 strouĺľ Ĺľky ÄŤesneku esneku</ingredience> <ingredience>2 lĺľ ĹľĂce olivovă ho oleje</ingredience> <ingredience>bazalka</ingredience> <ingredience>sĺś Ĺśl</ingredience> <postup>tä Ä stoviny uvaĺ Ăme podle năˇvodu na obale. Fazolky povaĺ Ăme 3 minuty. Na rozpăˇlenă lenă m oleji osmaĺľ ĹľĂme ÄŤesnek nakrăˇjenă jenă na plăˇtky tky. PĹ idăp idăˇme fazolky a krăˇtce povaĺ Ăme me. Pak pĺ idă idăˇme oloupan㡠rajäťata ata, bazalku podle chuti a prohĺ ejeme ejeme. ZamĂchĂ chăˇme tä stoviny stoviny. Na taliĺ Ă posypeme nastrouhană m să rem rem. &chut chut; </postup> </recept> </kucharka kucharka>

Součásti dokumentu XML 19 do kořenového elementu mohou být vkládány další elementy (s atributy nebo bez nich) vnořené elementy pak mohou obsahovat text nebo další elementy prázdný element: <elementpriklad></elementpriklad> <elementpriklad/> oddíl CDATA analyzátor (parser) nikdy neanalyzuje <![CDATA[... ]]>

2. Využití DTD (Document Type Definition) při tvorbě gramatiky dokumentu XML 20 Je výhodné nejen deklarovat množinu elementů, které lze v rámci dokumentu použít, ale i způsob použití těchto elementů gramatika dokumentu XML = soubor pravidel o způsobu použití elementů DTD = soubor elementů a vztahů mezi nimi a to umožní: ověřit, zda dokument obsahuje všechny potřebné údaje, zda jsou data kompletní a zda dokument neobsahuje žádná cizí data popis jaká data dokument obsahuje a jak je lze zpracovat (pro jiné spolupracovníky, partnery)

Gramatika DTD 21 Definice typu dokumentu: sada instrukcí určující, jaké elementy může daný dokument obsahovat jaké atributy mohou elementy mít v jakém pořadí musí být v dokumentu uvedeny Cílem DTD je umožnit analyzátorům jazyka XML zjistit validitu dokumentu pro spojení dokumentu s příslušným DTD souborem slouží deklarace DOCTYPE

DOCTYPE 22 DOCTYPE požaduje: název kořenového elementu na který bude definice DTD aplikována identifikátor SYSTEM nebo PUBLIC URL (Uniform Resource Identifier jednotné označování zdrojů), které určuje umístění definice DTD

Definování elementů 23 Možný obsah elementu: prázdný element nesmí obsahovat žádný obsah element element může obsahovat určené dceřinné elementy smíšený element může obsahovat směs dceřinných elementů a analyzovaných znakových dat (#PCDATA) libovolný element může obsahovat jakýkoli správně uspořádaný obsah. Prázdný a libovolný obsah je deklarován pomocí klíčových slov EMPTY a ANY. <!ELEMENT BezDat EMPTY> <!ELEMENT Cokoli ANY>

<?xml version = "1.0"?> Osnova 24 <!-- Business letter formatted with XML --> <!DOCTYPE letter SYSTEM "letter.dtd " letter.dtd"> <letter> <contact type = "from"> <name>john Doe</name> <address1>123 Main St.</address1> <address2></address2> <city>anytown Anytown</city> <state>anystate Anystate</state> <zip>12345</zip> <phone>555-1234</phone> <flag gender = "M"/> </contact> <contact type = "to"> <name>joe Schmoe</name> <address1>box 12345</address1> <address2>15 Any Ave.</address2> <city>othertown Othertown</city> <state>otherstate Otherstate</state> <zip>67890</zip> <phone>555-4321</phone> <flag gender = "M"/> </contact>

<salutation>dear Sir:</salutation> Osnova 25 <paragraph>it is our privilege to inform you about our new database managed with XML. This new system allows you to reduce the load of your inventory list server by having the client machine perform the work of sorting and filtering the data.</paragraph> <closing>sincerely</closing> <signature>mr. Doe</signature> </letter>

<!-- DTD document for letter.xml --> Osnova 26 <!ELEMENT letter ( contact+, salutation, paragraph+, closing, signature )> <!ELEMENT contact ( name, address1, address2, city, state, zip, phone, flag )> <!ATTLIST contact type CDATA #IMPLIED> <!ELEMENT name ( #PCDATA )> <!ELEMENT address1 ( #PCDATA )> <!ELEMENT address2 ( #PCDATA )> <!ELEMENT city ( #PCDATA )> <!ELEMENT state ( #PCDATA )> <!ELEMENT zip ( #PCDATA )> <!ELEMENT phone ( #PCDATA )> <!ELEMENT flag EMPTY> <!ATTLIST flag gender (M F) "M"> <!ELEMENT salutation ( #PCDATA )> <!ELEMENT closing ( #PCDATA )> <!ELEMENT paragraph ( #PCDATA )> <!ELEMENT signature ( #PCDATA )>

Definování elementů 27 Elementy se smíšeným obsahem se definují pomocí modelu obsahu (content model). Model obsahu popisuje vnitřní strukturu daného elementu, pořadí vnořených elementů a typ např. #PCDATA libovolná data (parsed character data). <!ELEMENT book (title, author, publisher)> Znak * +? Počet výskytů daného elementu Ani jednou, nebo vícekrát. Jednou, nebo vícekrát. Ani jednou, nebo jen jednou.

Závorky a trubky 28 Závorky znak opakování použitý mimo závorky znamená aplikaci na celý výraz v závorce Trubky umožňují nesekvenční uspořádání elementů praxe: za daným elementem může následovat jeden z více možných elementů <ELEMENT book (title publisher tableofcontents overview)> významově znamená nebo

Definování atributů elementu 29 <!ELEMENT book (title title, author, publisher, tableofcontents)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT tableofcontents (tocentry tocentry+)> <!ATTLIST tableofcontents showpagenumbers CDATA "yes" yes"> <!ELEMENT tocentry (#PCDATA)> atribut s implicitní hodnotou yes datový typ PCDATA použit při definici elementů a pro analyzovaná znaková data datový typ CDATA oznamuje, že datový atribut podporuje znaková data

Klíčová slova 30 #FIXED zabrání překrytí definované implicitní hodnoty v DTD (konstanta) #REQUIRED vyžadovaná hodnota, nutno zadat (implicitní hodnota ztrácí smysl v DTD se nesmí uvádět) #IMPLIED v případě neexistence explicitní hodnoty se předpokládá implicitní hodnota, kterou však určí vyhodnocovací software nikoli DTD

Typy atributů 31 Typ atributu CDATA ID IDREF IDREFS ENTITY ENTITIES NMTOKEN NMTOKENS NOTATION Výčtové hodnoty Popis Znaková data řetězec Název jedinečný v rámci daného dokumentu (#IMLPIED, #REQUIRED) Odkaz na element s atributem typu ID se stejným názvem jako tento atribut typu IDREF. Skupina atributů typu IDREF oddělených mezerami. Název předdefinované externí entity. Skupina entit oddělených mezerami. Název (token). Stejná pravidla jako názvy elementů, mohou začínat libovolným povoleným znakem. Skupina tokenů oddělených mezerami. Hodnota tohoto typu musí být jedním z názvů určujících typ zápisu deklarovaného v definici DTD. Hodnota tohoto typu musí být jedním ze skupiny uživatelsky definovaných hodnot.

Entity 32 Dokument XML se může skládat z jedné nebo více paměťových jednotek, entit. Entita je jmenné vyjádření určitéčásti dokumentu. Každá entita je identifikovaná svým jménem a má nějaký obsah. Každý XML dokument obsahuje tzv. entitu dokumentu (document entity), která slouží jako počáteční bod pro XML procesor a obsahuje celý dokument. Rozlišujeme dva druhy entit: 1. Vnitřní - interní entity 2. Vnější - externí entity

Vnitřní entity 33 definovány pomocí záznamů <!ENTITY> <!- - priklad def. entity v dokumentu XML - - > <!ENTITY currentyear 2007 > <! - - parametrova entita pro definici v DTD - -> <!ENTITY % yesnocancel (yes no cancel ) > Použití: <tocentry>shrnuti roku &currentyear;</tocentry> <!ATTLIST response %yesnocancel; cancel >

Vnější entity 34 Uloženy na odděleném místě. K definici vnější entity definovat systémový nebo veřejný identifikátor. <!ENTITY % symbols SYSTEM symbol.ent > definuje parametrovou entitu nazvanou symbols. Její hodnota odpovídá obsahu souboru symbol.ent

Shrnutí DTD 35 DTD jsou podrobné a obsažné, mají nedostatky: 1. neodpovídají specifikaci XML nejsou rozšiřitelné a flexibilní 2. omezená typová kontrola dokumentu

3. Zpracování a ověření platnosti dokumentu XML pomocí DOM 36 Dokumenty v XML lze snadno analyzovat a také ověřovat jejich validitu (platnost). Analyzátory XML dostupné z mnoha zdrojů, jedním z nich je i technologie JAXP (Java API for XML Processing) balíček javax.xml Analyzátory XML se řídí dvěma standardy SAX (Simple API for XML) a modelem DOM (Document Object Model) navržen W3C konzorciem

Objektový model DOM 37 umožňuje analyzovat, ověřovat validitu, případně aktualizovat obsah dokument načtený do paměti je udržován jako hierarchicky uspořádaná kolekce objektů úpravou této kolekce lze změnit nejen strukturu, ale i obsah aktualizovaný dokument pak lze ukládat na jiné místo

Objektový model DOM 38 Analyzátor DOM vytvoří v paměti kolekci objektů, které vyjadřují obsah dokumentu. Objekty jsou implementacemi rozhraní definovaných v balíčku org.w3c.dom

Analýza procházení dokumentu v modelu DOM 39 Třída DocumentBuilder obsahuje metodu parse(). Metoda parse() vrací obejkt typu Document, který plní úlohu vstupního bodu do vytvořené objektové struktury. Jakmile máte přístup k objektu typu Document, můžete volat metodu getdocumentelement(), která vrací odkaz na kořenový element dokumentu. Následující příklad ukázka využívat třídy balíčku JAXP pro načtení a analýzu dokumentu.

Rozhraní Node bázové rozhraní v modelu DOM přístupové metody 40 Název metody getnodevalue() / setnode Value() getattributes() appendchild(), insertbefore(), removechild(), replacechild() getchildtennodes(), getfirstchild(), getlastchild() getnextsiblings(), getprevoiussiblings() haschildnode() getowneddocument() Popis vrací / nastavuje obsah uzlu, žádný uzel null vrací objekt typu NameNodeMap obsahující seznam atributů daného uzlu metody pro aplikace na dceřiné uzly zkoumaného uzlu seznam uzlů, první a poslední předchozí a následující sourozenci daného uzlu boolean Každý objekt typu Node je spojen s určitým dokumentem. Vrací odkaz na instanci typu Document.

import javax.xml xml.parsers parsers.*; import org.w3c..w3c.dom dom.*; Osnova 41 public class DOMTest { public static void main(string String[] args) throws Exception { DOMTest dt = new DOMTest(args args[0]); } public DOMTest(String uri) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance newinstance(); factory.setvalidating setvalidating(true true); DocumentBuilder builder = factory.newdocumentbuilder newdocumentbuilder(); Document doc = builder.parse(.parse(uri uri); displaytree(doc. (doc.getdocumentelement getdocumentelement()); } protected void displaytree(node node) { short nodetype = node.getnodetype getnodetype(); switch (nodetype nodetype) { case Node.ELEMENT_NODE: printelement((element) ((Element)node node); break; case Node.TEXT_NODE: printtext((text) ((Text)node node); break;

case Node.COMMENT_NODE: printcomment(( ((Comment Comment)node node); break; case Node.CDATA_SECTION_NODE: printcdata(( ((CDATASection CDATASection)node node); break; case Node.ENTITY_REFERENCE_NODE: printentityreference(( ((EntityReference EntityReference)node node); break; case Node.PROCESSING_INSTRUCTION_NODE: printprocessinginstruction( (ProcessingInstruction ProcessingInstruction)node node); break; default: } } Osnova 42 protected void printelement(element node) { Node child; Attr attr; System.out out.print print("<" + node.getnodename getnodename()); NamedNodeMap attrs = node.getattributes getattributes(); int count = attrs.getlength getlength(); for (int i = 0; i < count; i++) { attr = (Attr( Attr)( )(attrs attrs.item item(i)); System.out out.print print(" " + attr.getname getname() + "=\"" "" + attr.getvalue getvalue() + "\""); ""); }

System.out out.print print(">"); NodeList children = node.getchildnodes getchildnodes(); count = children.getlength getlength(); for (int i = 0; i < count; i++) { child = children.item item(i); displaytree(child child); } System.out out.print print("</" + node.getnodename getnodename() + ">"); } Osnova 43 protected void printtext(characterdata node) { System.out out.print print(node node.getdata getdata()); } protected void printcomment(comment node) { System.out out.print print("<! ("<!-- --" + node.getdata getdata() + "--" -->"); } protected void printcdata(cdatasection CDATASection node) { System.out out.print print("<![cdata[" + node.getdata getdata() + "]]>"); } protected void printentityreference(entityreference node) { System.out out.print print("&" + node.getnodename getnodename() + ";"); } } protected void printprocessinginstruction(processinginstruction node) { System.out out.print print("<?" + node.gettarget gettarget() + " " + node.getdata getdata() + "?>"); }

Úprava předchozího programu 44 místo metody printelement() můžeme použít metodu tostrong(), která plní stejnou funkci jako metody printxxx()

import javax.xml xml.parsers parsers.*; import org.w3c..w3c.dom dom.*; Osnova 45 public class DOMTest2 { public static void main(string String[] args) throws Exception { DOMTest2 dt = new DOMTest2(args args[0]); } public DOMTest2(String uri) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance newinstance(); factory.setvalidating setvalidating(true true); DocumentBuilder builder = factory.newdocumentbuilder newdocumentbuilder(); Document doc = builder.parse(.parse(uri uri); System.out out.println println(doc. (doc.getdocumentelement getdocumentelement()); } }

Úprava dokumentů v modelu DOM 46 Užití modelu DOM je podobné jako v předchozím příkladě. Postupné procházení dceřiných dokumentů kořenového elementu, až nalezený element odpovídá hledanému, pak se provede příslušná akce. např. chceme atributu showpagenumbers přiřadit hodnotu no

<?xml version="1.0"?> Osnova 47 <book book> <title title>professional Java Programming</ </title title> <author author>brett Spell</ </author author> <publisher publisher>wrox Press</ </publisher publisher> <tableofcontents showpagenumbers="yes Yes"> <tocentry tocentry>printing Printing</ </tocentry tocentry> <tocentry tocentry>cut And Paste</tocEntry tocentry> <tocentry tocentry>drag And Drop</tocEntry tocentry> </tableofcontents tableofcontents> </book book>

import javax.xml xml.parsers parsers.*; import org.w3c..w3c.dom dom.*; Osnova 48 public class DOMTest3 { public static void main(string String[] args) throws Exception { DOMTest3 dt = new DOMTest3(args args[0]); } public DOMTest3(String uri) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance newinstance(); factory.setvalidating setvalidating(true true); DocumentBuilder builder = factory.newdocumentbuilder newdocumentbuilder(); Document doc = builder.parse(.parse(uri uri); NodeList children = doc.getelementsbytagname getelementsbytagname(" ("tableofcontents tableofcontents"); Element current; int count = children.getlength getlength(); for (int i = 0; i < count; i++) { current = (Element)children children.item item(i); current.setattribute setattribute("showpagenumbers", "no"); "); } } } System.out out.println println(doc. (doc.getdocumentelement getdocumentelement());

Vymazání elementu 49 další příklad ukazuje vymazání elementu např. <tableofcontents>

import javax.xml xml.parsers parsers.*; import org.w3c..w3c.dom dom.*; Osnova 50 public class DOMTest4 { public static void main(string String[] args) throws Exception { DOMTest4 dt = new DOMTest4(args args[0]); } public DOMTest4(String uri) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance newinstance(); factory.setvalidating setvalidating(true true); DocumentBuilder builder = factory.newdocumentbuilder newdocumentbuilder(); Document doc = builder.parse(.parse(uri uri); NodeList children = doc.getelementsbytagname getelementsbytagname(" ("tableofcontents tableofcontents"); Element current; Element parentelement; int count = children.getlength getlength(); System.out.println println(" ("There " + (count( count==1?" ==1?"is ":"are ") + count + " tableofcontents element"+ (count( count==1?"":"s")); for (int i = 0; i < count; i++) { System.out.println println(" ("Deleting child element number " + (i+1)); current = (Element)children children.item item(i); } } parentelement = (Element)current current.getparentnode getparentnode(); parentelement.removechild removechild(current current); } System.out out.println println(doc. (doc.getdocumentelement getdocumentelement());

Tvorba nových uzlů a jejich přidání do stromu 51 principiálně stejný postup jako v předchozích příkladech

import javax.xml xml.parsers parsers.*; import org.w3c..w3c.dom dom.*; Osnova 52 public class DOMTest5 { public static void main(string String[] args) throws Exception { DOMTest5 dt = new DOMTest5(args args[0]); } public DOMTest5(String uri) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance newinstance(); factory.setvalidating setvalidating(true true); DocumentBuilder builder = factory.newdocumentbuilder newdocumentbuilder(); Document doc = builder.parse(.parse(uri uri); NodeList children = doc.getelementsbytagname getelementsbytagname(" ("tableofcontents tableofcontents"); Element current = null; int count = children.getlength getlength(); for (int i = 0; i < count; i++) { current = (Element)children children.item item(i); // Get the list of <tocentry tocentry> items NodeList tocitems = current.getelementsbytagname getelementsbytagname(" ("tocentry tocentry");

// Obtain a reference to the second one Node secondchild = tocitems.item item(1); // Create a new <tocentry tocentry> element Element newtocitem = doc.createelement createelement(" ("tocentry tocentry"); Osnova 53 // Create a new "Help" text node Text newtext = doc.createtextnode createtextnode("help"); // Make it a child of the new <tocentry tocentry> element // <tocentry < tocentry>help</ >Help</tocEntry tocentry> newtocitem.appendchild appendchild(newtext newtext); // Add the new <tocentry tocentry> element to <tableofcontents< tableofcontents> current.insertbefore insertbefore(newtocitem newtocitem, secondchild); } } System.out out.println println(doc. (doc.getdocumentelement getdocumentelement()); }

Vytvoření nového dokumentu 54 Všechny instance typu Document byly vytvořeny pomocí metody parse() Třída DocumentBuilder deklaruje metodu newdocument(), která se dá použít k získání prázdné instance typu Document

import javax.xml xml.parsers parsers.*; import org.w3c..w3c.dom dom.*; Osnova 55 public class DOMTest6 { public static void main(string String[] args) throws Exception { DOMTest6 dt = new DOMTest6(); } public DOMTest6() throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance newinstance(); factory.setvalidating setvalidating(true true); DocumentBuilder builder = factory.newdocumentbuilder newdocumentbuilder(); Document document = builder.newdocument newdocument(); // Create a new Element object Element rootelement = document.createelement createelement(" ("book book"); // Make it the root element of this new document document.appendchild appendchild(rootelement rootelement); } System.out out.println println(document document.getdocumentelement getdocumentelement()); }

4. Jmenné prostory XML vyloučení nejednoznačnosti 56 obsah jednoho DTD souboru lze zahrnout do jiného DTD souboru nutno definovat vnější parametrovou entitu definovat odkaz na ni

snacks.dtd snacks.dtd Osnova 57 <!ELEMENT cookies (#PCDATA)> <!ATTLIST cookies haschocolate CDATA yes yes > <!ELEMENT pretzels (#PCDATA)> <!ATTLIST pretzels havesalt CDATA yes yes > browser.dtd browser.dtd <!ELEMENT JavaScript (#PCDATA)> <!ATTLIST JavaScript isenabled CDATA no no > <!ELEMENT cookies (#PCDATA)> <!ATTLIST cookies areaccepted CDATA no no > preferences.dtd preferences.dtd <!ENTITY snacks SYSTEM snacks.dtd snacks.dtd > <!ENTITY browser SYSTEM browser.dtd browser.dtd > %snacks; %browser; soubor preferences.dtd se bude aplikovat na xml soubor neni jasne, ktery element cookies pouzit

Jmenný prostor name space 58 Standard jmenného prostoru je postaven na stejném principu jako balíčky tříd v Javě Elementy nejsou spojovány s balíčku, ale s adresou URL (Unified Resource Locator) přiřazení elementu k URL: definovat atribut xmlns (xml name space) a přiřadit mu hodnotu, která odpovídá příslušné adrese URL jmenný prostor můžeme přiřadit každému elementu

snacks.dtd snacks.dtd Osnova 59 <!ELEMENT cookies (#PCDATA)> <!ATTLIST cookies haschocolate CDATA yes yes xmlns CDATA #FIXED http://members.apl.com/javabrewer/snacks members.apl.com/javabrewer/snacks/ > <!ELEMENT pretzels (#PCDATA)> <!ATTLIST pretzels havesalt CDATA yes yes > browser.dtd browser.dtd <!ELEMENT JavaScript (#PCDATA)> <!ATTLIST JavaScript isenabled CDATA no no > <!ELEMENT cookies (#PCDATA)> <!ATTLIST cookies areaccepted CDATA no no xmlns CDATA #FIXED http://members.apl.com/javabrewer/browser members.apl.com/javabrewer/browser/ > preferences.dtd preferences.dtd <!ENTITY snacks SYSTEM snacks.dtd snacks.dtd > <!ENTITY browser SYSTEM browser.dtd browser.dtd > %snacks; %browser; soubor preferences.dtd se bude aplikovat na xml soubor neni jasne, ktery element cookies pouzit

Prefix jmenného prostoru 60 Opakování jmenného prostoru může být zdlouhavé a přinášet chyby Prefix jmenného prostoru je alias, který se může spojit s příslušnou URL adresou

Příklad 61 <snacks:cookies xmlns:snacks=http:// http://members.aol.com/javabrewer/snacks members.aol.com/javabrewer/snacks/> Tyto kolacky mi velmi chutnaji. <snacks:chips snacks:chips>cokoladove Cokoladove</ </snacks:chips snacks:chips> </snacks:cookies snacks:cookies> Alias jmenného prostoru je definován názvem atributu xmlns, dvojtečkou a názvem aliasu. Jakmile je alias definován, může se každý element uvádět s aliasem