(copia cartacea disponibile in biblioteca)

Slides:



Advertisements
Presentazioni simili
Training On Line - CONP. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Pluriennali > Nuova Richiesta Si accede alla pagina di Richiesta.
Advertisements

Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
1 Tutto su liceoclassicojesi.it 1° Incontro sulla gestione di liceoclassicojesi.it.
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
Introduzione al DTD Mario Arrigoni Neri.
XML - Schema Mario Arrigoni Neri.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Package Utilizzo classi.
Massa Laura Mela Enrica
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Le gerarchie di tipi.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello
Frontespizio Economia Monetaria Anno Accademico
Programmazione Procedurale in Linguaggio C++
Programmazione 1 9CFU – TANTE ore
Canale A. Prof.Ciapetti AA2003/04
Fisica Computazionale I - 51 OPERAZIONI DI INPUT/OUTPUT Le operazioni di input/output sono estremamente complesse perche' implicano una sostanziale interazione.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Corso di Informatica (Basi di Dati)
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
eliana minicozzi linguaggi1a.a lezione2
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
JavaScript: Array JavaScript: Array.
Progetto di applicazioni grafiche. Disegno di forme complesse Prassi : un classe per ciascuna forma Progetta la forma individuando le componenti base.
Cos’è un problema?.
Argomenti della lezione
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
Importanza DTD La DTD (Document Type Definition) consente di dichiarare in maniera univoca la struttura di markup mediante la definizione dello schema.
JAVA Franco Bombi 8 ottobre FB Introduzione Java è un linguaggio di impiego generale, basato su classi e orientato agli oggetti Java.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Questionario di soddisfazione del servizio scolastico Anno scolastico 2011/2012 Istogramma- risposte famiglie.
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
1 Ly-LAB Sistema di gestione dei dati analitici di laboratorio.
Creare pagine web Xhtlm. Struttura di una pagina.
Studente: Luca Del Bolgia
Java come linguaggio di programmazione
Esempi risolti mediante immagini (e con excel)
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
© M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti A.A Package.
Ant Che cos’è Come si utilizza Funzionalità principali
Astrazione procedurale ed eccezioni
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Il numero più grande Accademia dei Lincei
Programmazione ad oggetti
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
Laboratorio di Servizi Web - servlet - Ardissono 1 Java Servlet API package javax.servlet: include classi e interfacce di gestione di servlet indipendenti.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Laboratorio di Servizi Web - XML - Ardissono 1 Rappresentazione ad oggetti di documenti XML Parser fanno analisi sintattica di documento XML ma, a meno.
A.a. 2004/05Tecnologie Web1 Introduzione a XML: Document Type Definition; parser XML; XML-schema; eXtensible Stylesheet Language.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
28/12/2001package 1 Package Pacchetti e interfacce.
Transcript della presentazione:

(copia cartacea disponibile in biblioteca) XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation, 2 May 2001 http://www.w3.org/TR/xmlschema-0/ (copia cartacea disponibile in biblioteca) Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono XML Schema - II Sintassi per specifica di struttura di documenti XML (documenti, strutture dati, ontologie, ...) più recente di DTD, specifica grammatica per rappresentazione di documenti XML specifica struttura dei dati specifica tipo del contenuto dei dati DTD specifica struttura dati, ma non contenuto <!ELEMENT price (#PCDATA)> <price>6.90</price> <price>ciao</price> OK!!!! PCDATA!!!! Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono XML Schema - III definizione struttura di elementi dei documenti tipi semplici (tipi XML built-in e derivati) tipi complessi (definiti combinando tipi semplici) permette di specificare elementi del documento necessari, opzionali, … XML schema è un documento XML, di estensione .xsd (W3C) o .xml (Microsoft) Es: coffeeOrder.xsd definisce struttura di documenti XML che descrivono ordini di caffè NB: esistono proposte di standard di rappresentazione da parte di Microsoft, W3C e altri. Noi vediamoW3C Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono address.xsd <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name=“billTo" type=“Address"/> <xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:string"/> </xsd:complexType> <billTo country="Italy"> <street>123 via Po</street> <name>Paolo Bianchi</name> <city>Torino</city> </billTo> <?xml version="1.0"?> <billTo country="Italy"> <name>Paolo Bianchi</name> <street>123 via Po</street> <city>Torino</city> </billTo> Laboratorio di Servizi Web - XML2 - Ardissono

