Laboratorio di Sistemi Distribuiti



Documenti analoghi
La struttura: XML Schema

2 Reti di Calcolatori XML

Definire linguaggi XML XSchema

DTD ed XML Schema - Esercizi

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

ASSEGNAZIONE FABBISOGNO

XML extensible Markup Language

ScanDoc presentazione ed uso

XML Schema WWW. Fabio Vitali

XML Schema Definition (XSD)

Basi di Dati Esercitazione per la II prova intermedia 2013

Sistema di Tracciabilità del Farmaco

XML Schema WWW. Fabio Vitali

Specifiche struttura del file dei rilievi Descrizione e XML Schema

Referti on-line e CRM ReView Service Monitor Specifiche tecniche

AVVISO DI PAGAMENTO. Descrizione del documento e schema XML. WebEDI Scambio elettronico documenti. AVVISO DI PAGAMENTO.doc

Esercitazione XML. Tecniche di Programmazione avanzata Corso di Laurea Specialistica in Ingegneria Telematica Università Kore Enna A.A.

Tecnologie Web T XML Schema

Laboratorio di Sistemi Distribuiti

Capitolo 3. XML: extensible Markup Language. Introduzione Logical Structures Document Type Definition Namespace XML - Schema

EDIZIONE FEBBRAIO 2012

Specifiche tecniche di trasmissione per i Comuni

WebEDI Tracciato XML del messaggio FATTURA

Progetto di Gestione Documenti in Ambiente Web

Document Type Definition (DTD)

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

OSSERVATORIO RIFIUTI SOVRAREGIONALE ~ ~ ~ IMPORTAZIONE AUTOMATICA DELLE IMFORMAZIONI SUI RIFIUTI RITIRATI E PRODOTTI DAGLI IMPIANTI.

Direzione Centrale Entrate Direzione Centrale Sistemi Informativi e Tecnologici. Roma, Messaggio n. 5880

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 12 Febbraio 2004

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

Documentazione API web v 1.0

Corso sul linguaggio SQL

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

SQL - Tipi di dato Il linguaggio SQL

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

EXCEL FUNZIONI PRINCIPALI

Corso di Informatica (Basi di Dati)

XML e Sistemi per la Gestione di Basi di Dati Relazionali

MANUALE DI INTEGRAZIONE API SMSSmart (v 2.2)

19. LA PROGRAMMAZIONE LATO SERVER

Laboratorio Progettazione Web Array in PHP Lezione 7. Andrea Marchetti IIT-CNR 2011/2012

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

QUALIFICAZIONE DELLA PORTA DI DOMINIO

Algebra di Boole ed Elementi di Logica

AVVISO DI MERCE PRONTA

Il Modello Relazionale

10 - Programmare con gli Array

(anno accademico )

Dati relazionali e XML

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

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

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Sistema DE.PRO.EM. Istruzioni per il caricamento delle informazioni relative ai prodotti tramite file XML. Versione 1.0

LINGUAGGI DI PROGRAMMAZIONE

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

Laboratorio di Basi di Dati e Web

Working Draft 0.5 (Telefonia)

Concetto di Funzione e Procedura METODI in Java

Sviluppo moduli OpenERP v7.0

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Il linguaggio XML. Capitolo Introduzione al linguaggio XML

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

XML (extensible Markup Language)

Dispensa YACC: generalità

User Tools: DataBase Manager

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

Groups vs Organizational Units. A cura di Roberto Morleo

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

IL MIO PRIMO SITO: NEWS

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

Lezione 4. Modello EER

Introduzione alla programmazione in C

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

ECDL - Database. European Computer Driving Licence - Modulo 5 - Database LEZIONE 2

WEB SERVICES SERVIZI PER RICEZIONE ED ELABORAZIONE MESSAGGI AMBIENTE REALE

Versioni x.7.9 Note Operative

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

