Web09ProcesariXML SAX SimpleXML

78
Dr. Sabin Buragaprofs.info.uaic.ro/~busaco/ Tehnologii Web procesarea datelor XML (II) ⦑⦒ SAX (Simple API for XML) prelucrarea simplificată a documentelor XML

description

xml sax processing

Transcript of Web09ProcesariXML SAX SimpleXML

Page 1: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/Tehnologii Web

procesarea datelor XML (II)

⦑ ⦒SAX (Simple API for XML)

prelucrarea simplificată a documentelor XML

Page 2: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

„Înainte de a pune noi întrebări, gândește-te dacă într-adevăr vrei

să cunoști răspunsul la ele.”

Gene Wolfe

Page 3: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Există maniere alternativepentru procesarea documentelor XML?

Page 4: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: intro

Scop: consultarea documentelor XML/HTML

fără ca în prealabil să fie construitarborele de noduri-obiect

Page 5: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: intro

Scop: consultarea documentelor XML/HTML

fără ca în prealabil să fie construitarborele de noduri-obiect

documentul nu trebuie stocat completîn memorie înainte de a fi efectiv prelucrat

Page 6: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: caracterizare

Oferă o procesare XML secvențială (liniară),bazată pe evenimente – event-oriented

inițiator: David Megginson

http://www.megginson.com/downloads/SAX/

Page 7: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: caracterizare

Oferă o procesare XML secvențială (liniară),bazată pe evenimente – event-oriented

“SAX is a streaming interface – applications receive information from XML documents in a continuous stream,

with no backtracking or navigation allowed”

Page 8: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: caracterizare

Efort independent – de cel al Consorțiului Web –de standardizare a procesării XML

condusă de evenimente

www.saxproject.org

Page 9: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: caracterizare

Larg acceptat ca standard industrial

SAX 1.0 (1998)

implementare de referință în limbajul Javaorg.xml.sax

Page 10: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: caracterizare

Larg acceptat ca standard industrial

SAX 2.0 (2004)

suport pentru spații de nume, diverse configurări + extensii

Page 11: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Pentru fiecare tip de construcție XML– început de tag, sfârșit de tag, date (conținut),

instrucțiune de procesare, comentariu,... –va fi emis un eveniment care va fi tratat

de o funcție/metodă (handler)

Page 12: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Funcțiile/metodele de tratare se specificăde către programator, pentru fiecare tip

de construcție în parte

Page 13: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Programul consumă și tratează evenimenteproduse de procesorul SAX

Page 14: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Minimal, trebuie definite funcțiile/metodele:

trateaza_tag_inceput (procesor, tag, atrib) trateaza_tag_sfarsit (procesor, tag)trateaza_date_caracter (procesor, date)

Page 15: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Minimal, trebuie definite funcțiile/metodele:

trateaza_tag_inceput (procesor, tag, atrib) trateaza_tag_sfarsit (procesor, tag)trateaza_date_caracter (procesor, date)

conține lista atributeloratașate tag-ului de început

Page 16: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Pentru fiecare eveniment de apariție a tag-ului deînceput, a tag-ului de sfârșit și a datelor-conținut,se atașează una din funcțiile de tratare, respectiv:

set_element_handler(trateaza_tag_inceput, trateaza_tag_sfarsit)

set_character_data_handler(trateaza_date_caracter) funcții sau

metode definite de programator

Page 17: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Aplicație

clientProcesor

SAX

Instanțiereahandler-elor

notificare

apariție evenimentînceput de tag

Procesare

trimiteevenimente

SAX

apelare handler

inițiere procesare: parse ( )

<projects><project class="S">…</project>

</projects>apariție eveniment

final de tag

apelare handler

etc.

Page 18: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Implementarea de referință (Java): org.xml.sax

detalii la www.saxproject.org/apidoc/org/xml/sax/package-summary.html

Page 19: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Interfețe ce pot fi implementate de aplicație:

ContentHandler

rezolvă notificări de evenimente vizând tipul de conținut: început de document, tag de început, date textuale,

tag de sfârșit, sfârșit de document etc.

Page 20: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Interfețe ce pot fi implementate de aplicație:

Attributes

definește lista atributelor specificate în cadrul unui tag de început

Page 21: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Interfețe ce pot fi implementate de aplicație:

