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

Tecnologie di Sviluppo per il Web

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

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Sommario. Introduzione Architettura Client-Server. Server Web Browser Web. Architettura a Due Livelli Architettura a Tre Livelli

Tecnologie di Sviluppo per il Web

La struttura dati ad albero binario

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans

Tecnologie di Sviluppo per il Web

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

manuale utente per Viabizzuno online

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Programmazione Orientata agli Oggetti in Linguaggio Java

Guida all uso di Java Diagrammi ER

Programmazione Orientata agli Oggetti in Linguaggio Java

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Capitolo 4 Pianificazione e Sviluppo di Web Part

7.4 Estrazione di materiale dal web

Programmazione Orientata agli Oggetti in Linguaggio Java

Introduzione alla rete Internet

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Oggetti Lezione 3. aspetti generali e definizione di classi I

Programmare in Java. Olga Scotti

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (utente singolo)

Manuale Utente Albo Pretorio GA

Programmazione Orientata agli Oggetti in Linguaggio Java

La struttura: DTD. Laura Farinetti Dip. Automatica e Informatica Politecnico di Torino. laura.farinetti@polito.it

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Programmazione Procedurale in Linguaggio C++

Gestione dei File in C

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

La sintassi di un DTD si basa principalmente sulla presenza di quattro dichiarazioni:

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Indice. Introduzione. Capitolo 1

Inizializzazione, Assegnamento e Distruzione di Classi

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Guida all uso di. a cura dell Area Economia Applicata (AEA) - IPI

Modulo 4: Ereditarietà, interfacce e clonazione

Esercizi di JavaScript

Corso di Informatica di base per le discipline umanistiche - XPATH

Programmazione a Oggetti Modulo B

Visibilità dei Membri di una Classe

Programmazione Orientata agli Oggetti in Linguaggio Java

Visual basic base Lezione 01. L'ambiente di sviluppo

Progettazione : Design Pattern Creazionali

Breve introduzione al Javadoc

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore

NVU Manuale d uso. Cimini Simonelli Testa

Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN)

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

MODA-ML: Esempi di XSL (Extensible Stylesheet Language) Vocabolario di supporto alla creazione di un set di Schemi di documenti XML

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Protocollo di tracciamento e valutazione degli studenti dei corsi di italiano ICoNLingua A.A

MANUALE UTENTE Fiscali Free

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

Test di unità con JUnit4

Le query. Lezione 6 a cura di Maria Novella Mosciatti

Introduzione a XML: Document Type Definition; parser XML; XML-schema; extensible Stylesheet Language. a.a. 2004/05 Tecnologie Web 1

Light CRM. Documento Tecnico. Descrizione delle funzionalità del servizio

Il Sistema Operativo: il File System

Java: Compilatore e Interprete

Gestione Risorse Umane Web

LABORATORIO DI INFORMATICA parte 6 -

Introduzione alla programmazione in C

SOMMARIO... 3 INTRODUZIONE...

Guida Compilazione Piani di Studio on-line

Appunti di Informatica 1

Manuale Operativo per l utilizzo della piattaforma E-Learning@AQ. Versione 1.1

flusso delle informazioni... 2 password... 3 password/ inserimento di una nuova richiesta... 4 le condizioni di vendita... 6

Main System Monitor Keyboard

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

Regione Piemonte Portale Rilevazioni Crediti EELL Manuale Utente

utente: collezione di contenuti e servizi sviluppatore: pagine e applicazioni

XML e PHP. Gestire XML con PHP. Appendice

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

1. Login.

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Guida di Pro Spam Remove

Programmazione Orientata agli Oggetti in Linguaggio Java

Introduzione a Dev-C++

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Prova di Laboratorio di Programmazione

Strutturazione logica dei dati: i file

Il database management system Access

Progettaz. e sviluppo Data Base

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Transcript:

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione XML: JDOM 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: JDOM >> Sommario Sommario Introduzione Operazioni Principali con JDOM Caricamento del DOM Visita del DOM Creazione del DOM Salvataggio del DOM Le Stesse Operazioni con JAXP Operazioni Avanzate con JDOM 2

