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



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

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

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

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

Jemný úvod do spracovania XML

NSWI096 - INTERNET JavaScript

Další XML technologie

Ukládání a vyhledávání XML dat

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

Tvorba informačních systémů

Obsah přednášky. XML DOM SAX XPath XSL transformace 1/46

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

Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

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

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ů

Ukazka knihy z internetoveho knihkupectvi

XQuery. Jirka Kosek. Visual FoxPro DevCon června Praha. Copyright 2005 Jiří Kosek

PRG036 Technologie XML

Dotazování nad stromem abstraktní syntaxe

XML. Aleš Keprt

MBI - technologická realizace modelu

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

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Programový generátor trendů Václav Bárta

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky DIPLOMOVÁ PRÁCE

PHP a XML. Stručný obsah

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

Komprese a dotazování nad XML dokumenty

TÉMATICKÝ OKRUH Softwarové inženýrství

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.

Práce se soubory opakování

KAPITOLA 6. XML, XPath a XSLT. Podpora XML v prohlížečích. XML DOM v IE

IRAE 07/08 Přednáška č. 7. Začátek (head)

Diplomová práce Generátor XML souborů řízený XSD schématem

UJO Framework. revoluční architektura beans. verze

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

Použití databází na Webu

Aplikace SDNS. XML struktura pro nahrání dat ze souboru. Příručka uživatele (programátora) Sekce informatiky Odbor informačních systémů. verze 1.

Datové struktury. alg12 1

1. Webový server, instalace PHP a MySQL 13

Software602 Form Designer

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

XML databáze. Přednáška pro kurz PB138 Moderní značkovací jazyky Ing. Petr Adámek

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:

Vánoční hrátky s JAXB

Python XML a Web 1 PGS

PRG036 Technologie XML

1 Webový server, instalace PHP a MySQL 13

Dynamické datové struktury IV.

APLIKACE XML PRO INTERNET

boolean hasnext() Object next() void remove() Kolekce

Kapitola 1 První kroky v tvorbě miniaplikací 11

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

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Úvod do Web Services

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

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Příklad buňka tabulky

}w!"#$%&'()+,-./012345<ya

Vytváření a použití knihoven tříd

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

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

Šablony, kontejnery a iterátory

Obsah prezentace. Co je to XML? Vlastnosti. Validita

Návrhové vzory OMO, LS 2014/2015

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Kolekce, cyklus foreach

Programování v jazyku C# II. 5.kapitola

univerzální konektor pro napojení internetových obchodů a dalších aplikací na systém Altus Vario.

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Šablony, kontejnery a iterátory

Z. Kotala, P. Toman: Java ( Obsah )

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

Programování II. Návrh programu I 2018/19

Oracle XML DB. Tomáš Nykodým

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

VISUAL BASIC. Práce se soubory

(X)HTML, CSS a jquery

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Dynamické datové struktury III.

TRANSFORMACE A PERZISTENCE XML

Realizace komunikačního profilu a uživatelského rozhraní pro generátor síťového provozu

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

Referenční rozhraní. Jiří Kosek. Ministerstvo informatiky ČR. ISSS 25. března 2003

Kartografická webová aplikace. Přednáška z předmětu Počítačová kartografie (KMA/POK) Otakar Čerba Západočeská univerzita

Algoritmizace a programování

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Jazyk C# (seminář 6)

Novinky ve Visual Studio Tomáš Kroupa

Integrovaný informační systém Státní pokladny (IISSP) Dokumentace API - integrační dokumentace

Tvorba informačních systémů

Podrobný popis GovTalk obálky

PREPROCESOR POKRAČOVÁNÍ

Implementace XML signatur

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

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

Elektronické publikování. doc. RNDr. Petr Šaloun, Ph.D. katedra informatiky FEI VŠB TU Ostrava

Transkript:

Jirka Kosek Poslední modifikace: $Date: 2014/12/17 17:15:28 $

