SAX i DOM wykorzystanie XMLa we wasnych aplikacjach




















- Slides: 20

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

SAX - wstęp Definicja: standardowy interfejs do parsowania plików XML oparty na modelu zdarzeniowym stworzony w celu ujednolicenia dostępu do różnych parserów XML Cechy: n model zdarzeniowy n obiektowość n prostota n sekwencyjność n szybkość n status - darmowy n prototypowany w Javie 2

SAX - historia 1998 r. - SAX 2000 r. - SAX 2 3

Ilustracja działania SAX Przykład wywołania: parse Parser - XMLReader <tekst> <tytul styl="ital"> Spojrzenia na dokument XML </tytul> </autor> </tekst> set. Content. Handler Aplikacja start. Document start. Element ignorable. Whitespace start. Element characters end. Element ignorable. Whitespace throw SAXException 4

SAX - możliwości SAX umożliwia: • łatwą zmianę samego parsera • porównywanie parserów • stosowanie różnych parserów 5

Różnice między SAX i SAX 2 • Obsługa przestrzeni nazw • Cechy (features) - wartości boolowskie • Właściwości (properties) - dowolne obiekty • Zmiany nazw wielu obiektów 6

SAX 2 - pakiet org. xml. sax Interfejsy implementowane przez parser: Interfejsy implementowane przez użytkownika parsera: XMLReader n parse (2 metody) n set. Document. Handler n. . . Attributes n get. Length n get. Name (2 metody) n get. Value (2 metody) Opcjonalny: Locator Content. Handler n characters, ignorable. Whitespace n start. Document, end. Document n start. Element, end. Element n processing. Instruction n set. Document. Locator Error. Handler, DTDHandler, Entity. Resolver 7

SAX 2 - pakiet org. xml. sax Standardowa klasa: org. xml. sax. Input. Source może pobierać dane z Input. Stream, Reader, String Wyjątek: SAXException - ten wyjątek jest podnoszony w przypadku wystąpienia błędu Klasy pomocnicze (pakiet org. xml. sax. helpers): Default. Handler - aplikację tworzymy tworząc podklasę tej klasy XMLReader. Factory Attributes. Impl Locator. Impl 8

SAX kroki implementacji 1. Tworzymy podklasę klasy org. xml. sax. helpers. Default. Handle 2. Pobieramy obiekt org. xml. sax. XMLReader z fabryki 3. Rejestrujemy stworzoną podklasę w parserze (XMLReader) metodami set<. . >Handler 4. Wywołujemy metodę parse 9

Filtry SAX Co to są Filtry SAX n Implementują interfejs: org. xml. sax. XMLFilter n Rozszerzają klasę: org. xml. sax. helpers. XMLFilter. Impl n Specyficzne implementacje interfejsów: Content. Handler, DTDHandler, Entity. Resolver, Error. Handler n Można je łączyć w łańcuchy: XMLReader reader; . . . XMLFilter. Impl f 1 = new XMLFilter. Impl(reader); XMLFilter. Impl f 2 = new XMLFilter. Impl(f 1); f 2. parse(. . . ); 10

Przykładowe parsery SAX Java: n Xerces-J (SAX 2), n SUN XML Parser, n Oracle XML Parser, C/C++: n Microsoft XML Parser, n Xerces-C (SAX 2), n expat, Python: n Pakiet 4 XML Perl: n XML: : Parser (obudowa expat’a w Perlu) 11

DOM Definicja: obiektowy model dostępu, stukturalizacji i nadawania stylu dokumentom n DOM - oficjalna rekomendacja W 3 C n DOM 2 - kandydat na oficjalną rekomendację n dla XML-a najistotniejsza jest część DOM Core, czyli właściwa definicja interfejsu obiektowego 12

DOM Core • Bazowa cześć specyfikacji DOM • Umożliwia: n budowanie dokumentów n nawigację po strukturze dokumentów n dodawanie elementów n modyfikacje elementów n usuwanie elementów i ich zawartości • Wady: n pamięciożerność n niska efektywność 13

DOM Core • DOM Core ma swoje ustalone tłumaczenie na Javę, • tłumaczeń na C++ jest wiele, • obiekty DOM są dostępne jako obiekty COM – np. parser MSXML 3 14

DOM - prezentacja graficzna Prezentacja graficzna obiektu (drzewa) DOM i odpowiadającego mu dokumentu XML <TABLE BORDER="1"> <TR> <TD>Shady Grove</TD> <TD>Aeolian</TD> </TR> <TD>Over the River, Charlie</TD> <TD>Dorian</TD> </TR> </TABLE> BORDER: Attribute Document TABLE: Element TR TD TD Aeolian Shady Grove : Text TR TD Over the River, Charlie TD Dorian 15

DOM – diagram najważniejszych interfejsów Node Document Element Attr Comment Text Processing Instruction CDATA Section 16

Interfejs Node ndostęp do zawartości n get. Attributes() n get. Child. Nodes() n get. First. Child() n get. Last. Child() n get. Next. Sibling () n get. Previous. Sibling () n get. Node. Name() n get. Node. Value() n get. Node. Type() n get. Owner. Document() n get. Parent. Node() n has. Child. Nodes() nmanipulacja zawartością n append. Child(Node) n insert. Before(Node, Node) n remove. Child(Node) n replace. Child(Node, Node) n set. Node. Value(String) n set. Node. Name(String) n klonowanie n clone. Node(boolean) n typy obiektów n ATTRIBUTE_NODE, . . . 17

Klasy pomocnicze DOM Named. Node. Map n tablica haszująca obiektów Node (atrybuty!) Node. List n wektor obietków Node (dzieci danego węzła!) DOMException n wyjątek podnoszony, w przypadku błędnej modyfikacji węzła 18

DOM a DOM 2 - różnice • Najważniejsze różnice między DOM, a DOM 2 n możliwość łączenia zawartości dwóch dokumentów n obsługa przestrzeni nazw 19

SAX DOM · Przetwarzanie wsadowe. · Całe drzewo dokumentu ładowane do pamięci. · Oszczędny czasowo i pamięciowo. · Kosztowny czasowo i pamięciowo. · Dobry do wyławiania z dokumentu wybranych elementów. · Pozwala wędrować po drzewie dokumentu. · Dokument tylko do odczytu · Pozwala tworzyć i modyfikować dokumenty. 20