SAX e DOM UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re Anno Accademico
Laboratorio Informatico in Database Turistici Barbara Re2 Il parser Il parser si occupa d Recuperare il documento XML Caricare i dati in memoria Presentare allapplicazione uninterfaccia di alto livello (opzionalmente) fornire servizi di validazione (opzionalmente) fornire servizi di ricerca XMLDTD XML parser Applicazione XSD
Laboratorio Informatico in Database Turistici Barbara Re3 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 Re4 E unAPI (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 Re5 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 Re6 La vista del DOM su XML Santana Corazon Espinado First Hit from the Album 4 36 Santana Corazon Espinado First Hit from the Album 436 track=9 document
Laboratorio Informatico in Database Turistici Barbara Re7 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 uninterfaccia standard che si appoggia su implementazioni differenti Caricamento di un DOM
Laboratorio Informatico in Database Turistici Barbara Re8 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 Re9 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 Re10 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 Linterfaccia 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 Re11 Tipi di Nodo (nodeType) I tipi specifici per i nodi sono identificati dalle costanti dellinterfaccia 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 è unentità (= 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 Re12 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 Re13 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 loperazione non sia disponibile (ad esempio, appendChild su un nodo Text), viene generata uneccezione di tipo DOMException.
Laboratorio Informatico in Database Turistici Barbara Re14 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 dallelemento. 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 Re15 Interfaccia Attr üI valori per name e value sono accessibili anche attraverso i metodi getName e getValue dellinterfaccia Node üLattributo specified è false se lattributo 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, lattributo è true interface Attr { readonly attribute DOMString name; readonly attribute boolean specified; attribute DOMString value; };
Laboratorio Informatico in Database Turistici Barbara Re16 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 (lattributo nodeName di Node).
Laboratorio Informatico in Database Turistici Barbara Re17 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); }; üLoggetto Document fornisce i metodi per creare i nodi che compongono il documento XML! üdocumentElement rappresenta lelemento radice del documento.
Laboratorio Informatico in Database Turistici Barbara Re18 Riferimenti Apache XML Project (xalan, xerces) Java JAXP Tutorial SAX Specifiche DOM dal W3C
Laboratorio Informatico in Database Turistici Barbara Re19 Ci sono domande?