SAX2 pakiet org.xml.sax

Podobne dokumenty
SAX i DOM wykorzystanie XML-a we własnych aplikacjach. Simple API for XML Parsing Document Object Model

Modele dostępu do dokumentu XML. Implementacja modelu parser. SAX2 pakiet org.xml.sax. Działanie modelu SAX przykład

Wykorzystanie XML a we własnych aplikacjach

XML we własnych aplikacjach

XML we własnych aplikacjach

Procesowanie dokumentów XML

XML in own applications

Wykorzystywanie parsera DOM w programach Java i PL/SQL

XML we własnych aplikacjach

XML we własnych aplikacjach

XML standardy pokrewne

XML in own applications

Obiektowy model dokumentu. Katedra Mikroelektroniki i Technik Informatycznych

Perl a XML. Narzędzia informatyczne w językoznawstwie. Generowanie danych XML - Przykład. Generowanie danych XML. Perl - Przetwarzanie XML

XML we własnych aplikacjach

Drzewa DOM. Maciej Zakrzewicz.

XML w.net. Dominik Baś nr alb Wrocław, 29 maja 2007

Podstawy XML-a. Zaawansowane techniki programowania

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 06

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

XML we własnych aplikacjach

XML i Java. Technologie zarządzania treścią. dr inż. Robert Perliński rperlinski@icis.pcz.pl

Kotwasiński Obsługa XMLa z poziomu Javy

Plan prezentacji. Przetwarzanie dokumentów XML JAXP SAX JAXP SAX DOM STAX XSLT. Przedmiot: XML i jego zastosowania. Dr inż. Stanisław Polak JAXB

XML i Java 1. XML Budowa dokumentu XML. Projektowanie systemów informatycznych

Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML

JAVA I XML ZAGADNIENIA: DOM, SAX, JAXB, XMLDecoder i XMLEncoder, ANT.

Zaawansowany kurs języka Python

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

Metody dostępu do danych

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Zaawansowane aplikacje WWW - laboratorium

Programowanie obiektowe

XML i nowoczesne technologie zarządzania treścią

Model semistrukturalny

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Programowanie obiektowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Przykładowy dokument XML

Programowanie obiektowe

Kurs rozszerzony języka Python

Klasy abstrakcyjne, interfejsy i polimorfizm

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

5.14 JSP - Przykład z obiektami sesji Podsumowanie Słownik Zadanie... 86

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie obiektowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

JAVA W SUPER EXPRESOWEJ PIGUŁCE

libxml2 parser DOM dla C++ czwartek, 8 grudnia 11

Języki formatowania dokumentów strukturalnych. XSL przekształcenia XML-a. XSL a XSLT. XSL części składowe. Zasada działania przekształcenia XSLT

Dokumentacja do API Javy.

Programowanie obiektowe

Wykład 6 Dziedziczenie cd., pliki

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusz Mikoda

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Klasy abstrakcyjne i interfejsy

Plan dzisiejszego wykładu. Narzędzia informatyczne w językoznawstwie. XML - Definicja. Zalety XML

1 Wprowadzenie do J2EE

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie Obiektowe GUI

DOM SAX AJAX. SAX,DOMiAJAX. Bartłomiej Świercz. Katedra Mikroelektroniki i Technik Informatycznych. Łódź, 11 kwietnia 2010

Programowanie obiektowe zastosowanie języka Java SE

Pakiety i interfejsy. Tomasz Borzyszkowski

Biblioteki dzielone, XML i readline

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Analiza i projektowanie aplikacji Java

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Wprowadzenie do projektu QualitySpy

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Modelowanie diagramów klas w języku UML. Łukasz Gorzel @stud.umk.pl 7 marca 2014

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Rodzaje przetwarzania XSLT (1)

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Location paths. Osie (axes)

Programowanie obiektowe

METODY REPREZENTACJI INFORMACJI

Podstawy języka XML. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Programowanie obiektowe

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

29. Poprawność składniowa i strukturalna dokumentu XML

Programowanie obiektowe - 1.

