Programmazione Orientata agli Oggetti in Linguaggio Java

Documenti analoghi
Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Elaborazione di documenti XML

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

SAX e DOM. Analisi di un documento

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

XML extensible Markup Language

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

XML Programming: DOM e SAX

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Laboratorio di sistemi interattivi. Struttura di un applicazione Java-XML. Lezione 12: Java & XML

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Tecnologie di Sviluppo per il Web

XML extensible Markup Language

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web

Argomenti XML JSON. Linguaggi per la definizione e lo scambio di dati strutturati, semi-strutturati, non strutturati. XML Data Model JSON

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

JAXP: Java API for XML Processing. Marco Tessarotto Programmazione dei Web Server Anno Accademico

Programmazione Orientata agli Oggetti in Linguaggio Java

Introduzione ai Calcolatori Elettronici

Algoritmi e Strutture di Dati

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Programmazione Procedurale in Linguaggio C++

Introduzione alla rete Internet

Programmazione Procedurale in Linguaggio C++

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Tecnologie di Sviluppo per il Web

Programmazione Orientata agli Oggetti in Linguaggio Java

Introduzione alla rete Internet

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Document Object Model

Programmazione Procedurale in Linguaggio C++

Programmazione Orientata agli Oggetti in Linguaggio Java

Transcript:

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione su XML: Librerie per XML versione 2.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università della Basilicata mecca@unibas.it Programmazione su XML: Librerie >> Sommario Sommario Introduzione Document Object Model () Simple API for XML (SAX) Differenze tra e SAX Librerie per XML 2

Programmazione su XML: Librerie >> Introduzione Introduzione Programmare con XML caricare i dati contenuti in uno o più documenti XML (es: questionario.xml) rappresentarli attraverso oggetti del modello dell applicazione (es: Questionario, Quesito) effettuare le elaborazioni eventualmente salvare i risultati modificati in nuovi documenti XML 3 Programmazione su XML: Librerie >> Introduzione Introduzione <?xml version= 1.0?> <!DOCTYPE > <questionario> <listaquesiti> <quesito> <domanda> 3 + 2? </domanda> </quesito> </listaquesiti> </questionario> <?xml version= 1.0?> <!DOCTYPE > <questionario> <listaquesiti> <quesito> <domanda> 4 + 2? </domanda> </quesito> </listaquesiti> </questionario> Parser Libreria per XML Macchina Virtuale Componenti per la gestione di XML Modello Quesito 12345 : Quesito String domanda; setdomanda( 4 + 2 ) 4

Programmazione su XML: Librerie >> Introduzione Introduzione Un componente fondamentale il parser effettua l analisi sintattica del file, riconosce gli elementi sintattici (tag, attributi, valori) e consente di estrarre i dati Tecnologie per il parsing di XML SAX 5 Programmazione su XML: Librerie >> Document Object Model () standard del consorzio W3C si tratta di una API, ovvero di un insieme di interfacce per la manipolazione di InfoSet Idea alla base di viene esaminato il documento XML e viene costruito in memoria centrale una rappresentazione del suo InfoSet sotto forma di oggetti collegati 6

Programmazione su XML: Librerie >> Nota gli oggetti costruiti dal parser sono oggetti di tipo generico Element, Attribute, Node ecc. non sono quelli della mia logica applicativa, nè potrebbero esserlo di conseguenza richiederanno per l utilizzo un ulteriore passo di trasformazione 7 Programmazione su XML: Librerie >> Element Libreria basata su Attribute <?xml version= 1.0?> <!DOCTYPE > <questionario> <listaquesiti> <quesito> <domanda> 3 + 2? </domanda> </quesito> </listaquesiti> </questionario> Parser 4567 : Element Text 3789 : Attribute String nome; String value; 4567 : Element String nome; 12345 : Text String value; 8

Programmazione su XML: Librerie >> Dopo aver costruito l InfoSet il programmatore ha accesso all oggetto che rappresenta la radice dell albero può visitare l albero e manipolarlo tipicamente visita l albero per costruire, a partire dai nodi, gli oggetti del suo modello queste operazioni sono normalmente responsabilità dello strato di persistenza 9 Programmazione su XML: Librerie >> Element Attribute Macchina Virtuale Modello 4567 : Element String nome; Text 12345 : Text String value; Componenti per la gestione di XML Quesito 12345 : Quesito 4567 : Element 3789 : Attribute String domanda; String nome; String value; 10

