Sunteți pe pagina 1din 105

procesarea datelor XML (I)

DOM (Document Object Model)

Dr. Sabin Buragawww.purl.org/net/busaco

Tehnologii Web

George Bernard Show

Dr. Sabin Buragawww.purl.org/net/busaco

Regula de aur este c nu exist reguli de aur.

Dr. Sabin Buragawww.purl.org/net/busaco

Cum putem prelucra documentele XML?

procesare manual
e.g., expresii regulate

Dr. Sabin Buragawww.purl.org/net/busaco

Tipuri de procesri XML

procesare obiectual
DOM (Document Object Model)
non-DOM

Dr. Sabin Buragawww.purl.org/net/busaco

Tipuri de procesri XML

procesare condus de evenimente


SAX (Simple API for XML)
XPP (XML Pull Parsing)

vezi cursul viitor

Dr. Sabin Buragawww.purl.org/net/busaco

Tipuri de procesri XML

procesare simplificat
Simple XML

vezi cursul viitor

Dr. Sabin Buragawww.purl.org/net/busaco

Tipuri de procesri XML

procesare particular
via API-uri specializate pentru a prelucra
tipuri de documente specifice e.g., RSS, SOAP, SVG,

Dr. Sabin Buragawww.purl.org/net/busaco

Tipuri de procesri XML

fr validare
verific doar dac documentul
este bine-formatat (well formed)
Expat, libxml, MSXML,...

Dr. Sabin Buragawww.purl.org/net/busaco

Procesoare (analizoare) XML

cu validare
verific dac documentul este valid,
conform unei metode de validare e.g., DTD
Apache Xerces, JAXP, libxml, MSXML,...

Dr. Sabin Buragawww.purl.org/net/busaco

Procesoare (analizoare) XML

introducere
interfee DOM
DOM Core
DOM nivelul 2
DOM nivelul 3
DOM nivelul 4
implementri
DOM direct n navigator

Dr. Sabin Buragawww.purl.org/net/busaco

Modelul DOM

Scop:
procesarea obiectual standardizat
a documentelor XML i/sau HTML

Dr. Sabin Buragawww.purl.org/net/busaco

dom: intro

Interfa de programare a aplicaiilor (API)


abstract pentru XML/HTML

Dr. Sabin Buragawww.purl.org/net/busaco

dom: caracterizare

Interfa de programare a aplicaiilor (API)


abstract pentru XML/HTML
independent de platform i limbaj
standardizat de Consoriul Web

Dr. Sabin Buragawww.purl.org/net/busaco

dom: caracterizare

Definete o structur logic arborescent


a documentelor XML

document = ierarhie a unui set de obiecte

Dr. Sabin Buragawww.purl.org/net/busaco

dom: caracterizare

DOM 1 (1998)
http://www.w3.org/TR/REC-DOM-Level-1/
DOM Core pentru XML
DOM HTML pentru procesarea standardizat
a paginilor Web uzual, la nivel de client (browser)

Dr. Sabin Buragawww.purl.org/net/busaco

dom: niveluri de specificare

DOM 2 (2001)
http://www.w3.org/TR/REC-DOM-Level-2/
recomandri multiple privind diverse funcionaliti:
spaii de nume, aplicare de stiluri,
rspuns la evenimente etc.

Dr. Sabin Buragawww.purl.org/net/busaco

dom: niveluri de specificare

DOM 3 (2004)
http://www.w3.org/TR/DOM-Level-3-Core/
funcionaliti specifice oferite de module
(unele deja standardizate)
XPath, traversare, validare,
ncrcare i salvare (asincrone),

Dr. Sabin Buragawww.purl.org/net/busaco

dom: niveluri de specificare

DOM 4 (2015)
http://www.w3.org/TR/dom/
restructurarea unor interfee + noi funcionaliti

Dr. Sabin Buragawww.purl.org/net/busaco

dom: niveluri de specificare

DOM Living Standard