RILEVAZIONE PRESENZE SPECIFICHE TECNICHE COLLOQUIO

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Esercizi Capitolo 6 - Alberi binari di ricerca

Gestione ex Inpdap SISTEMA INFORMATIVO DOMANDE DI PRESTAZIONI PENSIONISTICHE E NON PENSIONISTICHE

Il linguaggio di specifica formale Z

Introduzione alla teoria dei database relazionali. Come progettare un database

Sistemi avanzati di gestione dei Sistemi Informativi

Gestione ed analisi di base dati nell epidemiologia. delle malattie infettive

Guida all uso del web service SDMX

Gestione delle tabelle

Modello Relazionale dei DBMS - Vincoli Tradizionalmente, esistono quattro modelli logici: Gerarchico Reticolare Relazionale A oggetti XML I modelli

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

INPS. Area CRM & Contact Center. Sgravi Contrattazione di II livello 2012

OPC XML Data Access Specification.

2104 volume III Programmazione

Transcript:

Laboratorio di Sistemi Distribuiti Bianchi Marco Univ. Roma Tor Vergata November 8, 2006 Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 1 / 73

Introduzione ad XML (2/3) 1 Schemi XML Definizione di tipi semplici Definizione di tipi complessi Riusabilità degli Schema 2 Domande? Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 2 / 73

Schemi XML XML Schema è uno specifico linguaggio XML utile alla definizione della struttura e alla verifica di documenti XML. Uno schema XML rappresenta una sorta di contratto stipulato da coloro che utilizzano uno stesso tipo XML. Uno schema XML permette di definire, tra l altro: gli elementi che compaiono in un documento; l ordine e la relazione tra gli elementi; gli attributi di ogni elemento e se tali attributi sono opzionali o obbligatori o se hanno altre proprità speciali; il tipo di dato di ogni attributo. Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 3 / 73

Documenti ben formati e documenti validi Un documento XML si dice ben formato se rispetta le regole della sintassi XML Un documento XML si dice valido se è ben formato e rispetta regole definite da qualche schema. Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 4 / 73

Specifiche degli Schema XML XML Schema Part 0: Primer. Documento che introduce XML Schema presentando i concetti più utilizzati e riportando numerosi esempi. XML Schema Part 1: Structures. Documento che approfondisce le regole per la definizione di istanze di XML document-oriented. XML Schema Part 2: Datatypes. Documento che approfondisce le regole per la definizione di istanze di XML data-oriented. Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 5 / 73

Esempio di struttura definita da uno schema per PO.. Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 6 / 73

Struttura di base di un documento XML <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns="http://www.skatestown.com/ns/po" xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.skatestown.com/ns/po"> <xsd:annotation> <xsd:documentation xml:lang="en"> Purchase order schema for SkatesTown. </xsd:documentation> </xsd:annotation>... </xsd:schema> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 8 / 73

Come associare uno schema ad un documento <?xml version="1.0" encoding="utf-8"?> <po:po xmlns:po="http://www.skatestown.com/ns/po" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.skatestown.com/ns/po http://www.skatestown.com/schema/po.xsd" id="43871" submitted="2001-10-05">... </po:po> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 10 / 73

Tipi semplici I tipi semplici sono utili per la definizione di contenuti character-based come ad esempio valori di attributi ed elementi contenenti caratteri. <postalcode>01775<\postalcode> <item sku="947-ti" quantity="12"> La seguente tabella riporta alcuni tipi semplici: Simple Type Examples (delimited by commas) Notes string Confirm this is electric integer -126789, -1, 0, 1, 126789 positiveinteger 1, 126789 decimal -1.23, 0, 123.4, 1000.00 boolean true, false or 1, 0 time 13:20:00.000 or 13:20:00.000-05:00 date 1999-05-31 Name shipto XML 1.0 Name type QName po:usaddress XML Namespace QName ID XML 1.0 ID attribute type IDREF XML 1.0 IDREF attribute type Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 12 / 73