Esempio di documento - coffeeOrd.xml <?xml version="1.0"?> <coffeeOrder orderDate="1999-10-20"> <billTo country="Italy"> <name>Paolo Bianchi</name> <street>123 via Po</street> <city>Torino</city> </billTo> <items> <item partNum="242-NO" > <coffeeName>Lavazza Oro</coffeeName> <quantity>5</quantity> <price>19.99</price> </item> <item partNum="242-MU" > <coffeeName>Nescafe</coffeeName> <quantity>3</quantity> <price>19.98</price> </items> </coffeeOrder> Laboratorio di Servizi Web - XML2 - Ardissono

coffeeOrder.xsd - I XML namespace Dichiarazione elemento XML <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="coffeeOrder" type="CoffeeOrderType"/> <xsd:complexType name="CoffeeOrderType"> <xsd:sequence> <xsd:element name="billTo" type="Address"/> <xsd:element name="items" type="Items"/> <xsd:element name=”comment" type=”xsd:string” minOccurs= ”0"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/> </xsd:complexType> Dichiarazione elemento XML Dichiarazione di tipo di dati complesso: sequenza di elementi fissa, simile a record dei linguaggi di programmazione Dichiarazione attributo di elementi di tipo CoffeeOrderType Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono coffeeOrder.xsd - II <xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:string"/> </xsd:complexType> elementi del complexType sono obbligatori elementi devono apparire nei documenti nell’ordine specificato dal complexType complexType definibili a partire da simpleType e altri complexTypes (es: CoffeeOrderType usa Address, date, ...) attributi possono solo essere di tipo simpleType <billTo country="Italy"> <name>Paolo Bianchi</name> <street>123 via Po</street> <city>Torino</city> </billTo> Laboratorio di Servizi Web - XML2 - Ardissono

coffeeOrder.xsd - III Sequenza di elementi variabile: contiene almeno un item <xsd:complexType name="Items"> <xsd:sequence> <xsd:element name="item" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:element name="coffeeName" type="xsd:string"/> <xsd:element name="quantity"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="price" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="partNum" type="xsd:string" use="required"/> </xsd:complexType> </xsd:schema> Dichiarazione anonymous di un tipo di dato complesso <item partNum="242-MU" > <coffeeName>Nescafe</coffeeName> <quantity>3</quantity> <price>19.98</price> </item> Laboratorio di Servizi Web - XML2 - Ardissono

coffeeOrder.xsd - IV Dichiarazione anonymous di tipo di dato semplice <xsd:complexType> <xsd:sequence> <xsd:element name="coffeeName" type="xsd:string"/> <xsd:element name="quantity"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="price" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="partNum" type="xsd:string" use="required"/> </xsd:complexType> Dichiarazione anonymous di tipo di dato semplice Dichiarazione di attributo necessario Laboratorio di Servizi Web - XML2 - Ardissono

Vincoli di occorrenza di elementi e attributi specificano min e max occorrenze di elementi. Es: <xsd:complexType name=”AnnotatedOrder"> <xsd:sequence> ... <xsd:element name=”comment" type=”xsd:string” minOccurs= ”0"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/> </xsd:complexType> Se non specificati, minOccurs=maxOccurs=1 <xsd:element name=”comment" type=”xsd:string” minOccurs= ”0” maxOccurs= ”3"/> Per attributi, minOccurs >= 0; maxOccurs =1 Elemento opzionale Laboratorio di Servizi Web - XML2 - Ardissono

Attributi: Valori di default Specificano valore assunto da attributo quando non specificato in documento XML. Es: <xsd:complexType name="Address"> …. <xsd:attribute name="country" type="xsd:string” minOccurs=”0” default=“Italy”/> </xsd:complexType> Si può specificare valore di default per i soli attributi opzionali Laboratorio di Servizi Web - XML2 - Ardissono

Attributi: Valori fissi Impongono valore fisso: se attributo specificato in documento XML, deve avere quel valore. Se omesso, valore associato automaticamente ( attributo opzionale) <xsd:complexType name="Address"> ... <xsd:attribute name="country" type="xsd:string” fixed=“Italy”/> </xsd:complexType> Default value e fixed values sono mutuamente esclusivi Laboratorio di Servizi Web - XML2 - Ardissono