Java Server Faces narzędzie do implementacji w wy prezentacji

Programowanie w Internecie. Java

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Programowanie obiektowe

Specyfikacja API Runtime BAS 3.0

DSL w środowisku Eclipse. Grzegorz Białek Architekt techniczny, Sygnity S.A.

Dziedziczenie. Tomasz Borzyszkowski

Java jako język programowania

Kurs programowania aplikacji bazodanowych

Programowanie obiektowe

Programowanie obiektowe

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 05

Programowanie współbieżne i rozproszone

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Transkrypt:

Modele dostępu do dokumentu XML 23 października 2003 Wykorzystanie XML-a we własnych aplikacjach Pozwalają programistom na dostęp do zawartości dokumentów XML na wysokim poziomie: korzystamy z abstrakcyjnych obiektów, nie troszczymy się o analizę leksykalną i składniową. SAX Simple API for XML: model zdarzeniowy. DOM Document Object Model: obiektowy model drzewa struktury, zwykle implementowany przy użyciu SAX. XML data binding wiązanie XML-a. Pull parsing przetwarzanie strumieniowe. Implementacja modelu parser SAX Simple API for XML Parser moduł programistyczny analizujący dokument XML i udostępniający jego zawartość w postaci abstrakcyjnego modelu. Funkcjonalność parsera: analiza leksykalna i składniowa, sprawdzenie poprawności strukturalnej (tylko parser walidujący). Generyczność niezależność od konkretnego języka! Po co abstrakcyjne modele: jednolity sposób programowania, niezależnie od użytego parsera, możliwość wymiany parsera, możliwość porównywania parserów. Idea: dokument XML jako ciąg zdarzeń, program reaguje na wybrane zdarzenia. Status: 1998: SAX 1.0, 2000: SAX 2.0 najważniejsze rozszerzenia: obsługa przestrzeni nazw, cechy (features) - wartości boolowskie, właściwości (properties) - dowolne obiekty, zmiany nazw wielu obiektów. Działanie modelu SAX przykład SAX2 pakiet org.xml.sax <?xml version="1.0"?> <wiersz bialy="nie"> <autor> William Shakespeare </autor> </tytul> </wiersz> Parser setdocumenthandler Aplikacja startdocument() startelement("wiersz", [bialy="nie" ]) ignorablewhitespace(spacje) startelement("autor",[]) characters("william") endelement("autor") ignorablewhitespace(spacje) throw SAXException Interfejsy implementowane przez parser: XMLReader parse (2 metody), setcontenthandler, Attributes getlength, getlocalname, getqname, getvalue (2 metody). Opcjonalny: Locator Interfejsy implementowane przez użytkownika parsera: ContentHandler zdarzenia: characters, ignorablewhitespace, startdocument, enddocument, startelement, endelement, processinginstruction, setdocumentlocator. ErrorHandler, DTDHandler, EntityResolver. 1

