web08procesarixml dom

Upload: alexspiridon

Post on 07-Jul-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 Web08ProcesariXML DOM

    1/105

    D r . S a

    b i n

    B u r a g a

    w w w . p u r l

    . o r g / n e t / b u s a

    c o

    Tehnologii Web

    procesarea datelor XML (I)

    ⵄDOM (Document Object Model )

  • 8/18/2019 Web08ProcesariXML DOM

    2/105

    D r . S a

    b i n

    B u r a g a

    w w w . p u r l

    . o r g / n e t / b u s a

    c o

    „Regula de aur este c ă nu exist ă reguli de aur. ”

    George Bernard Show

  • 8/18/2019 Web08ProcesariXML DOM

    3/105

  • 8/18/2019 Web08ProcesariXML DOM

    4/105

    D r . S a

    b i n

    B u r a g a

    w w w . p u r l

    . o r g / n e t / b u s a c o

    Tipuri de proces ări XML

    procesare manual ă

    e.g., expresii regulate

  • 8/18/2019 Web08ProcesariXML DOM

    5/105

    D r . S a

    b i n

    B u r a g a

    w w w . p u r l

    . o r g / n e t / b u s a c o

    Tipuri de proces ări XML

    procesare obiectual ă

    DOM (Document Object Model )

    non-DOM

  • 8/18/2019 Web08ProcesariXML DOM

    6/105

    D r . S a

    b i n

    B u r a g a

    w w w . p u r l

    . o r g / n e t / b u s a c o

    Tipuri de proces ări XML

    procesare condus ă de evenimente

    SAX (Simple API for XML )

    XPP ( XML Pull Parsing )

    vezi cursul viitor

  • 8/18/2019 Web08ProcesariXML DOM

    7/105

    D r . S a

    b i n

    B u r a g a

    w w w . p u r l

    . o r g / n e t / b u s a c o

    Tipuri de proces ări XML

    procesare simplificat ă

    Simple XML

    vezi cursul viitor

  • 8/18/2019 Web08ProcesariXML DOM

    8/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    Tipuri de proces ări XML

    procesare particular ă

    via API-uri specializate pentru a prelucra

    tipuri de documente specifice – e.g., RSS, SOAP, SVG,…

  • 8/18/2019 Web08ProcesariXML DOM

    9/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    Procesoare (analizoare) XMLf ă r ă validare

    verific ă doar dac ă documentuleste bine-formatat ( well formed )

    Expat , libxml , MSXML,...

  • 8/18/2019 Web08ProcesariXML DOM

    10/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    Procesoare (analizoare) XMLcu validare

    verific ă dac ă documentul este valid,conform unei metode de validare – e.g., DTD

    Apache Xerces , JAXP, libxml , MSXML,...

  • 8/18/2019 Web08ProcesariXML DOM

    11/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    Modelul DOM

    introducereinterfe ț e DOM

    DOM CoreDOM – nivelul 2

    DOM – nivelul 3DOM – nivelul 4implement ări

    DOM direct în navigator

  • 8/18/2019 Web08ProcesariXML DOM

    12/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : intro

    Scop:procesarea obiectual ă – standardizat ă –

    a documentelor XML și/sau HTML

  • 8/18/2019 Web08ProcesariXML DOM

    13/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : caracterizare

    Interfa ță de programare a aplica ț iilor (API)abstract ă pentru XML/HTML

  • 8/18/2019 Web08ProcesariXML DOM

    14/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : caracterizare

    Interfa ță de programare a aplica ț iilor (API)abstract ă pentru XML/HTML

    independent ă de platform ă ș i limbaj

    standardizat ă de Consor ț iul Web

  • 8/18/2019 Web08ProcesariXML DOM

    15/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : caracterizare

    Define ște o structur ă logic ă arborescent ăa documentelor XML

    document = ierarhie a unui set de obiecte

  • 8/18/2019 Web08ProcesariXML DOM

    16/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : niveluri de specificare

    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 )

  • 8/18/2019 Web08ProcesariXML DOM

    17/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : niveluri de specificare

    DOM 2 (2001)

    http://www.w3.org/TR/REC-DOM-Level-2/

    recomand ări multiple privind diverse func ț ionalit ăț i:

    spații de nume, aplicare de stiluri,răspuns la evenimente etc.

  • 8/18/2019 Web08ProcesariXML DOM

    18/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : niveluri de specificare

    DOM 3 (2004)

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

    func ț ionalit ăț i specifice oferite de module

    (unele deja standardizate)

    XPath, traversare, validare, încărcare și salvare (asincrone ),…

  • 8/18/2019 Web08ProcesariXML DOM

    19/105

    D r . S a

    b i n

    B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : niveluri de specificare

    DOM 4 (2015)

    http://www.w3.org/TR/dom/

    restructurarea unor interfețe + noi funcționalități

  • 8/18/2019 Web08ProcesariXML DOM

    20/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : niveluri de specificare

    DOM Living Standard

    http://dom.spec.whatwg.org/

    specific HTML5

    în continuă dezvoltare(cea mai recentă actualizare: aprilie 2016)

  • 8/18/2019 Web08ProcesariXML DOM

    21/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : interfe țe

    Modalitate abstract ă de accesare și de modificarea reprezent ării interne a unui document XML

  • 8/18/2019 Web08ProcesariXML DOM

    22/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : interfe țe

    Modalitate abstract ă de accesare și de modificarea reprezent ării interne a unui document XML

    datele sunt încapsulate în obiecte, ascunse și/sauprotejate de prelucrarea externă directă

  • 8/18/2019 Web08ProcesariXML DOM

    23/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : interfe țe

    Nu implic ă o implementare concreta, particular ă:

    DOM oferă interfe ț eindependente de implementare pentru

    accesarea/procesarea datelor

  • 8/18/2019 Web08ProcesariXML DOM

    24/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : interfe țe

    Interfe ț ele sunt specificate cuIDL (Interface Description Language )

    introdus în premier ă de CORBA

    (Common Object Request Broker Architecture )

  • 8/18/2019 Web08ProcesariXML DOM

    25/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : interfe țe – IDL

    Define ște tipurile de obiecteprin specificarea interfe ț elor acestora

    (date membre + metode publice)

    pur declarativ

  • 8/18/2019 Web08ProcesariXML DOM

    26/105

    Sh t

  • 8/18/2019 Web08ProcesariXML DOM

    27/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    tipuri de dateIDL

    valori debaz ă

    întregi

    Short

    UShort

    Long

    ULong

    realeFloat

    Double

    altele

    Boolean

    Char

    String

    Enumvalori

    construite

    Struct

    Sequence

    Union

    Any

    referin ță

  • 8/18/2019 Web08ProcesariXML DOM

    28/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom: interfe țe – exemplu

    Specificarea interfe ț ei NodeList

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

    };

  • 8/18/2019 Web08ProcesariXML DOM

    29/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom: interfe țe – exemplu

    Specificarea interfe ț ei NodeList

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

    };

    metod ă cu un parametru;

    rezultat: o valoare de tip Node

    proprietate read-only de tip întreg lung f ără semn

  • 8/18/2019 Web08ProcesariXML DOM

    30/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom: interfe țe – exemplu

    Specificarea interfe ț ei Attr

    interface Attr : Node {readonly attribute DOMStringname;readonly attribute boolean specified;

    attribute DOMStringvalue;};

  • 8/18/2019 Web08ProcesariXML DOM

    31/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom: interfe țe – exemplu

    Specificarea interfe ț ei Attr

    interface Attr : Node {readonly attribute DOMStringname;readonly attribute boolean specified;

    attribute DOMStringvalue;};

    Attr provine din Node

    3 propriet ăț i

  • 8/18/2019 Web08ProcesariXML DOM

    32/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Un document ierarhie de obiecte-nodcare pot implementa interfe ț e (specializate)

    nodurile posed ă descenden ț i ori sunt noduri frunz ă

    parcurgerea arborelui se realizează în preordine, în adâncime ( depth-first )

    a se (re)vedea XML Infoset

  • 8/18/2019 Web08ProcesariXML DOM

    33/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    un document HTML și arborele DOM corespunzătorreprezentat via Live DOM Viewer

    http://software.hixie.ch/utilities/js/live-dom-viewer/

  • 8/18/2019 Web08ProcesariXML DOM

    34/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Accesul la date

    – liste de noduri, atribute, valori ,… –se realizeaz ă recurgându-se la metodele specificefiec ărui tip de noduri ale arborelui

  • 8/18/2019 Web08ProcesariXML DOM

    35/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    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)

    dom : core – tipuri de noduri

  • 8/18/2019 Web08ProcesariXML DOM

    36/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:

    DOMException

    gestioneaz ă setul de excep ț ii de procesare

  • 8/18/2019 Web08ProcesariXML DOM

    37/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:

    DOMImplementation

    furnizeaz ă detalii despre implementarea curent ă

  • 8/18/2019 Web08ProcesariXML DOM

    38/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:

    DocumentFragment : Nodeacces la fragmente de arbore

  • 8/18/2019 Web08ProcesariXML DOM

    39/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:

    Document ofer ă acces la document

    pentru consultare și/sau modificare

  • 8/18/2019 Web08ProcesariXML DOM

    40/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:

    Document propriet ăț idoctype, implementation, documentElement

  • 8/18/2019 Web08ProcesariXML DOM

    41/105

  • 8/18/2019 Web08ProcesariXML DOM

    42/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:

    Document metode createElement(), createTextNode(),createAttribute(), getElementsByTagName(),

    getElementById(),createElementNS(), importNode(),getElementsByTagNameNS(), renameNode()etc.

    DOM 2 DOM 3

  • 8/18/2019 Web08ProcesariXML DOM

    43/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:

    Nodeacces la nodurile arborelui

  • 8/18/2019 Web08ProcesariXML DOM

    44/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:

    Nodepropriet ăț i nodeName, nodeValue

  • 8/18/2019 Web08ProcesariXML DOM

    45/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:

    Nodemetode getNodeType(), insertBefore(),appendChild(), replaceChild(), removeChild(),cloneChild(), hasChildNodes(),hasAttributes(), isSameNode()

    DOM 2 DOM 3

  • 8/18/2019 Web08ProcesariXML DOM

    46/105

  • 8/18/2019 Web08ProcesariXML DOM

    47/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:Element

    proprietatea tagName

  • 8/18/2019 Web08ProcesariXML DOM

    48/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:Element

    metode getAttribute(), getAttributeNode(),setAttributeNode(), removeAttributeNode(),

    hasAttribute(), hasAttributeNS(),…

    DOM 2

  • 8/18/2019 Web08ProcesariXML DOM

    49/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:Attr : Nodeacces la atributele unui element

  • 8/18/2019 Web08ProcesariXML DOM

    50/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : core

    Interfe ț e fundamentale:NodeList NamedNodeMap

    permit accesul la colec ț ii de nodurivia indec și ori chei

  • 8/18/2019 Web08ProcesariXML DOM

    51/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : html

    DOM HTML extinde DOM Core

    specializarea interfe ț elor și oferirea de suport obiectualpentru prelucrarea documentelor HTML

    standardizeaz ă procesarea paginilor Web(e.g., în cadrul navigatorului)

    interface HTMLDocument: Document {

  • 8/18/2019 Web08ProcesariXML DOM

    52/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    attribute DOMStringtitle; // titlul documentuluireadonly attribute DOMStringreferrer ; // adresa resursei ce refer ă paginareadonly attribute DOMStringdomain; // domeniul de care apar ținereadonly attribute DOMStringURL; // URL-ul absolut al documentuluiattribute HTMLElementbody; // acces la elementul readonly attribute HTMLCollectionimages; // lista tuturor imaginilor readonly attribute HTMLCollectionlinks; // lista tuturor legăturilor readonly attribute HTMLCollectionforms; // lista tuturor formularelor

    attribute DOMStringcookie; // acces la cookie -uri // emite o excepție dacă e asignată o valoare

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

    void close (); // închide fluxul de scriere și for țează redarea con ținutuluivoid write (in DOMString text); // scrie un șir de caract. (e.g., cod HTMLvoid writeln(in DOMString text); // idem, dar inserează și new lineNodeListgetElementsByName(in DOMString numeElement); // furnizează o listă de elemente conform unui nume de tag

    };

  • 8/18/2019 Web08ProcesariXML DOM

    53/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : html

    Interfa ț a HTMLCollectionmodeleaz ă o list ă de noduri

    un nod poate fi accesat folosind un index numericsau pe baza unui identificator ( e.g., stabilit via atributul id)

    interface HTMLCollection{readonly attribute unsigned long length; // ofer ă lungimea listeiNode item (in unsigned long index); // ofer ă un nod via un index numericNode namedItem(in DOMString name); // furnizează un nod pe baza numelui

    };

  • 8/18/2019 Web08ProcesariXML DOM

    54/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : html

    Interfa ț a HTMLCollectionmodeleaz ă o list ă de noduri

    fiec ărui element HTML îi corespunde o interfa ță specific ă

    HTMLDocumentHTMLDivElement

    HTMLImageElement…

  • 8/18/2019 Web08ProcesariXML DOM

    55/105

    D r . S a

    b i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    Tehnologii Web

    HTMLHtmlElement

    HTMLBodyElement

    HTMLParagraphElement

    Text

    HTMLDivElement

    HTMLImageElement

  • 8/18/2019 Web08ProcesariXML DOM

    56/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    Tehnologii Web

    HTMLHtmlElement

    HTMLBodyElement

    HTMLParagraphElement

    Text

    HTMLDivElement

    HTMLImageElement

    // un element HTML generici t f HTMLEl tEl t{

  • 8/18/2019 Web08ProcesariXML DOM

    57/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    interface HTMLElement: Element{attribute DOMString id; // identificator asociat elementuluiattribute DOMString title; // titlu explicativattribute DOMString lang; // limba în care e redactat conținutulattribute DOMString className; // numele clasei CSS folosite pentru redare

    }; // specifică un formular Webinterface HTMLFormElement: HTMLElement{

    readonly attribute HTMLCollectionelements; // elementele HTML incluse în formular

    readonly attribute long length; // numărul câmpurilor formularuluiattribute DOMString action; // URI-ul resursei ce procesează dateleattribute 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’}; // interfața DOM pentru elementul (e.g. , conținut grafic raster: GIF, JPEG, PNG)interface HTMLImageElement: HTMLElement{

    attribute DOMString alt; // text alternativ descriind conținutul graficattribute DOMString src; // URL-ul resursei reprezentând imaginea

    };

  • 8/18/2019 Web08ProcesariXML DOM

    58/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : html

    Aspecte specifice:

    innerHTML

    proprietate – mutabil ă – ce furnizeaz ă codul (X)HTMLdin cadrul unui nod de tip Element

    utilizarenerecomandabil ă

  • 8/18/2019 Web08ProcesariXML DOM

    59/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : html

    Aspecte specifice:

    textContent

    proprietate ce furnizeaz ă/stabilește conținutul textualal nodului și posibililor descendenți

  • 8/18/2019 Web08ProcesariXML DOM

    60/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Extinde func ț ionalit ăț ile DOM1crearea unui obiect Document

    copierea unui nod dintr-un document în altul

    și multe altele …

    specifica ț iaDOM 2 Core

  • 8/18/2019 Web08ProcesariXML DOM

    61/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Extinde func ț ionalit ăț ile DOM1

    alte facilit ăț i:controlul aplic ării foilor de stiluri CSS

    tratarea evenimentelor

    specificarea filtrelor și iteratorilor

    (parcurgeri sofisticate de arbori DOM)

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    62/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Suport pentru procesarea foilor de stiluri

    StyleSheet StyleSheetList

    MediaList DocumentStyle

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

  • 8/18/2019 Web08ProcesariXML DOM

    63/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Tratarea evenimentelor

    definirea de activit ăț i (callback -uri) executatela apari ț ia unui eveniment

    eveniment = ac ț iune produs ă în cadrul mediului deexecu ț ie în urma c ăreia programul va putea reac ț iona

  • 8/18/2019 Web08ProcesariXML DOM

    64/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Tratarea evenimentelor

    descrierea arborescent ă a fluxului de evenimente

    capture versus bubble

  • 8/18/2019 Web08ProcesariXML DOM

    65/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Tratarea evenimentelor

    descrierea arborescent ă a fluxului de evenimente

    tratarea evenimentului se poate face pornindde la r ădăcin ă pân ă la obiectul- ț int ă – capture phase

  • 8/18/2019 Web08ProcesariXML DOM

    66/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Tratarea evenimentelor

    descrierea arborescent ă a fluxului de evenimente

    tratarea evenimentului poate avea loc atunci cândevenimentul e propagat de la obiectul unde a survenit

    pân ă la entit ăț ile superioare lui – bubbling phase

  • 8/18/2019 Web08ProcesariXML DOM

    67/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    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/

  • 8/18/2019 Web08ProcesariXML DOM

    68/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Tratarea evenimentelor

    se va utiliza un set standard de evenimente

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

  • 8/18/2019 Web08ProcesariXML DOM

    69/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Tratarea evenimentelor

    de interfa ță – e.g., interac ț iunea cu utilizatorul

    mouse: click, mousedown, mouseup , mouseover , mousemovetastatură: keypress , keydown, keyup

    uzual, folosite încontextul HTML

  • 8/18/2019 Web08ProcesariXML DOM

    70/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Tratarea evenimentelor

    referitoare la interac ț iunea cu browser -ul, specifice HTML(la nivel de document Web ori de formular)

    load, unload, abort, error ,select , submit, focus, blur , resize, scroll

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    71/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Tratarea evenimentelor

    de modificare a structurii documentului ( mutation events )

    subtreeModified, nodeInserted, nodeRemoved, attrModified,…

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    72/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Tratarea evenimentelor

    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

  • 8/18/2019 Web08ProcesariXML DOM

    73/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Tratarea evenimentelor

    sunt puse la dispozi ț ie interfe ț ele:EventTarget

    EventListenerEvent – UIEvent , MouseEvent , TouchEvent

  • 8/18/2019 Web08ProcesariXML DOM

    74/105

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    75/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 2

    Traversarea arborilor DOM

    se specific ă interfe ț ele op ț ionaleTreeWalker

    NodeIterator

    Filter

    http://www.w3.org/TR/DOM-Level-2-Traversal-Range

  • 8/18/2019 Web08ProcesariXML DOM

    76/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 3

    Extinde DOM 2, oferindu-se interfe ț epentru manipularea XML via module DOM

    un modul pune la dispoziție o facilitate particular ă

  • 8/18/2019 Web08ProcesariXML DOM

    77/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 3

    Modulul Core include interfe ț ele fundamentalece trebuie implementate de toate implement ările

    DOM conformându-se standardului

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

  • 8/18/2019 Web08ProcesariXML DOM

    78/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 3

    module disponibile: XML, HTML, XPath , Traversal , Range ,Validation , Events , Views , Load & Save , Stylesheet ,…

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    79/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 3

    Interfe ț e noi importante:

    DOMStringList, NameList, TypeInfo, UserDataInfo,DOMImplementationList, DOMImplementationSource,

    DOMLocator , DOMConfiguration

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    80/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 3

    Interfe ț e modificate (extinse):

    Document, Node, Attr , Element, Text, Entity

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    81/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 3

    Module DOM 3 standardizate

    DOM Load & Save

    interfe ț e puse la dispozi ț ie:

    LSParser , LSInput , LSSerializer , LSOutput http://www.w3.org/TR/DOM-Level-3-LS

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    82/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 3

    Module DOM 3 standardizateDOM Validation

    ofer ă func ț ionalit ăț i de creare/editare (automat ă)de documente conformându-se

    unor scheme de validare

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

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    83/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 4

    Unifică DOM3 Core , Element Traversal ,Selectors API – level 2, DOM3 Events

    apar interfețele ParentNode , ChildNode , Elements ,…

    suport și pentru specificarea de evenimente propriivia interfața CustomEvent

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    84/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 4

    Interfața Node este extinsă cuproprietățile firstChild, lastChild, previousSibling, nextSibling

    și metoda adoptNode ()

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    85/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 4

    Interfața Element include metodelegetElementsByClassName ()și matches ()

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    86/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : nivelul 4

    Noi evenimente HTML5 ce pot fi tratate

    interacțiune tactilă (din 2013): www.w3.org/TR/touch-events/touchstart , touchend , touchmove, touchcancel

    +conectivitatea la re ț ea: online, offline

    diverse operațiuni : redo, undo, drag, drop,…starea dispozitivului – deviceorientation, devicemotion

    …și altele

  • 8/18/2019 Web08ProcesariXML DOM

    87/105

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    88/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    exemplificare – folosim consola oferită de browser :document.querySelectorAll("section[id^=\"week\"]:nth-child(even) > h2");

    selectoriCSS3

  • 8/18/2019 Web08ProcesariXML DOM

    89/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : implement ări

    Expat – procesor XML cu suport pentru diverse metode deprelucrare (DOM, SAX etc.): http://expat.sourceforge.net/(C, C++, Lua, .NET, Objective-C, Perl, Python, Ruby, Tcl)

    HXT (Haskell XML Toolbox ): proces ări DOM în Haskellwww.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/

  • 8/18/2019 Web08ProcesariXML DOM

    90/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : implement ări

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

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

    libxml – API oferit ini ț ial de GNOME: http://xmlsoft.org/baza unor biblioteci pentru C++, Perl, PHP, Python, Ruby,…

    folosit și de libxslt

    MSDOM – proces ări 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/

  • 8/18/2019 Web08ProcesariXML DOM

    91/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : implement ări

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

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

    XML::DOM – modul Perl: search.cpan.org/perldoc?XML::DOMbazat pe Expat ( XML::Parser )

    xml.dom – modul din Python, parte a PyXMLhttps://docs.python.org/2/library/xml.dom.html

    d l ( l )

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    92/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : api-uri particulare (exemple)

    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/node-xmpp – biblioteca Node.js (JavaScript) pentru XMPP

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

    d i i i l ( l )

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    93/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : api-uri particulare (exemple)

    Open Data Protocol – ini ț iativ ă Microsoft (implement ări î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 laserviciile de telefonie Twilio via biblioteci C++, Erlang,Perl, PHP, Python, Ruby, Scala: www.twilio.com/api

    d i l i

  • 8/18/2019 Web08ProcesariXML DOM

    94/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : implement ări

    Procesarea documentelor XML/HTML

    docum.XML

    HTML

    try {$doc =new DomDocument; // instanțiem un obiect DOM

  • 8/18/2019 Web08ProcesariXML DOM

    95/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    ț$doc->load ("projects.xml"); // încărcăm documentul XML // afișăm informații privitoare la proiecte: titlul & clasa (dacă există)

    $projs = $doc->getElementsByTagName("project");foreach ($projs as $proj) { // preluăm nodurile-element $titles = $proj->getElementsByTagName("title");foreach ($titles as $title) {echo "Proiect: " . $title->nodeValue;

    } // verificăm dacă există specificată clasa proiectuluiif ($proj->hasAttribute("class ")) {echo " de clasa " . $proj->getAttribute("class ");

    }}

    }catch (Exception $e) {die ("Din păcate, a survenit o excepție.");

    }

    proces ări DOM

    în limbajul PHP

  • 8/18/2019 Web08ProcesariXML DOM

    96/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c otry:

    doc = urllib.urlopen('projects.xml') # încărc

    ăm documentul

    dom = parse(doc) # îl procesăm…# parcurgem elementele și oferim informații despre fiecarefor proiect in dom.getElementsByTagName('project'):

    print 'Proiectul ' + proiect.childNodes[1].firstChild.nodeValue + \' este de clas ă: ' + proiect.getAttribute('class ')

    except Exception:print 'Din păcate, a survenit o excepție.'

    proces ări DOM în limbajul Python

    # program Perl care contorizează proiectele de clasă 'S'

    ă i DOM

  • 8/18/2019 Web08ProcesariXML DOM

    97/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    # instanțiem procesorul XML$parser = new XML::DOM::Parser;

    # procesăm documentul$doc = $parser->parsefile ('projects.xml');$proiecte = $doc->getElementsByTagName('project');$nr_proiecte = $proiecte->getLength;$proiecte_clasaS = 0; # inițial, 0 proiecte de clasă 'S'for (my $i = 0; $i < $nr_proiecte; $i++) {# baleiăm toate proiectele

    $proiect = $proiecte->item ($i); # preluăm clasa proiectului$clasa = $proiect->getAttributeNode('class')->getValue;if ($clasa eq 'S') {

    $proiecte_clasaS++;}

    }print "\nSunt $proiecte_clasaS proiecte de clasă S.\n";

    $doc->dispose (); # eliber ăm memoria

    proces ări DOM în limbajul Perl

    try {doc = new XmlDocument(); // instanțiem un document XML

  • 8/18/2019 Web08ProcesariXML DOM

    98/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    doc.Load("projects.xml"); // pentru a fi încărcat // afișăm informații privitoare la proiecte: titlu și clasă

    XmlNodeListprojs = doc.GetElementsByTagName("project");foreach (XmlElementproj in projs) { // selectăm nodurile via o expresie XPathXmlNodeListtitles = proj.SelectNodes("./title");foreach (XmlElementtitle 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 păcate, a survenit o excepție

    } proces ări DOM

    în C# (.NET)

    d b

  • 8/18/2019 Web08ProcesariXML DOM

    99/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : browser

    Prelucrarea documentelor XML în browser

    a se studia și prezentările disponibile la URL -ul

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

    d b

  • 8/18/2019 Web08ProcesariXML DOM

    100/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u s a c o

    dom : browser

    inspectarea arborelui DOMasociat unui document HTML

    via extensia Firebug : getfirebug.com

    d b

  • 8/18/2019 Web08ProcesariXML DOM

    101/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u

    s a c o

    dom : browser

    Vizualizarea/procesarea documentelor HTML și XML– f ără validare – se realizeaz ă via DOM în JavaScript

    (ECMAScript ) interpretat de navigatorul Web

    avansat

  • 8/18/2019 Web08ProcesariXML DOM

    102/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u

    s a c o

    generare dinamică via JavaScript

    a unui formular Webhttp://jsfiddle.net/busaco/0wvn3fha/

    recurgerea lacreateElement()appendChild()

    getElementById()

    d b

  • 8/18/2019 Web08ProcesariXML DOM

    103/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u

    s a c o

    dom : browser

    Se ofer ă suport și pentru transfer asincron de date între client ( browser ) și server Web

    AJAX– Asynchronous JavaScript And XMLvia obiectul XMLHttpRequest

    vezi cursurileviitoare

  • 8/18/2019 Web08ProcesariXML DOM

    104/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u

    s a c o

    rezumat

    ⵄmodelul DOM:caracterizare niveluri de specificare exemple

    Aplica ție Procesor

  • 8/18/2019 Web08ProcesariXML DOM

    105/105

    D r . S a b

    i n B u r a g a

    w w w

    . p u r l

    . o r g / n e t / b u

    s a c o

    Aplica ț ieclient ProcesorSAXInstan ț iereahandler -elor

    notificare

    apari ț ie eveniment început de tag Procesare

    trimiteevenimente

    SAX

    apelare handler

    ini ț iere procesare: parse ( )

    apari ț ie eveniment

    final de tag

    apelare handler etc.