Rozhraní SAX, SAX vs. SAX2 Jaroslav Ciml.

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

CXPath Dotazování nad heterogenními XML zdroji s pomocí konceptuálního schéma Jan Vávra, 21. dubna 2004
Štěpán Bechynský. 2 Kompatibilita DOCTYPE META Tag – Hlavička protokolu HTTP – X-UA-Compatible: IE=7 3.
Úvod do HTML. Co je HTML  zkratka pro HyperText Markup Language  značkovací jazyk pro hypertext  umožňuje publikaci dokumentů na internetu.
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
Polymorfismus Dědičnost
Mobilní aplikace na sledování odpracovaného času
Programování v C++ Cvičení.
Desáté cvičení Java Core API Java Collection Framework JavaDoc.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
VY_32_INOVACE_4.3.IVT1.11/Oc Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jaroslav Ochodek CZ.1.07/1.5.00/ Tvorba webových.
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Vývoj aplikací pro SharePoint
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
C# - Exceptions (výjimky)
Objektové programování
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Datové typy a práce s nimi
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
6. cvičení Polymorfismus
Počítače a programování 1
1 PRG036 – Technologie XML Přednáší: Irena Mlýnková Martin Nečaský
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
Dokumentace objektů a zveřejnění funkcí
XML Schema Irena Mlýnková. Obsah XML – úvod, příklad, základní pojmy DTD – přehled XML Schema – podrobně.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Dílna Caché II. CSP pro pokročilé Tomáš Vaverka. Zdroje HTML Tag Reference v sekci Reference Material v dokumentaci Caché HTML Tag Reference v sekci Reference.
Návrhový vzor Factory v JAVA API Martin Kot Katedra informatiky VŠB – Technická univerzita Ostrava
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
Ing. Jan Mittner Zend_Feed 2. XmlWriter 3. SimpleXml 4. sitemap 2.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Návrh a tvorba WWW Přednáška 8
RDF a RQL Roman Krejčík. RDF a RQL RDF – Resource Description Framework –Jazyk pro ukládání informací v XML –RDF Schema RQL – RDF Query Language –Dotazování.
Seznam.cz, a.s. I Radlická 2 I Praha 5 I Tel.: I Fax: FastRPC meziserverová.
Šesté cvičení Výjimky Balíky.
Import záznamů diplomových prací nové řešení Antonín Vaishar, SUAleph, 26. –
PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Pokročilé programování v C++ (část B)
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Petr Šmíd Obsah prezentace Co je to XML ?
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
Úvod do XML S využitím materiálů z Zdeněk Žabokrtský.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
XML a datový standard Zdeněk Jirkovec Softwarové Aplikace a systémy.
Úvod do C# - OOP Jaroslav BURDYS 4IT.
Typový příklad 3 – zadání 1
Návrhový vzor Flyweight
TNPW1 JavaScript Ing. Jiří Štěpánek.
Bridge.
Reflexe jako introspekce
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Bridge.
Transkript prezentace:

Rozhraní SAX, SAX vs. SAX2 Jaroslav Ciml

Použití SAX - připomenutí Vytvoření instance parseru XMLReader xmlReader = XMLReaderFactory.createXMLReader(); Registrace handleru xmlReader.setContentHandler( contentHandler); Parsování xmlReader.parse(inputSource); Třída InputSouce zapouzdřuje různé způsoby předání XML dokumentu (InputStream, Reader, systemId)

Atributy Zpracování atrubutů zajišťuje ContentHandler jako reakci na událost startElement void startElement(String uri, String localName, String qName, Attributes atts) Rozhraní Attributes reprezentuje množinu všech atributů uvedených v otevíracím tagu elementu 3 možnosti přístupu k jednotlivým atributům pomocí indexu pomocí jména atributu (raw name) pomocí namespace a lokálního jména atributu

Atributy - příklad Atribut bez namespace Atribut s namespace <lastname lang="EN">Smith</lastname> kvalifikované jméno lang (raw, prefixed, qualified name) namespace (uri) prázdný řetězec lokální jméno (local name) lang Atribut s namespace <rootElem xmlns:ns=“http://www.mff.cuni.cz/namespace“> … <lastname ns:lang="EN">Smith</lastname> </rootElem> kvalifikované jméno ns:lang namespace (uri) http://www.mff.cuni.cz/namespace lokální jméno lang

Metody rozhraní Attributes Přístup přes index int getLength() String getQName(int index) String getURI(int index) String getLocalName(int index) String getValue(int index) Přístup přes jméno atributu String getValue(String qName) Přístup přes namespace a lokální jméno String getValue(String uri, String localName)

