XML dokumentumok feldolgozása. DOM, SAX, StAX

Hasonló dokumentumok
XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

XML adatkezelés. A DOM alapú adatkezelés. Dr. Kovács László Répási Tibor kiegészítéseivel

DINAMIKUS MULTIMÉDIÁS TARTALOM...

Java XML kezelés labor

C#, OOP. Osztályok tervezése C#-ban

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

XML dokumentumok feldolgozása Java-ban XML, DTD, XSD, XSLT, JAXP, DOM, SAX, JDOM

Abstract osztályok és interface-ek. 7-dik gyakorlat

Szoftvertechnológia alapjai Java előadások

34. Elsődleges kulcs megadása XMLSchema-ban Idegen kulcs megadása XMLSchema-ban Típusok kategóriái és saját típus megadásának

JNDI - alapok. Java Naming and Directory Interface

Zenetár a webszerverünkön,

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

XML adatkezelés. 11. témakör. Az XQuery nyelv alapjai. XQuery. XQuery célja egy imperatív lekérdező nyelv biztosítása. XQuery.

Komponens alapú fejlesztés

Web-fejlesztés NGM_IN002_1

Felhasználó által definiált adattípus

Bánsághi Anna

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

SQLServer. DB Recovery modes

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Bevezetés Működési elv AJAX keretrendszerek AJAX

Adatbázisok webalkalmazásokban

és az instanceof operátor

Programozás I. Első ZH segédlet

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Osztálytervezés és implementációs ajánlások

Modellinformációk szabványos cseréje. Papp Ágnes, Debreceni Egyetem EFK

Osztálytervezés és implementációs ajánlások

XML (DTD) (XSD) DOM SAX XSL. XML feldolgozás

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Már megismert fogalmak áttekintése

Programozási nyelvek II.: JAVA

1. Egyszerű (primitív) típusok. 2. Referencia típusok

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18



Adatkezelési mőveletek az XML nyelvben XQuery - XML dokumentumok lekérdezésére szolgáló lekérdezınyelv kifejezı ereje az OQL nyelvével egyenértékő.

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

Metamodellezés. Simon Balázs BME IIT, 2011.

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Programozási nyelvek Java

Collections. Összetett adatstruktúrák

Interfészek. PPT 2007/2008 tavasz.

Parsing and Application

Programozási nyelvek Java

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Hálózatkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Hálózatkezelés / 20

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A

Junior Java Képzés. Tematika

XML EXtensible Markup Language

XML alapú adatbázis-kezelés. (Katona Endre diái alapján)

OOP és UML Áttekintés

Web-fejlesztés NGM_IN002_1

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

MDAC - Microsoft Data Access Components

XML és XSLT (a színfalak mögül)

Globális operátor overloading

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Az XML dokumentumok adatmodellje

OOP #14 (referencia-elv)

Adatbázis rendszerek 7. előadás State of the art

Reader /Writer InputStreamReader, OutputStreamWriter

Internet programozása. 3. előadás

30 MB INFORMATIKAI PROJEKTELLENŐR

Osztott Objektumarchitektúrák

Bevezető. Servlet alapgondolatok

Java programozási nyelv 5. rész Osztályok III.

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Java programozási nyelv

Komponens alapú programozás Bevezetés

XPath. dr. Paller Gábor. XML technológiák

Concurrency in Swing

Programozás 1. 2.gyakorlat

JavaServer Pages (JSP) (folytatás)

CORBA bevezetés. Paller Gábor Internet és mobil rendszerek menedzselése

ZH mintapélda. Feladat. Felület

Web-fejlesztés NGM_IN002_1

Informatikai alapismeretek Földtudományi BSC számára

JAVA PROGRAMOZÁS 2.ELŐADÁS

ISA szimulátor objektum-orientált modell (C++)

Aspektus-orientált nyelvek XML reprezentációja. Kincses Róbert Debreceni Egyetem, Informatikai Intézet

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Tudásalapú információ-kereső rendszerek elemzése és kifejlesztése

Programozási nyelvek Java

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

1. feladat. Szabóné Nacsa Rozália

Modellek végrehajtása, kódgenerálás

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Objektumorientált paradigma és programfejlesztés Bevezető

Átírás:

XML dokumentumok feldolgozása DOM, SAX, StAX