http://dom.spec.whatwg.org/
specific HTML5
n continu dezvoltare
(cea mai recent actualizare: aprilie 2016)

Dr. Sabin Buragawww.purl.org/net/busaco

dom: niveluri de specificare

Modalitate abstract de accesare i de modificare


a reprezentrii interne a unui document XML

Dr. Sabin Buragawww.purl.org/net/busaco

dom: interfee

Modalitate abstract de accesare i de modificare


a reprezentrii interne a unui document XML

datele sunt ncapsulate n obiecte, ascunse i/sau


protejate de prelucrarea extern direct

Dr. Sabin Buragawww.purl.org/net/busaco

dom: interfee

Nu implic o implementare concreta, particular:


DOM ofer interfee
independente de implementare pentru
accesarea/procesarea datelor

Dr. Sabin Buragawww.purl.org/net/busaco

dom: interfee

Interfeele sunt specificate cu


IDL (Interface Description Language)
introdus n premier de CORBA
(Common Object Request Broker Architecture)

Dr. Sabin Buragawww.purl.org/net/busaco

dom: interfee

Definete tipurile de obiecte


prin specificarea interfeelor acestora
(date membre + metode publice)
pur declarativ

Dr. Sabin Buragawww.purl.org/net/busaco

dom: interfee IDL

Ofer suport pentru motenire multipl


prin intermediul interfeelor
specific module, interfee, metode, tipuri,
atribute, excepii, constante
www.w3.org/TR/WebIDL/ (2012)
http://heycam.github.io/webidl/ (2016)

Dr. Sabin Buragawww.purl.org/net/busaco

dom: interfee IDL

Short
UShort
Long
ULong

valori de
baz

Float
reale
Double
Boolean

tipuri de date
IDL

Char
altele
String
Struct
valori
construite

Enum
Sequence
Union

referin
Any

Dr. Sabin Buragawww.purl.org/net/busaco

ntregi

Specificarea interfeei NodeList


interface NodeList {
Node item (in unsigned long index);
readonly attribute unsigned long length;
};

Dr. Sabin Buragawww.purl.org/net/busaco

dom: interfee exemplu

Specificarea interfeei NodeList

metod cu un parametru;
rezultat: o valoare de tip Node

interface NodeList {
Node item (in unsigned long index);
readonly attribute unsigned long length;
};

proprietate read-only
de tip ntreg lung fr semn

Dr. Sabin Buragawww.purl.org/net/busaco

dom: interfee exemplu

Specificarea interfeei Attr


interface Attr : Node {
readonly attribute DOMString name;
readonly attribute boolean specified;
attribute DOMString value;
};

Dr. Sabin Buragawww.purl.org/net/busaco

dom: interfee exemplu

Specificarea interfeei Attr


Attr provine din Node

interface Attr : Node {


readonly attribute DOMString name;
readonly attribute boolean specified;
attribute DOMString value;
};
3 proprieti

Dr. Sabin Buragawww.purl.org/net/busaco

dom: interfee exemplu

Un document ierarhie de obiecte-nod


care pot implementa interfee (specializate)
nodurile posed descendeni ori sunt noduri frunz
parcurgerea arborelui se realizeaz
n preordine, n adncime (depth-first)
a se (re)vedea
XML Infoset

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

un document HTML i arborele DOM corespunztor


reprezentat via Live DOM Viewer
http://software.hixie.ch/utilities/js/live-dom-viewer/

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Accesul la date
liste de noduri, atribute, valori,
se realizeaz recurgndu-se la metodele specifice
fiecrui tip de noduri ale arborelui

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Document

Element, ProcessingInstruction,
Comment, DocumentType

Document
Fragment

Element, ProcessingInstruction,
Comment, Text, CDATASection,

Element

Element, Text, Comment,


CDATASection, EntityReference,

Attr

Text, EntityReference

Text

(nod frunz al arborelui DOM)

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core tipuri de noduri

Interfee fundamentale:
DOMException

gestioneaz setul de excepii de procesare

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
DOMImplementation