Tipi di dati semplici (simpleType) - I Tutti i tipi XML base (string, float, date, …) Tipi derivati da tipi built-in e derivati stessi per restrizione <xsd:simpleType name=”MyInteger"> <xsd:restriction base=“xsd:integer”> <xsd:minInclusive value=”0"/> <xsd:maxInclusive value=”9"/> </xsd:restriction> </xsd:simpleType> per enumerazione <xsd:simpleType name=”Città"> <xsd:restriction base=“xsd:string”> <xsd:enumeration value=”Torino"/> <xsd:enumeration value=”Milano"/> <xsd:enumeration value=”Venezia"/> Si possono anche fare restrizioni per pattern (espressioni regolari) Laboratorio di Servizi Web - XML2 - Ardissono

Tipi di dati semplici (simpleType) - II Liste di elementi di tipi semplici (NON di complessi o di altre liste) <xsd:element name=”lista" type=”MyListType"/> <xsd:simpleType name=”MyListType"> <xsd:list itemType=“xsd:myInteger”> </xsd:simpleType> Si può specificare lunghezza fissa, minima, massima della lista, mediante restrizione <xsd:simpleType name=”SeiNumeri"> <xsd:restriction base=“MyListType”> <xsd:length value=“6”> </xsd:restriction> <lista>0 3 2 8 9 6 7 2 4 1</lista> Facets: length minLength maxLength Laboratorio di Servizi Web - XML2 - Ardissono

Tipi di dati complessi (complexType) - I Estensioni di tipi semplici (associo attributi a tipi semplici) <xsd:element name=”prezzo"/> <xsd:complexType> <xsd:simpleContent> <xsd:extension base=“xsd:decimal”> <xsd:attribute name=”valuta" type="xsd:string”/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:prezzo> Tipi complessi vuoti (senza elementi, solo attributi) <xsd:element name=”prezzo" type=”InternationalPrice"/> <xsd:complexType name=”InternationalPrice"> <xsd:attribute name=”valore" type="xsd:decimal”/> <prezzo valuta=”EUR”>35,7</prezzo> <prezzo valuta=”EUR” valore=“35,7”/> Laboratorio di Servizi Web - XML2 - Ardissono

Tipi di dati complessi - II Raggruppamento di elementi: sequence e choice <xsd:element name=”billTo" type=”Address"/> /> <xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> ... <xsd:choice> <xsd:element name="street" type="xsd:string"/> <xsd:element name=”PO-BOX" type="xsd:string"/> </xsd:choice> </xsd:sequence> </xsd:complexType> Gli elementi di choice sono mutuamente esclusivi nei documenti XML <billTo country=”Italy" > <name>Carla Verdi</name> <city>Roma</city> <PO-BOX>125</PO-BOX> </billTo> <billTo country=”GB" > <name>Paul Bley</name> <city>Londra</city> <street>Oxford Street</street> </billTo> Laboratorio di Servizi Web - XML2 - Ardissono

Derivazione di tipi complessi Per rappresentazione compatta dei dati e riutilizzazione di definizioni di tipi di dati derivazione per estensione derivazione per restrizione si possono anche ridefinire tipi di dati, ma trascuriamo Laboratorio di Servizi Web - XML2 - Ardissono

Derivazione di tipi complessi per estensione <xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:string"/> </xsd:complexType> Aggiungo campi “region” e “zip” <xsd:complexType name=”USAddress"> <xsd:complexContent> <extension base=“Address”> <xsd:sequence> <xsd:element name=”region" type="xsd:string"/> <xsd:element name=”zip" type=”positiveInteger"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> Laboratorio di Servizi Web - XML2 - Ardissono

Derivazione di tipi complessi per restrizione - I Restrizione di vincoli di occorrenza <xsd:complexType name="Items” type=“itemType”> <xsd:sequence> <xsd:element name="item" minOccurs=”0" maxOccurs=”unbounded"> </xsd:sequence> </xsd:complexType> <xsd:complexType name=”ConfirmedItems” type=“itemType”> <xsd:complexContent> <restriction base=“Items”> <xsd:element name="item" minOccurs=”1" maxOccurs=”100"> </xsd:restriction> </xsd:complexContent> Restringo cardinalità min e max di items Laboratorio di Servizi Web - XML2 - Ardissono

Derivazione di tipi complessi per restrizione - II Le restrizioni sono simili a quelle applicate ai tipi semplici … Altri tipi di restrizione: assegnazione di valore di default assegnazione di valore fisso restrizione di tipo (es: da anyType a positiveInteger) ... Laboratorio di Servizi Web - XML2 - Ardissono