Estendere i tipi semplici È possibile personalizzare un tipo semplice definendo delle restrizioni sul dominio di definizione: length, minlength o maxlength. La lunghezza esatta, minima o massima di caratteri di un valore. pattern Il pattern sintattico che deve essere rispettato da un valore. enumeration Una lista di tutti i possibili valori. whitespace Le regole per la gestione degli spazi bianchi in un valore. minexclusive, mininclusive, maxinclusive and maxexclusive L intervallo di definizione di un valore numerico. totaldigits Il numero di posizioni decimali in un valore numerico. fractiondigits Il numero di posizioni decimali dopo la virgola in un valore numerico. Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 13 / 73

Alcuni esempi: <xsd:simpletype name="skutype"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{ 3} -[A-Z]{ 2} "/> </xsd:restriction> </xsd:simpletype> <xsd:simpletype name="poidtype"> <xsd:restriction base="xsd:integer"> <xsd:minexclusive value="10000"/> <xsd:maxexclusive value="100000"/> </xsd:restriction> </xsd:simpletype> <xsd:simpletype name="statetype"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="ak"/> <xsd:enumeration value="al"/> <xsd:enumeration value="ar"/>... </xsd:restriction> </xsd:simpletype> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 15 / 73

Tipi complessi Dato un elemento, i tipi complessi permettono di definire le sequenze e le molteplicità dei sotto-elementi, nome e tipo degli attributi, se tali attributi sono obbligatori o opzionali. La sintassi per la definizione dei tipi complessi è la seguente: <xsd:complextype name="typename"> <xsd:sometoplevelmodelgroup> <!-- Sequencing and multiplicity constraints for child elements defined using xsd:element --> </xsd:sometoplevelmodelgroup> <!-- Attribute declarations using xsd:attribute --> </xsd:complextype> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 17 / 73

Strumenti per la definizione di tipi complessi I top-level model group servono per definire le regole che devono essere rispettate dai sotto-elementi. I model group più utilizzati sono: xsd:sequence - A sequence of elements. xsd:choice - Allows one out of a number of elements. xsd:all - Allows a certain set of elements to appear once or not at all but in any order. xsd:group - References a model group that is defined someplace else. Questi modelli possono essere annidati per creare modelli ancor più complessi. Un sotto-elemento si specifica all interno di un model group attraverso xsd:element. La specifica del top-level model group è seguita dalla definizioni di un qualsiasi numero di attributi attraverso xsd:attribute. Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 18 / 73

Primo esempio: frammento dello schema PO. Definizione del tipo complesso Address. <xsd:complextype name="addresstype"> <xsd:sequence> <xsd:element name="name" type="xsd:string" minoccurs="0"/> <xsd:element name="company" type="xsd:string" minoccurs="0"/> <xsd:element name="street" type="xsd:string" maxoccurs="unbounded"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string" minoccurs="0"/> <xsd:element name="postalcode" type="xsd:string" minoccurs="0"/> <xsd:element name="country" type="xsd:string" minoccurs="0"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:id"/> <xsd:attribute name="href" type="xsd:idref"/> </xsd:complextype> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 20 / 73

Secondo esempio: frammento dello schema PO. Definizione del tipo complesso PO. <xsd:complextype name="potype"> <xsd:sequence> <xsd:element name="billto" type="addresstype"/> <xsd:element name="shipto" type="addresstype"/> <xsd:element name="order"> <xsd:complextype> <xsd:sequence> <xsd:element name="item" type="itemtype" maxoccurs="unbounded"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:sequence> <xsd:attribute name="id" use="required" type="xsd:positiveinteger"/> <xsd:attribute name="submitted" use="required" type="xsd:date"/> </xsd:complextype> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 22 / 73

