SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re [email protected] Anno...
-
Upload
dafne-castellano -
Category
Documents
-
view
214 -
download
0
Transcript of SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re [email protected] Anno...
SAX e DOMSAX e DOM
UNIVERSITA’ DI CAMERINOCorso di laurea in Informatica
Barbara [email protected]
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
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
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
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
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
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
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
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
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
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)
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);
};
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.
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();
};
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;
};
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).
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.
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/
Laboratorio Informatico in Database Turistici
Barbara Re 19
Ci sono domande?