1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria...

40
1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML

Transcript of 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria...

Page 1: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

1

Sistemi Informativi e Servizi in Rete

Università degli Studi di Brescia

Facoltà di Ingegneria

Parsing di documenti XML

Page 2: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

2Sistemi Informativi e Servizi in Rete

XML parsing

Sommario

• Definizione e tipologie di parser XML

• Simple API for XML (SAX)

• Document Object Model (DOM)

Page 3: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

3Sistemi Informativi e Servizi in Rete

XML parsing

Che cos’è un parser XML?

• Il parser XML è un’applicazione che:

recupera il documento XML carica i dati in memoria presenta all’applicazione che lo invoca un’interfaccia di alto livello fornisce servizi di validazione (opzionale) fornisce servizi di ricerca (opzionale)

Page 4: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

4Sistemi Informativi e Servizi in Rete

XML parsing

Che cos’è un parser XML?

XMLDTD

XML parser

Applicazione

XSD

Page 5: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

5Sistemi Informativi e Servizi in Rete

XML parsing

Parsing di documenti XML

• Due diversi approcci

approccio ad eventi

» il parser scandisce l’intero documento XML

» ogni volta che incontra un nuovo elemento, informa l’applicazione usando la tecnica del Callback

approccio basato su modello» il parser costruisce internamente una struttura ad

albero che rappresenta il documento XML (albero sintattico)

» fornisce all’applicazione delle API che permettono la navigazione dell’albero sintattico

Page 6: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

6Sistemi Informativi e Servizi in Rete

XML parsing

Approccio ad eventi

<Libro disponibilità=“S”> <Titolo>Il Signore degli Anelli</Titolo> <Autore>J.R.R. Tolkien</Autore> <Data>2002</Data> <ISBN>88-452-9005-0</ISBN> <Editore>Bompiani</Editore></Libro>

XML Parser

Applicazione

Libro Titolo Autore…

t

Page 7: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

7Sistemi Informativi e Servizi in Rete

XML parsing

Approccio basato su modello

<Libro disponibilità=“S”> <Titolo>Il Signore degli Anelli</Titolo> <Autore>J.R.R. Tolkien</Autore> <Data>2002</Data> <ISBN>88-452-9005-0</ISBN> <Editore>Bompiani</Editore></Libro>

XML Parser

Applicazione

Libro disponibilità=“…”

Titolo

attr

Editore

Page 8: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

8Sistemi Informativi e Servizi in Rete

XML parsing

Approccio ad eventi Approccio basato su modello

• E’ molto “leggero”

• Il programmatore può implementare solo le funzionalità

necessarie

• Fornisce all’applicazione un modello ricco del documento

• Mantiene una rappresentazione completa e durevole in memoria

• Interfaccia troppo semplice; si

richiede più codice nell’applicazione

• Nessun supporto per operare sul documento

• Richiede un'occupazione di

memoria per tutto il documento

Page 9: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

9Sistemi Informativi e Servizi in Rete

XML parsing

JAXP

• Java API for XML Processing (JAXP)

• Supporto standard della SUN per l’elaborazione di documenti XML

• Propone due implementazioni:– SAX (Simple API for XML) ad eventi– DOM (Document Object Model) basato su una

rappresentazione interna dell’albero sintattico

Page 10: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

10Sistemi Informativi e Servizi in Rete

XML parsing

Sommario

• Definizione e tipologie di parser XML

• Simple API for XML (SAX)

• Document Object Model (DOM)

Page 11: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

11Sistemi Informativi e Servizi in Rete

XML parsing

SAX

• Simple API for XML

• Nasce come API alternativa al DOM per l’ambiente Java successivamente adottato anche al di fuori del mondo

Java (e.g., Microsoft)

• Basa il suo sistema di parsing sugli eventi inizio di un documento apertura e chiusura di un elemento apertura e chiusura di un blocco CDATA ingresso ed uscita dallo scope di un namespace fine del documento

Page 12: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

12Sistemi Informativi e Servizi in Rete

XML parsing

Architettura SAX

Applicazione

Listener

Handler

Parser

Registra Listener

(1)

IniziaScansione

(2)

XML

Iniziodoc, inizioelem,..(3)

Page 13: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

13Sistemi Informativi e Servizi in Rete

XML parsing

L’Handler del SAX (1)

• L’applicazione deve implementare l’interfaccia org.xml.sax.helpers.ContentHandler

interface ContentHandler {void startDocument(); void startElement(String namespaceURI, String localName, String qName, Attributes atts);void startPrefixMapping(String prefix, String uri);void characters(char[] ch, int start, int length);void endDocument(); void endElement(String namespaceURI,String localName, String qName);void endPrefixMapping(String prefix);void ignorableWhitespace(char[] ch, int start, int length);void processingInstruction(String target, String data);

}