Programmazione su XML: Librerie >> Attenzione molti confondono InfoSet e albero Viceversa si tratta di due concetti diversi InfoSet: modello logico corrispondente all albero di un documento XML albero : rappresentazione di un InfoSet attraverso classi ed oggetti di un linguaggio di programmazione 11 Programmazione su XML: Librerie >> Origine di introdotto originariamente nel browser Netscape 2.0 come API per il linguaggio JavaScript per manipolare pagine HTML cosiddetto level 0 1995-1996 presto viene introdotta una versione incompatibile nel browser Internet Explorer 3.0 12

Programmazione su XML: Librerie >> La standardizzazione operata dal consorzio W3C per mettere fine alla diffusione di tecnologie incompatibili level 1 standard del 1998 level 2 standard del 2000 Caratteristica dello standard indipendente dal linguaggio utilizzabile in qualsiasi linguaggio basato su oggetti 13 Programmazione su XML: Librerie >> Contenuto dello standard la definizione di una serie di interfacce in un linguaggio astratto per la definizione di interfacce (IDL: interface definition language) lo standard non fornisce nessuna implementazione è possibile implementare le interfacce in linguaggi diversi ( binding per il linguaggio) 14

Programmazione su XML: Librerie >> Le principali interfacce Document: rappresenta la radice del doc. Node: antenato della gerarchia dei nodi NodeList: collezione di nodi (NOTA) Element: elemento (estende Node) Attr: attributo (estende Node) Text: valore (estende Node) 15 Programmazione su XML: Librerie >> >> dom.idl Per ciascuna interfaccia sono definite una serie di proprietà e metodi interface Element : Node { readonly attribute String tagname; String getattribute(in String name); void setattribute(in String name, in String value) raises(exception); void removeattribute(in String name) raises(exception); Attr getattributenode(in String name); Attr setattributenode(in Attr newattr) raises(exception); Attr removeattributenode(in Attr oldattr) raises(exception); NodeList getelementsbytagname(in String name); void normalize(); }; 16

Programmazione su XML: Librerie >> Altre interfacce Comment: commento ProcessingInstruction CDATASection (estende Text) Lo spazio di nomi org.w3c.dom Parser che implementano in Java ne esistono vari 17 Programmazione su XML: Librerie >> Principali parser basati su per Java Crimson: basato su X Parser di Sun, sviluppato da Apache Software Foundation Xerces: successiva implementazione di della Apache Software Foundation Oracle XML Parser per Java Utilizzando questi parser è possibile costruire un albero di oggetti in Java a partire da un documento XML 18

Programmazione su XML: Librerie >> SAX SAX Simple API for XML (SAX) rappresenta l alternativa a nato con specifico riferimento a Java http://www.saxproject.org/ è uno standard di fatto, ma non esistono documenti ufficiali che lo standardizzano di fatto non c è nemmeno una reale forma di licenza si tratta di software public domain 19 Programmazione su XML: Librerie >> SAX SAX La storia di SAX prima versione SAX1 1997-1998 attualmente SAX2 1999-2000, the most complete XML API available anywhere Principale differenza tra SAX e SAX è una API per il parsing di documenti XML basata sulla programmazione ad eventi 20

Programmazione su XML: Librerie >> SAX SAX Programmazione ad eventi su XML un parser SAX analizza il documento XML in maniera incrementale una volta avviata l analisi sintattica, ogni evento riscontrato durante l analisi del documento viene segnalato all applicazione es: inizio del documento, tag di apertura dell elemento di nome X, tag di chiusura dell elemento di nome X, fine del documento 21 Programmazione su XML: Librerie >> SAX SAX Strato XML Macchina Virtuale Modello Questionario <?xml version= 1.0?> <!DOCTYPE > <questionario> <listaquesiti> <quesito> <domanda> 3 + 2? </domanda> </quesito> </listaquesiti> </questionario> parse() Parser SAX GestoreEventi 1. startdocument() void startdocument() void startelement( String name) void endelement( String name) void enddocument() 2. startelement( questionario ) 3. startelement( quesito ) 4. enddocument() Quesito 8765 : Questionario 12345 : Quesito String domanda; 22

Programmazione su XML: Librerie >> SAX SAX Come SAX è solo la definizione di un interfaccia Esistono vari parser che la implementano in effetti tutti i parser che implementano implementano anche SAX Crimson Xerces 23 Programmazione su XML: Librerie >> Differenze tra e SAX Differenze tra e SAX Principali differenze tra le due API semplicità di utilizzo efficienza Semplicità di utilizzo i parser sono molto più semplici da utilizzare perchè costruiscono un albero di oggetti da visitare i parser SAX sono molto più complessi da usare perchè richiedono la gestione di eventi 24