XMLReader

specifică maniera de citire a datelor XML folosind metode de tratare a evenimentelor (callback-uri)

Page 22: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Interfețe ce pot fi implementate de aplicație:

ErrorHandler

specifică maniera de tratare a erorilor (fatale) și avertismentelor

pot fi emise excepții precumSAXException și SAXParseException

Page 23: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: procesare

Clasa SAX oferită:

InputSource

încapsulează informații despre o sursă de intrare de unde se preiau datele XML (e.g., flux de caractere)

Page 24: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

// prelucrare XML via evenimente (consultarea datelor)public interface XMLReader {

// furnizarea de informații despre documentpublic ContentHandler getContentHandler ();public DTDHandler getDTDHandler ();public EntityResolver getEntityResolver ();public ErrorHandler getErrorHandler ();// stabilirea diverselor funcționalitățipublic void setContentHandler (ContentHandler contentHandler);public void setDTDHandler (DTDHandler dtdHandler);public void setEntityResolver (EntityResolver resolver);public void setErrorHandler (ErrorHandler errHandler);// procesarea propriu-zisăpublic void parse (InputSource in)throws java.io.IOException, SAXException;public void parse (String uri)throws java.io.IOException, SAXException;

}

Exemplificare: interfața XMLReader (Apache Xerces)

Page 25: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

// utilizată pentru manipularea conținuturilor XMLpublic 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;// informații 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;}

Exemplificare: interfața ContentHandler (Apache Xerces)

Page 26: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

// specifică atributele asociate unui elementpublic interface Attributes {

public int getLength ();public String getType (int index);public String getValue (int index);// acces la informațiile privitoare la numele atributuluipublic String getQName (int index);public String getLocalName (int index);public String getURI (int index);// acces via spații 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);

}

Exemplificare: interfața Attributes (Apache Xerces)

Page 27: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: implementări

libxml – API open source: C, C++, Haskell, Scala,…

MSSAX – procesări SAX în C, C++, JavaScript;inclus în MSXML SDK (Software Development Kit)

NSXMLParser – implementare Objective-C (Apple)

org.xml.sax – API de referință pentru Java

REXML – procesor XML pentru Ruby

QSAX – parte a mediului de dezvoltare Qt (C++)

Page 28: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: implementări

sax-js – modul Node.js; altele la nodejsmodules.org/tags/sax

Xerces SAX API – platformă XML pentru C++ și Java: http://xml.apache.org/

erlsom, xmerl_eventp – module Erlang

xml – pachet Go: https://golang.org/pkg/encoding/xml/

XML::Parser – modul Perl bazat pe procesorul Expat

xml_*( ) – funcții PHP: php.net/manual/en/book.xml.php

xml.sax – module Python: wiki.python.org/moin/Sax

Page 29: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax: demo

Page 30: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

(în loc de) pauză

http://www.safelyendangered.com/comic/road-signs-for-idiots/

Page 31: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax vs. dom

Când trebuie folosit SAX?

procesarea unor documente de mari dimensiuni

necesitatea abandonării procesării(procesorul SAX poate fi oprit oricând)

extragerea unor informații de mici dimensiuni

Page 32: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax vs. dom

Când trebuie folosit SAX?

crearea unei structuri noi de document XML

utilizarea în contextul unor resurse de calcul reduse(memorie scăzută, lărgime de bandă îngustă,...)

exemplificare pentru Android:developer.android.com/reference/javax/xml/parsers/SAXParser.html

cod demonstrativ pentru iOS – SeismicXML:https://developer.apple.com/library/ios/samplecode/SeismicXML/

Page 33: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax vs. dom

Când trebuie utilizat DOM?

accesul direct la datele dintr-un document XML

procesări sofisticate

filtrarea complexă a datelor via XPath

efectuarea de transformări XSL

validarea datelor XML prin DTD, XML Schema etc.

Page 34: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax vs. dom

Când trebuie utilizat DOM?

necesitatea modificării și/sau salvării documentelor XML

în contextul procesării datelor XML/HTML directîn cadrul navigatorului Web, date obținute eventual

via transferuri asincrone prin AJAX

Page 35: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax vs. dom

DOM necesităîncărcarea completăa documentului XMLîn vederea procesării

ca arbore

HTMLHtmlElement