SAX2 pakiet org.xml.sax SAX kroki implementacji Standardowa klasa: org.xml.sax.inputsource może pobierać dane z InputStream, Reader, String. Wyjątek: SAXException podnoszony w przypadku wystąpienia błędu. Klasy pomocnicze (pakiet org.xml.sax.helpers): DefaultHandler implementujemy podklasy tej klasy, XMLReaderFactory, AttributesImpl, LocatorImpl. Tworzymy podklasę klasy org.xml.sax.helpers.defaulthandler. Pobieramy obiekt org.xml.sax.xmlreader z fabryki. Rejestrujemy stworzoną podklasę w parserze (XMLReader) metodami sethandler. Wywołujemy metodę parse. Filtry SAX Model DOM Implementują interfejs org.xml.sax.xmlfilter. Rozszerzają klasę org.xml.sax.helpers.xmlfilterimpl. Specyficzne implementacje interfejsów: ContentHandler, DTDHandler, EntityResolver, ErrorHandler. Można je łączyć w łańcuchy: XMLReader reader; XMLFilterImpl f1 = new XMLFilterImpl(reader); XMLFilterImpl f2 = new XMLFilterImpl(f1); f2.parse(); Dostęp do całego dokumentu (HTML lub XML), z wyjątkiem DTD. Części składowe: DOM Level 1 (październik 1998): podstawowe metody dostępu do struktury dokumentu, DOM Level 2 (listopad 2000): nowe cechy XML-a, np. przestrzenie nazw, Views "widoki" dokumentu po zastosowaniu stylów CSS, Events obsługa zdarzeń, Style manipulowanie arkuszami stylów, Traversal and Range "podróżowanie" po dokumencie XML. DOM Level 3 (w przygotowaniu): Load and Save ładowanie i zapisywanie dokumentu, Validation dostęp do definicji struktury dokumentu (DTD), XPath dostęp do węzłów DOM przez wyrażenia XPath. DOM Core Drzewo DOM - przykład Bazowa cześć specyfikacji DOM. Umożliwia: budowanie dokumentów, nawigację po strukturze dokumentów, dodawanie elementów i atrybutów, modyfikacje elementów i atrybutów, usuwanie elementów/atrybutów i ich zawartości. Wady: pamięciożerność, niska efektywność. <?xml version="1.0"?> <wiersz> <autor>william Shakespeare </autor> <tytul>sonet 102</tytul> <zwrotka> <wers></wers> </zwrotka> </wiersz> <autor> <wiersz> <tytul> <zwrotka> William Shakespeare Sonet 102 <wers> 2

DOM najważniejsze interfejsy Interfejs Node Node Document Element Comment Attr Text CDATA Section Processing Instruction Dostęp do zawartości: getattributes() getchildnodes() getfirstchild() getlastchild() getnextsibling() getprevioussibling() getnodename() getnodevalue() getnodetype() getownerdocument() getparentnode() haschildnodes() Manipulacja zawartością: appendchild(node) insertbefore(node, Node) removechild(node) replacechild(node, Node) setnodevalue(string) setnodename(string) Klonowanie: clonenode(boolean) Klasy pomocnicze DOM SAX DOM NamedNodeMap: tablica haszująca obiektów Node (np. atrybutów). NodeList: wektor obietków Node (np. dzieci danego węzła). DOMException: wyjątek podnoszony w przypadku błędnej modyfikacji węzła. Przetwarzanie wsadowe. Oszczędny czasowo i pamięciowo. Dobry do wyławiania z dokumentu wybranych elementów. Całe drzewo dokumentu ładowane do pamięci. Kosztowny czasowo i pamięciowo. Pozwala wędrować po drzewie dokumentu. Dokument tylko do odczytu Pozwala tworzyć i modyfikować dokumenty. Parsery XML przegląd Parsery XML przegląd Java: XP Jamesa Clarka (niewalidujący), Xerces (dostępny także dla C++ i Perla, XML Schema, SAX 1.0/2.0, DOM level 1 i 2), XML4J IBM XML Parser for Java (XML Schema, SAX 1.0/2.0, DOM level 1, 2, 3), Oracle XML Parser for Java (walidujący), kilkadziesiąt innych. C, C++: XML4C IBM XML Parser for C++ (XML Schema, SAX 1.0/2.0, DOM level 1, 2, 3, eksperymentalna implementacja XML 1.1), Expat Jamesa Clarka (niewalidujący). Perl: XML::Parser pakiet wykorzystujący parser Expat J. Clarka napisany w C, XML::DOM. Python: PyXML. Microsoft XML Core Services (MSXML 4.0, komponent COM): możliwość dostępu z różnych języków programowania: ECMAScript, Java, Perl, Python, SQL, VisualBasic. 3