Programmazione su XML: Librerie >> Differenze tra e SAX Differenze tra e SAX Efficienza d altro canto costruisce una rappresentazione in memoria centrale di tutto l InfoSet viceversa il parsing con SAX è incrementale e non richiede di costruire l intera rappresentazione dell InfoSet di conseguenza per documenti di grandi dimensioni usare SAX è indispensabile 25 Programmazione su XML: Librerie >> Librerie per XML Librerie per XML A questo punto possiamo riassumere il concetto di libreria per XML La libreria principali per Java Java API for XML Programming () fornita a corredo di J2SE J strumento open source sviluppato indipendentemente e distribuito su http://www.jdom.org 26

Programmazione su XML: Librerie >> Java API for XML Processing () libreria fornita a corredo di J2SE ultima versione: 1.3 in J2SDK 5.0 Principali funzionalità consente l utilizzo di un parser e SAX supporta DTD e XMLSchema supporta XPath supporta XSLT 27 Programmazione su XML: Librerie >> ATTENZIONE all approccio di rispetto agli strumenti L approccio di tipico approccio delle librerie Java indipendenza rispetto agli strumenti In questo caso può utilizzare parser diversi il parser e SAX standard di 1.1 era Crimson il parser standard di 1.3 è Xerces l utente può scegliere un parser diverso 28

Programmazione su XML: Librerie >> Per ottenere un riferimento al parser lo sviluppatore utilizza la classe javax.xml.parsers.documentbuilderfactory restituisce un riferimento ad un oggetto di tipo DocumentBuilder che rappresenta il parser a seconda della configurazione specificata il DocumentBuilder restituito è diverso 29 Programmazione su XML: Librerie >> 1. newinstance() DocumentBuilderFactory configurazione della piattaforma (standard) Applicazione newinstance() newdocumentbuilder() 4. import javax.xml.parsers.*; org.w3c.document document = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newdocumentbuilder(); java.io.file file = new java.io.file(nomefile); document = builder.parse(file); } catch (Exception ) { } 2. new () : DocumentBuilderFactory 3. newdocumentbuilder() : DocumentBuilder 5. new() Xerces XercesDocumentBuilder 30

Programmazione su XML: Librerie >> DocumentBuilderFactory configurazione della piattaforma (MODIFICATA) Applicazione import javax.xml.parsers.*; org.w3c.document document = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newdocumentbuilder(); java.io.file file = new java.io.file(nomefile); document = builder.parse(file); } catch (Exception ) { } newinstance() newdocumentbuilder() : DocumentBuilderFactory 5. 3. newdocumentbuilder() : DocumentBuilder 4. Oracle Parser OracleDocumentBuilder Xerces XercesDocumentBuilder 31 Programmazione su XML: Librerie >> Procedura per decidere il parser per cominciare la macchina virtuale verifica se è stata specificata la proprietà di sistema javax.xml.parsers.documentbuilderfactory altrimenti cerca e consulta il file jaxp.properties contenuto in %JRE_HOME%\lib altrimenti utilizza il parser standard (org.apache.crimson oppure org.apache.xerces a seconda della versione) 32

Programmazione su XML: Librerie >> Analogamente per il motore di trasformazione per XSLT il motore standard è org.apache.xalan l utente può utilizzare motori diversi Attenzione questo fatto provoca a volta problemi dovuti alla presenza nel classpath di parser diversi molti pacchetti (es: IDE) usano parser per XML 33 Programmazione su XML: Librerie >> La caratteristica fondamentale di è una implementazione fedele di riproduce esattamente le interfacce di Conseguenze alcune operazioni risultano macchinose e poco naturali per un programmatore Java es: chiedendo la lista dei figli di un elemento si ottiene un oggetto di tipo org.w3c.dom.nodelist e non una ArrayList 34

Programmazione su XML: Librerie >> L altra caratteristica di è una collezione di package molto complessa I package fondamentali di javax.xml javax.xml.parsers javax.xml.transform org.w3c.dom org.xml.sax javax.xml.xpath javax.xml.validation javax.xml.namespace javax.xml.datatype 35 Programmazione su XML: Librerie >> Sommario Riassumendo Introduzione Document Object Model () Simple API for XML (SAX) Differenze tra e SAX Librerie per XML 36

Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza Attribution-ShareAlike di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 37