Tvorba informačních systémů 1/46 Tvorba informačních systémů Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Tvorba informačních systémů, 2008/2009
Tvorba informačních systémů 2/46 Obsah XML technologie, Datový model, schéma dokumentu. Dotazovací jazyky XPath, Jmenné prostory, Transformace XSLT, API pro práci s XML.
Tvorba informačních systémů 3/46 Úvod Extensible Mark-up Language (XML) Extensible Mark-up Language (XML) byl uveden v roce 1998 konsorciem World Wide Web Consortium (W3C, http://www.w3.org/). Značkovací jazyk reprezentující informace elementy, které mohou obsahovat další elementy a atributy. Neobsahuje pevnou množinu značek, ale umožňuje definovat vlastní schéma XML dokumentu.
Tvorba informačních systémů 4/46 Úvod Extensible Mark-up Language (XML) Pohled 1: Popis heterogenních dat, příklad aplikací: hypertextový dokument XHTML, popis prostorových dat Geography Markup Language (GML), matematické rovnice MathML, vektorová grafika SVG, knihy a časopisy v computer science DocBook.
Tvorba informačních systémů 5/46 Úvod XML, ukázka MathML [a + b] 260 <math xmlns= " h t t p : / /www. w3. org /1998/ Math / MathML"> <mrow> <msup> <mfenced open= " [ " close= " ] " > <mrow> <mi>a< / mi> <mo>+< /mo> <mi>b< / mi> < / mrow> < / mfenced> <mn>260< / mn> < / msup> < / mrow>
Tvorba informačních systémů 6/46 Úvod XML, ukázka SVG <?xml version= " 1.0 " standalone= " no "?> <!DOCTYPE svg PUBLIC " //W3C/ / DTD SVG 1. 1 / /EN" " h t t p : / /www. w3. org / Graphics /SVG/ 1. 1 /DTD/ svg11. dtd " > <svg width="100%" height="100%" version= " 1.1 " xmlns= " h t t p : / /www. w3. org /2000/ svg " > < r e c t x= " 20 " y= " 20 " rx=" 20 " ry=" 20 " width=" 250 " height=" 100 " s t y l e = " f i l l : r e d ; s t r o k e : b l a c k ; stroke w i d t h : 5 ; o p a c i t y : 0.5 " / > < / svg>
Tvorba informačních systémů 7/46 Úvod XML, ukázka XHTML <?xml version= " 1.0 " encoding= "UTF 8"?> <!DOCTYPE html PUBLIC " //W3C/ / DTD XHTML 1.0 S t r i c t / / EN" " h t t p : / /www. w3. org /TR/ xhtml1 /DTD/ xhtml1 s t r i c t. dtd " > <html xmlns= " h t t p : / /www. w3. org /1999/ xhtml " xml:lang= " en " lang= " en " > <head> < t i t l e >Minimal XHTML 1. 0 Document w ith W3C DTD< / t i t l e > < / head> <body> <p>this i s a minimal <a h r e f = " h t t p : / /www. w3. org /TR/ xhtml1 / " >XHTML 1. 0 < / a> document w ith a W3C u r l f o r the DTD. < / p> < / body> < / html> Oproti HTML striktně oddělujeme obsah a formátování obsahu.
Tvorba informačních systémů 8/46 Úvod Extensible Mark-up Language (XML) Pohled 2: Datový model XML dokument je modelován jako strom (tzv. XML strom). Porovnejte s relačním datovým modelem. Poznámka: Tento datový model se objevil již v jazyku SGML a v databázové komunitě v podobě tzv. slabě strukturovaných dat.
Tvorba informačních systémů 9/46 Úvod Dobře strukturovaný (well formed) XML dokument 1/2 Element má typ identifikovaný jménem (často označujeme jako tag značka). Např. <book>...</book>. Element může obsahovat množinu dvojic atribut= hodnota. V textovém tvaru XML dokumentu identifikujeme počáteční (start-tag) a koncovou značku (end-tag) elementu (<name>...</name>). Text mezi počáteční a koncovou značkou nazýváme obsah elementu (element content).
Tvorba informačních systémů 10/46 Úvod Dobře strukturovaný (well formed) XML dokument 2/2 Pokud element obsahuje další potomky a znaky, mluvíme o dokumentu se smíšeným obsahem (mixed content). Např. <a>hi, <b>mike</b></a>. Element nemající obsah nazýváme prázdný (empty). Zkrácený zápis: <img src="picture.jpg"/>. První řádek obsahuje XML deklaraci, např. <?xml version="1.0"?>. Dokument splňující tato základní pravidla se nazývá dobře strukturovaný (well formed).
Tvorba informačních systémů 11/46 Úvod Příklad - dobře strukturovaný XML dokument <?xml version= " 1.0 "? > <books> <book i d = " 003 04312 " > < t i t l e >The Two Towers< / t i t l e > <author>j.r.r. Tolkien< / author> < / book> <book i d = " 001 00863 " > < t i t l e >The Return of the King< / t i t l e > <author>j.r.r. Tolkien< / author> < / book> <book i d = " 045 00012 " > < t i t l e >Catch 22< / t i t l e > <author>joseph H e l l e r < / author> < / book>< / books>
Tvorba informačních systémů 12/46 Úvod Příklad - XML strom XML strom pro dobře strukturovaný XML dokument. books book book book id title author id title author id title author 003-04312 The Two Towers J.R.R. Tolkien 001-00863 The Return of the King J.R.R. Tolkien 045-00012 Catch 22 Joseph Heller
Tvorba informačních systémů 13/46 Úvod Příklad - nekorektní XML dokument <?xml version= " 1.0 "? > <body> < u l > < l i > T i t u l e k 1 < l i > T i t u l e k 2 < / u l > < / body> Značky li nejsou uzavřeny dokument není dobře strukturovaný. Důsledkem je nejasná interpretace: < l i > T i t u l e k 1 < / l i > < l i > T i t u l e k 2 < / l i > Nebo: < l i > T i t u l e k 1 < u l >< l i > T i t u l e k 2 < / l i >< / u l >< / l i > Co měl autor na mysli?
Tvorba informačních systémů 14/46 Úvod Příklad - XML dokument se smíšeným obsahem 1/2 <books> <book> < t i t l e >XML Data Management< / t i t l e > <author> Akmal B. Chaudhri, Awais Rashid, Roberto Z i c a r i < / author> <keywords> XML, Native XML Database,... < / keywords> <desc> <isbn>0 201 84452 4< / isbn> < / desc> < / book>... < / books> copy 2003 Addison Wesley P r o f e s s i o n a l
Tvorba informačních systémů 15/46 Úvod Příklad - XML strom XML strom pro dokument se smíšeným obsahem. 0 BOOKS (0) 34 BOOK (1) 34 TITLE (2) 36 AUTHOR (11) 38 KEYWORDS (18) 40 DESC (19) 35 PCDATA (3) 37 PCDATA (3) 39 PCDATA (3) 41 ISBN (20) 43 PCDATA (3) (4) (5) (6) XML Data Management: (7) (4) (8) Native XML and XML-Enabled (9) (10) Database Systems (12) (13) Akmal B. Chaudrhi, (14) (15) Awais Rashid, (16) (17) Roberto Zicari (4) XML, (7) (4) (9) Native XML database,... 42 PCDATA (3) (21) 0-2001-84452-4 (22) (23) copyright 2003, (24) (25) Addison Wesley (26) Professional
Tvorba informačních systémů 16/46 Úvod Validní dokument XML dokument splňující definované schéma nazýváme validní. Obdoba schématu relační databáze: relační databáze - schéma relační databáze vs dokument - schéma dokumentu Jazyky popisující schéma: DTD, XML Schema (W3C),... Výhoda: není nutné psát parser pro každý XML dokument. Pouze definujeme schéma ke kterému je dokument validní.
Tvorba informačních systémů 17/46 Úvod Příklad - DTD <!DOCTYPE books [ <!ELEMENT books ( book ) > <!ELEMENT book ( t i t l e, author ) > <! ATTLIST book i d CDATA #REQUIRED> <!ELEMENT t i t l e (#PCDATA) > <!ELEMENT author (#PCDATA) > ] > Komentář: Element books obsahuje elementy book. Element book obsahuje elementy title a author. Element book obsahuje atribut id. Element title obsahuje řetězcovou hodnotu. Element author obsahuje řetězcovou hodnotu.
Tvorba informačních systémů 18/46 Úvod DTD Základní rys: Definujeme atributy a elementy jako děti jiných elementů. Nevýhody: Nejsou definovány datové typy, např. celé číslo nebo řetězec. Nejedná se o XML dokument DTD bylo převzato z SGML.
Tvorba informačních systémů 19/46 Úvod XML Schema Vlastnosti: Vestavěné datové typy (xsd:string, xsd:int,...), možnost definovat uživatelské datové typy. Přesné nastavení počtu výskytu elementu v nadelementu. Relativně složité a nečitelné, druhý pohled: XML dokument nemusí být nutně dobře čitelný pro člověka.
Tvorba informačních systémů 20/46 Úvod Příklad - XML Schema 1/3 <xsd:schema xmlns:xsd= " h t t p : / /www. w3. org /2001/XMLSchema" > <xsd:element name= " books " > <xsd:complextype> <xsd:sequence> <xsd: element name= " book " maxoccurs= " unbounded " >... < / xsd:element> Komentář: XML dokument obsahuje kořenový element books a neomezeným počtem dětských elementů book.
Tvorba informačních systémů 21/46 Úvod Příklad - XML Schema 2/3... <xsd: element name= " book " maxoccurs= " unbounded " > <xsd:complextype> <xsd:sequence> <xsd:element name= " t i t l e " type= " x s d : s t r i n g " / > <xsd:element name= " author " type= " x s d : s t r i n g " / > < / xsd:sequence> < x s d : a t t r i b u t e name= " i d " type= " IdType " use= " r e q u i r e d " / > < / xsd:complextype> < / xsd:element> Komentář: Element book obsahuje elementy title a author s obsahem typu string a atribut id typu IdType.
Tvorba informačních systémů 22/46 Úvod Příklad - XML Schema 3/3... <xsd: simpletype name= " IdType " > < x s d : r e s t r i c t i o n base= " x s d : s t r i n g " > < x s d : l e n g t h value= " 9 " / > < x s d : p a t t e r n value= " [0 1] [0 1] " / > < / x s d : r e s t r i c t i o n > < / xsd: simpletype> < / xsd:schema> Komentář: Definujeme datový typ IdType, který dědí z řetězce. Omezíme délku na 9 znaků a regulárními výrazem obsah řetězce.
Tvorba informačních systémů 23/46 XML dotazovací jazyky - XPath XML dotazovací jazyky XPath, XQuery (oba W3C),.... Jazyky jsou založené na XPath. XPath umožňuje procházet XML strom pomocí výrazů cest (path expressions). Obsahuje osy XPath (XPath axes) relace mezi uzly stromu. Dále obsahuje funkce, např. vrácení podřetězce atd.
Tvorba informačních systémů 24/46 XML dotazovací jazyky - XPath XPath Dotaz se skládá z výrazů axis::tag[filter] oddělených / nebo //. Výsledkem výrazu na kontextovém uzlu u je množina uzlů u : Relace axis obsahuje (u, u ). Značka pro u je tag. Podmínka filter nabývá hodnoty true na uzlu u. books/book/title //book/title //book[author= Joseph Heller ]/title //book[author= Joseph Heller AND year > 1965]/title
Tvorba informačních systémů 25/46 XML dotazovací jazyky - XPath Příklad, XPath books book book book id title author id title author id title author 003-04312 The Two Towers J.R.R. Tolkien 001-00863 The Return of the King J.R.R. Tolkien 045-00012 Catch 22 Joseph Heller books/book/title //book/title //book[author= Joseph Heller ]/title
Tvorba informačních systémů 26/46 XML dotazovací jazyky - XPath Osy XPath 1/2 parent ancestor ancestor-or-self child descendant descendant-or-self preceding 1. uzel na cestě od u ke kořeni uzly ležící na cestě z u ke kořeni u a uzly ležící na cestě z u ke kořeni přímý potomek uzlu u všechny uzly pro které je u předek descendant + u uzly předcházející uzel u (kromě předků)
Tvorba informačních systémů 27/46 XML dotazovací jazyky - XPath Osy XPath 2/2 following uzly následující uzel u (kromě potomků) preceding-sibling předcházející sourozenci u following-sibling následující sourozenci u attribute atribut uzlu u self u namespace jmenný prostor u
Tvorba informačních systémů 28/46 XML dotazovací jazyky - XPath Příklad, Osy XPath 1/4 0 0 0 1 6 1 6 1 6 2 5 7 2 5 7 2 5 7 3 4 8 9 3 4 8 9 3 4 (a) (b) (c) 8 9 Výsledné uzly výrazů (a) parent::*, (b) ancestor::*, (c) ancestor-or-self::* z kontextového uzlu 7.
Tvorba informačních systémů 29/46 XML dotazovací jazyky - XPath Příklad, Osy XPath 2/4 0 0 0 1 6 1 6 1 6 2 5 7 2 5 7 2 5 7 3 4 8 9 3 4 8 9 3 4 (a) (b) (c) 8 9 Výsledné uzly výrazů (a) child::*, (b) descendant::*, (c) descendant-or-self::* z kontextového uzlu 1.
Tvorba informačních systémů 30/46 XML dotazovací jazyky - XPath Příklad, Osy XPath 3/4 1 0 6 1 0 6 2 5 7 2 5 7 3 4 8 9 3 4 8 9 (a) (b) Výsledné uzly výrazů (a) preceding::* a (b) following::* z kontextového uzlu 6 resp. 1.
Tvorba informačních systémů 31/46 XML dotazovací jazyky - XPath Příklad, Osy XPath 4/4 1 0 6 1 0 6 2 5 7 2 5 7 3 4 8 9 3 4 8 9 (a) (b) Výsledné uzly výrazů (a) preceding-sibling::* a (b) following-sibling::* z kontextového uzlu 6 resp. 2.
Tvorba informačních systémů 32/46 XML dotazovací jazyky - XPath XQuery Aktuální standard W3C pro dotazování XML dat. < r e s u l t s > { f o r $ b i n doc ( books. xml ) / books / book, $n i n $ b / name, $a i n $ b / author r e t u r n < r e s u l t > { $ n } { $ a } < / r e s u l t > } < / r e s u l t s >
Tvorba informačních systémů 33/46 XML Namespace, XSLT XML namespace Umožňuje rozšířit jméno elementu o prefix jmenný prostor. <?xml version= " 1.0 " encoding= " ISO 8859 1"?> < x s l : s t y l e s h e e t version= " 1.0 " x m l n s : x s l = " h t t p : / /www. w3. org /1999/XSL / Transform " > < x s l : t e m p l a t e match= " / " >
Tvorba informačních systémů 34/46 XML Namespace, XSLT EXtensible Stylesheet Language Transformation (XSLT) W3C standard. Transformace XML dokumentu na jiný XML dokument. Transformace je řízena transformačním souborem XML soubor validní ke schématu XSL. XSL je rozsáhlejší, obsahuje i XSL FO (formatting objects) např. transformace XML do pdf.
Tvorba informačních systémů 35/46 XML Namespace, XSLT Příklad, XSLT 1/2 <?xml version= " 1. 0 " encoding= " ISO 8859 1"?> < x s l : s t y l e s h e e t version= " 1.0 " x m l n s : x s l = " h t t p : / /www. w3. org /1999/XSL / Transform " > < x s l : t e m p l a t e match= " / " > <html > <body> <h2>cd C o l l e c t i o n < / h2> < t a b l e border= " 1 " > < t r bgcolor=" #9acd32 " > < th> T i t l e < / th> < th> A r t i s t < / th> < / t r > Komentář: Kořenový element je nahrazen těmito značkami.
Tvorba informačních systémů 36/46 XML Namespace, XSLT Příklad, XSLT 2/2 < x s l : f o r each s e l e c t = " catalog / cd " > < t r > < td>< x s l : v a l u e of s e l e c t = " t i t l e " / >< / td> < td>< x s l : v a l u e of s e l e c t = " a r t i s t " / >< / td> < / t r > < / x s l : f o r each> < / t a b l e > < / body> < / html> < / x s l : t e m p l a t e > < / x s l : s t y l e s h e e t > < / x s l : s t y l e s h e e t > Komentář: Pro každý element catalog/cd vložíme obsah elementů title a artist.
Tvorba informačních systémů 37/46 Programovací jazyky a XML Programovací jazyky a XML 1/2 Parsery: DOM (Document Object Model) W3C, XML dokument je načten do paměti jako struktura instancí. Projekty: Apache Xerces (C, Java) (http://xerces.apache.org/), Microsoft XML Parser. SAX sekvenčně zpracováváme jednotlivé elementy, které parser načítá. Projekty: Xerces, Microsoft XML Parser.
Tvorba informačních systémů 38/46 Programovací jazyky a XML Programovací jazyky a XML 2/2 Parsery, poznámky: Součástí parserů je často API pro validaci dokumentu vůči schématu. SAX, http://sax.sourceforge.net/ Simple API for XML, nejedná se o standard W3C. DOM, http://www.w3.org/tr/dom-level-2-core je standardem W3C. Implementace XSLT: Microsoft XML Parser. Apache Xalan (C++, Java) http://xalan.apache.org/.
Tvorba informačních systémů 39/46 Programovací jazyky a XML Příklad, DOM, Java 1/2 DocumentBuilderFactory d b f a c t o r y = DocumentBuilderFactory. newinstance ( ) ; DocumentBuilder b u i l d e r = d b f a c t o r y. newdocumentbuilder ( ) ; Document doc = b u i l d e r. parse (new F i l e ( " f i l e. xml " ) ) ; Element r o o t = doc. getdocumentelement ( ) ; Komentář: Vytvoříme instanci parseru a načteme dokument file.xml. Dokument je načten do paměti jako struktura objektů. Můžeme tedy získat referenci na objekt reprezentující element nebo atribut. Na posledním řádku požadujeme referenci na kořenový element.
Tvorba informačních systémů 40/46 Programovací jazyky a XML Příklad, DOM, Java 2/2... NodeList l i s t = r o o t. getelementsbytagname ( " book " ) ; for ( i n t i = 0 ; i < l i s t. getlength ( ) ; i + + ) { Element element = ( Element ) l i s t. item ( i ) ; S t r i n g i d = element. g e t A t t r i b u t e ( " i d " ) ; NodeList t i t l e L i s t = element. getelementsbytagname ( " t i t l e " ) ;.... } Komentář: Získáme podelementy kořenového uzlu se jménem book. V cyklu získáváme hodnotu atributu id a referenci na element title aktuálního elementu book.
Tvorba informačních systémů 41/46 Programovací jazyky a XML Příklad, C#, 1/4.NET zahrnuje třídu XmlReader s podobnou funkcionalitou jako SAX. XmlReaderSettings x r s = new XmlReaderSettings ( ) ; x r s. IgnoreWhitespace = true ; using ( XmlReader reader=xmlreader. Create ( " d : \ \ book. xml ", xrs ) ) { reader. ReadStartElement ( " books " ) ;... Komentář: Otevřeme soubor (budeme ignorovat bílé znaky) a načteme kořenový uzel books.
Tvorba informačních systémů 42/46 Programovací jazyky a XML Příklad, C#, 2/4 while ( true ) { t r y { i f ( reader. H a s A t t r i b u t e s ) { while ( reader. MoveToNextAttribute ( ) ) { Console. WriteLine ( " book { 0 } = { 1 } ", reader.name, reader. Value ) ; } reader. MoveToElement ( ) ; } Komentář: V cyklu se prochází děti books, tedy elementy book. Nejprve vypíšeme názvy a hodnoty všech atributů. V tomto případě obsahuje book pouze atribut id.
Tvorba informačních systémů 43/46 Programovací jazyky a XML Příklad, C#, 3/4 reader. ReadStartElement ( " book " ) ; reader. ReadStartElement ( " t i t l e " ) ; Console. WriteLine ( " t i t l e : " + reader. ReadString ( ) ) ; reader. ReadEndElement ( ) ; / / t i t l e reader. ReadStartElement ( " author " ) ; Console. WriteLine ( " author : " + reader. ReadString ( ) ) ; reader. ReadEndElement ( ) ; / / author reader. ReadEndElement ( ) ; / / book Komentář: Ve stejném cyklu vypíšeme obsah elementů title a author. Všiměte si čtení koncových značek pomocí ReadEndElement().
Tvorba informačních systémů 44/46 Programovací jazyky a XML Příklad, C#, 4/4 } / / t r y catch ( XmlException ) { break ; } } / / while reader. ReadEndElement ( ) ; / / books Komentář: Po načtení všech elementů book dojde k výjimce a cyklus je ukončen. Načteme koncovou značku kořenového elementu books.
Tvorba informačních systémů 45/46 Programovací jazyky a XML Příklad, C#, dokument a výsledek
Tvorba informačních systémů 46/46 Programovací jazyky a XML Reference XPath, XQuery http://www.w3c.org XML Namespace http://www.w3.org/tr/rec-xml-names/ XSLT http://www.w3schools.com/xsl/ Apache Xerces, Xalan Microsoft XML Parser Akmal B. Chaudhri, Awais Rashid, Roberto Zicari: XML Data Management: Native XML and XML-Enabled Database Systems. Addison-Wesley Professional, 2003.