Download - Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.

Transcript
Page 1: Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.

Laboratorio di Servizi Web - XML - Ardissono

1

Rappresentazione ad oggetti di documenti XML

• Parser fanno analisi sintattica di documento XML ma, a meno di utilizzare metodi indiretti (come eventi di SAX parser) non permettono manipolazione diretta del documento

introdotte rappresentazioni strutturate che permettono di analizzare e modificare contenuto di documento

• W3C ha definito specifiche di rappresentazione strutturata di documento XML

– Documenti XML sono gerarchici (tag annidati) rappresentazione ad albero

– Elementi, attributi, etc. rappresentati come nodi di albero

Page 2: Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.

Laboratorio di Servizi Web - XML - Ardissono

2

DOM - Document Object Model - I

• W3C standard per gestione di documenti XML– rappresenta i documenti con un modello ad oggetti

– specifica interfaccia per accedere a parti di documenti e “navigarli”

– rappresentazione DOM si basa su struttura ad albero

<pizza> <topping> peperoni </topping> <price> 8.00 </price> <size> large </size></pizza>

Document

pizza

topping price size

Root element

Child elements

Page 3: Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.

Laboratorio di Servizi Web - XML - Ardissono

3

DOM - Document Object Model - II• Molti parser sono conformi a DOM (es. JAXP) usano

rappresentazione DOM per gestire documenti • DOM interfaccia produttori di parser hanno

sviluppato implementazioni• org.w3c.dom• DOM usa interfaccia Node (e più specifici, come

Element), che rappresenta i nodi dell’albero di un documento e offre metodi per:– trovare i nodi figli di un nodo– aggiungere figli ad un nodo– leggere il valore contenuto in un nodo, ...

• documento si ispeziona (e modifica) navigando albero a partire da radice

Vedere Tutorial (JAXP) per maggiori

informazionisu DOM

Page 4: Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.

Laboratorio di Servizi Web - XML - Ardissono

4

Creazione di DOM• dal nulla, creando i nodi e inserendoli nell’albero• parsificando documento XML (e.g., via SAX parser)

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException;import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.w3c.dom.Document; import org.w3c.dom.DOMException; ...

public class DomEcho01{ static Document document; public static void main(String argv[]) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(true); try {DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse( “coffee.xml” ); } catch (SAXParseException spe) {System.out.println("\n** Parsing error”); ….. Gestione di altre eccezioni... } }

Page 5: Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.

Laboratorio di Servizi Web - XML - Ardissono

5

Visita di oggetto DOM public static void visitDocument(Document document, String feature) { if (document!=null) { Element el = document.getDocumentElement(); visit(el, feature);}} public static void visit(Node el, String feature) { if (el!=null) { NodeList children = el.getChildNodes();

for (int i=0; i<children.getLength(); i++) {Node n=children.item(i);getFeatureVal(n, feature);visit(children.item(i), feature);}}}

public static void getFeatureVal(Node domNode, String feature) { String out = ""; if (domNode!=null) {

String name = domNode.getNodeName(); String type = typeName[domNode.getNodeType()];

if (name.equals(feature)) { Element el = (Element)domNode;

out = el.getFirstChild().getNodeValue(); System.out.println("The value of feature "+feature+ " is: " +out);} }}

Page 6: Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.

Laboratorio di Servizi Web - XML - Ardissono

6

DOM vs. JDOM e altri….

• DOM nato per trattare documenti – document-oriented, focalizzato sulle parti di cui un

documento si compone– gestione di strutture dati possibile, ma un po’ ostica sviluppati altri modelli di rappresentazione che facilitano

accesso e modifica. Es: JDOM, DOM4J

• Trascuriamo DOM, JDOM, etc. per focalizzarci su uno strumento recente, più efficace nel trattamento di strutture dati: JAXB

• JAXB (Java Architecture for XML Binding) nato apposta per trattare rappresentazione XML di strutture dati