Divisione di XML schema su file diversi Per gestire schemi grossi o condividere definizioni importazione di uno schema esterno <include schemaLocation=“http://www.example.com/schemas/address.xsd”/> address.xsd definisce il complexType Address schema importatore può dichiarare element di tipo Address come se definizione fosse interna uno schema può importare più schemi esterni mediante clausole “include” URI di shema Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono Namespace – ancora … Definisce spazio dei nomi per identificazione univoca di etichette e tipi di dati XML Schema namespace: specifica XML Schema W3C xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema” tipi di dato built-in di XML: xsd:string, xsd:decimal, ... parole riservate: element, attribute, sequence, simpleType, complexType, restriction, … si possono definire altri namespace, che identificano spazio dei nomi di definizioni introdotte da noi. Es: “http://www.example.com/C-ORDER” default name space: permette di usare nomi unqualified: xmlns=“http://www.w3.org/2001/XMLSchema” Laboratorio di Servizi Web - XML2 - Ardissono

Definizione e uso di Namespace - I Default namespace <schema xmlns:="http://www.w3.org/2001/XMLSchema” xmlns:co="http://www.example.com/C-ORDER” targetNamespace=“http://www.example.com/C-ORDER” > <include schemaLocation=“http://www.example.com/schemas/address.xsd”/> <element name="coffeeOrder" type=”co:CoffeeOrderType"/> <complexType name="CoffeeOrderType"> <sequence> <element name="billTo" type=”co:Address"/> ... </sequence> <attribute name="orderDate" type="date"/> </complexType> … </schema> Inclusione schema (URI) Nuovo namespace: C-ORDER coffeeOrder.xsd Schema, element, string, … unqualified perchè definiti in namespace di default Laboratorio di Servizi Web - XML2 - Ardissono

Definizione e uso di Namespace - II <schema xmlns="http://www.w3.org/2001/XMLSchema” xmlns:co="http://www.example.com/C-ORDER” targetNamespace=“http://www.example.com/C-ORDER” > <complexType name="Address"> <sequence> ... </sequence> <attribute name="country" type="string"/> </complexType> </schema> NB: definizioni appartengono a namespace C-ORDER coffeeOrder.xsd e address.xsd, insieme, formano spazio di nomi C-ORDER per definire ordini di caffè address.xsd Laboratorio di Servizi Web - XML2 - Ardissono

Validazione di documenti XML - I Per validare un documento XML rispetto a schema bisogna specificare XML-schema di riferimento Documento XML specifica i namespace usati xmlns=“http://www.example.com/C-ORDER”, ... qualifica i nomi (di tipi di dati, di etichette, …) se necessario  validatore estrae definizioni per verificare correttezza sintattica del documento Noi vediamo validazione (e gestione) di documenti XML in ambiente Java, basato su uso di JAXB Laboratorio di Servizi Web - XML2 - Ardissono

Validazione di documenti XML - II <?xml version="1.0"?> <co:coffeeOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance” xmlns:co="http://www.example.com/C-ORDER” orderDate="1999-10-20"> <billTo country="Italy"> <name>Paolo Bianchi</name> <street>123 via Po</street> <city>Torino</city> </billTo> <items> <item partNum="242-NO" > <coffeeName>Lavazza Oro</coffeeName> <quantity>5</quantity> <price>19.99</price> </item> </items> </co:coffeeOrder> Specifica namespaces per validazione myOrder.xml Laboratorio di Servizi Web - XML2 - Ardissono

Java Architecture for XML Binding - I per la descrizione di JAXB, vedere tutorial JWSDP1.1, JAXB: http://www.educ.di.unito.it/intranet/dol/jaxb-1.0/docs/index.html accedere alla user’s guide Laboratorio di Servizi Web - XML2 - Ardissono

Java Architecture for XML Binding - II Tecnologia Java volta a facilitare integrazione di XML in applicazioni Java Basata su idea di gestire documenti XML come oggetti appartenenti a classi Java che offrono metodi per ispezionare, modificare e creare oggetti Permette di leggere, e modificare documenti XML validi trascurando aspetti sintattici di XML creare nuovi documenti XML e validarli rispetto a schemi XML Gestire documenti XML validi direttamente in Java, senza passare a forma XML per validazione Laboratorio di Servizi Web - XML2 - Ardissono

Processo di XML data binding Dato XML schema, generare classi Java che rappresentano strutture dati dichiarate in schema (gerarchia di classi Java associate a tipi semplici e complessi) Classi generate possono essere usate in applicazioni per gestire oggetti XML (content tree) Unmarshal XML documents: lettura di un documenti XML e generazione dei corrispondenti oggetti Java Marshal XML documents: creazione di documenti XML corrispondenti a oggetto Java Laboratorio di Servizi Web - XML2 - Ardissono