furnizeaz detalii despre implementarea curent

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
DocumentFragment : Node
acces la fragmente de arbore

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Document
ofer acces la document
pentru consultare i/sau modificare

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Document
proprieti
doctype, implementation, documentElement

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Document
proprieti
doctype, implementation, documentElement
acces la
elementul-rdcin

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Document
metode createElement(), createTextNode(),
createAttribute(), getElementsByTagName(),
getElementById(),
createElementNS(), importNode(),
getElementsByTagNameNS(), renameNode() etc.
DOM 2

DOM 3

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Node
acces la nodurile arborelui

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Node
proprieti nodeName, nodeValue

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Node
metode getNodeType(), insertBefore(),
appendChild(), replaceChild(), removeChild(),
cloneChild(), hasChildNodes(),
hasAttributes(), isSameNode()
DOM 2

DOM 3

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Element
ofer acces la elementele XML

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Element
proprietatea tagName

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Element
metode getAttribute(), getAttributeNode(),
setAttributeNode(), removeAttributeNode(),
hasAttribute(), hasAttributeNS(),
DOM 2

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
Attr : Node
acces la atributele unui element

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

Interfee fundamentale:
NodeList
NamedNodeMap
permit accesul la colecii de noduri
via indeci ori chei

Dr. Sabin Buragawww.purl.org/net/busaco

dom: core

DOM HTML extinde DOM Core


specializarea interfeelor i oferirea de suport obiectual
pentru prelucrarea documentelor HTML

standardizeaz procesarea paginilor Web


(e.g., n cadrul navigatorului)

Dr. Sabin Buragawww.purl.org/net/busaco

dom: html

attribute DOMString cookie;


// acces la cookie-uri
// emite o excepie dac e asignat o valoare

};

Dr. Sabin Buragawww.purl.org/net/busaco

