Upload
sabin-buraga
View
1.034
Download
4
Embed Size (px)
DESCRIPTION
Citation preview
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/
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
Detalii in [TX, 240‐268]
Procesari XML
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
sax: demo
!!
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
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
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
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
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
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
intrebare
Exista si alte metode de procesare XML?
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
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
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
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
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
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
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
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
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
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
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)
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.
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
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)
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)
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
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
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/
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative: demo
!!
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
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
alternative
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
rezumat
Procesarea documentelor XMLInterfata SAX & alternativele
Dr. Sabin Buraga http://www.infoiasi.ro/~busaco/
TehnologiiTehnologii WebWeb <?xml version=“1.0” ?><curs desc=“…” />
??