Esempio: generazione classi da address.xsd <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name=”address" type=”Address"/> <xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:NMTOKEN"/> </xsd:complexType> </xsd:schema> address.xsd Address.java impl ... ObjectFactory.java jaxb.properties Laboratorio di Servizi Web - XML2 - Ardissono

Rappresentazione Java di XML Schema - I Definizioni di schema XML rappresentate in package che contiene java content interfaces: dichiarazioni di tipi di dati anonymous e non java Element interfaces: dichiarazioni di “element” dello schema, eventualmente inserite in liste di elementi Classi di tipi di dati enumerati: simple type definitions (con facets di enumerazione) Laboratorio di Servizi Web - XML2 - Ardissono

Rappresentazione Java di XML Schema - II ObjectFactory class offre metodi per istanziare interfacce java che rappresentano oggetti XML package (impl) con classi che implementano interfacce property files: specificano associazioni di nomi a classi, ... javadoc package Laboratorio di Servizi Web - XML2 - Ardissono

Interfaccia Address.java (generata) - I package coffee1; /** * Java content class for Address complex type. * <p>The following schema fragment specifies the expected content contained within this java content object. * <p> * <pre> * <complexType name="Address"> * <complexContent> * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> * <sequence> * <element name="name" type="{http://www.w3.org/2001/XMLSchema}string"/> * <element name="street" type="{http://www.w3.org/2001/XMLSchema}string"/> * <element name="city" type="{http://www.w3.org/2001/XMLSchema}string"/> * </sequence> * <attribute name="country" type="{http://www.w3.org/2001/XMLSchema}NMTOKEN" /> * </restriction> * </complexContent> * </complexType> * </pre> */ Per javadoc Laboratorio di Servizi Web - XML2 - Ardissono

Interfaccia Address.java (generata) - II public interface Address { java.lang.String getCountry(); void setCountry(java.lang.String value); java.lang.String getCity(); void setCity(java.lang.String value); java.lang.String getStreet(); void setStreet(java.lang.String value); java.lang.String getName(); void setName(java.lang.String value); } Un metodo di get e un metodo di set per ogni componente del tipo di dato Address getCountry() setCountry() getCity() …….. Laboratorio di Servizi Web - XML2 - Ardissono