interface HTMLDocument : Document {


attribute DOMString title;
// titlul documentului
readonly attribute DOMString referrer; // adresa resursei ce refer pagina
readonly attribute DOMString domain; // domeniul de care aparine
readonly attribute DOMString URL; // URL-ul absolut al documentului
attribute HTMLElement body;
// acces la elementul <body>
readonly attribute HTMLCollection images; // lista tuturor imaginilor
readonly attribute HTMLCollection links; // lista tuturor legturilor
readonly attribute HTMLCollection forms; // lista tuturor formularelor

void open (); // deschide un flux de scriere (altereaz DOM-ul curent)


void close (); // nchide fluxul de scriere i foreaz redarea coninutului
void write (in DOMString text); // scrie un ir de caract. (e.g., cod HTML)
void writeln (in DOMString text); // idem, dar insereaz i new line
NodeList getElementsByName (in DOMString numeElement);
// furnizeaz o list de elemente conform unui nume de tag

Interfaa HTMLCollection modeleaz o list de noduri

Dr. Sabin Buragawww.purl.org/net/busaco

dom: html

un nod poate fi accesat folosind un index numeric


sau pe baza unui identificator (e.g., stabilit via atributul id)
interface HTMLCollection {
readonly attribute unsigned long length; // ofer lungimea listei
Node
item (in unsigned long index);
// ofer un nod via un index numeric
Node
namedItem (in DOMString name); // furnizeaz un nod pe baza numelui
};

Interfaa HTMLCollection modeleaz o list de noduri

Dr. Sabin Buragawww.purl.org/net/busaco

dom: html

fiecrui element HTML i corespunde o interfa specific


HTMLDocument
HTMLDivElement
HTMLImageElement

HTML
HtmlElement

HTML
BodyElement

HTML
ParagraphElement

Text

HTML
DivElement

HTML
ImageElement

Dr. Sabin Buragawww.purl.org/net/busaco

<!DOCTYPE html>
<html>
<body>
<p>Tehnologii Web</p>
<div>
<img src="web.png"/>
</div>
</body>
</html>

HTML
HtmlElement

HTML
BodyElement

HTML
ParagraphElement

Text

HTML
DivElement

HTML
ImageElement

Dr. Sabin Buragawww.purl.org/net/busaco

<!DOCTYPE html>
<html>
<body>
<p>Tehnologii Web</p>
<div>
<img src="web.png"/>
</div>
</body>
</html>

Dr. Sabin Buragawww.purl.org/net/busaco

// un element HTML generic


interface HTMLElement : Element {
attribute DOMString
id;
// identificator asociat elementului
attribute DOMString
title;
// titlu explicativ
attribute DOMString
lang;
// limba n care e redactat coninutul
attribute DOMString
className;
// numele clasei CSS folosite pentru redare
};
// specific un formular Web
interface HTMLFormElement : HTMLElement {
readonly attribute HTMLCollection elements; // elementele HTML incluse n formular
readonly attribute long
length; // numrul cmpurilor formularului
attribute DOMString
action; // URI-ul resursei ce proceseaz datele
attribute DOMString
enctype; // tipul MIME de codificare a datelor
// (application/x-www-form-urlencoded)
attribute DOMString
method; // metoda HTTP folosit (GET sau POST)
void
submit(); // trimite date URI-ului definit de action
};
// interfaa DOM pentru elementul <img/> (e.g., coninut grafic raster: GIF, JPEG, PNG)
interface HTMLImageElement : HTMLElement {
attribute DOMString
alt;
// text alternativ descriind coninutul grafic
attribute DOMString
src;
// URL-ul resursei reprezentnd imaginea
};

Aspecte specifice:
innerHTML
proprietate mutabil ce furnizeaz codul (X)HTML
din cadrul unui nod de tip Element
utilizare
nerecomandabil

Dr. Sabin Buragawww.purl.org/net/busaco

dom: html

Aspecte specifice:
textContent
proprietate ce furnizeaz/stabilete coninutul textual
al nodului i posibililor descendeni

Dr. Sabin Buragawww.purl.org/net/busaco

dom: html

Extinde funcionalitile DOM1


crearea unui obiect Document
copierea unui nod dintr-un document n altul
i multe altele
specificaia
DOM 2 Core

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

Extinde funcionalitile DOM1


alte faciliti:
controlul aplicrii foilor de stiluri CSS
tratarea evenimentelor
specificarea filtrelor i iteratorilor
(parcurgeri sofisticate de arbori DOM)

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

avansat

Suport pentru procesarea foilor de stiluri


StyleSheet
StyleSheetList
MediaList
DocumentStyle
detalii la http://www.w3.org/TR/DOM-Level-2-Style

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

Tratarea evenimentelor
definirea de activiti (callback-uri) executate
la apariia unui eveniment

eveniment = aciune produs n cadrul mediului de


execuie n urma creia programul va putea reaciona

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

Tratarea evenimentelor
descrierea arborescent a fluxului de evenimente
capture versus bubble

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

Tratarea evenimentelor
descrierea arborescent a fluxului de evenimente
tratarea evenimentului se poate face pornind
de la rdcin pn la obiectul-int capture phase

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

Tratarea evenimentelor
descrierea arborescent a fluxului de evenimente
tratarea evenimentului poate avea loc atunci cnd
evenimentul e propagat de la obiectul unde a survenit
pn la entitile superioare lui bubbling phase

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

Dr. Sabin Buragawww.purl.org/net/busaco

fluxul de evenimente (T. Leithead et al., 2012)


a se studia i W. Page, An Introduction to DOM Events (2013)

http://coding.smashingmagazine.com/2013/11/12/an-introduction-to-dom-events/

Tratarea evenimentelor
se va utiliza un set standard de evenimente

detalii la http://www.w3.org/TR/DOM-Level-2-Events

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

Tratarea evenimentelor
de interfa e.g., interaciunea cu utilizatorul

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

mouse: click, mousedown, mouseup, mouseover, mousemove


tastatur: keypress, keydown, keyup
uzual, folosite n
contextul HTML

Tratarea evenimentelor

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

referitoare la interaciunea cu browser-ul, specifice HTML


(la nivel de document Web ori de formular)

load, unload, abort, error,


select, submit, focus, blur, resize, scroll

avansat

Tratarea evenimentelor

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

de modificare a structurii documentului (mutation events)


subtreeModified, nodeInserted, nodeRemoved, attrModified,

avansat

Tratarea evenimentelor

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

de modificare a structurii documentului (mutation events)


subtreeModified, nodeInserted, nodeRemoved, attrModified,
n prezent, acestea sunt considerate nvechite
alternativ: recurgerea la MutationObserver (DOM 4)
http://www.w3.org/TR/dom/#mutation-observers

Tratarea evenimentelor
sunt puse la dispoziie interfeele:
EventTarget
EventListener
Event UIEvent, MouseEvent, TouchEvent

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

Dr. Sabin Buragawww.purl.org/net/busaco

(n loc de) pauz

http://abstrusegoose.com/432

avansat

Traversarea arborilor DOM


se specific interfeele opionale
TreeWalker
NodeIterator
Filter
http://www.w3.org/TR/DOM-Level-2-Traversal-Range

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 2

Extinde DOM 2, oferindu-se interfee


pentru manipularea XML via module DOM
un modul pune la dispoziie o facilitate particular

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 3

Modulul Core include interfeele fundamentale


ce trebuie implementate de toate implementrile
DOM conformndu-se standardului

http://www.w3.org/TR/DOM-Level-3-Core

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 3

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 3

module disponibile: XML, HTML, XPath, Traversal, Range,


Validation, Events, Views, Load & Save, Stylesheet,

avansat

Interfee noi importante:

DOMStringList, NameList, TypeInfo, UserDataInfo,


DOMImplementationList, DOMImplementationSource,
DOMLocator, DOMConfiguration

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 3

avansat

Interfee modificate (extinse):

Document, Node, Attr, Element, Text, Entity

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 3

avansat

Module DOM 3 standardizate


DOM Load & Save
interfee puse la dispoziie:
LSParser, LSInput, LSSerializer, LSOutput
http://www.w3.org/TR/DOM-Level-3-LS

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 3

avansat

Module DOM 3 standardizate


DOM Validation

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 3

ofer funcionaliti de creare/editare (automat)


de documente conformndu-se
unor scheme de validare
http://www.w3.org/TR/DOM-Level-3-Val

avansat

Unific DOM3 Core, Element Traversal,


Selectors API level 2, DOM3 Events
apar interfeele ParentNode, ChildNode, Elements,
suport i pentru specificarea de evenimente proprii
via interfaa CustomEvent

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 4

avansat

Interfaa Node este extins cu


proprietile firstChild, lastChild, previousSibling, nextSibling
i metoda adoptNode ()

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 4

avansat

Interfaa Element include metodele


getElementsByClassName () i matches ()

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 4

avansat

Noi evenimente HTML5 ce pot fi tratate

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 4

interaciune tactil (din 2013): www.w3.org/TR/touch-events/


touchstart, touchend, touchmove, touchcancel
+
conectivitatea la reea: online, offline
diverse operaiuni: redo, undo, drag, drop,
starea dispozitivului deviceorientation, devicemotion
i altele

avansat

Selectors API

acces la diverse date via selectorii CSS cu metodele


query() queryAll() querySelector() querySelectorAll()
// toate elementele <li> selectate via CSS (date de tip NodeList)
var elemente = document.querySelectorAll ("ul.resurse>li");
for (var i = 0; i < elemente.length; i++) {
prelucreaza (elemente.item (i));
// procesm fiecare nod
}

Dr. Sabin Buragawww.purl.org/net/busaco

dom: nivelul 4

selectori
CSS3

Dr. Sabin Buragawww.purl.org/net/busaco

avansat

exemplificare folosim consola oferit de browser:


document.querySelectorAll ("section[id^=\"week\"]:nth-child(even) > h2");

Dr. Sabin Buragawww.purl.org/net/busaco

dom: implementri
Expat procesor XML cu suport pentru diverse metode de
prelucrare (DOM, SAX etc.): http://expat.sourceforge.net/
(C, C++, Lua, .NET, Objective-C, Perl, Python, Ruby, Tcl)
HXT (Haskell XML Toolbox): procesri DOM n Haskell
www.haskell.org/haskellwiki/HXT
JAXP parte integrant din J2SE (javax.xml.*)
https://docs.oracle.com/javase/tutorial/jaxp/

JDOM API special pentru Java: http://www.jdom.org/

JSXML bibliotec JavaScript: http://jsxml.net/


QDOM la Qt (C++): doc.qt.io/qt-5/qdomdocument.html

Dr. Sabin Buragawww.purl.org/net/busaco

dom: implementri

libxml API oferit iniial de GNOME: http://xmlsoft.org/


baza unor biblioteci pentru C++, Perl, PHP, Python, Ruby,
folosit i de libxslt
MSDOM procesri XML pe client/server n C++
sau JScript (IE, IIS+ASP,); parte din MSXML SDK
Xerces DOM API platform XML (C++/Java):
http://xml.apache.org/

XmlDocument clas .NET Framework (C# et al.)

Dr. Sabin Buragawww.purl.org/net/busaco

dom: implementri

jsdom modul Node.js: https://nodejsmodules.org/tags/dom

XML::DOM modul Perl: search.cpan.org/perldoc?XML::DOM


bazat pe Expat (XML::Parser)
xml.dom modul din Python, parte a PyXML
https://docs.python.org/2/library/xml.dom.html

avansat

BBC API acces la programele transmise


(disponibile n formatele XML, JSON, RDF, iCal):
http://www.bbc.co.uk/programmes/developers
Google APIs suit de API-uri (Java, JS, PHP, Python,
Objective-C, .NET) privind serviciile Google publice:
https://developers.google.com/apis-explorer/

Dr. Sabin Buragawww.purl.org/net/busaco

dom: api-uri particulare (exemple)

node-xmpp biblioteca Node.js (JavaScript) pentru XMPP


https://npmjs.org/package/node-xmpp

avansat
Dr. Sabin Buragawww.purl.org/net/busaco

dom: api-uri particulare (exemple)


Open Data Protocol iniiativ Microsoft (implementri
n Java, JS, PHP, Ruby, .NET): http://www.odata.org/

SVG DOM API procesarea documentelor SVG n Java


(Apache Batik): http://xmlgraphics.apache.org/batik/
TwiMLT (Twilio Markup Language) API acces la
serviciile de telefonie Twilio via biblioteci C++, Erlang,
Perl, PHP, Python, Ruby, Scala: www.twilio.com/api

Procesarea documentelor XML/HTML

docum.
XML
HTML

Dr. Sabin Buragawww.purl.org/net/busaco

dom: implementri

Dr. Sabin Buragawww.purl.org/net/busaco

try {
$doc = new DomDocument; // instaniem un obiect DOM
$doc->load ("projects.xml"); // ncrcm documentul XML
// afim informaii privitoare la proiecte: titlul & clasa (dac exist)
$projs = $doc->getElementsByTagName("project");
foreach ($projs as $proj) { // prelum nodurile-element <title>
$titles = $proj->getElementsByTagName("title");
foreach ($titles as $title) {
echo "Proiect: " . $title->nodeValue;
}
// verificm dac exist specificat clasa proiectului
if ($proj->hasAttribute("class")) {
echo " de clasa " . $proj->getAttribute("class");
}
}
} catch (Exception $e) {
procesri DOM
die ("Din pcate, a survenit o excepie.");
}
n limbajul PHP

procesri DOM n limbajul Python

Dr. Sabin Buragawww.purl.org/net/busaco

try:
doc = urllib.urlopen('projects.xml') # ncrcm documentul
dom = parse(doc)
# l procesm
# parcurgem elementele <project> i oferim informaii despre fiecare
for proiect in dom.getElementsByTagName('project'):
print 'Proiectul ' + proiect.childNodes[1].firstChild.nodeValue + \
' este de clas: ' + proiect.getAttribute('class')
except Exception:
print 'Din pcate, a survenit o excepie.'

procesri DOM
# instaniem procesorul XML
n limbajul Perl
$parser = new XML::DOM::Parser;
# procesm documentul
$doc = $parser->parsefile ('projects.xml');
$proiecte = $doc->getElementsByTagName ('project');
$nr_proiecte = $proiecte->getLength;
$proiecte_clasaS = 0;
# iniial, 0 proiecte de clas 'S'
for (my $i = 0; $i < $nr_proiecte; $i++) { # baleim toate proiectele
$proiect = $proiecte->item ($i);
# prelum clasa proiectului
$clasa = $proiect->getAttributeNode ('class')->getValue;
if ($clasa eq 'S') {
$proiecte_clasaS++;
}
}
print "\nSunt $proiecte_clasaS proiecte de clas S.\n";
$doc->dispose ();
# eliberm memoria

Dr. Sabin Buragawww.purl.org/net/busaco

# program Perl care contorizeaz proiectele de clas 'S'

n C# (.NET)

Dr. Sabin Buragawww.purl.org/net/busaco

try {
doc = new XmlDocument(); // instaniem un document XML
doc.Load("projects.xml"); // pentru a fi ncrcat
// afim informaii privitoare la proiecte: titlu i clas
XmlNodeList projs = doc.GetElementsByTagName("project");
foreach (XmlElement proj in projs) {
// selectm nodurile <title> via o expresie XPath
XmlNodeList titles = proj.SelectNodes("./title");
foreach (XmlElement title in titles) {
Console.Write("Proiect: {0} ", title.InnerXml);
}
if (proj.HasAttribute("class") == true) { // exist clasa specificat?
Console.WriteLine("de clasa '{0}'.", proj.GetAttribute("class"));
}
} catch ( Exception e ) {
// din pcate, a survenit o excepie
procesri DOM
}

Prelucrarea documentelor XML n browser

a se studia i prezentrile disponibile la URL-ul


http://profs.info.uaic.ro/~busaco/teach/courses/cliw/web-film.html

Dr. Sabin Buragawww.purl.org/net/busaco

dom: browser

inspectarea arborelui DOM


asociat unui document HTML
via extensia Firebug: getfirebug.com

Dr. Sabin Buragawww.purl.org/net/busaco

dom: browser

Vizualizarea/procesarea documentelor HTML i XML


fr validare se realizeaz via DOM n JavaScript
(ECMAScript) interpretat de navigatorul Web

Dr. Sabin Buragawww.purl.org/net/busaco

dom: browser

recurgerea la
createElement()
appendChild()
getElementById()

Dr. Sabin Buragawww.purl.org/net/busaco

avansat

generare dinamic via JavaScript


a unui formular Web
http://jsfiddle.net/busaco/0wvn3fha/

Se ofer suport i pentru transfer asincron de date


ntre client (browser) i server Web
AJAX Asynchronous JavaScript And XML
via obiectul XMLHttpRequest

vezi cursurile
viitoare

Dr. Sabin Buragawww.purl.org/net/busaco

dom: browser

Dr. Sabin Buragawww.purl.org/net/busaco

rezumat

modelul DOM:
caracterizare, niveluri de specificare, exemple

Instanierea
handler-elor

Procesor
SAX

notificare

iniiere procesare: parse ( )

apariie eveniment
nceput de tag

apelare handler
apariie eveniment
final de tag

apelare handler

etc.

Procesare
trimite
evenimente
SAX

<projects>
<project class="S">

</project>
</projects>

Dr. Sabin Buragawww.purl.org/net/busaco

Aplicaie
client

episodul viitor:
procesri XML via SAX + prelucrri simplificate

S-ar putea să vă placă și