Page 1
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Tehnologii Web
Dr. SabinCorneliu BuragaFacultatea de Informatica
Universitatea “A.I.Cuza” – Iasi, Romania
http://www.infoiasi.ro/~busaco/
Page 2
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Detalii in [TX, 240‐268]
Procesari XML
Page 3
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
“Inainte de a pune noi intrebari, gindeste‐te daca intr‐adevar vrei sa cunosti raspunsul la ele.”
Gene Wolfe
Page 4
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
XML (Extensible Markup Language)Procesarea documentelor XML
Interfata SAX (Simple API for XML)Alternative
cuprins
Page 5
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Scop: manipularea documentelor XML fara ca in prealabil sa fie construit
arborele de noduri‐obiect
documentul nu trebuie stocat completin memorie inainte de a fi efectiv prelucrat
sax: intro
Page 6
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Ofera o procesare XML secventiala (liniara),bazata pe evenimente – eventoriented
Initiator: David Megginsonhttp://www.megginson.com/SAX/
sax: caracterizare
Page 7
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Efort independent – de cel al Consortiului Web –de standardizare a procesarii XML
condusa de evenimente
Larg acceptat ca standard industrial:SAX 1.0 + SAX 2.0 (spatii de nume + extensii)
http://www.saxproject.org/
sax: caracterizare
Page 8
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Pentru fiecare tip de constructie XML(inceput de tag, sfirsit de tag, continut, instructiune de procesare, comentariu,...) va fi generat un eveniment care va fi tratat
de o functie/metoda (handler)
sax: procesare
Page 9
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Functiile/metodele de tratare se specificade catre programator, pentru fiecare tip
de constructie in parte
Programul consuma si trateaza evenimenteproduse de procesorul SAX
sax: procesare
Page 10
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Minimal, trebuie definite functiile/metodele:trateaza_tag_inceput (procesor, tag, atrib)trateaza_tag_sfirsit (procesor, tag)trateaza_date_caract (procesor, date)
sax: procesare
ContineContine listalistaatributeloratributelor
atasateatasate tagtag‐‐uluiului de de inceputinceput
Page 11
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Pentru fiecare eveniment de aparitiea tag‐ului de inceput, a tag‐ului de sfirsitsi a datelor‐continut, se ataseaza unadintre functiile de tratare, respectiv:
set_element_handler(trateaza_tag_inceput, trateaza_tag_sfirsit)
set_character_data_handler(trateaza_date_caract)
sax: procesare
Page 12
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Implementarea de referinta (Java): org.xml.saxInterfete implementate de procesorul XML (SAX Driver)
Interfete implementate de aplicatie: DocumentHandler, ErrorHandler, DTDHandler, EntityResolver (optionale)
Clase SAX standard: InputSource, SAXException, SAXParseException, HandlerBase
Clase aditionale: ParserFactory, AttributeListImpl, LocatorImpl
sax: procesare
Page 13
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
public interface XMLReader{
// furnizeaza informatii despre documentpublic ContentHandler getContentHandler ();public DTDHandler getDTDHandler ();public EntityResolver getEntityResolver ();public ErrorHandler getErrorHandler ();// seteaza diverse functionalitatipublic void setContentHandler (ContentHandler contentHandler);public void setDTDHandler (DTDHandler dtdHandler);public void setEntityResolver (EntityResolver resolver);public void setErrorHandler (ErrorHandler errHandler);// procesarea propriu-zisapublic void parse (InputSource in)
throws java.io.IOException, SAXException;public void parse (String uri)
throws java.io.IOException, SAXException;}
sax: procesare
Apache Xerces: interfata
XMLReader
Page 14
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
public interface ContentHandler{
public void setDocumentLocator (Locator locator);public void startDocument () throws SAXException;public void endDocument () throws SAXException;// evenimentepublic void startElement (String uri, String localName, String qName, Attributes attributes) throws SAXException;
public void endElement (String uri, String localName, String qName) throws SAXException;
public void characters (char buf[], int offset, int length) throws SAXException;public void processingInstruction (String target, String data) throws SAXException;// informatii suplimentarepublic void ignorableWhitespace (char buf[], int offset, int length)
throws SAXException;public void startPrefixMapping (String prefix, String uri) throws SAXException;public void endPrefixMapping (String prefix) throws SAXException;public void skippedEntity (String name) throws SAXException;
}
sax: procesareApache Xerces:
interfataContentHandler
Page 15
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
public interface Attributes{
public int getLength ();public String getType (int index);public String getValue (int index);// acces la informatiile privitoare la numepublic String getQName (int index);public String getLocalName (int index);public String getURI (int index);// acces via spatii de nume XMLpublic int getIndex (String uri, String localName);public String getType (String uri, String localName);public String getValue (String uri, String localName);// acces via nume calificate (ns:nume)public int getIndex (String qName);public String getType (String qName);public String getValue (String qName);
}
sax: procesare
Apache Xerces: interfataAttributes
Page 16
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
libxml – API oferit de GNOME (C, C++, Perl, PHP, Python,…)
MSSAX – procesari SAX in C/C++, JScript, VBScript; inclus in MSXML SDK
org.xml.sax – API de referinta pentru JavaQSAX – parte a mediului Qt (C++)Xerces SAX API – platforma XML pentru C++ si Java:
http://xml.apache.org/XML::Parser – modul Perl (bazat pe Expat)xml_*() – functii PHP4xml.sax – modul Python, parte a PyXML
sax: implementari
Page 17
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
sax: demo
!!
Page 18
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Cind trebuie folosit SAX?Procesarea unor documente de mari dimensiuniNecesitatea abandonarii procesarii(procesorul SAX poate fi oprit oricind)
Extragerea unor informatii de mici dimensiuniCrearea unei structuri noi de document XMLUtilizarea in contextul unor resurse de calcul reduse(e.g., memorie scazuta, largime de banda ingusta,...)
sax vs. dom
Page 19
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Cind trebuie folosit DOM?Accesul direct la datele dintr‐un document XMLCautari complexeFiltrarea complexa a datelor via XPathEfectuarea de transformari XSLNecesitateamodificarii si salvarii documentelor XMLIn contextul procesarii XML direct in cadrul navigatorului Web
sax vs. dom
Page 20
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
DOM necesita incarcarea completa a documentului XML in vederea procesarii ca arbore
SAX necesita pentru procesare existenta unor fragmentereduse din document, efectuindu‐se o prelucrare liniara
(sir de evenimente)
sax vs. dom
Page 21
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
SAX poate fi utilizat pentru generarea de arbori DOM
Invers, arborii DOM pot fi traversatipentru a se emite evenimente SAX
In cazul unor structuri XML sofisticate,modul de procesare SAX poate fi inadecvat
sax vs. dom
Page 22
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Unele implementari SAX ofera suportpentru validari si transformari
Uzual, se folosesc ambele API‐uri
sax vs. dom
Page 23
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
intrebare
Exista si alte metode de procesare XML?
Page 24
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Procesarea documentelor XMLAlternative:
XPP (XML Pull Parsing)“Legarea” datelor XMLProcesare simplificata
Comparatii
cuprins
Page 25
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Stiluri de procesari XML conduse de evenimente:Push versus Pull
alternative
Page 26
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Stiluri de procesari XML conduse de evenimente:Push = procesorul XML citeste date XML si notificaaplicatia asupra evenimentelor survenite(parsing events) – SAXAplicatia nu poate face cereri de evenimente,ele aparind asa cum sunt trimise (push) de procesor
alternative
Page 27
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Stiluri de procesari XML conduse de evenimente:Pull = aplicatia controleaza maniera de procesare sipoate solicita (pull) procesorului urmatoruleveniment XML – XPP (XML Pull Parsing)Structura codului‐sursa al aplicatiei reflectastructura documentului XML procesat
alternative
Page 28
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Interfetele push Interfetele pull
Procesare readonly Mostenesc avantajeleinterfetelor push
Prelucrare rapida, via fluxuri de date (streams)
Evenim. sunt consumateconform necesitatilor
Codul‐sursa poate fi dificilde inteles
Programele au o structuramai clara
Page 29
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
StAX – Streaming API for XML (Java) – JSR 173http://jcp.org/en/jsr/detail?id=173
BEA StAXJavolution – focalizat pe performanta:
http://javolution.org/Oracle StAX – inclus in XDKSun SJSXP – disponibil in Java 6 SDKWoodstox – oferit in contextul SOAP:
http://xircles.codehaus.org/projects/woodstox
alternative: implementari
Page 30
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Maniere de procesare a evenimentelor:Cursor: evenimentele sunt disponibile direct, ca proprietati, si nu este creat nici un obiectpentru reprezentarea evenimentului XML aparutXmlPull, StAX Cursor, .NET XmlTextReader
Iterator: fiecare eveniment XML este reprezentatde un obiect (imutabil, deseori) StAX Iterator
Mixta: obiectele‐eveniment pot fi reutilizatedupa creareNekoPull, XPP1, XPP2
alternative
Page 31
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Clasificare a manierelor de procesare XMLMod de accesare: secvential vs. direct (random)Controlul fluxului: pull vs. pushManagementul arborelui: ierarhic vs. imbricat
Page 32
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
DOM ofera acces direct, in stilul pull
SAX ofera acces secvential, in stilul push
XPP si .NET XmlTextReader ofera acces secvential,in stilul pull
Page 33
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
“Legarea” datelor XML de alte surse de date(XML binding)
Baze de date: XML infoset↔ dataset
Page 34
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
“Legarea” datelor XML de alte surse de date(XML binding)
Obiecte: date XML ↔ clase create “din zbor”
(C#, Java, Perl, PHP5)
interogari asupra datelor XML direct in limbajulde programare – LINQ (Language INtegrated Query)
Page 35
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
“Legarea” datelor XML de alte surse de date(XML binding)
Exemple de implementari:Castor, Zeus, JAXB (Java Architecture for XML Binding),
XmlDataDocument (.NET) etc.
Page 36
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Procesarea XML simplificata
Scop: procesarea unui document XML(de mici dimensiuni) direct in memorie,in maniera obiectuala, diferita de DOM
Page 37
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Procesarea XML simplificata
Fiecarui element XML ii poate corespundeo proprietate a unui obiect
Atributele asociate elementelor XML pot fi memorateintr‐o structura de date (e.g., tablou asociativ)
Page 38
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Procesarea XML simplificataImplementari:
E4X – ECMAScript for XML (Javascript)libxml (C)
SimpleXML (PHP5)XML::Simple & XML::Writer (Perl)
XmlTextReader & XmlTextWriter (.NET)
Page 39
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Procesarea XML simplificataPentru consultare, se poate folositun cititor (reader): XMLReader
E.g., clasa XmlTextReader oferita de .NET Framework
Page 40
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Procesarea XML simplificataPentru generare, se poate utilizaun scriitor (writer): XMLWriter
E.g., clasa XmlTextWriter oferita de .NET Framework
Page 41
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
DOM partialUnele procesoare XML ofera posibilitateaconstruirii partiale a arborelui DOM
Exemplu: Apache AXIOM (C, Java)http://ws.apache.org/commons/axiom/
Page 42
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative: demo
!!
Page 43
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
ComparatiiStudiu de caz: benchmark privind contorizareaaparitiilor elementelor & atributelor si lungimea
nodurilor de tip text
Detalii in Matthias Farwick, Michael Hafner, XML Parser Benchmarks: Part 1 & Part 2, XML.com, mai 2007:
www.xml.com/pub/a/2007/05/09/xml-parser-benchmarks-part-1.html
Page 44
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Page 45
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Page 46
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Page 47
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Page 48
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Page 49
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Page 50
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
rezumat
Procesarea documentelor XMLInterfata SAX & alternativele
Page 51
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
??