XML-feldolgozók Az XML-feldolgozók olyan programok, amelyek képesek XML dokumentumokat beolvasni, továbbá hozzáférést biztosítanak a dokumentum tartalmához és szerkezetéhez Az XML-feldolgozót egy másik program például egy Java alkalmazás vezérli Vannak érvényesítő és nem érvényesítő XMLfeldolgozók Mindkét fajta XML-feldolgozó számára kötelező jelezni a specifikációban leírt jólformáltsági megszorításokat sértő olyan hibákat, amelyek a dokumentumegyedben vagy a beolvasott elemzett egyedekben fordulnak elő

Az XML protokollverme

Dokumentum objektum modell Mi a DOM? The Document Object Model is a platform- and language-neutral interface that will allow programs and scripts to dynamically access and update the content, structure and style of documents. The document can be further processed and the results of that processing can be incorporated back into the presented page. A DOM egy API érvényes HTML és jólformált XML dokumentumok manipulálására

DOM példa <table> <tbody> <tr> <td>shady Grove</td> <td>aeolian</td> </tr> <tr> <td>over the River, Charlie</td> <td>dorian</td> </tr> </tbody> </table>

A DOM architektúrája (moduljai)

A DOM jellemzői (1) A DOM a dokumentumot logikailag faként (Node objektumok hierarchiája) kezeli (szerkezeti modell) A DOM objektummodell a klasszikus OO értelemben a dokumentumok (és azok egyes részei) azonossággal, struktúrával, viselkedéssel és kapcsolatokkal is rendelkező objektumok A DOM API kétféle lehetőséget biztosít: egy öröklődési hierarchián alapuló OO megközelítést egy egyszerű (kilapított) nézetet ( everything is a Node )

A DOM jellemzői (2) Alkalmas dokumentumok létrehozására, felépítésére szerkezetének bejárására elemek ill. tartalom hozzáadására, módosítására, törlésére A DOM modulokból áll (ld. architektúra)

DocumentFragment Interfészhierarchia (kékkel a DOM Core, sárgával az XML DOM) Document CharacterData Text CDATASection Attr Element DocumentType Comment NodeList NamedNodeMap DOMException DOMImplementation DOMString DOMTimeStamp

Egy dokumentum DOM-fája <?xml version="1.0"?> <?order alpha ascending?> <period name="renaissance"> <artist>leonardo da Vinci</artist> <artist>michelangelo </artist> <artist>donatello</artist> </period> <!-- renaissance art period -->

DOM Szöveges csomópont: csak elemben! Adat csak szöveges csomópontban! Dokumentumorientált vs. adatorientált DOM: dokumentummodell keverttartalom-modell (elemek, szövegek keverhetőek)

Simple API for XML (SAX) XML dokumentumok eseményvezérelt feldolgozása, callbackek segítségével nem épít belső fát, hanem az egyes elemzési események (kezdőtag, zárótag, ) hatására kezelőmetódusok hívódnak meg, pl.: public void startelement (String uri, String name, String qname, Attributes atts) { if ("".equals (uri)) System.out.println("Start element: " + qname); else System.out.println("Start element: {" + uri + "}" + name); } Kisebb memóriaigény Nem minden feldolgozás végezhető el így (pl. belső referenciák kezelése)

SAX stílusú feldolgozás main(...) A SAX-elemző parse(...) startdocument(...) startelement(...) characters(...) endelement( ) enddocument( )

Streaming API for XML (StAX) Pull parser az alkalmazás vezérli, nem a dokumentum kurzor API az XML dokumentumok bejárása elejétől a végéig eseményiterátor API az XML streamet, mint eseményobjektumok sorozatát tekinti Az XML dokumentum adatai streamként jönnek, feldolgozásuk sorrendben zajlik a dokumentum egy kis része érhető el egyidejűleg az alkalmazás csak akkor jut hozzá adathoz, ha kéri

Streaming API for XML (StAX) Áthidaló megoldás a DOM és a SAX között Hátrány: nehezebb hibakeresés FileInputStream fis = new FileInputStream(file); XMLInputFactory factory = (XMLInputFactory)XMLInputFactory.newInstance(); XMLStreamReader staxxmlreader = (XMLStreamReader) factory.createxmlstreamreader(fis);