Page 14: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

14Sistemi Informativi e Servizi in Rete

XML parsing

L’Handler del SAX (2)

• La classe DefaultHandler implementa l’interfaccia permettendo all’applicazione di ridefinire (override) solo i metodi desiderati

Page 15: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

15Sistemi Informativi e Servizi in Rete

XML parsing

L’Handler del SAX (2)

• La classe DefaultHandler implementa l’interfaccia permettendo all’applicazione di ridefinire (override) solo i metodi desiderati

Page 16: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

16Sistemi Informativi e Servizi in Rete

XML parsing

Parser SAX: i package

• I package da importare sono i seguenti

Page 17: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

17Sistemi Informativi e Servizi in Rete

XML parsing

Elaborare un documento XML con SAX (II)

• Per elaborare un documento XML con SAX è prima di tutto necessario istanziare un oggetto SAXParseFactory

Page 18: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

18Sistemi Informativi e Servizi in Rete

XML parsing

Elaborare un documento XML con SAX (II)

Page 19: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

19Sistemi Informativi e Servizi in Rete

XML parsing

Elaborare un documento XML con SAX (III)

• Prima di utilizzare il parser è possibile settare le sue proprietà e le sue features

– settare una feature significa abilitare/disabilitare alcune funzionalità del parser (per esempio, l'uso dei namespace o la validazione tramite DTD o XSD)

– settare una proprietà significa modificare il valore di elementi su cui il parser opera (per esempio, l'URL dell'XSD da utilizzare per la validazione)

Page 20: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

20Sistemi Informativi e Servizi in Rete

XML parsing

Settare le features del parser SAX (I)

• L'istruzione seguente abilita la validazione (spf è istanza di SAXParserFactory)

• L'istruzione seguente abilita l'utilizzo dei namespace

• Il metodo getFeature(String name) recupera le impostazioni settate

• Per un elenco delle features disponibili, si veda http://xerces.apache.org/xerces-j/features.html

Page 21: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

21Sistemi Informativi e Servizi in Rete

XML parsing

Settare le features del parser SAX (II)

• La validazione e l'utilizzo dei namespace possono essere abilitati anche attraverso dei metodi ad-hoc della classe SAXParserFactory

• Le proprietà si gestiscono in modo simile con i seguenti metodi

• Per un elenco delle proprietà disponibili, si veda http://xerces.apache.org/xerces-j/properties.html

Page 22: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

22Sistemi Informativi e Servizi in Rete

XML parsing

Validare un documento XML con un parser SAX (I)

• La validazione avviene ridefinendo i metodi per la gestione degli errori nel parser e settando le opportune features e proprietà quando si invoca il parser

Page 23: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

23Sistemi Informativi e Servizi in Rete

XML parsing

Validare un documento XML con un parser SAX (I)

• La validazione avviene ridefinendo i metodi per la gestione degli errori nel parser e settando le opportune features e proprietà quando si invoca il parser

Page 24: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

24Sistemi Informativi e Servizi in Rete

XML parsing

Metodi per la gestione degli errori

• void error(SAXParserException exception)

– non interrompe il processo di parsing

• void fatalError(SAXParserException exception)

– interrompe il processo di parsing

• void warning(SAXParserException exception)

• Si tratta di metodi dell'interfaccia ErrorHandler, implementata sempre in DefaultHandler

• La classe SAXParserException presenta il metodo int getLineNumber() restituisce il numero di riga dove si è verificato l'errore

Page 25: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

25Sistemi Informativi e Servizi in Rete

XML parsing

Metodi per la gestione degli errori

Page 26: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

26Sistemi Informativi e Servizi in Rete

XML parsing

Settare il parser SAX per la validazione

Page 27: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

27Sistemi Informativi e Servizi in Rete

XML parsing

Sommario

• Definizione e tipologie di parser XML

• Simple API for XML (SAX)

• Document Object Model (DOM)

Page 28: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

28Sistemi Informativi e Servizi in Rete

XML parsing

DOM

• E’ una API per il parsing di documenti XML

• Definisce una modalità di rappresentazione di documenti XML

• Usa strutture dati accessibili dall’applicazione

• Definisce le operazioni per agire sulla rappresentazione intermedia caricamento della struttura

costruzione di un nuovo documento

navigazione dell’albero sintattico

aggiungere, eliminare, modificare e spostare le componenti

• Esistono implementazioni di DOM per diversi linguaggi di programmazione linguaggi server-side: Java, C++, C#

linguaggi di script: VB-script, Javascript

Page 29: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

29Sistemi Informativi e Servizi in Rete

XML parsing

La struttura di DOM

• I documenti XML sono caricati sotto forma di albero sintattico, composto da oggetti di tipo Node ogni nodo può avere uno o più figli

• DOM definisce solo la vista logica e non dice nulla sull’effettiva struttura in memoria

• Come modello ad oggetti si specificano gli oggetti utilizzati per rappresentare il documento ed i suoi costituenti

le interfacce pubbliche degli oggetti per poter essere utilizzate dal livello applicativo

le relazioni tra gli oggetti e le interfacce

la semantica associata ad ogni classe

Page 30: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

30Sistemi Informativi e Servizi in Rete

XML parsing

Esempio di DOM

<sentence> The &projectName; project is important <name>MAIS project</name> <typology>MIUR FIRB</typology></sentence>

+ ELEMENT: sentence + TEXT: The + ENTITY REF: projectName + TEXT: project is important + ELEMENT: name + TEXT: MAIS project + ELEMENT: typology + TEXT: MIUR FIRB

Page 31: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

31Sistemi Informativi e Servizi in Rete

XML parsing

Caricamento di un DOM

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

(SUN, Apache, Oracle)

l’implementazione di SUN è nel package javax.xml.parsers

import org.w3c.dom.*;import javax.xml.parsers.*;import org.xml.sax.*;

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

Definizione DOM standardImplementazione

di JAXPDOM usa SAX

Page 32: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

32Sistemi Informativi e Servizi in Rete

XML parsing

Settare le proprietà del parser DOM

• void setIgnoringComments(boolean option)

– il parser ignora i commenti nel file XML

• void setIgnoringElementContentWhiteSpace(boolen option)

– il parser ignora gli spazi bianchi nel contenuto degli elementi

• void setNamespaceAware(boolean option)

• void setValidating(boolean option)

• Esistono inoltre i metodi per recuperare le opzioni di settaggio: isIgnoringComments(), isIgnoringElementContentWhitespace(), isNamespaceAware(), isValidating()

Page 33: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

33Sistemi Informativi e Servizi in Rete

XML parsing

Navigazione di un documento

• Estrazione del nodo radice e stampa del nome del nodo

• Nodi figli

• Attributi

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

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());