XML Data Binding Przykład: DXML Dokumenty XML a obiekty Javy: DTD/schemat odpowiada definicji klasy, dokument XML (instancja schematu) odpowiada obiektowi (instancji klasy). Pomysł: automatyczne generowanie klas z DTD/schematów, generowane klasy implementują serializację (i nic więcej). Implementacje: Dynamic XML, ObjectSpace, JAXB Java Architecture for XML Binding, Sun Microsystems, Castor, Exolab, <!ELEMENT Phonebook (Person*)> <!ELEMENT Person (Name, Phone*)> <!ELEMENT Name (Firstname, Lastname)> <!ELEMENT Firstname (#PCDATA)> <!ELEMENT Lastname (#PCDATA)> <!ELEMENT Phone (#PCDATA)> public interface IPerson extends com.objectspace.xml.idxmlinterface { // element Name public IName getname(); public void setname(iname arg0); // element Phone public void addphone(string arg0); public int getphonecount(); public void setphones(vector arg0); public String[] getphones(); public void setphones(string[] arg0); public Enumeration getphoneelements(); public String getphoneat(int arg0); public void insertphoneat (String arg0, int arg1); public void setphoneat (String arg0, int arg1); public boolean removephone (String arg0); public void removephoneat(int arg0); public void removeallphones(); } DXML: jak z tego korzystać Przetwarzanie strumieniowe pull parsing Przygotowanie DTD. Wygenerowanie klas. Korzystanie w kodzie w Javie: import com.objectspace.xml.*; xmldocument = Xml.openDocument(new File("phonebook.xml")); IPhonebook phonebook = (IPhonebook) xmldocument.getroot(); Alternatywa dla modelu SAX: aplikacja "wyciąga" kolejne zdarzenia z parsera, przetwarzanie kontrolowane przez aplikację, a nie parser, parser działa podobnie jak iterator, kursor lub strumień danych, zachowane cechy modelu SAX: duża wydajność, możliwość przetwarzania dowolnie dużych dokumentów. Dostępne implementacje:.net XmlReader, Microsoft, XmlPull API i jego implementacje (XNI 2 XmlPull, XPP3/MXP1), BEA XML Stream API. Standaryzacja: Java Community Process, JSR 173: Streaming API for XML. SAX a Pull parsing Pull parsing korzyści SAX: aplikacja mycontenthandler parse() parser Pull parsing: aplikacja parser Jeszcze większa wydajność niż w (i tak już wydajnym) modelu SAX, dzięki: możliwości przerwania przetwarzania przed końcem pliku, gdy potrzebujemy z niego tylko część danych, możliwości zmniejszenia liczby kopiowań obiektów typu String, szybszemu filtrowaniu zdarzeń. Możliwość prostej obróbki wielu dokumentów jednocześnie. Bardziej proceduralny styl programowania, co daje: mniej stanów do pamiętania, możliwość użycia rekursji, zwiększone powtórne użycie kodu (reusability). Źródło: M. Plechawski, "Nie pozwól się popychać", Software 2.0, 6/2003 4

SAX czy pull parsing co wybrać? Gdzie szukać dalej Pull parsing sprawdza się, gdy: kończymy przetwarzanie po wystąpieniu poszukiwanych danych, przetwarzanie zdarzenia zależy od kontekstu (np. od tego, czy jesteśmy wewnątrz pewnego elementu), przetwarzamy równolegle więcej niż jeden plik (np. porównujemy pliki). SAX sprawdza się, gdy: chcemy odfiltrować dokument interesują nas tylko wybrane elementy za jednym przebiegiem dokonujemy kilka niezależnych rodzajów przetwarzania. SAX Home Page: www.saxproject.org Document Object Model (DOM): www.w3.org/dom xml.coverpages.org/dom.html Common API for XML Pull Parsing www.xmlpull.org Paweł Gajda, SAX i DOM, czyli XML w naszych aplikacjach www.empolis.pl Osiągnięcia Archiwum publikacji Software 2.0, nr 6/2001, Wydawnictwo Software Tomasz Brauncajs, JAXB i Castor wiązanie XML-a w Javie Software 2.0, nr 6/2002, Wydawnictwo Software Michał Plechawski, Nie pozwól się popychać Software 2.0, nr 6/2003, Wydawnictwo Software Gdzie szukać dalej IBM alphaworks: www.alphaworks.ibm.com Free XML tools and software Lars Marius Garshol: www.garshol.priv.no/download/xmltools/ XML w Javie: java.sun.com/xml 5