Programmazione su XML: JDOM >> JDOM Introduzione JDOM una libreria alternativa per XML Rispetto a JAXP due differenze fondamentali I differenza: è pensata esplicitamente per Java e per risultare naturale allo sviluppatore Java II differenza: è pensata per essere semplice 3 Programmazione su XML: JDOM >> JDOM Introduzione JDOM come standard JDOM è stata proposta per la standardizzazione al Java Community Process sotto forma di JSR 102 ma la JSR (Java Specification Request) si è bloccata prima di essere approvata è possibile che in un prossimo futuro JDOM diventi una estensione standard della piattaforma 4

Programmazione su XML: JDOM >> JDOM Introduzione L approccio di JDOM JDOM è basato su JAXP incapsula i parser configurati per JAXP e consente di utilizzarli in modo più semplice in particolare, JDOM cerca di utilizzare il parser ed il motore di trasformazione di JAXP se non ci riesce, utilizza i suoi strumenti standard, ovvero xerces e xalan 5 Programmazione su XML: JDOM >> JDOM Introduzione L approccio di JDOM (continua) JDOM introduce varie semplificazioni rispetto a DOM incapsula le interfacce definite da DOM trasformandole in interfacce più semplici utilizza strumenti nativi di Java; es: nasconde NodeList e trasforma le collezioni di DOM in collezioni standard di Java 6

Programmazione su XML: JDOM >> JDOM Introduzione I package fondamentali di JDOM org.jdom contiene le classi corrispondenti agli elementi dell InfoSet org.jdom.input per il parsing di documenti org.jdom.output per la scrittura di doc. org.jdom.transform per XSLT org.jdom.xpath per XPath 7 Programmazione su XML: JDOM >> Operazioni Fondamentali con JDOM Operazioni Fondamentali con JDOM Nel seguito le operazioni fondamentali su documenti XML basate su JDOM In particolare generazione del DOM di un documento XML visita del DOM generato in memoria creazione e manipolazione di un DOM salvataggio del documento XML dal DOM 8

ATTENZIONE Operazioni Fondamentali con JDOM Una nota di metodo come affrontare lo studio di una libreria Imparare ad usare una libreria conoscerne i principi di funzionamento conoscerne i componenti (package e classi) conoscerne i metodi Nel caso di JDOM varie centinaia di metodi allo studio delle librerie 9 Programmazione su XML: JDOM >> Operazioni Fondamentali con JDOM Operazioni Fondamentali con JDOM >> JavaDoc di JDOM Impostazione della lezione verranno per cominciare illustrati i principi di funzionamento verranno elencati i principali componenti verranno illustrati i principali metodi Ma è impossibile descrivere tutti i metodi è necessario completare lo studio consultando di volta in volta la documentazione in formato JavaDoc 10