Atributy - dodatky Pokud nemá parser zapnutou podporu namespaces, je k dispozici pouze kvalifikované jméno Přístup přes kvalifikované jméno nemusí fungovat správně, pokud nemá parser nastavenou vlastnost xmlReader.setFeature( “http://xml.org/sax/features/namespace-prefixes“, true); Rozhraní Attributes existuje až od SAX 2.0, v SAX 1.0 rozhraní AttributeList – bez podpory namespaces (pouze raw names)

Handlery U parseru lze zaregistrovat 4 handlery – třídy implementující následující rozhraní ContentHandler ErrorHandler DTDHandler EntityResolver Všechna rozhraní implementuje třída DefaultHandler (těla všech metod jsou prázdná)

ContentHandler startDocument, endDocument, startElement, endElement characters, ignorableWhitespace Mapování prefixu na namespace void startPrefixMapping(String prefix, String uri) void endPrefixMapping(String prefix) Příklad <rootElem xmlns:ns=“http://www.mff.cuni.cz/namespace“> při vstup do elementu (ještě před událostí startElement) zavolá parser metodu startPrefixMapping( “ns“, “http://www.mff.cuni.cz/namespace“)

ContentHandler Pro deklarace <?target data?> se volá void processingInstruction( String target, String data) metoda se nezavolá pro deklaraci xml <?xml version=“1.0“?> Lokátor Parser ještě před událostí startDocument zavolá metodu void setDocumentLocator(Locator locator) Klientský kód si může instanci typu Locator uložit Během parsování dokumentu (mezi událostmi startDocument a endDocument) se lze dotazovat na pozici int getLineNumber() int getColumnNumber()

ErrorHandler void fatalError( SAXParseException exception) nezotavitelná chyba (typicky: dokument není dobře formovaný) void error( zotavitelná chyba (typicky: dokument není validní) void warning( Po zpracování události error nebo warning pokračuje parsování dokumentu. Klientský kód může parsování dokumentu ukončit vyhozením výjimky SAXException.

DTDHandler, EntityResolver DTDHandler umožňuje reagovat pouze na neparsované entity a notace <!DOCTYPE document [ … <!NOTATION WAV SYSTEM "/usr/local/bin/wave_player"> <!ENTITY music SYSTEM "drop.wav" NDATA WAV> ]> <document> <sound what="music"/> </document> EntityResolver zpracovává externí entity (např. odkaz na externí DTD)

Handlery – SAX 1.0 V SAX 1.0 opět chybí podpora namespaces Rozhraní DocumentHandler (místo ContentHandler) používá pouze raw names chybí metody startPrefixMapping, endPrefixMapping Defaultní implementace handlerů – třída HandlerBase (místo DefaultHandler)

Parsery Vytvoření instance parseru Registrace handleru Parsování XMLReader xmlReader = XMLReaderFactory.createXMLReader(); Registrace handleru xmlReader.setContentHandler(contentHandler); xmlReader.setErrorHandler(errorHandler); xmlReader.setDTDHandler(dtdHandler); xmlReader.setEntityResolver(entityResolver); Parsování xmlReader.parse(inputSource);

Parsery – features, properties void setProperty(String name, Object value) nastavuje vlastnosti parseru formou dvojic jméno-hodnota př.: nastavení validace podle XML Schema xmlReader.setProperty( “http://java.sun.com/xml/jaxp/properties/schemaLanguage“, “http://www.w3.org/2001/XMLSchema“); void setFeature(String name, boolean value) zapíná / vypíná vlastnosti parseru př.: zapnutí validace některých časově náročných podmínek (například omezení unique) “http://apache.org/xml/features/validation/“ + “schema-full-checking“, true);

Parsery – SAX 1.0 Vytvoření instance parseru Parser parser = ParserFactory.makeParser(); Rozhraní Parser nepodporuje namespaces, nepodporuje properties ani features, ke všem setter metodám chybí getter metody Z instance typu Parser lze vytvořit objekt chovající se jako XMLReader a naopak XMLReader xmlReader = new ParserAdapter(parser); Parser parser = new XMLReaderAdapter(xmlReader);

Parsery – alternativní přístup Vytvoření továrny SAXParserFactory factory = SAXParserFactory.newInstance(); Na továrně lze nastavit setFeature(String name, boolean value) void setValidating(boolean validating) void setNamespaceAware(boolean awareness) … Vytvoření parseru SAXParser saxParser = factory.newParser(); Vzniklý parser v sobě obsahuje instanci typu Parser i instanci typu XMLReader (dostupné pomocí metod getParser, getXMLReader)

Parsery – alternativní přístup Na parseru lze nastavit properties void setProperty(String name, Object value) Spousta variant přetížené metody parse, všechny mají parametry XML dokument (InputStream, InputSource, URI, File) Implementace handlerů (DefaultHandler, HandlerBase)

Filtry Filtry umožňují změnit události, které se dostávají k obslužným metodám handlerů (např. lze pro každou událost startElement vygenerovat atribut id) Filtry jsou objekty implementující rozhraní XMLFilter interface XMLFilter extends XMLReader Třída XMLFilterImpl je defaultní implementací XMLFilter. Nový filtr se typicky vytvoří zděděním této třídy.

Přidání filtru „Obyčejné“ použití parseru vytvoření instance parseru nastavení handlerů volání metody parse Použití parseru s filtrem přidání filtru XMLReader filteringXMLReader = new XMLFilterImpl( xmlReader); nastavení handlerů (na objektu filteringXMLReader) volání metody parse (na filteringXMLReader)

Jak funguje XMLFilterImpl XMLFilterImpl si zapamatuje skutečný parser předaný jako parametr konstruktoru XMLFilterImpl si zapamatuje všechny nastavené handlery jako své atributy (dostupné přes metody getContentHandler,...) Při volání metody parse nejprve XMLFilterImpl zaregistruje u parseru sebe (implementuje všechny handler rozhraní). Poté deleguje na parser volání parse. Metody startElement,... definované třídou XMLFilterImpl pouze delegují volání na uložené handlery. Předpokládá se, že potomci předefinují toto chování.

Zdroje http://xml.apache.org/xerces-j http://www.saxproject.org http://www.cafeconleche.org/books/xmljava