Classe AddressImpl.java (generata) - I package coffee1.impl; public class AddressImpl implements coffee1.Address, com.sun.xml.bind.unmarshaller.UnmarshallableObject, com.sun.xml.bind.serializer.XMLSerializable, com.sun.xml.bind.validator.ValidatableObject { protected java.lang.String _Country; protected java.lang.String _City; protected java.lang.String _Street; protected java.lang.String _Name; private final static com.sun.msv.grammar.Grammar schemaFragment = com.sun.xml.bind.validator.SchemaDeserializer.deserialize(“…”); private final static java.lang.Class PRIMARY_INTERFACE_CLASS() { return coffee1.Address.class; } In package impl, classe AddressImpl.java implementa metodi dichiarati in Address.java Laboratorio di Servizi Web - XML2 - Ardissono

Classe AddressImpl.java (generata) - II ….. public java.lang.String getCountry() { return _Country; } public void setCountry(java.lang.String value) { _Country = value; … public com.sun.xml.bind.unmarshaller.ContentHandlerEx getUnmarshaller(com.sun.xml.bind.unmarshaller.UnmarshallingContext context) { return new coffee1.impl.AddressImpl.Unmarshaller(context); Implementazione dei metodi di get e di set di tutti gli elementi dello schema Laboratorio di Servizi Web - XML2 - Ardissono

Class AddressImpl.java (generata) - III public void serializeElements(com.sun.xml.bind.serializer.XMLSerializer context) throws org.xml.sax.SAXException { ... } public void serializeAttributes(com.sun.xml.bind.serializer.XMLSerializer context) throws org.xml.sax.SAXException ……… public class Unmarshaller extends com.sun.xml.bind.unmarshaller.ContentHandlerEx … etc etc Implementazione di Unmarshaller che interpreta documento XML e crea oggetto Java corrispondente Laboratorio di Servizi Web - XML2 - Ardissono

Interfacce e classi generate Interfacce e classi di implementazione generate da JAXB permettono ad applicazione java di generare oggetti secondo struttura dei tipi di dati definita in schema XML marshal e unmarshal tra XML e Java marshal di oggetto XML in DOM e altri formati  Compilato schema XML con JAXB Compiler, si possono gestire documenti XML validi rispetto a schema in ambiente Java senza usare SAX o altro Laboratorio di Servizi Web - XML2 - Ardissono

Classe ObjectFactory.java Offre metodi per creazione di (oggetti) istanze delle interfacce generate a partire dalle definizioni di tipi di dati e di elementi nello schema XML. Es: ObjectFactory obj = new ObjectFactory(); Address ad = obj.createAddress(); serve per generare oggetti che appartengono alle varie interfacce NB: una volta creati gli oggetti, si possono invocare i metodi degli oggetti per assegnare valori. Es: ad.setCountry(“Italy”); ad.setCity(“Torino”); ... Laboratorio di Servizi Web - XML2 - Ardissono

Binding tra tipi di dati XML built-in e tipi Java Laboratorio di Servizi Web - XML2 - Ardissono

Architettura di JAXB - I XML schema XML input documents Applicazione Codice di applicazione Schema derived interfaces JAXB Packages javax.xml.bind Unmarshal JAXB binding compiler XML output documents Schema derived Java classes Binding framework implementation Binding declarations Marshal Laboratorio di Servizi Web - XML2 - Ardissono

Architettura di JAXB - II Binding declarations: regole personalizzate di traduzione di schema in classi Java (sovrascrivono regole standard di JAXB. Es: a che package java devono appartenere le classi generate, che nome dare a classi generate a partire da definizioni di tipo in XML schema,…) Binding compiler: compilatore che legge XML schema e genera le classi Java JAXB Packages: librerie JAXB JAXB Binding framework implementation: runtime API. Offre interfacce per fare marshalling, unmarshalling e validazione di documenti XML Laboratorio di Servizi Web - XML2 - Ardissono

package javax.xml.bind - I Definisce classi astratte e interfacce usate (e implementate) in classi Java generate Unmarshaller: interpreta documenti XML e costruisce content tree (oggetto Java che corrisponde a documento XML) Validator: valida oggetti XML rispetto a schema XML Marshaller: genera documento XML che corrisponde a content tree gerarchia di classi evento ed eccezione usate durante marshal, unmarshal e validazione Laboratorio di Servizi Web - XML2 - Ardissono

package javax.xml.bind - II Classe JAXBContext gestisce corrispondenze tra nomi di elementi XML e interfacce generate da XML schema fornisce astrazione per gestire informazioni di binding usate in implementazione di operazioni marshal, unmarshal e validate applicazione java che vuole usare classi generate da JAXB compiler deve usare istanza di JAXBContext: JAXBContext jc = JAXBContext.newInstance(contextPath); contextPath: lista di nomi di package che contengono interfacce derivate da XML schema Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono Esempio di uso di JAXB Generazione di classi Java per schema coffeeOrder.xsd Compilazione classi generate Sviluppo di applicazione java che usa classi per leggere documenti XML modificarne contenuto generare documenti XML CLASSPATH: deve contenere classi di gestione di XML (parser XML, …) e compilatore JAXB (il vostro classpath è già a posto) Laboratorio di Servizi Web - XML2 - Ardissono

Uso di JAXB - SUGGERIMENTI JAXB, specialmente nella versione che state usando voi, non funziona perfettamente (le versioni più recenti sono migliori). Onde evitare di lottare contro i suoi bachi suggerisco di: Non definire mai tag XML che corrispondono a parole riservate (per esempio, “add”) Non definire mai tipi di dati (complexType, simpleType) con nomi che corrispondono, a meno di maiuscole e minuscole, a parole riservate o a nomi di tag definiti nello schema (es: element “address”, complexType “Address”) Inoltre, ma questo non è dovuto a bachi, l’elemento principale di uno schema DEVE avere lo stesso nome del file xsd (es: element “indirizzo” deve stare in file “indirizzo.xsd”) Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono coffeeOrder.xsd - I <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="coffeeOrder" type="CoffeeOrderType"/> <xsd:complexType name="CoffeeOrderType"> <xsd:sequence> <xsd:element name="billTo" type="Address"/> <xsd:element name="items" type="Items"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/> </xsd:complexType> <xsd:complexType name="Address"> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:attribute name="country" type="xsd:string"/> Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono coffeeOrder.xsd - II <xsd:complexType name="Items"> <xsd:sequence> <xsd:element name="item" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:element name="coffeeName" type="xsd:string"/> <xsd:element name="quantity"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="price" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="partNum" type="xsd:string" use="required"/> </xsd:complexType> </xsd:schema> Laboratorio di Servizi Web - XML2 - Ardissono

Compilazione schema XML Sintassi di invocazione di JAXB compiler (xjc): $JAXB_HOME/bin/xjc.sh XMLSchemaName -p packageName xjc: alias per invocazione di compilatore (va invocato essendo posizionati sulla directory D in cui c’è lo schema) Es: xjc coffeeOrder.xsd -p coffee1 Codice eseguibile del compilatore JAXB File XML-schema da compilare Nome package in cui salvare le classi generate crea directory coffee1 (all’interno di D) genera interfacce in directory coffee1 crea directory impl in D/coffee1 genera implementazioni in directory coffee1/impl Laboratorio di Servizi Web - XML2 - Ardissono

Classi generate sotto coffee1 e coffee1/impl Laboratorio di Servizi Web - XML2 - Ardissono

Compilazione interfacce e classi generate Interfacce e classi generate devono essere compilate come normali classi Java javac *.java impl/*.java Poi possono essere usate in altri programmi, MA: non è permesso generare direttamente oggetti a partire dalle interfacce, con “new” Address ad = new Address(); per generare oggetti di tali classi bisogna usare metodi offerti da ObjectFactory (vd dopo) Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono Applicazione java che crea documento XML contenente un indirizzo (Address) Sviluppiamo applicazione CreaAddress.java che Crea oggetto di tipo Address e ne istanzia le variabili produce file indirizzo.xml che contiene l’indirizzo in formato XML NB: Address è una delle classi generate dal compilatore JAXB, non necessariamente il tipo dell’elemento principale dello schema Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono CreaAddress.java - I import java.io.FileInputStream; import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import java.util.*; import java.io.*; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.UnmarshalException; import javax.xml.bind.Unmarshaller; import javax.xml.bind.ValidationEvent; import javax.xml.bind.util.ValidationEventCollector; import coffee1.*; Importo package coffee1 per usare classi generate da compilatore JAXB Laboratorio di Servizi Web - XML2 - Ardissono

CreaAddress.java - II Creo contesto JAXB per public class CreaAddress{ public static void main( String args[] ) { try { JAXBContext jc = JAXBContext.newInstance( “indirizzo1" ); ObjectFactory objFactory = new ObjectFactory(); Address ad = objFactory.createAddress(); // set properties on it ad.setName( “Giorgio” ); ad.setStreet( “via Po” ); ad.setCity( “Torino” ); … continua … Creo contesto JAXB per gestione di classi in coffee1 Usare nome di package indicato in fase di compilazione con JAXB compiler NB: creazione di oggetto Address NON si fa con“new”: si usa metodo di creazione offerto da ObjectFactory Laboratorio di Servizi Web - XML2 - Ardissono

CreaAddress.java - III Creo Marshaller per generazione XML e metto a true property di formattazione linee … continua … Marshaller m = jc.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); m.marshal(ad, System.out); OutputStream os = new FileOutputStream(“indirizzo.xml"); m.marshal(ad, os); } catch( UnmarshalException ue ) {System.out.println( "Caught UnmarshalException" );} catch( JAXBException je ) {je.printStackTrace();} catch( IOException ioe ) {ioe.printStackTrace();} } Marshal: genero XML document su standard output Marshal: genero XML document su file di output Catturo eccezioni JAXB, Unmarshall, ... Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono Applicazione java che legge da file XML, modifica e riscrive nuovo file XML Sviluppiamo applicazione TestCoffee.java che legge ordine di caffè (order1.xml) estrae indirizzo del destinatario e stampa informazioni a video estrae lista di item ordinati aggiunge un nuovo item all’ordine produce nuovo ordine, in file prova.xml di output Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono order1.xml <?xml version="1.0"?> <coffeeOrder orderDate="1999-10-20"> <billTo country="Italy"> <name>Chiara Bianchi</name> <street>123 via Po</street> <city>Torino</city> </billTo> <items> <item partNum="242-NO" > <coffeeName>Lavazza Oro</coffeeName> <quantity>5</quantity> <price>19.99</price> </item> <item partNum="242-MU" > <coffeeName>Nescafe</coffeeName> <quantity>3</quantity> <price>19.98</price> <item partNum="242-GZ" > <coffeeName>Kimbo</coffeeName> <price>27.95</price> </items> </coffeeOrder> Usiamo JAXB per interpretare e validare questo documento XML, e per modificarlo Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono TestCoffee.java - I import java.io.FileInputStream; import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import java.util.*; import java.io.*; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.UnmarshalException; import javax.xml.bind.Unmarshaller; import javax.xml.bind.ValidationEvent; import javax.xml.bind.util.ValidationEventCollector; import coffee1.*; Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono TestCoffee.java - II public class TestCoffee{ public static void main( String[] args ) { try { JAXBContext jc = JAXBContext.newInstance( "coffee1" ); Unmarshaller u = jc.createUnmarshaller(); u.setValidating( true ); CoffeeOrderType co = (CoffeeOrderType)u.unmarshal( new FileInputStream( "order1.xml" )); Address ad = co.getBillTo(); System.out.println(“Nome: “ + ad.getName()); Items itemList = co.getItems(); List items = itemList.getItem(); Items.ItemType i = newItem("Vergnano", new BigInteger("4"), new BigDecimal("21.00"), "NND980"); items.add(i); Marshaller m = jc.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); m.marshal(co, System.out); OutputStream os = new FileOutputStream("prova.xml"); m.marshal(co, os); } catch( UnmarshalException ue ) {System.out.println( "Caught UnmarshalException" );} catch( JAXBException je ) {je.printStackTrace();} catch( IOException ioe ) {ioe.printStackTrace();} } Laboratorio di Servizi Web - XML2 - Ardissono

TestCoffee.java - III Creo contesto JAXB per public class TestCoffee{ public static void main( String[] args ) { try { JAXBContext jc = JAXBContext.newInstance( "coffee1" ); Unmarshaller u = jc.createUnmarshaller(); u.setValidating( true ); CoffeeOrderType co = (CoffeeOrderType)u.unmarshal( new FileInputStream( "order1.xml" )); ------>>>>> continua Creo contesto JAXB per gestione di classi in coffee1 Creo Unmarshaller Abilito validazione XML Parsificazione documento order1.xml e creazione oggetto java NB: JAXB fa sempre validazione di documento, durante unmarshal. Documento validato rispetto a schema XML grazie a cast su classe corrispondente Laboratorio di Servizi Web - XML2 - Ardissono

TestCoffee.java - IV Estraggo indirizzo da elemento ditipo CoffeeOrderType Address ad = co.getBillTo(); System.out.println(“Nome: “ + ad.getName()); … stampare gli altri campi dell’indirizzo … Items itemList = co.getItems(); List items = itemList.getItem(); Items.ItemType i = newItem("Vergnano", new BigInteger("4"), new BigDecimal("21.00"), "NND980"); items.add(i); Estraggo campi di oggetto di tipo Address Estraggo elemento Items (che racchiude lista di Item) Estraggo lista di elementi di tipo Item Creo nuovo item, usando un mio metodo newItem e aggiungo item a lista Laboratorio di Servizi Web - XML2 - Ardissono

TestCoffee.java - V Creo Marshaller per generazione XML Marshaller m = jc.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); m.marshal(co, System.out); OutputStream os = new FileOutputStream("prova.xml"); m.marshal(co, os); } catch( UnmarshalException ue ) { System.out.println( "Caught UnmarshalException" ); } catch( JAXBException je ) { je.printStackTrace(); } catch( IOException ioe ) { ioe.printStackTrace(); } Creo Marshaller per generazione XML Marshal: genero XML document su standard output Marshal: genero XML document su file di output Catturo eccezioni JAXB, Unmarshall, ... Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono TestCoffee.java - VI public static Items.ItemType newItem(String name, BigInteger quantity, BigDecimal price, String partNum) throws JAXBException { // create an empty ItemType object ObjectFactory objFactory = new ObjectFactory(); Items.ItemType item = objFactory.createItemsItemType(); // set properties on it item.setCoffeeName( name ); item.setQuantity( quantity ); item.setPrice( price ); item.setPartNum( partNum ); // return it return item; } Laboratorio di Servizi Web - XML2 - Ardissono

Laboratorio di Servizi Web - XML2 - Ardissono Esercizi di uso di JAXB Tutorial in linea (JAXB User’s Guide) riporta esempi di applicazioni che usano classi generate da JAXB per interpretare e generare documenti XML Si veda la sezione Using JAXB http://www.educ.di.unito.it/intranet/dol/jwsdp-1.1/jaxb-1.0/docs/users-guide/jaxb-all.pdf Laboratorio di Servizi Web - XML2 - Ardissono