HTMLBodyElement

HTMLParagraphEle

ment

Text

HTMLDivElement

HTMLImageElement

Page 36: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax vs. dom

SAX preia fragmente reduse din document,efectuându-se o prelucrare liniară

(șir de evenimente)

start tag

start tag

characters

end tag

end tag

Page 37: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax vs. dom

SAX poate fi utilizatpentru generarea de arbori DOM

Invers, arborii DOM pot fi traversațipentru a se emite evenimente SAX

exemplificări: modulul dom-js (Node.js), biblioteca lxml (Python)

Page 38: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax vs. dom

În cazul unor structuri XML sofisticate,maniera de procesare SAX poate fi inadecvată

procesările SAX ignorăcontextul apariției unui anumit element

Page 39: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax vs. dom: exemplificare

Fie structura de document XML,specificată prin următorul DTD:

<!DOCTYPE catalog [

<!ELEMENT catalog (categ+)>

<!ELEMENT categ (#PCDATA | categ)*>

]>

Ce metodă de procesare s-ar preta, dacă numărul de elemente <categ> ar fi de ordinul milioanelor?

Page 40: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

sax vs. dom

Unele implementări SAX oferă suportpentru validări și transformări

uzual, se folosesc ambele abordări

Page 41: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Există și alte metode de procesare XML?

Page 42: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Procesarea documentelor XML

alternative:XPP – XML Pull Parsing„legarea” datelor XMLprocesare simplificată

Page 43: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative: xml pull parsing

Stiluri de procesări XML conduse de evenimente:

push versus pull

avansat

Page 44: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative: xml pull parsing

Stiluri de procesări XML conduse de evenimente:

push = procesorul XML citește date XML și notificăaplicația asupra evenimentelor survenite

(parsing events) – SAX

avansat

Page 45: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative: xml pull parsing

Stiluri de procesări XML conduse de evenimente:

push = procesorul XML citește date XML și notificăaplicația asupra evenimentelor survenite

(parsing events) – SAX

programul nu poate face cereri de evenimente

ele apar așa cum sunt trimise (push) de procesor

avansat

Page 46: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative: xml pull parsing

Stiluri de procesări XML conduse de evenimente:

pull = aplicația controlează maniera de procesare și poatesolicita (pull) procesorului următorul eveniment XML

XPP – XML Pull Parsing

www.xmlpull.org

avansat

Page 47: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative: xml pull parsing

Stiluri de procesări XML conduse de evenimente:

pull = aplicația controlează maniera de procesare și poatesolicita (pull) procesorului următorul eveniment XML

XPP – XML Pull Parsing

structura codului-sursă al programuluireflectă structura documentului XML prelucrat

avansat

Page 48: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative: xml pull parsing

Interfețele push Interfețele pull

Procesare read-onlyMoștenesc avantajele

interfețelor push

Prelucrare rapidă, via fluxuri de date (streams)

Evenimentele se consumăconform necesităților

Codul-sursă poate fi dificilde înțeles

Programele au o structurămai clară

avansat

Page 49: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

xml pull parsing – implementări

StAX – Streaming API for XML (Java) – JSR 173http://jcp.org/en/jsr/detail?id=173

exemple de implementări:Javolution – focalizat pe performanță: http://javolution.org/

Oracle StAX – inclus în XDK (XML Developer’s Kit)https://docs.oracle.com/javase/tutorial/jaxp/stax/

Woodstox – https://github.com/FasterXML/woodstox

avansat

Page 50: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

xml pull parsing – implementări

irrXML – inițial, parte din Irrlicht 3D Engine (C++)

pull – pachet Scala de procesare XPP

QXmlStreamReader, QXmlStreamWriter din mediul Qt (C++)

saxpath – modul Node.js permițând evaluarea de expresii XPath pentru un flux de evenimente SAX

xml.dom.pulldom – soluție Python

XmlPullParser – interfață Java pentru Android

avansat

Page 51: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

Clasificare a manierelor de procesare XML

mod de accesare: secvențial vs. direct (random)

controlul fluxului de evenimente: pull vs. push

managementul arborelui: ierarhic vs. imbricat

avansat

Page 52: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

DOMacces direct, în stilul pull

SAX acces secvențial, în stilul push

XPP și .NET XmlTextReaderacces secvențial, în stilul pull

avansat

Page 53: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

„Legarea” datelor XML de alte surse de date(XML binding)

baze de date: XML infoset dataset

avansat

<doc>

<xml />

<!-- … -->

</doc>

Id D P T

1 … … …

2 … … …

3 … … …

<doc>

<xml />

<!-- … -->

</doc>

data sets (tables)

arbore DOM(în memorie)

fișier XML

DBMS

Page 54: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

„Legarea” datelor XML de alte surse de date(XML binding)

baze de date: XML infoset dataset

specificația SQL/XML – vezi standardul SQL:2011-14

aspecte de interes:tipul XML pentru valori ale câmpurilor tabelelorrecurgerea la predicate + funcții specifice XML

avansat

Page 55: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/baze de date: XML infoset dataset

implementări concrete:Oracle XML DB

docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb01int.htm

pureXML (IBM DB2)www.ibm.com/developerworks/data/library/techarticle/dm-0603saracco2/

SQLXML (Microsoft SQL Server)msdn.microsoft.com/library/aa286527.aspx

XML Functions (PostgreSQL)www.postgresql.org/docs/current/static/functions-xml.html

avansat

Page 56: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

„Legarea” datelor XML de alte surse de date(XML binding)

abordare obiectuală: date XML clase create „din zbor”

(serialization, marshalling)

avansat

Page 57: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

abordare obiectuală: date XML clase create „din zbor”

exemple:C++ – cereal: http://uscilab.github.io/cereal/

C++, C#, Go, Java, Python – Protocol Buffersdevelopers.google.com/protocol-buffers/

Java – Digester: commons.apache.org/proper/commons-digester/

JS – node-xml2js: github.com/Leonidas-from-XIV/node-xml2js

.NET (C# et al.) – clasa XmlSerializerPHP – SimpleXML: php.net/manual/en/ref.simplexml.php

Python – Untangle: github.com/stchris/untangle

Scala – scalaxb: http://scalaxb.org/

avansat

Page 58: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

„Legarea” datelor XML de alte surse de date(XML binding)

interogări asupra datelor XMLdirect în limbajul de programare

LINQ (Language INtegrated Query) – .NET Framework

http://msdn.microsoft.com/en-us/library/vstudio/bb397926.aspx

avansat

Page 59: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

XDocument proiecte; // XDocument e o clasă .NET

proiecte = XDocument.Load ("projects.xml");

var proiecteS =// via o expresie LINQ, preluăm toate proiectelefrom p in proiecte.Descendants ("project")// din care le alegem pe cele de clasa 'S'where (String) p.Attribute ("class") == "S"// ordonate după numărul de studențiorderby (String) p.Element ("stud")// selectând doar titlul acestoraselect (String) p.Element ("title");

// afișăm titlul proiectelor de clasa 'S'foreach (var proiect in proiecteS) {

Console.WriteLine (proiect);}

// același rezultat, recurgând la XPathvar proiecteS2 = (IEnumerable)

proiecte.XPathEvaluate ("//project[@class='S']/title");

avansat

Page 60: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

„Legarea” datelor XML de alte surse de date(XML binding)

JAXB – Java Architecture for XML Binding (JSR-222)https://jcp.org/en/jsr/detail?id=222

implementarea de referință: https://jaxb.java.net/

de studiat și EclipseLink: www.eclipse.org/eclipselink/

avansat

Page 61: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

„Legarea” datelor XML de alte surse de date(XML binding)

interoperabilitate cu alte formate: XML JSON

nu există o metodă standardizată

exemplificări de instrumente și biblioteci:Apache Camel (Java), js2xmlparser (Node.js),

JSON-lib (Java), ruby-xml-to-json, x2js (JavaScript), xml2json (Node.js), xml-to-json (Haskell), xmlutils.py

avansat

Page 62: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

Procesarea XML simplificată

scop:procesarea unui document XML (de mici dimensiuni)

direct în memorie,în manieră obiectuală,

diferită de DOM

Page 63: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

Procesarea XML simplificată

uzual, adoptă maniera de prelucrare XPP (XML Pull Parsing)

Page 64: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

Procesarea XML simplificată

fiecărui element XML îi poate corespundeo proprietate a unui obiect

atributele asociate elementelor XML pot fi modelatevia o structură de date – e.g., tablou asociativ

Page 65: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

Procesarea XML simplificată

exemplificări diverse:libxml (C, C++ și alte limbaje)

SimpleXML (PHP) – php.net/manual/en/book.simplexml.php

XML::Simple + XML::Writer (Perl)XmlSimple (Ruby)

XmlTextReader + XmlTextWriter (.NET)

Page 66: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

Procesarea XML simplificatăpentru consultare, se poate folositun „cititor” (reader): XMLReader

exemple:modulul xmlreader pentru Node.js

xmlReader oferit de biblioteca libxml (implementare C)XMLReader (PHP) – php.net/manual/en/book.xmlreader.php

clasa XmlReader oferită de .NET (C# et al.)

Page 67: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

alternative

Procesarea XML simplificatăpentru generare, se poate utilizaun „scriitor” (writer): XMLWriter

exemplificări:clasa XmlWriter pentru .NET

xmlWriter din cadrul bibliotecii libxml (C et al.)XMLWriter (PHP) – php.net/manual/en/book.xmlwriter.php

modulul xml-writer oferit pentru Node.js

Page 68: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

Cum pot fi procesate documentele HTML?

Page 69: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

procesare html

Aspect de interes:ignorarea erorilor de sintaxă

documente bine formatate (well formed) versus

documente valide

Page 70: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

procesare html

Aspect de interes:ignorarea erorilor de sintaxă

malformed markup

sunt relativ rare cazurile în care documentele HTML sunt scrise/generate corect

Page 71: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

procesare html

Tehnica folosită uzual – nerecomandată

Web scrapping

extragerea datelor de interes prin prelucrarea – de obicei, empirică –

a marcajelor HTML

Page 72: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

procesare html

Recurgerea la un procesor HTML/XML specific

scopuri importante:traversarea (procesarea) unei pagini Web – e.g., via DOM

+detectarea & repararea erorilor sintactice (HTML clean)

vezi și cursurile anterioare

Page 73: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

procesare html: instrumente

Beautiful Soup – bibliotecă Pythonhttp://www.crummy.com/software/BeautifulSoup/

Gumbo – procesor HTML5 implementat în C (Google)https://github.com/google/gumbo-parser

html5lib – procesare + serializare HTML pentru Pythonhttps://github.com/html5lib

HTML::Gumbo, HTML::Parser – module Perlhttp://search.cpan.org/dist/HTML-Parser/

Page 74: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

procesare html: instrumente

Html Agility Pack – bibliotecă .NEThttp://htmlagilitypack.codeplex.com/

Hubbub – prelucrare de marcaje HTML5 în limbajul Chttp://www.netsurf-browser.org/projects/hubbub/

Jericho HTML Parser – bibliotecă Java de procesare HTMLhttp://jericho.htmlparser.net/

jsoup – bibliotecă Java pentru HTML5http://jsoup.org/

Page 75: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

procesare html: instrumente

Masterminds HTML5-PHP – procesor HTML5 în PHPhttp://masterminds.github.io/html5-php/

Nokogiri – pachet Rubyhttp://www.nokogiri.org/

Parse5 – modul Node.jshttps://github.com/inikulin/parse5

Pure JavaScript HTML5 Parser – bibliotecă JShttps://github.com/blowsie/Pure-JavaScript-HTML5-Parser

Page 76: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

procesare html: instrumente

HtmlCleaner – instrument implementat în Java pentrucorectarea marcajelor HTML eronate

HTML Purifier – verificare & filtrare a marcajelor HTML(inclusiv vizând atacuri de tip XSS – Cross Site Scripting)

cu implementări în PHP și Objective-C

NekoHTML – procesor Java pentru HTML bazat pe Xercescu suport pentru rezolvarea erorilor sintactice

Validator.nu – procesor Java folosind DOM ori SAXcu semnalarea erorilor de sintaxă HTML5

Page 77: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/rezumat

⦑ ⦒procesări XML: de la SAX la XPP și Simple XML

instrumente de prelucrare a documentelor HTML

Page 78: Web09ProcesariXML SAX SimpleXML

Dr.

Sab

in B

ura

ga

profs.in

fo.uaic.ro/~busa

co/

episodul viitor: servicii Web prin SOAP