Streaming API for XML (StAX) for ( { } int event = staxxmlreader.next(); event!= XMLStreamConstants.END_DOCUMENT; event = staxxmlreader.next()) switch (event) { case XMLStreamConstants.START_DOCUMENT: System.out.println("Start document " + staxxmlreader.getlocalname()); break; case XMLStreamConstants.START_ELEMENT: System.out.println("Start element " + staxxmlreader.getlocalname()); System.out.println("Element text " + staxxmlreader.getelementtext()); break; case XMLStreamConstants.END_ELEMENT: System.out.println("End element " + staxxmlreader.getlocalname()); break; default: break; }

Java API for XML Processing (JAXP) https://jaxp.dev.java.net/ JAXP 1.3 J2SE 5.0 XPath, validáció, adattípusok, Xinclude, JAXP 1.4 J2SE 6 StAX (Streaming API for XML), classloading, factory metódusok Implementációfüggetlen módon, futási időben

JAXP 1.4 Alapcsomagok: org.xml.sax: SAX 2.0 org.w3c.dom: DOM Level 3 javax.xml.parsers: elemzők inicializálása és kezelése javax.xml.transform: transzformátorok (XSLT feldolgozók) inicializálása és kezelése javax.xml.namespace: névterek kezelése javax.xml.stream: StAX javax.xml.xpath: XPath-kifejezések kiértékelése javax.xml.validation: XML dokumentumok validációja

DOM API - alapok

DOM API - alapok javax.xml.parsers.documentbuilderfactory DocumentBuilder newdocument() Document Element, Node, TextNode, stb. Csomagok: org.w3c.dom javax.xml.parsers

DOM egyszerű Java alkalmazás Szükséges osztályok importálása A DOM implementáció lekérése Hibák kezelése Factory példány létrehozása Elemzés (parsing) Validáció: factory.setvalidating(true); Névtérkezelés: factory.setnamespaceaware(true);

SAX API - alapok

SAX API - alapok SAXParserFactory SAXParser objektumot állít elő SAXParser XML adatfoorást foldolgoz és egy DefaultHandler metódusait hívja meg SAXReader Rejtett. XML adatforrást olvas be. DefaultHandler Eseményeket definiál. Alapértelemezett kezelő ContentHandler startdocument, enddocument, startelement, és endelement

SAX API - alapok ErrorHandler error, fatalerror metódusok Validációs kivételek DTDHandler DTD feldolgozásához EntityResolver resolveentity metódus Dokumentum keresés URN - a public identifier - alapján Csomagok a SAX API-ban: org.xml.sax org.xml.sax.ext org.xml.sax.helpers javax.xml.parsers

SAX egyszerű Java alkalmazás Osztályok importálása I/O rendezése ContentHandler interfész implementálása (startdocument, enddocument, startelement, endelement, és characters) Parser felállítása I/O hibák kezelése Output formázása Tartalomesemények kezelése

XSLT API - alapok

XSLT API - alapok TransformerFactory Transformer Csomagok: javax.xml.transform javax.xml.transform.dom javax.xml.transform.dom javax.xml.transform.stream

JDOM Nevével ellentétben nem a DOM-ra épül de könnyen integrálható DOM-mal és SAX-szal Javára optimalizált metódusok túlterhelésének, Collections API-nak, reflection-nek a kihasználása A DOM-mal ellentétben az elemnek van tartalma, nem pedig a szöveges gyermeknek

JDOM Öt csomagból áll: org.jdom org.jdom org.jdom.adapters org.jdom.input org.jdom.output org.jdom.transform

JDOM a feldolgozás menete XML Document SAXBuilder DOMBuilder Direct Build JDOM Document XMLOutputter SAXOutputter DOMOutputter DOM Node(s)

JDOM vs. DOM Document doc = new Document( new Element("rootElement").setText("This is a root element")); Document mydocument = new org.apache.xerces.dom.documentimpl(); Element root = mydocument.createelement("myrootelement"); Text text = mydocument.createtext( "This is a root element"); root.appendchild(text); mydocument.appendchild(root);

Kevert tartalom beolvasása JDOM-mal List mixedcontent = table.getmixedcontent(); Iterator i = mixedcontent.iterator(); while (i.hasnext()) { Object o = i.next(); if (o instanceof Comment) { // Comment has a tostring() out.println("comment: " + o); } else if (o instanceof String) { out.println("string: " + o); } else if (o instanceof Element) { out.println("element: " + ((Element)o).getName()); } // etc }