Terzo esempio: frammento dello schema PO. Definizione del tipo complesso item. <xsd:complextype name="itemtype"> <xsd:sequence> <xsd:element name="description" type="xsd:string" minoccurs="0"/> </xsd:sequence> <xsd:attribute name="sku" use="required"> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{ 3} -[A-Z]{ 2} "/> </xsd:restriction> </xsd:simpletype> </xsd:attribute> <xsd:attribute name="quantity" use="required" type="xsd:positiveinteger"/> </xsd:complextype> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 24 / 73

Lo schema po.xsd: <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns="http://www.skatestown.com/ns/po" xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.skatestown.com/ns/po"> <xsd:annotation> <xsd:documentation xml:lang="en"> Purchase order schema for SkatesTown. </xsd:documentation> </xsd:annotation> <xsd:element name="po" type="potype"/> <xsd:complextype name="potype">... </xsd:complextype> <xsd:complextype name="addresstype">... </xsd:complextype> <xsd:complextype name="itemtype">... </xsd:complextype> </xsd:schema> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 26 / 73

Elementi Globali vs. Elementi Locali Qualsiasi elemento o attributo definito all interno della definizione di un tipo complesso è considerato locale alla definizione. Qualsiasi elemento o attributo definito a top-level (cioè come sotto-elemento di xsd:schema) è considerato globale. Esempio di definizione di attributo globale: <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns="http://www.skatestown.com/ns/priority" targetnamespace="http://www.skatestown.com/ns/priority" xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:attribute name="priority" use="optional" default="medium"> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:enumeration value="low"/> <xsd:enumeration value="medium"/> <xsd:enumeration value="high"/> </xsd:restriction> </xsd:simpletype> </xsd:attribute> </xsd:schema> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 28 / 73

Regole di base per la riusabilità degli Schema Le regole di base per la riusabilità degli schemi permettono di utilizzare quanto già definito. I meccanismi principali a supporto della riusabilità sono i seguenti: Element references Content model groups Attribute groups Schema includes Schema imports Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 29 / 73

Element references Si utilizza l attributo ref di xsd:element per riferirsi ad un elemento globale. Ad esempio: <xsd:element name="comment" type="xsd:string"/> <xsd:complextype name="persontype"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element ref="comment" minoccurs="0"/> </xsd:sequence> </xsd:complextype> <xsd:complextype name="tasktype"> <xsd:sequence> <xsd:element name="todo" type="xsd:string"/> <xsd:element ref="comment" minoccurs="0"/> </xsd:sequence> </xsd:complextype> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 31 / 73