Obsah Úvod... 3 Parsery XML... 4 Rozhraní pro přístup k dokumentu XML... 5 Další charakteristiky parseru... 6 Sekvenční čtení... 7 Push parsery... 8 Pull parsery... 9 Stromová reprezentace... 10 DOM... 11 Hierarchie tříd použitých v DOM... 12 Nejběžnější metody DOM... 13 Další směr vývoje DOM... 14 Rozšíření a varianty DOM... 15 Generátory tříd... 16 Úvod... 17 Příklad schématu... 18 Ukázka rozhraní vygenerované třídy... 19 Práce s dokumentem... 20 Další API... 21 XSLT, XPath... 22 Další vývoj... 23 Podpora XML v jednotlivých jazycích... 24 Java... 25.Net... 26 Další informace... 27 Další informace... 28

Úvod Parsery XML... 4 Rozhraní pro přístup k dokumentu XML... 5 Další charakteristiky parseru... 6 (strana 3)

Parsery XML mnoho aplikací potřebuje číst (generovat) dokumenty XML dokumenty XML lze z aplikace číst jako Unicode text with angle brackets pracné a nepohodlné pomalé na implementaci aplikaci většinou nezajímá XML jako text, ale infoset odpovídající dokumentu parser je komponenta (knihovna), která umí přes rozhraní nabízet infoset dokumentu aplikaci jednotlivé parsery se liší podporovanými rozhraními a dalšími charakteristikami Úvod 1 / 19 (strana 4)

Rozhraní pro přístup k dokumentu XML sekvenční (proudové) velmi rychlé a paměťově nenáročné dokument musíme zpracovat během jednoho průchodu standardní rozhraní SAX (push-parser), StAX (pull-parser), XMLReader (pull-parser), stromová reprezentace: celý dokument je zpřístupněn jako hierarchie objektů dokument můžeme opakovaně a nelineárně procházet velká paměťová náročnost, pomalejší než sekvenční parsery pro chybný dokument se stromová reprezentace nevytvoří standardní rozhraní DOM novější, specializovaná rozhraní JDOM, DOM4J, XOM, XDocument, generátory tříd (data-binding) Úvod 2 / 19 (strana 5)

Další charakteristiky parseru validující nevalidující umí kontrolovat dokument oproti DTD, XML Schema, Obrázek 1. Validující parser validace je pomalejší než jen kontrola well-formdness podpora jmenných prostorů podpora XML katalogů podpora XInclude podporované jazyky a platformy podpora PSVI Obrázek 2. Parser zpřístupňující PSVI Úvod 3 / 19 (strana 6)

Sekvenční čtení Push parsery... 8 Pull parsery... 9 (strana 7)

Push parsery nejznámější rozhraní SAX = Simple API for XML každý důležitý prvek dokumentu je aplikaci předáván ve formě události události: startdocument, enddocument startelement, endelement characters processinginstructions pro každou událost můžeme definovat vlastní obsluhu obsluha událostí má podobu třídy implementující rozhraní ContentHandler SAX je de facto standard podporovaný v mnoha aplikacích Obrázek 3. Princip push-parseru čtení a analýza dokument XML SAX parser proud události dokumentu aplikace Sekvenční čtení 4 / 19 (strana 8)

Pull parsery části XML dokumentu čteme sekvenčně podle svých potřeb přehlednější kód než v případě použití push-parserů (SAX) implementace XmlReader v.net, StAX v Javě, // vytvoření parseru XMLInputFactory f = XMLInputFactory.newInstance(); XMLStreamReader r = f.createxmlstreamreader("faktura.xml"); // zpracování celého dokumentu XML while (r.hasnext()) { // přečtení dalšího prvku XML r.next(); // zpracováváme jen elementy cena if (r.geteventtype() == XMLStreamConstants.START_ELEMENT && r.getlocalname().equals("cena")) { // přečtení sazby DPH double sazbadph = Double.parseDouble(r.getAttributeValue(null, "dph")) / 100; // přečtení obsahu elementu cena double castka = Double.parseDouble(r.getElementText()); // provedení výpočtu suma += castka; sumadph += castka * sazbadph; } } Obrázek 4. Princip pull-parseru dokument XML čtení a analýza dokumentu pull parser (StAX) vyžádání další části dokumentu aplikace Sekvenční čtení 5 / 19 (strana 9)

Stromová reprezentace DOM... 11 Hierarchie tříd použitých v DOM... 12 Nejběžnější metody DOM... 13 Další směr vývoje DOM... 14 Rozšíření a varianty DOM... 15 (strana 10)