Caricamento del DOM Caricamento del DOM di un documento basato sulla classe SAXBuilder viene utilizzato il parser SAX, selezionato secondo le regole illustrate prima SAXBuilder usa però il parser SAX per costruire l intero albero di oggetti DOM (quindi il funzionamento di SAX è nascosto ) viene restituita la radice dell albero come riferimento di tipo org.jdom.document 11 Programmazione su XML: JDOM >> Operazioni Fondamentali con JDOM private static org.jdom.document costruiscidom(string nomefile) throws DAOException { org.jdom.input.saxbuilder builder = new org.jdom.input.saxbuilder(); builder.setvalidation(true); org.jdom.document document = null; try { document = builder.build(nomefile); return document; catch (org.jdom.jdomexception jde) { System.err.println(jde); throw new DAOException(jde); catch (java.io.ioexception ioe) { System.err.println(ioe); throw new DAOException(ioe); creazione del parser SAX richiede che il parser effettui la convalida rispetto ad un DTD il metodo build costruisce l albero di oggetti DOM e restituisce il riferimento alla radice le possibili eccezioni sono org.jdom.jdomexception e java.io.ioexception in questo metodo vengono trasformate e rilanciate (>>) 12

Visita del DOM Visita del DOM generato in memoria a questo punto posso visitare l albero oltre a org.jdom.document, ho varie classi corrispondenti ai vari tipi di nodo org.jdom.element org.jdom.attribute org.jdom.text org.jdom.doctype... 13 Programmazione su XML: JDOM >> Operazioni Fondamentali con JDOM Visita del DOM I metodi per la visita dell albero metodi che consentono di accedere ai figli di un nodo Esempio: la classe Element Element getchild(string name): restituisce il primo tra gli elementi figli con il nome specificato List getchildren(): restituisce tutti gli elementi figli List getchildren(string name): restituisce tutti gli elementi figli con il nome specificato 14

Visita del DOM Esempio: la classe Element (continua) String getattributevalue(string name): restituisce il valore dell attributo con il nome specificato String gettext(): restituisce il contenuto dei nodi testo figli dell elemento Nota i metodi sono scritti in modo da distinguere la categoria di figli restituiti in questo modo si aggirano molti dei problemi dovuti ai nodi di spazio bianco 15 Programmazione su XML: JDOM >> Operazioni Fondamentali con JDOM Visita del DOM Esempio estrazione della lista degli argomenti visito l albero a partire dalla radice alla ricerca dei nodi rilevanti analizzo i nodi che rappresentano argomenti, estraggo valori dai nodi incontrati e genero oggetti del mio modello (Argomento) li aggiungo al Questionario 16

public static Questionario caricaquestionario(string nomefile) throws DAOException { org.jdom.document document = costruiscidom(nomefile); Questionario questionario = new Questionario(); analizzaradice(document, questionario); riempiargomenti(document, questionario); riempidifficolta(document, questionario); riempiquesiti(document, questionario); return questionario; analizzo i nodi dell albero ed estraggo valori per gli oggetti del modello private static void analizzaradice (org.jdom.document document, Questionario questionario) { Element elementoradice = document.getrootelement(); String id = elementoradice.getattributevalue("id"); String disciplina = elementoradice.getattributevalue("disciplina"); questionario.setid(id); questionario.setdisciplina(disciplina); 17 Programmazione su XML: JDOM >> Operazioni Fondamentali con JDOM private static void riempiargomenti (org.jdom.document document, Questionario questionario) throws DAOException { org.jdom.element elementoradice = document.getrootelement(); org.jdom.element elementolistaarg = elementoradice.getchild("listaargomenti"); java.util.list listaarg = elementolistaarg.getchildren(); for (int i = 0; i < listaarg.size(); i++ ) { org.jdom.element elementoargomento = (org.jdom.element)listaarg.get(i); Argomento argomento = costruisciargomento(elementoargomento); questionario.addargomento(argomento); private static Argomento costruisciargomento(org.jdom.element elemargomento) { Argomento argomento = new Argomento(); String id = elemargomento.getattributevalue("id"); String nome = elemargomento.getattributevalue("nome"); argomento.setid(id); argomento.setnome(nome); return argomento; 18

Vista del DOM >> DAOQuestionario.java >> DAORisposte.java Analogamente nel caso in cui è necessario ricostruire un quesito a partire dal nodo elemento che rappresenta il quesito viene visitato il sottoalbero vengono estratti i valori e costruito l oggetto di tipo Quesito corrispondente Lo stesso processo viene utilizzato per caricare le risposte 19 Programmazione su XML: JDOM >> Operazioni Fondamentali con JDOM Creazione del DOM Creazione e manipolazione di un DOM in questo caso è necessario partire dagli oggetti del modello e a partire da quelli creare i nodi dell albero (nodo documento, eventuale dichiarazione di DTD, elementi, attributi, testo) connettendoli secondo le strutture richieste 20

Creazione del DOM Esempio creazione degli oggetti DOM corrispondenti alle risposte fornite dall utente parto da un oggetto di tipo Risposte creo un albero DOM che rappresenta l InfoSet di un documento conforme al DTD richiesto 21 Programmazione su XML: JDOM >> Operazioni Fondamentali con JDOM Creazione del DOM Il DTD delle risposte <?xml version="1.0" encoding="utf-8"?> <!ELEMENT risposte (listarisposte) > <!ATTLIST risposte idquestionario CDATA #REQUIRED > <!ELEMENT listarisposte (risposta)+ > <!ELEMENT risposta (#PCDATA) > <!ATTLIST risposta id ID #REQUIRED > 22

private static org.jdom.document costruiscidocumento() { org.jdom.document document = new org.jdom.document(); org.jdom.doctype doctype = new org.jdom.doctype("risposte", "risposte.dtd"); document.setdoctype(doctype); org.jdom.element radice = new org.jdom.element("risposte"); document.setrootelement(radice); return document; l oggetto DocType serve a specificare il DTD prevede di specificare il nome dell elemento radice e il riferimento al file contenente il DTD private static void completaradice(risposte risposte, org.jdom.document document){ org.jdom.attribute idquestionario = new org.jdom.attribute("idquestionario", risposte.getidquestionario()); org.jdom.element radice = document.getrootelement(); radice.setattribute(idquestionario); 23 Programmazione su XML: JDOM >> Operazioni Fondamentali con JDOM private static void aggiungilistarisposte(risposte risposte, org.jdom.document document) { org.jdom.element radice = document.getrootelement(); org.jdom.element elementolistarisposte = new org.jdom.element("listarisposte"); radice.addcontent(elementolistarisposte); for (int i = 0; i < risposte.getnumerorisposte(); i++) { aggiungirisposta(risposte, i, elementolistarisposte); private static void aggiungirisposta(risposte risposte, int i, org.jdom.element elementolistarisposte) { org.jdom.element elementorisposta = new org.jdom.element("risposta"); String risposta = risposte.getrisposta(i); elementorisposta.setattribute("id", "r" + i); elementorisposta.settext(risposta); elementolistarisposte.addcontent(elementorisposta); 24

Salvataggio del DOM Salvataggio del DOM creato una volta creato completamente l albero di oggetti DOM, è necessario salvarlo in un documento XML è necessario utilizzare un flusso inoltre è opportuno specificare le opzioni di formato desiderate: indentazione, utilizzo di caratteri di fine riga ecc. 25 Programmazione su XML: JDOM >> Operazioni Fondamentali con JDOM Salvataggio del DOM >> JavaDoc di Format Per il salvataggio del DOM è possibile utilizzare un oggetto di tipo org.jdom.output.xmloutputter Per specificare il formato è possibile utilizzare la classe org.jdom.output.format con varie opzioni di formato RawFormat, PrettyFormat, CompactFormat per ottenere ciascuno un opportuno metodo 26

private static void salvadocumento(org.jdom.document document, String nomefile) throws DAOException { org.jdom.output.xmloutputter outputter = new org.jdom.output.xmloutputter(); org.jdom.output.format format = org.jdom.output.format.getprettyformat(); format.setindent(" "); format.setlineseparator("\n"); outputter.setformat(format); java.io.filewriter filewriter = null; try { filewriter = new java.io.filewriter(nomefile); outputter.output(document, filewriter); catch (java.io.ioexception ioe) { throw new DAOException(ioe); finally { if (filewriter!= null) { try { filewriter.close(); catch (java.io.ioexception ioe) { l oggetto di tipo Format consente di specificare varie opzioni, tra cui -gli spazi da usare nell indentazione - il carattere da utilzzare come fine riga 27 Programmazione su XML: JDOM >> Le Stesse Operazioni con JAXP Le Stesse Operazioni con JAXP Nel complesso, con JDOM: 8 classi princ. org.jdom.input.saxbuilder org.jdom.jdomexception org.jdom.document org.jdom.element org.jdom.attribute (evitabile) org.jdom.doctype org.jdom.output.xmloutputter org.jdom.output.format 28

Programmazione su XML: JDOM >> Le Stesse Operazioni con JAXP Le Stesse Operazioni con JAXP Utilizzando JAXP >> DAOQuestionario.java >> DAORisposte.java questionari2, un applicazione identica scritta senza usare JDOM Caratteristiche fondamentali codice più verboso (circa un 25-30% in più) più classi utilizzate di package diversi è necessario sviluppare un ErrorHandler per gestire gli errori durante la convalida 29 Programmazione su XML: JDOM >> Le Stesse Operazioni con JAXP Le Stesse Operazioni con JAXP Le classi utilizzate: 16 (!) org.w3c.dom.document org.w3c.dom.element org.w3c.dom.attr org.w3c.dom.text org.w3c.dom.nodelist javax.xml.parsers.documentbuilderfactory javax.xml.parsers.documentbuilder javax.xml.parsers.parserconfigurationexception org.xml.sax.saxexception javax.xml.transform.transformerfactory javax.xml.transform.transformer javax.xml.transform.dom.domsource javax.xml.transform.stream.streamresult javax.xml.transform.transformerconfigurationexception javax.xml.transform.transformerexception 30

Programmazione su XML: JDOM >> Operazioni Avanzate con JDOM Operazioni Avanzate con JDOM Oltre alle operazioni di base JDOM supporta altre operazioni In particolare l utilizzo di XPath per specificare cammini nell InfoSet l utilizzo di XMLSchema invece dei DTD per la convalida dei documenti 31 Programmazione su XML: JDOM >> Operazioni Avanzate con JDOM Operazioni Avanzate con JDOM Utilizzo di XPath è possibile specificare cammini XPath e ottenere una lista che l insieme dei nodi risultato della valutazione del cammino la classe relativa è la classe XPath del package org.jdom.xpath Esempio estrarre i nodi risposta dal documento delle risposte 32

private static void estrairisposte(org.jdom.document document, Risposte risposte) { org.jdom.element radice = document.getrootelement(); String cammino = "/risposte/listarisposte/risposta"; java.util.list listanodirisultato = org.jdom.xpath.xpath.selectnodes(radice, cammino); for (int i = 0; i < listanodirisultato.size(); i++) { org.jdom.element nodo = (org.jdom.element)listanodirisultato.get(i); aggiungirisposta(risposte, nodo); -viene specificato un cammino -viene chiesto alla classe XPath di valutare il risultato del cammino a partire da un nodo di contesto (in questo caso la radice) 33 Programmazione su XML: JDOM >> Operazioni Avanzate con JDOM Operazioni Avanzate con JDOM L implementazione di XPath è possibile utilizzare varie implementazioni attraverso il valore della proprietà di sistema org.jdom.xpath.class o utilizzando il metodo setxpathclass() l implementazione standard è Jaxen, contenuto in jaxen-core.jar, jaxen-jdom.jar devono essere raggiungibili attraverso il CLASSPATH 34

Programmazione su XML: JDOM >> Operazioni Avanzate con JDOM Operazioni Avanzate con JDOM Utilizzo di XMLSchema non fa parte delle funzionalità incluse nel package JDOM ma del package JDOM-Contrib, scaricabile da www.jdom.org In particolare il package org.jdom.contrib.schema consente di effettuare convalide rispetto a vari tipi di schema 35 Programmazione su XML: JDOM >> Operazioni Avanzate con JDOM Operazioni Avanzate con JDOM Convalida rispetto ad uno schema può essere effettuata utilizzando la classe org.jdom.contrib.schema.schema supporta XMLSchema e la maggior parte degli schemi alternativi (Relax, Relax-NG, Trex, ecc.) si basa sul package Iso-Relax Verifier, contenuto in iso-relax.jar, che deve essere raggiungibile attraverso il CLASSPATH 36

Programmazione su XML: JDOM >> Operazioni Avanzate con JDOM Operazioni Avanzate con JDOM Per convalidare rispetto a XMLSchema import org.jdom.contrib.schema.schema; public void validate(org.jdom.document document, String URIDelloSchema) { Schema schema = Schema.parse(URIDelloSchema, Schema.W3C_XML_SCHEMA); java.util.list errori = schema.validate(document); if (errori!= null) { stampaerrori(errori); else { System.out.println( Documento valido rispetto allo schema ); il riferimento allo schema viene fornito sotto forma di URI del tipo file:///d:/schemi/questionario.xsd oppure http://www.w3c.org/schema.xsd 37 Programmazione >> Sommario Riassumendo Introduzione Operazioni Principali con JDOM Caricamento del DOM Visita del DOM Creazione del DOM Salvataggio del DOM Le Stesse Operazioni con JAXP Operazioni Avanzate con JDOM 38

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. 39