SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re [email protected] Anno...

19
SAX e DOM SAX e DOM UNIVERSITA’ DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07

Transcript of SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re [email protected] Anno...

Page 1: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

SAX e DOMSAX e DOM

UNIVERSITA’ DI CAMERINOCorso di laurea in Informatica

Barbara [email protected]

Anno Accademico 2006-07

Page 2: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 2

Il parser

Il parser si occupa dRecuperare il documento XMLCaricare i dati in memoriaPresentare all’applicazione un’interfaccia di alto livello(opzionalmente) fornire servizi di validazione(opzionalmente) fornire servizi di ricerca

XMLDTD

XML parser

Applicazione

XSD

Page 3: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 3

PARSER

SAX (Simple API for XML) ad eventi

DOM (Document Object Model) basato su una rappresentazione astratta in memoria

Page 4: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 4

E’ un’API (Application Programming Interface) per documenti XML

Il DOM definisce una modalità di rappresentazione dei documenti XML accessibile da un linguaggio di programmazione, e le operazioni per la loro manipolazione

Definizione di DOM

Page 5: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 5

Implementazioni di DOM in linguaggi differenti

Linguaggi server-side : java, C++, C#Linguaggi di script: VB-Script, JavaScript

Definizione di DOM

Page 6: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 6

La vista del DOM su XML

<song track="9"><artist>

<name>Santana</name> </artist>

<title>Corazon Espinado</title><comment>First Hit from the Album</comment><length>

<minutes>4</minutes><seconds>36</seconds>

</length></song>

<song>

<comment><artist> <title> <length>

<minutes> <seconds><name>

Santana

Corazon Espinado

First Hit from the Album

4 36

track=9

document

Page 7: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 7

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse("libro.xml");

Il DOM di JAXP è definito nel package org.w3c.dom Fornisce un’interfaccia standard che si appoggia su implementazioni differenti

Caricamento di un DOM

Page 8: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 8

Element root = doc.getDocumentElement();System.out.println(root.getNodeName());

Estrazione del nodo radice e stampa del nome del nodo

Nodi figli

Attributi

NodeList children = root.getChildNodes();for (int i = 0; i < children.getLength(); i++) System.out.println(children.item(i).getNodeName);

NamedNodeMap map = root.getAttributes();for (int i = 0; i < map.getLength(); i++) System.out.println(map.item(i).getNodeName());

Navigazione di un DOM

Page 9: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 9

Per default DOM è non validante

In maniera analoga è possibile abilitare la gestione dei namespace

factory.setValidating(true);

factory.setNamespaceAware(true);

Validazione e Namespace

Page 10: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 10

Gli oggetti Node: la base del DOM

Il DOM presenta i documenti come una struttura gerarchica di oggetti di tipo Node.

Ciascun oggetto nel documento in realtà implementa una interfaccia più specifica per il suo tipo, che è sempre derivata da Node

I Node possono avere zero o più nodi figli L’interfaccia di Node include le operazioni di base

eseguibili su ogni tipo di oggetto (indipendentemente dal suo tipo specifico) in un documento XML

Page 11: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 11

Tipi di Nodo (nodeType)

I tipi specifici per i nodi sono identificati dalle costanti dell’interfaccia Node:

ELEMENT_NODE: il nodo è un elemento (= 1)ATTRIBUTE_NODE: il nodo è un attributo (= 2)TEXT_NODE: il nodo è del testo (= 3)CDATA_SECTION_NODE: il nodo è una sezione CDATA (= 4)ENTITY_REFERENCE_NODE: il nodo è un riferimento ad entità (= 5)ENTITY_NODE: il nodo è un’entità (= 6)PROCESSING_INSTRUCTION_NODE: il nodo è una PI (= 7)COMMENT_NODE: il nodo è un commento (= 8)DOCUMENT_NODE: il nodo è un documento (non la radice!) (= 9)DOCUMENT_TYPE_NODE: il nodo è un DOCTYPE (= 10)DOCUMENT_FRAGMENT_NODE: il nodo è un frammento (= 11)NOTATION_NODE: il nodo è una NOTATION (= 12)

Page 12: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 12

Interfaccia degli oggetti Node