Content Model Group Per riutilizzare gruppi di elementi si usa xsd:group. Ad esempio: <xsd:group name="comments"> <xsd:sequence> <xsd:element name="publiccomment" type="xsd:string" minoccurs="0"/> <xsd:element name="privatecomment" type="xsd:string" minoccurs="0"/> </xsd:sequence> </xsd:group> <xsd:complextype name="persontype"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:group ref="comments"/> </xsd:sequence> </xsd:complextype> <xsd:complextype name="tasktype"> <xsd:sequence> <xsd:element name="todo" type="xsd:string"/> Bianchi Marco <xsd:group (Univ. Roma Torref="comments"/> Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 33 / 73

Attribute Groups Per riutilizzare gruppi di elementi si usa xsd:attributegroup. Ad esempio: <xsd:attributegroup name="referenceable"> <xsd:attribute name="id" type="xsd:id"/> <xsd:attribute name="href" type="xsd:idref"/> </xsd:attributegroup> <xsd:complextype name="persontype"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> </xsd:sequence> <xsd:attributegroup ref="referenceable"/> </xsd:complextype> <xsd:complextype name="tasktype"> <xsd:sequence> <xsd:element name="todo" type="xsd:string"/> </xsd:sequence> <xsd:attributegroup ref="referenceable"/> </xsd:complextype> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 35 / 73

Schema Includes e Imports Consideriamo lo scenario in cui SkatesTown intenda riutilizzare la definizione di del tipo address per un nuovi schema relativo ad un mailing-list. SkatesTown deve affrontare le seguenti problematiche: Spostare la definizione del tipo address in un apposito schema; Riferire questo nuovo schema dallo schema che definisce l ordine d acquisto; Riferire questo nuovo schema dallo schema che definisce la mailing list; Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 36 / 73

Il nuovo schema per il tipo address: <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns="http://www.skatestown.com/ns/po" xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.skatestown.com/ns/po"> <xsd:annotation>... </xsd:annotation> <xsd:complextype name="addresstype"> <xsd:sequence> <xsd:element name="name" type="xsd:string" minoccurs="0"/> <xsd:element name="company" type="xsd:string" minoccurs="0"/> <xsd:element name="street" type="xsd:string" maxoccurs="unbounded" <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string" minoccurs="0"/> <xsd:element name="postalcode" type="xsd:string" minoccurs="0"/> <xsd:element name="country" type="xsd:string" minoccurs="0"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:id"/> <xsd:attribute name="href" type="xsd:idref"/> </xsd:complextype> </xsd:schema> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 38 / 73

Schema aggiornato che definisce il PO: <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns="http://www.skatestown.com/ns/po" xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.skatestown.com/ns/po"> <xsd:include schemalocation="http://www.skatestown.com/schema/address.xsd"/>... </xsd:schema> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 40 / 73

Schema che definisce la mailing list: <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns="http://www.skatestown.com/ns/po" xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.skatestown.com/ns/mailinglist"> <xsd:include schemalocation="http://www.skatestown.com/schema/address.xsd"/> <xsd:annotation> <xsd:documentation xml:lang="en"> Mailing list schema for SkatesTown. </xsd:documentation> </xsd:annotation> <xsd:element name="mailinglist"> <xsd:sequence> <xsd:element name="contact" type="addresstype" minoccurs="0" maxoccurs="unbounded"/> </xsd:sequence> </xsd:element> </xsd:schema> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 42 / 73

Vediamo un istanza dello schema precedente. <?xml version="1.0" encoding="utf-8"?> <list:mailinglist xmlns:list="http://www.skatestown.com/ns/mailinglist" xmlns:addr="http://www.skatestown.com/ns/po" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.skatestown.com/ns/mailinglist http://www.skatestown.com/schema/mailinglist.xsd http://www.skatestown.com/ns/po http://www.skatestown.com/schema/address.xsd"> <contact> <addr:company>the Skateboard Warehouse</addr:company> <addr:street>one Warehouse Park</addr:street> <addr:street>building 17</addr:street> <addr:city>boston</addr:city> <addr:state>ma</addr:state> <addr:postalcode>01775</addr:postalcode> </contact> </list:mailinglist> Problema : questo documento fa riferimento a due namespace diversi. Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 44 / 73

Si può rendere più leggibile l istanza XML appena presentata unificando i due due namespace nello schema che definisce la mailing list: <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns="http://www.skatestown.com/ns/po" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:addr="http://www.skatestown.com/ns/po" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.skatestown.com/ns/po http://www.skatestown.com/schema/address.xsd" targetnamespace="http://www.skatestown.com/ns/mailinglist"> <xsd:import namespace="http://www.skatestown.com/ns/po"/> <xsd:annotation>... </xsd:annotation> <xsd:element name="mailinglist"> <xsd:sequence> <xsd:element name="contact" type="addr:addresstype" minoccurs="0" maxoccurs="unbounded"/> </xsd:sequence> </xsd:element> </xsd:schema> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 46 / 73

Ora l istanza XML di mailing list risulta più leggibile: <?xml version="1.0" encoding="utf-8"?> <list:mailinglist xmlns:list="http://www.skatestown.com/ns/mailinglist" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.skatestown.com/ns/mailinglist http://www.skatestown.com/schema/mailinglist.xsd"> <contact> <company>the Skateboard Warehouse</company> <street>one Warehouse Park</street> <street>building 17</street> <city>boston</city> <state>ma</state> <postalcode>01775</postalcode> </contact> </list:mailinglist> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 48 / 73

Tecniche avanzate per la riusabilità degli schemi Consideriamo il formato della fattura (basata su PO) che SkatesTown invierà a Skateboard Warehouse. <?xml version="1.0" encoding="utf-8"?> <invoice:invoice xmlns:invoice="http://www.skatestown.com/ns/invoice" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.skatestown.com/ns/invoice http://www.skatestown.com/schema/invoice.xsd" id="43871" submitted="2001-10-05"> <billto id="addr-1">...</billto> <shipto href="addr-1"/> <order> <item sku="318-bp" quantity="5" unitprice="49.95"> <description>skateboard backpack; five pockets</description> </item> </order> <tax>89.89</tax> <shippingandhandling>200</shippingandhandling> <totalcost>2087.64</totalcost> </invoice:invoice> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 50 / 73

Il documento invoice è molto simile a OP, con poche ma importanti differenze: Invoice usa un namespace differente (http://www.skatestown.com/ns/invoice). L elemento root del documento è invoice e non po. L elemento invoice ha tre sottolementi addizionali: tax, shippingandhandling, e totalcost. L elemento item ha un attributo addizionale: unitprice. Come è possibile riutilizzare lo schema di PO per definire lo schema di invoice? Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 52 / 73

Principi di progettazione Immaginando che PO, Address e Item siano classi Java: class Address {... } class Item {String sku; int quantity;} class InvoiceItem extends Item {float unitprice;} class PO { int id; Date submitted; Address billto; Address shipto; Item order[]; } class Invoice extends PO { float tax; float shippingandhandling; float totalcost; } Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 54 / 73

Al fine di utilizzare un array di InvoiceItem ed evitare continui downcasting: class Invoice { int id; Date submitted; Address billto; Address shipto; InvoiceItem order[]; float tax; float shippingandhandling; float totalcost; } Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 56 / 73

Estendere uno schema <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns="http://www.skatestown.com/ns/invoice" targetnamespace="http://www.skatestown.com/ns/invoice" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:po="http://www.skatestown.com/ns/po"> <xsd:import namespace="http://www.skatestown.com/ns/po" schemalocation="http://www.skatestown.cm/schema/po.xsd"/> <xsd:annotation>...</xsd:annotation> <xsd:element name="invoice" type="invoicetype"/> <xsd:complextype name="invoicetype"> <xsd:sequence> <xsd:element name="billto" type="po:addresstype"/> <xsd:element name="shipto" type="po:addresstype"/> <xsd:element name="order"> <xsd:complextype> <xsd:sequence> <xsd:element name="item" type="itemtype" maxoccurs="unbounded"/> </xsd:sequence> </xsd:complextype> </xsd:element> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 58 / 73

<xsd:element name="tax" type="pricetype"/> <xsd:element name="shippingandhandling" type="pricetype"/> <xsd:element name="totalcost" type="pricetype"/> </xsd:sequence> <xsd:attribute name="id" use="required" type="xsd:positiveinteger"/> <xsd:attribute name="submitted" use="required" type="xsd:date"/> </xsd:complextype> <xsd:complextype name="itemtype"> <xsd:complexcontent> <xsd:extension base="po:itemtype"> <xsd:attribute name="unitprice" use="required" type="pricetype" </xsd:extension> </xsd:complexcontent> </xsd:complextype> <xsd:simpletype name="pricetype"> <xsd:restriction base="xsd:decimal"> <xsd:mininclusive value="0"/> </xsd:restriction> </xsd:simpletype> </xsd:schema> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 60 / 73

Sintassi per l estensione e la restrizione <xsd:complextype name="..."> <xsd:complexcontent> <xsd:extension base="..."> <!-- Optional extension content model --> <!-- Optional extension attributes --> </xsd:extension> </xsd:complexcontent> </xsd:complextype> <xsd:complextype name="..."> <xsd:complexcontent> <xsd:restriction base="..."> <!-- Content model and attributes --> </xsd:restriction> </xsd:complexcontent> </xsd:complextype> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 62 / 73

Esempio di restrizione <xsd:complextype name="corporateaddresstype"> <xsd:complexcontent> <xsd:restriction base="addresstype"> <xsd:sequence> <!-- Add maxoccurs="0" to delete optional name element --> <xsd:element name="name" type="xsd:string" minoccurs="0" maxoccurs="0"/> <!-- The rest is the same as in addresstype --> <xsd:element name="company" type="xsd:string" minoccurs="0"/> <xsd:element name="street" type="xsd:string" maxoccurs="unbounded"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string" minoccurs="0"/> <xsd:element name="postalcode" type="xsd:string" minoccurs="0"/> <xsd:element name="country" type="xsd:string" minoccurs="0"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:id"/> <xsd:attribute name="href" type="xsd:idref"/> </xsd:restriction> </xsd:complexcontent> </xsd:complextype> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 64 / 73

L importanza di xsi:type Per identificare il reale schema di un tipo utilizzato in un istanza XML si utilizza xsi:type. Ad esempio: <?xml version="1.0" encoding="utf-8"?> <po:po xmlns:po="http://www.skatestown.com/ns/po" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.skatestown.com/ns/po http://www.skatestown.com/schema/po.xsd" id="43871" submitted="2001-10-05"> <billto xsi:type="po:corporateaddresstype"> <company>the Skateboard Warehouse</company> <street>one Warehouse Park</street> <street>building 17</street> <city>boston</city> <state>ma</state> <postalcode>01775</postalcode> </billto>... </po:po> A volte e utile ricorrere all utilizzo di xsi:type per aggirare problemi dovuti a una cattiva progettazione degli schemi. Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 66 / 73

Supponiamo di aver definito il tipo invoice attraverso l estensione del tipo PO. <xsd:complextype name="invoicetype"> <xsd:complexcontent> <xsd:extension base="po:potype"> <xsd:element name="tax" type="pricetype"/> <xsd:element name="shippingandhandling" type="pricety <xsd:element name="totalcost" type="pricetype"/> </xsd:extension> </xsd:complexcontent> </xsd:complextype> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 68 / 73

Utilizzando xsi:type possiamo specificare il tipo itemtype di invoice. <order> <item sku="318-bp" quantity="5" unitprice="49.95" xsi:type="invoice:itemtype"> <description>skateboard backpack; five pockets</description> </item> <item sku="947-ti" quantity="12" unitprice="129.00" xsi:type="invoice:itemtype"> <description>street-style titanium skateboard.</description> </item> <item sku="008-pr" quantity="1000" unitprice="0.00" xsi:type="invoice:itemtype"> <description>promotional: SkatesTown stickers</description> </item> </order> Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 70 / 73

A volte l utilizzo di xsi:type può risultare conveniente. Immaginiamo di voler specializzare ulteriormente gli indirizzi di intestazione e consegna. Address- Nessuna modifica. USAddress- Country non è permesso e il CAP deve seguire il pattern 5. (- 4. )?. UKAddress- Country è fissato e il CAP deve seguire il pattern [0-9A-Z] 3 [0-9A-Z] 3. Per avere la miglior validazione possibile le applicazioni di SkatesTown devono conoscere l esatto tipo degli indirizzi usati nel documento. Senza xsi:type sia lo schema po che invoice devono definire 9 possibili combinazioni di elementi billto e shipto: billto/shipto, billto/shiptous, billto/shiptouk, billtous/shipto, and così via. In casi del genere è meglio utilizzare xsi:type per indicare l esatto tipo di indirizzo direttamente nell istanza XML. Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 72 / 73

Bianchi Marco (Univ. Roma Tor Vergata) Laboratorio di Sistemi Distribuiti November 8, 2006 73 / 73