DOM DOM = Document Object Model standard W3C verze: DOM1, DOM2, DOM3, DOM4 před zpracováním je celý dokument načten do paměti jednotlivé uzly stromu jsou reprezentovány objekty rozhraní objektů (použitelné metody) je dáno specifikací DOM Stromová reprezentace 6 / 19 (strana 11)

Hierarchie tříd použitých v DOM všechny třídy jsou potomky Node Stromová reprezentace 7 / 19 (strana 12)

Nejběžnější metody DOM informace o uzlu: getnodename() getnodevalue() getnodetype() pohyb po stromu dokumentu: getchildnodes() getparentnode() getfirstchild() getlastchild() getprevioussibling() getnextsibling() haschildnodes() vytváření nových uzlů v paměti: createelement() createelementns() createdocumentfragment() createtextnode() createcomment() createcdatasection() createprocessinginstruction() createattribute() createattributens() createentityreference() modifikace stromu: insertbefore() replacechild() removechild() appendchild() pomocí těchto metod lze udělat cokoliv, ale někdy je to opravdu hodně pracné Stromová reprezentace 8 / 19 (strana 13)

Další směr vývoje DOM DOM1 DOM HTML práce s HTML stránkou DOM Core práce s obecným dokumentem XML DOM2 DOM Events obsluha událostí DOM Style manipulace s připojenými kaskádovými styly DOM Traversal and Range průchod dokumentem (iterátory) a práce s bloky dokumentu Core, HTML dále rozšířeny DOM3 DOM Load and Save rozhraní pro čtení/ukládání do souboru DOM Validation validace dokumentu, práce se schématem, zjištění elementů přípustných v daném místě apod. DOM XPath vyhodnocování XPath výrazů nad DOM stromem DOM4 konsolidace rozhraní a reflektování skutečného stavu implementace v prohlížečích Stromová reprezentace 9 / 19 (strana 14)

Rozšíření a varianty DOM DOM 1/2 je na mnoho úloh dost neohrabaný některé problémy jsou postupně odstraňovány (DOM3, DOM3 XPath) rozšíření DOM o užitečné metody např. knihovny MSXML a System.Xml umožňují pomocí vlastnosti Text zjistit textový obsah libovolného uzlu (včetně poduzlů) tato možnost byla přidána až do DOM3 jako metoda gettextcontent() knihovny optimalizované pro určitý jazyk nebo způsob použití JDOM, DOM4J, XOM snazší navigace po dokumentu, snadné zjištění obsahu elementu novější knihovny umožňují proti DOM stromu pokládat XPath dotaz lze použít i přímo v prohlížeči var result = document.evaluate("//a", document, null, XPathResult.ANY_TYPE, null); while (node = result.iteratenext()) { alert(node.getattribute("href")); } Stromová reprezentace 10 / 19 (strana 15)

Generátory tříd Úvod... 17 Příklad schématu... 18 Ukázka rozhraní vygenerované třídy... 19 Práce s dokumentem... 20 (strana 16)

Úvod z XML Schématu se vytvoří jednoúčelový parser pro každý element se vytvoří samostatná třída parser při načtení dokumentu vytvoří v paměti strukturu objektů psaní kódu pro čtení a manipulaci s XML dokumentem je velmi jednoduché někdy se nazývá i data-binding lze použít pouze v případě, že schéma je pevně dané a dopředu známé (což většinou je) Generátory tříd 11 / 19 (strana 17)

Příklad schématu <xsd:element name="faktura"> <xsd:complextype> <xsd:sequence> <xsd:element name="odberatel" type="subjektinfotyp" /> <xsd:element name="dodavatel" type="subjektinfotyp" /> <xsd:element ref="polozka" minoccurs="1" maxoccurs="unbounded" /> </xsd:sequence> <xsd:attribute name="cislo" type="xsd:string" use="required" /> <xsd:attribute name="vystaveni" type="xsd:date" use="required" /> <xsd:attribute name="splatnost" type="xsd:date" use="required" /> <xsd:attribute name="vystavil" type="xsd:string" /> </xsd:complextype> </xsd:element> <xsd:complextype name="subjektinfotyp"> <xsd:sequence> <xsd:element name="nazev" type="xsd:string" /> <xsd:element name="adresa" type="xsd:string" /> <xsd:element name="ico" type="xsd:string" /> <xsd:element name="dic" type="xsd:string" /> </xsd:sequence> </xsd:complextype> <xsd:element name="polozka"> <xsd:complextype> <xsd:sequence> <xsd:element name="popis" type="xsd:string" minoccurs="0" maxoccurs="1" /> <xsd:element name="cena" type="xsd:decimal" /> <xsd:element name="dph" type="xsd:decimal" /> <xsd:element name="ks" type="xsd:positiveinteger" minoccurs="0" maxoccurs="1" /> </xsd:sequence> </xsd:complextype> </xsd:element> Generátory tříd 12 / 19 (strana 18)