Page 34: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

34Sistemi Informativi e Servizi in Rete

XML parsing

Tipizzazione in DOM

n.getNodeType() == n.ELEMENT_NODE

Tipo di nodo nodeName nodeValue attributesElement Nome del tag null NamedNodeMap

Attr Nome dell’attributo Valore dell’attributo null

Text “#text” Testo associato null

CDATASection “#cdata-section” Testo associato null

EntityReference Nome dell’entità null null

Entity Nome dell’entità null null

ProcessingInstruction Valore dell’attributo target Contenuto escluso l’attributo target null

Comment “#comment” Testo associato Null

Document “#document” null Null

DocumentType Nome del tipo di documento null Null

DocumentFragment “#document-fragment” Null Null

Notation Nome della NOTATION null Null

Page 35: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

35Sistemi Informativi e Servizi in Rete

XML parsing

Validazione in DOM

• La validazione segue le stesse regole viste per il parser SAX

• Una volta abilitata, la validazione di default avviene sulla base del DTD, a meno che non si usi la seconda istruzione appena mostrata

factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");

factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", schema);

Page 36: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

36Sistemi Informativi e Servizi in Rete

XML parsing

Gestione degli errori in DOM

• DOM eredita la gestione degli errori di SAX

• Deve essere definito un handler che implementa l'ErrorHandler e in cui sono definiti i tre metodi error, fatalError e warning, a cui si passa un'istanza di SAXParserException

• Il parser DOM deve essere registrato come listener per gli eventi che segnalano un errore

Class Handler implements ErrorHandler...

builder.setErrorHandler(new Handler());

Page 37: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

37Sistemi Informativi e Servizi in Rete

XML parsing

Esempio: navigazione e stampa (I)

Page 38: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

38Sistemi Informativi e Servizi in Rete

XML parsing

Esempio: navigazione e stampa (II)

Page 39: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

39Sistemi Informativi e Servizi in Rete

XML parsing

Esempio: navigazione e stampa (II)

Page 40: 1 Sistemi Informativi e Servizi in Rete Università degli Studi di Brescia Facoltà di Ingegneria Parsing di documenti XML.

40Sistemi Informativi e Servizi in Rete

XML parsing

Modifica del DOM

• DOM consente di inserire nuovi nodi nell'albero sintattico

Element root = doc.getDocumentElement();Element cap = doc.createElement("capitolo");cap.setAttribute("titolo", "Introduzione");cap.appendChild(doc.createTextNode("... testo ..."));Node capitolo = doc.getElementsByTagNameNS("http://www.elet.polimi.it", "capitolo").item(0);root.insertBefore(cap, capitolo);doc.normalize();

Creazione del nodo

Creazione dell’attributo

Ricerca del primo capitolo presente

Inserimentonormalizzazione. Es: unisce

nodi di testo consecutivi