interface Node {const unsigned short ELEMENT_NODE = 1; //…ed altre costanti di tipo...readonly attribute DOMString nodeName;attribute DOMString nodeValue;readonly attribute unsigned short nodeType;readonly attribute Node parentNode;readonly attribute NodeList childNodes;readonly attribute Node firstChild;readonly attribute Node lastChild;readonly attribute Node previousSibling;readonly attribute Node nextSibling;readonly attribute NamedNodeMap attributes;readonly attribute Document ownerDocument;Node insertBefore(in Node newChild,in Node refChild) raises(DOMException);Node replaceChild(in Node newChild, in Node oldChild) raises(DOMException);Node removeChild(in Node oldChild) raises(DOMException);Node appendChild(in Node newChild) raises(DOMException);boolean hasChildNodes();Node cloneNode(in boolean deep);

};

Page 13: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 13

Semantica dei Metodi di Node

Le funzioni di Node per la manipolazione dei nodi figli sono

appendChild, removeChild, replaceChild, insertBefore.

La legalità di ciascuno di questi metodi dipende dal tipo effettivo del nodo.

Nel caso l’operazione non sia disponibile (ad esempio, appendChild su un nodo Text), viene generata un’eccezione di tipo DOMException.

Page 14: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 14

Interfaccia Element

Il metodo getElementsByTagName restituisce i soli figli del nodo che siano elementi con uno specifico nome (filtra cioè i childNodes).

Il metodo normalize serve a fondere nodi Text adiacenti nel sottoalbero controllato dall’elemento.

interface Element {readonly attribute DOMString tagName;DOMString getAttribute(in DOMString name);void setAttribute(in DOMString name, in DOMString value) raises(DOMException);void removeAttribute(in DOMString name) raises(DOMException);Attr getAttributeNode(in DOMString name);Attr setAttributeNode(in Attr newAttr) raises(DOMException);Attr removeAttributeNode(in Attr oldAttr) raises(DOMException);NodeList getElementsByTagName(in DOMString name);void normalize();

};

Page 15: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 15

Interfaccia Attr

I valori per name e value sono accessibili anche attraverso i metodi getName e getValue dell’interfaccia Node

L’attributo specified è false se l’attributo non era presente nel documento, ma è stato inserito dal parser con il suo valore di default specificato nel DTD associato al documento stesso. In caso contrario, l’attributo è true

interface Attr {readonly attribute DOMString name;readonly attribute boolean specified;attribute DOMString value;

};

Page 16: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 16

NodeList e NamedNodeMap

interface NamedNodeMap {Node getNamedItem(in DOMString name);Node setNamedItem(in Node arg, in DOMString value) raises(DOMException);Node removeNamedItem(in DOMString name) raises(DOMException);Node item(in unsigned long index);readonly attribute unsigned long length;

};

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

};

Le liste vengono restituite da vari metodi del DOM. La NamedNodeMap contiene elementi accessibili,

oltre che per indice (come in NodeList), anche attraverso il nome (l’attributo nodeName di Node).

Page 17: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 17

Interfaccia Document

interface Document {readonly attribute DocumentType doctype;readonly attribute DOMImplementation implementation;readonly attribute Element documentElement;Element createElement(in DOMString tagName) raises(DOMException);DocumentFragment createDocumentFragment();Text createTextNode(in DOMString data);Comment createComment(in DOMString data);CDATASection createCDATASection(in DOMString data) raises(DOMException);ProcessingInstruction createProcessingInstruction(in DOMString target,

in DOMString data) raises(DOMException);Attr createAttribute(in DOMString name) raises(DOMException);EntityReference createEntityReference(in DOMString name) raises(DOMException);NodeList getElementsByTagName(in DOMString tagname);

};

L’oggetto Document fornisce i metodi per creare i nodi che compongono il documento XML!

documentElement rappresenta l’elemento radice del documento.

Page 18: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 18

Riferimenti

Apache XML Project (xalan, xerces)http://xml.apache.org

Java JAXP Tutorialhttp://java.sun.com/webservices/jaxp/docs.html

SAXhttp://www.saxproject.org/

Specifiche DOM dal W3Chttp://www.w3.org/DOM/

Page 19: SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Laboratorio Informatico in Database Turistici

Barbara Re 19

Ci sono domande?