Ukázka rozhraní vygenerované třídy čím generovat Castor, JAXB Java xsd.net public class faktura { public subjektinfotyp odberatel; public subjektinfotyp dodavatel; public polozka[] polozka; public string cislo; public System.DateTime vystaveni; public System.DateTime splatnost; public string vystavil; } public class subjektinfotyp { public string nazev; public string adresa; public string ico; public string dic; } public class polozka { public string popis; public System.Decimal cena; public System.Decimal dph; public string ks; } Generátory tříd 13 / 19 (strana 19)

Práce s dokumentem // stream pro čtení dat ze souboru StreamReader reader = new StreamReader("faktura.xml"); // serializátor založený na třídě vygenerované ze schématu // pomocí: xsd /c faktura.xsd XmlSerializer serializer = new XmlSerializer(typeof(faktura)); // do objektu f se deserializuje celý dokument faktury faktura f = (faktura)serializer.deserialize(reader); // pomocné proměnné decimal suma = 0; decimal sumadph = 0; // sečtení je hračka, nemusíme se starat ani o datové typy foreach (polozka p in f.polozka) { suma += p.cena; sumadph += p.cena * (p.dph/100); } // výpis statistiky System.Console.WriteLine("Celkem Kč: System.Console.WriteLine("Celkem DPH: " + suma); " + sumadph); dokument je samozřejmě R/W, takže jej můžeme v paměti i vytvořit, upravovat a pak uložit Generátory tříd 14 / 19 (strana 20)

Další API XSLT, XPath... 22 Další vývoj... 23 (strana 21)

XSLT, XPath většina XSLT procesorů má API transformace lze spouštět programově vstup a výstup transformace nemusí být jen soubor, ale klidně DOM strom, proud událostí SAX apod. některé parsery obsahují i procesor XPath a umožňují vyhodnocování výrazů nad dokumentem velmi pohodlné pro programátora // vytvoření XPath navigátoru pro dokument XPathDocument doc = new XPathDocument("faktura.xml"); XPathNavigator nav = doc.createnavigator(); // sečtení faktury přímo pomocí XPath výrazů double suma = (double) nav.evaluate("sum(/faktura/polozka/cena)"); System.Console.WriteLine("Celkem Kč: " + suma); // vytvoření iterátoru pro všechny elementy cena XPathNodeIterator iter = nav.select("/faktura/polozka/cena"); // průchod vybranými uzly while (iter.movenext()) { double sazbadph = Double.Parse(iter.Current.GetAttribute("dph","")) / 100; double castka = Double.Parse(iter.Current.Value); suma += castka; sumadph += sazbadph * castka; } // výpis statistiky System.Console.WriteLine("Celkem Kč: " + suma); System.Console.WriteLine("Celkem DPH: " + sumadph); Další API 15 / 19 (strana 22)

Další vývoj pro každou novou technologii se dříve nepo později vytvoří standardní API např. XQuery, XML Encryption, XML Signature Další API 16 / 19 (strana 23)

Podpora XML v jednotlivých jazycích Java... 25.Net... 26 (strana 24)

Java Obrázek 5. Struktura základních tříd rozhraní JAXP a jejich použití Podpora XML v jednotlivých jazycích 17 / 19 (strana 25)

.Net Obrázek 6. Nejdůležitější XML třídy.netu a jejich vzájemné vztahy Podpora XML v jednotlivých jazycích 18 / 19 (strana 26)

Další informace Další informace... 28 (strana 27)

Další informace přehled XML API v Javě a.net 1 on-line kniha o práci s XML v Javě 2 1 http://www.kosek.cz/xml/api/index.html 2 http://cafeconleche.org/books/xmljava/ Další informace 19 / 19 (strana 28)