XML Schema WWW. Fabio Vitali



Documenti analoghi
XML Schema WWW. Fabio Vitali

XML Schema Definition (XSD)

Sommario. Oggi esaminiamo in breve XML Schema

2 Reti di Calcolatori XML

Definire linguaggi XML XSchema

La struttura: XML Schema

extensible Markup Language

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

APPENDICE C extensible Markup Language

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

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

XML (extensible Markup Language) e i Linguaggi di Schema

G I O R D A N I A L E S S A N D R A I T T S E R A L E G. M A R C O N I

XML (extensible Markup Language) e i Linguaggi di Schema

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

Laboratorio di Sistemi Distribuiti

Working Draft 0.5 (Telefonia)

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

Introduzione alla programmazione in C

4 3 4 = 4 x x x 10 0 aaa

Database. Si ringrazia Marco Bertini per le slides

Soluzione dell esercizio del 2 Febbraio 2004

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Creare documenti XML. La natura epistemologica della codifica. Perché comprare XML? La struttura gerarchica ordinata. Riassumendo le componenti

Rappresentazione grafica di entità e attributi

connessioni tra i singoli elementi Hanno caratteristiche diverse e sono presentati con modalità diverse Tali relazioni vengono rappresentate QUINDI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

XML extensible Markup Language

URI. Introduzione. Pag. 1

Document Type Definition (DTD)

Modellazione e Gestione di Informazioni non Strutturate

Esercitazione di Basi di Dati

DTD ed XML Schema - Esercizi

Basi di dati 9 febbraio 2010 Compito A

Corso sul linguaggio SQL

ScanDoc presentazione ed uso

Modulo 4: Ereditarietà, interfacce e clonazione

Funzioni in C. Violetta Lonati

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

2.0 Gli archivi. 2.1 Inserire gli archivi. 2.2 Archivio Clienti, Fornitori, Materiali, Noleggi ed Altri Costi. Impresa Edile Guida all uso

Convertitori numerici in Excel

Fasi di creazione di un programma

Sistemi di Numerazione Binaria NB.1

Entrare nel sistema. Clicca su Entra per entrare nel sistema. PAGINA 1

Database: collezione di fatti, registrabili e con un ben preciso significato, relazionati fra di loro

Tecnologie Web T XML Schema

Capitolo 4 Pianificazione e Sviluppo di Web Part

EXPLOit Content Management Data Base per documenti SGML/XML

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

Linguaggi per il web oltre HTML: XML

Lezioni di Matematica 1 - I modulo

Il Modello Relazionale

ENTRARE NEL SISTEMA. Clicca su Entra per entrare nel sistema. PAGINA 1

Metodologie di programmazione in Fortran 90

I database relazionali (Access)

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Laboratorio Matematico Informatico 2

PULSANTI E PAGINE Sommario PULSANTI E PAGINE...1

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

Lo schema concettuale risultante dalla progettazione concettuale è l input alla fase di progettazione logica.

Matematica in laboratorio

4 - XML e basi di dati

Manuale Utente Albo Pretorio GA

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

XML. (extensible Markup Language) Seconda parte

LE CARATTERISTICHE DEI PRODOTTI MULTIVARIANTE

PROCESSO DI INDICIZZAZIONE SEMANTICA

Invio Attestati ai Datori di lavoro in formato XML Specifiche Tecniche

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

per immagini guida avanzata Organizzazione e controllo dei dati Geometra Luigi Amato Guida Avanzata per immagini excel

ARCHIVI E DATABASE (prof. Ivaldi Giuliano)

Dispensa di database Access

Corso di Access. Prerequisiti. Modulo L2A (Access) 1.1 Concetti di base. Utilizzo elementare del computer Concetti fondamentali di basi di dati

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

Strutturazione logica dei dati: i file

Il linguaggio XML. Capitolo Introduzione al linguaggio XML

SISTEMI DI NUMERAZIONE IL SISTEMA DECIMALE

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

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

Università degli Studi di L Aquila. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Elettronica Corso di Sistemi Informativi

Richiesta pagina PHP (es: index.php)

XML. XML è contemporaneamente: XML non è:

Vincoli di integrità

GUIDA ALLA RILEVANZA

Probabilità discreta

XML (extensible Markup Language)

Corso di Informatica

Corso di Amministrazione di Reti A.A. 2002/2003

Gestione Iter Manuale Sistemista. Gestione Iter Manuale Sistemista

Concetti di base di ingegneria del software

Guida Compilazione Piani di Studio on-line

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

Creare un Ipertesto. 1

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

risulta (x) = 1 se x < 0.

Corso sul linguaggio SQL

Introduzione alla teoria dei database relazionali. Come progettare un database

Capitolo 2. Operazione di limite

Il database management system Access

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Transcript:

XML Schema Fabio Vitali

Sommario Oggi esaminiamo in breve XML Schema u Perché non bastano i DTD u Tipi ed elementi u Definizione di elementi ed attributi u Altri aspetti rilevanti di XML Schema A seguire: Motivazione (1) 2/47

Motivazione (1) Inizialmente si pensava che XML servisse solo per i documenti XML è più semplice di SGML, è più generale ed aperto di HTML, è lo strumento ideale per esprimere documenti di testo, siano essi libri, manuali o pagine Web. Quindi l enfasi iniziale era su internazionalizzazione, strutturazione, facilità di conversione, ecc. Raccoglieva in pieno l eredità di SGML. Lo sviluppo di XML era difatti condotto da membri della comunità SGML. A seguire: Motivazione (2) 3/47

Motivazione (2) Nasce poi l idea che XML possa servire per qualcosa di più: XML è (anche) un linguaggio di markup per trasferire dati: un meccanismo per convertire dati dal formato interno dell applicazione ad un formato di trasporto, facile da convertire in altri formati interni. Non pensato per la visione umana, ma per essere prodotto ed usato da programmi. XML è un interfaccia (Adam Bosworth): u Un interfaccia tra autore e lettore, attraverso XSL e XLink, per portare significato tra creatore ed utente u Un interfaccia tra applicazione ed applicazione, attraverso XML Schema, per esprimere contratti sui formati, e verificarne il rispetto. A seguire: Motivazione (3) 4/47

Motivazione (3) Tutta la faccenda del trasferimento dei dati si semplifica: i documenti strutturati e gerarchici sono un formato ragionevole di sintassi praticamente per qualunque cosa: documenti di testo, record di database, ecc. Nella W3C Note di Agosto 1999 (http://www.w3.org/tr/schema-arch) "Many data-oriented applications are being defined which build their own data structures on top of an XML document layer, effectively using XML documents as a transfer mechanism for structured data; A seguire: Validazione e buona forma 5/47

Validazione e buona forma La buona forma di un documento XML è una proprietà puramente sintattica. La validazione, viceversa, è la verifica di un impegno preso sopra al formato, ad un livello già semantico: u Mi impegno a scrivere dei documenti che siano formati da capitoli, ciascuno con un titolo e vari paragrafi, e ogni immagine con la sua didascalia. Per esprimere documenti di testo, i DTD probabilmente bastano, ma per esprimere blocchi di dati strutturati, è necessario un meccanismo di verifica più raffinato. XML Schema è stato pensato per fornire quel supporto di validazione che i DTD permettono solo parzialmente, in particolare sul contenuto degli elementi e degli attributi del documenti XML. A seguire: XML Schema e DTD (1) 6/47

XML Schema e DTD (1) Modularità u I DTD offrono le entità parametriche per tutto: content model ripetuti, frammenti di DTD riusabili, modularizzazione delle specifiche. u XML Schema offre: F Un meccanismo di inclusionie di file(differenziato e sofisticato) F Un sistema di tipi gerarchico e complesso F Un sistea di specifica di frammenti riutilizzabili di content model e attributi. Gestione dei namespace u I DTD ignorano i namespace. E' molto complesso far convivere DTD e qualifica degli elementi. u XML Schema permette esplicitamente di qualificare gli elementi e gli attributi, e fornisce molte funzionalità di estensione o limitazione dei vincoli sugli elementi a seconda del loro namespace. A seguire: XML Schema e DTD (2) 7/47

XML Schema e DTD (2) Vincoli su elementi e attributi u I DTD permettono un ragionevole controllo degli elementi strutturati, ma poca flessibilità sui content model misti. u Inoltre non permettono vincoli sugli elementi di testo (#PCDATA e CDATA) a parte le liste di valori negli attributi u XML Schema amplia il set di vincoli per gli elementi strutturati, ed è molto più flessibile negli elementi con CM misto. u Inoltre permette di definire tipi semplici, ovvero di esprimere vincoli su dati di tipo stringa, in maniera completa e sofisticata. Documentazione esplicita u Allegare documentazione per esseri umani in un DTD significa inserire commenti XML dentro al DTD. Questo è limitante e fragile (i parser eliminano i commenti). u XML Schema permette di inserire annotazioni in maniera esplicita e controllata, in maniera che sopravviva al parser. A seguire: XML Schema e DTD (3) 8/47

XML Schema e DTD (3) Sintassi XML u I DTD usano una sintassi propria e particolare, che richiede parser appositi e strumenti di generazione e verifica appositi. u XML Schema usa XML come sintassi. Tutti gli strumenti che si usano per XML sono immediatamente utili: parser, visualizzatori, verificatori, ecc. u Per contro, XML Schema è estremamente più verboso, tre o quattro volte più lungo del corrispondente DTD, e molto spesso meno chiaro da leggere. u Ci sono state molte obiezioni su questo specifico aspetto, ma TBL ha specificamente insistito per ricondurre tutto ad XML (altrimenti, che meta-sintassi sarebbe?) A seguire: XML Schema 9/47

XML Schema E una delle attività del working group su XML. Ha prodotto 7 generazioni di working draft, per poi divenire recommendation nel maggio del 2001. E diviso in tre parti: u XML Schema Part 0: Primer (un introduzione) u XML Schema Part 1: Structures (struttura del documento XML Schema) u XML Schema Part 2: Datatypes (modello dei dati e meccanismi di estensione dei tipi) A seguire: Formato di un XML Schema 10/47

Formato di un XML Schema Un documento di XML Schema è racchiuso in un elemento <schema>, e può contenere, in varia forma ed ordine, i seguenti elementi: u <import> ed <include> per inserire, in varia forma, altri frammenti di schema da altri documenti u <simpletype> e <complextype> per la definizione di tipi denominati usabili in seguito u <element> ed <attribute> per la definizione di elementi ed attributi globali del documento. u <attributegroup> e <group> per definire serie di attributi e gruppi di content model complessi e denominati. u <notation> per definire notazioni non XML all interno di un documento XML u <annotation> per esprimere commenti per esseri umani o per applicazioni diverse dal parser di XML Schema. A seguire: I tipi in XML Schema 11/47

I tipi in XML Schema XML Schema usa i tipi per esprimere vincoli sul contenuto di elementi ed attributi. u Un tipo semplice è un tipo di dati che non può contenere markup e non può avere attributi. In pratica è una sequenza di caratteri. E' una specificazione (e restrizione) di CDATA o #PCDATA. u Un tipo complesso è un tipo di dati che può contenere markup e avere attributi. E' l'equivalente di un tipo strutturato o misto. XML predefinisce un grande numero di tipi semplici: string, decimal, float, boolean, urireference, date, time, ecc. Ogni tipo semplice è caratterizzato da alcune proprietà, dette facets, che ne descrivono vincoli e formati (permessi ed obblighi). E data possibilità di derivare nuovi tipi, sia per restrizione che per estensione di permessi ed obblighi. A seguire: Tipi semplici 12/47

Tipi semplici Gli elementi e gli attributi sono istanze di un tipo. I tipi semplici sono tipi stringa non ulteriormente strutturati, e possono essere usati per entrambi. XML Schema non fa nessuna distinzione tra attributi ed elementi con content model testo. u <xsd:element name="price" type="xsd:decimal"/> u <xsd:attribute name="code" type="xsd:id"/> Sono predefiniti molti tipi semplici, che possono essere usati liberamente nelle definizioni. Il nome di un tipo semplice predefinito appartiene allo stesso namespace di XML Schema. E' possibile derivare i tipi semplici per restrizione, unione o lista. A seguire: Una lista parziale di tipi semplici 13/47

Una lista parziale di tipi semplici u string: una stringa di caratteri. u boolean: i valori 'true ' e 'false'. u decimal: una stringa di numeri (con segno e punto): '-34.15 ' u float: un reale in notazione scientifica: '12.78E-12 '. u duration : una stringa per una durata temporale nel formato PnYnMnDTnHnMnS. Ad esempio 'P1Y2M3DT10H30M ' è la durata di 1 anno, 2 mesi, 3 giorni, 10 ore, e 30 minuti. u date : una data nel formato CCYY-MM-DD: '2001-04-25 '. u time : un valore di orario nel formato hh:mm:ss con una appendice opzionale per l'indicazione del fuso orario. Es.: '13:20:00+01:00 ' significa 1:20 PM in Middle European Time (+01:00). u hexbinary: dati binari arbitrari in formato esadecimale: '0FB7'. u anyuri: la stringa di un URI, come "http://www.w3.org/ ". Accetta sia URI relativi che assoluti. u ID, IDREF: Una stringa senza whitespace con le stesse proprietà e vincoli di ID e IDREF nei DTD. A seguire: Derivazione per restrizione 14/47

Derivazione per restrizione Si parte da un tipo già definito e ne si restringe il set di valori leciti attraverso l'uso di facet: <xsd:element name="editore" type="teditore"/> <xsd:simpletype name="teditore"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="addison Wesley"/> <xsd:enumeration value="academic Press"/> <xsd:enumeration value="morgan Kaufmann"/> </xsd:restriction> </xsd:simpletype> <xsd:element name="data" type="tdatarecente"/> <xsd:simpletype name=" Tdatarecente"> <xsd:restriction base="xsd:date"> <xsd:mininclusive value="2002-01-01"/> </xsd:restriction> </xsd:simpletype> A seguire: Facets 15/47

Facets Per ogni tipo io posso precisare dei facets, delle caratteristiche indipendenti tra di loro che specificano aspetti del tipo: u length, minlength, maxlength: numero richiesto, minimo e massimo di caratteri u minexclusive, mininclusive, maxexclusive, maxinclusive: valore massimo e minimo, inclusivo ed esclusivo u precision, scale: numero di cifre significative e di decimali significativi u pattern: espressione regolare che il valore deve soddisfare u enumeration: lista all interno dei quali scegliere il valore (simile alla lista di valori leciti degli attributi nei DTD). u period, duration, encoding, ecc. A seguire: Derivazione per unione 16/47

Derivazione per unione L'insieme dei valori leciti è data dall'unione dei valori leciti di due tipi semplici. <xsd:element name="prezzo" type="tprezzo"> <xsd:simpletype name="tprezzo"> <xsd:union> <xsd:simpletype> <xsd:restriction base="xsd:decimal"> <xsd:minexclusive value="0.0"/> </xsd:restriction> </xsd:simpletype> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:enumeration value="gratis"/> </xsd:restriction> </xsd:simpletype> </xsd:union> </xsd:simpletype> A seguire: Derivazione per lista 17/47

Derivazione per lista Sono valori leciti una lista separata da virgole di valori del tipo semplice specificato. <xsd:simpletype name="tlistadinumeri"> <xsd:list itemtype='xsd:decimal'/> </xsd:simpletype> <xsd:attribute name="coord" type="tlistadinumeri"/> <area coord="25,30,75,90"/> A seguire: Tipi anonimi e tipi denominati 18/47

Tipi anonimi e tipi denominati In XML Schema i tipi possono essere predefiniti (solo x tipi semplici), denominati (con una definizione esplicita, come nei casi precedenti) o anonimi (interni alla definizione di un elemento) <xsd:element name="editore"> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:enumeration value="addison Wesley"/> <xsd:enumeration value="academic Press"/> <xsd:enumeration value="morgan Kaufmann"/> </xsd:restriction> </xsd:simpletype> </xsd:element> A seguire: Tipi complessi 19/47

Tipi complessi Sono tipi complessi: u Content model ANY ed EMPTY u Content model strutturati u Content model misti u Content model di qualunque tipo ma con attributi Non esistono tipi complessi predefiniti (o quasi). La derivazione può avvenire per restrizione o estensione. A seguire: Content model ANY ed EMPTY 20/47

Content model ANY ed EMPTY <xsd:element name="anything" type="xsd:anytype"/> <xsd:element name="empty"> <xsd:complextype/> </xsd:element> <xsd:complextype name="emptytypewithattributes"> <xsd:attribute name="first" type="xsd:string"/> <xsd:attribute name="second" type="xsd:decimal"/> </xsd:complextype> <xsd:element name="empty2" type="emptytypewithattributes"/> A seguire: Content model strutturati (1) 21/47

Content model strutturati (1) Come nei DTD si usano virgole e caret per specificare obblighi e scelte tra gli elementi di un content model complesso, così in XML schema si usano <choice>, <sequence> e <all>. Questi sostituiscono anche le parentesi. u La sequenza (A, B, C) diventa <xsd:sequence> <xsd:element name= A type="xsd:string"/> <xsd:element name= B type="xsd:string"/> <xsd:element name= C type="xsd:string"/> </xsd:sequence> u La scelta (A B C) diventa <xsd:choice> <xsd:element name= A type="xsd:string"/> <xsd:element name= B type="xsd:string"/> <xsd:element name= C type="xsd:string"/> </xsd:choice> A seguire: Content model complessi (2) 22/47

Content model complessi (2) u XML Schema riprende l'operatore & di SGML: tutti gli elementi debbono essere presenti, ma in qualunque ordine. (A & B & C) diventa: <xsd:all> <xsd:element name= A type="xsd:string"/> <xsd:element name= B type="xsd:string"/> <xsd:element name= C type="xsd:string"/> </xsd:all> N.B.: ci sono restrizioni: la struttura all può solo essere l'unica struttura di un tipo complesso (non posso usarla in espressioni più complesse). u Il raggruppamento non ha bisogno di parentesi: (A, ( B C)) diventa <xsd:sequence> <xsd:element name= A type="xsd:string"/> <xsd:choice> <xsd:element name= B type="xsd:string"/> <xsd:element name= C type="xsd:string"/> </xsd:choice> </xsd:sequence> A seguire: Content model complessi (3) 23/47

Content model complessi (3) Per specificare ripetibilità e facoltatività, si usano gli attributi minoccurs e maxoccurs: XML Schema permette non solo i valori 0, 1 e infinito, ma qualunque numero intero. Infinito è "unbounded", e può essere usato solo per maxoccurs. Per default entrambi valgono 1. Inoltre, minoccurs maxoccurs <xsd:element name="optional" type="x" minoccurs="0"/> <xsd:element name="repeat" type="x" maxoccurs="unbounded"/> <xsd:element name="free" type="x" minoccurs="0" maxoccurs="unbounded"/> <xsd:element name="counted" type="x" minoccurs="2" maxoccurs="4"/> Posso specificare questi attributi non solo per gli elementi, ma anche per le strutture (choice, sequence, all). Ad esempio, (A,B,C)* diventa: <xsd:sequence minoccurs="0" maxoccurs="unbounded"> <xsd:element name= A type="xsd:string"/> <xsd:element name= B type="xsd:string"/> <xsd:element name= C type="xsd:string"/> </xsd:sequence> A seguire: Content model misti (1) 24/47

Content model misti (1) Il content model misto aggiunge semplicemente l attributo mixed con valore true. Qualunque espressione di elementi viene rispettata, ma il PCDATA può comparire ovunque, prima o dopo questi elementi. <!ELEMENT para (#PCDATA em strong)*> <xsd:complextype name="paracontent" mixed="true"> <xsd:choice minoccurs="0" maxoccurs="unbounded"> <xsd:element name="em" type="paracontent"/> <xsd:element name="strong" type="paracontent"/> </xsd:choice> </xsd:complextype> <xsd:element name="para" type="paracontent"/> A seguire: Content model misti (2) 25/47

Content model misti (2) Ma si possono fare cose più complesse: <xsd:element name="review"> <xsd:complextype mixed="true"> <xsd:sequence> <xsd:element name="author" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="pub" type="xsd:string"/> </xsd:sequence> </xsd:complextype> </xsd:element> In questo caso il #PCDATA può comparire ovunque prima e dopo questi elementi, ma questi debbono essere posti esattamente in quell'ordine e in quel numero. A seguire: Content model con attributi 26/47

Content model con attributi Qualunque elemento preveda attributi è necessariamente di un tipo complesso. XML Schema differenzia infatti tra tipi complessi con contenuto semplice e tipi complessi con contenuto complesso. Questa è la definizione di un tipo il cui contenuto è semplice ma che prevede un attributo. <xsd:complextype name="prezzo"> <xsd:simplecontent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="valuta" type="xsd:string"/> </xsd:extension> </xsd:simplecontent> </xsd:complextype> <xsd:element name="price" type="prezzo"/> A seguire: Derivare tipi complessi 27/47

Derivare tipi complessi Ci sono due modi per derivare tipi complessi: u Per restrizione: si limitano ulteriormente i vincoli espressi: modificando minoccurs e maxoccurs, fissando dei valori per certi elementi o attributi, o imponendo ad un elemento un sottotipo del tipo originario. u Per estensione: aggiungendo al content model nuovi elementi o nuovi attributi. Attenzione: i nuovi elementi sono posti necessariamente alla fine degli altri. A seguire: Derivazione per restrizione 28/47

Derivazione per restrizione <xsd:complextype name='nomecognome'> <xsd:sequence> <xsd:element name='nome type= xsd:string minoccurs='0 maxoccurs= unbounded'/> <xsd:element name='cognome' type= xsd:string /> </xsd:sequence> </xsd:complextype> <xsd:complextype name= cognome > <xsd:restriction base= nomecognome > <xsd:element name='cognome' type= xsd:string /> </xsd:restriction> </xsd:complextype> <xsd:complextype name= nome > <xsd:restriction base= nomecognome > <xsd:element name='nome' type= xsd:string /> </xsd:restriction> </xsd:complextype> Perché questa no? A seguire: Derivazione per estensione 29/47

Derivazione per estensione <xsd:complextype name='nomecognome'> <xsd:sequence> <xsd:element name='nome type= xsd:string minoccurs='0 maxoccurs= unbounded'/> <xsd:element name='cognome' type= xsd:string /> </xsd:sequence> </xsd:complextype> <xsd:complextype name= nomecontitolo > <xsd:extension base= nomecognome > <xsd:sequence> <xsd:element ref='title minoccurs='0'/> </xsd:sequence> </xsd:extension> </xsd:complextype> A seguire: Definire elementi ed attributi 30/47

Definire elementi ed attributi n n n n Si usano gli elementi <element> e <attribute>. Se sono posti all interno del tag schema sono elementi ed attributi globali (possono essere root di documenti). Altrimenti sono usabili solo all interno di elementi che li prevedono come tipo. Questi hanno vari attributi importanti: u u u u u Name: il nome del tag o dell attributo (definizione locale) Ref: il nome di un elemento o attributo definito altrove (definizione globale) Type: il nome del tipo, se non esplicitato come content maxoccurs, minoccurs: il numero minimo e massimo di occorrenze Fixed, default, nullable, ecc.: specificano valori fissi, di default e determinano la possibilità di elementi nulli. A seguire: Definizioni locali o globali (1) 31/47

Definizioni locali o globali (1) Una definizione si dice globale se è posta all'interno del tag <schema>. In questo caso l'elemento o l'attributo è definito in maniera assoluta. L'elemento può essere un elemento radice del documento. Una definizione si dice locale se è inserita all'interno di un tag <complextype>. In questo caso l'elemento o l'attributo esiste solo se esiste un'istanza di quel tipo, e l'elemento non può essere un elemento radice del documento. A seguire: Definizioni locali o globali (2) 32/47

Definizioni locali o globali (2) E' possibile all'interno di un tipo complesso fare riferimento ad un elemento globale, usando l'attributo ref invece che name: <xsd:schema... > <xsd:element name="librieriviste"> <xsd:complextype> <xsd:choice maxoccurs="unbounded"> <xsd:element ref="libro"/> <xsd:element ref="rivista"/> </xsd:choice> </xsd:complextype> </xsd:element> <xsd:element name="libro" type="xsd:string"/> <xsd:element name="rivista" type="xsd:string"/> </xsd:schema> A seguire: Gruppi e gruppi di attributi 33/47

Gruppi e gruppi di attributi E possibile raccogliere gli elementi e gli attributi in gruppi: <xsd:element name= A > <xsd:complextype> <xsd:group ref= elema /> <xsd:attributegroup ref= attrsa /> </xsd:complextype> </xsd:element> <xsd:group name= elema /> <xsd:sequence> <xsd:element name= B type="xsd:string"/> <xsd:element name= C type="xsd:string"/> </xsd:sequence> </xsd:group> <xsd:attributegroup name= attrsa"> <xsd:attribute name= p type= xsd:string /> <xsd:attribute name= q type= xsd:string /> </xsd:attributegroup> A seguire: Annotazioni 34/47

Annotazioni Nei DTD l unico posto dove mettere note e istruzioni di compilazione sono i commenti. Però i commenti sono a perdere: possono essere mangiati in qualunque fase dell elaborazione. In XML Schema, invece, esiste un posto specifico dove mettere note ed istruzioni, l elemento <annotation>. L elemento <annotation> può contenere elementi <documentation> (pensati per essere letti da esseri umani) oppure elementi <appinfo>, pensati per essere digeriti da applicazioni specifiche <xsd:element name= pippo'> <annotation> <documentation>elemento pippo</documentation> </annotation>... Il resto della definizione </xsd:element> A seguire: I namespace (1) 35/47

I namespace (1) La dichiarazione di targetnamespace definisce il namespace del documento da validare. Gli attributi elementformdefault e attributeformdefault permettono di controllare se l uso del prefisso è necessario per i tipi non globali. <schema xmlns="http://www.w3.org/2000/08/xmlschema" xmlns:po="http://www.example.com/po1" targetnamespace="http://www.example.com/po1" elementformdefault="unqualified" attributeformdefault="unqualified"> <element name= A <element name= C type="po:prova"/> type="string"/> <complextype name= po:prova"> <sequence> <element name= B type= string > <element ref= C /> </sequence> </complextype> </schema> A seguire: I namespace (2) 36/47

I namespace (2) Quello che i namespace permettono di fare è di specificare regole di validazione solo su alcuni e non tutti i namespace del documento: <element name="htmlelement"> <complextype> <sequence> <any namespace="http://www.w3.org/1999/xhtml" minoccurs="1" maxoccurs="unbounded"/> </sequence> </complextype> </element> Nell attributo namespace dell elemento <any> posso specificare o un namespace vero e proprio, o i valori: u ##any: qualunque XML ben formato u ##local: qualunque XML non sia qualificato (cioè privo di dichiarazione di namespace) u ##other: qualunque XML tranne il target namespace A seguire: Local e global scope (1) 37/47

Local e global scope (1) Non funziona! <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:b="http://www.betterbooks.org" targetnamespace="http://www.betterbooks.org" > <xsd:element name="book"> <xsd:complextype> <xsd:sequence> <xsd:element name="author" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="pub" type="xsd:string"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema> <b:book xmlns:b="http://www.betterbooks.org"> <b:author>douglas Adams</b:author> <b:title>hitch-hikers Guide to the Galaxy</b:title> <b:pub>pan Books</b:pub> </b:book> A seguire: Local e global scope (2) 38/47

Local e global scope (2) Neanche questo funziona! <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.betterbooks.org" > <xsd:element name="book"> <xsd:complextype> <xsd:sequence> <xsd:element name="author" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="pub" type="xsd:string"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema> <book xmlns="http://www.betterbooks.org"> <author>douglas Adams</author> <title>hitch-hikers Guide to the Galaxy</title> <pub>pan Books</pub> </book> A seguire: Local e global scope (3) 39/47

Local e global scope (3) Questo invece funziona! <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.betterbooks.org" > <xsd:element name="book"> <xsd:complextype> <xsd:sequence> <xsd:element name="author" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="pub" type="xsd:string"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema> <b:book xmlns:b="http://www.betterbooks.org"> <author>douglas Adams</author> <title>hitch-hikers Guide to the Galaxy</title> <pub>pan Books</pub> </b:book> A seguire: Local e global scope (4) 40/47

Local e global scope (4) Gli attributi elementformdefault e attributeformdefault controllano se gli elementi e gli attributi locali siano per default qualificati o non qualificati. Per default sono NON qualificati, il che è ragionevole per gli attributi, e un po' una sorpresa per gli elementi. Si noti ad esempio che in RDF sia gli elementi che gli attributi debbono essere qualificati. Per rendere la o la seconda versione del documento valido, dobbiamo porre elementformdefault a qualificato, altrimenti non funziona niente. A seguire: Local e global scope (5) 41/47

Local e global scope (5) Così funziona! <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.betterbooks.org" elementformdefault="qualified"> <xsd:element name="book"> <xsd:complextype> <xsd:sequence> <xsd:element name="author" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="pub" type="xsd:string"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema> <b:book xmlns:b="http://www.betterbooks.org"> <b:author>douglas Adams</b:author> <b:title>hitch-hikers Guide to the Galaxy</b:title> <b:pub>pan Books</b:pub> </b:book> A seguire: Inclusioni e importazioni 42/47

Inclusioni e importazioni In XML Schema, esistono meccanismi per dividere lo schema in più file, o per importare definizioni appartenenti ad altri namespace u Include: Le nuove definizioni appartengono allo stesso namespace, ed è come se venissero inserite direttamente nel documento. u Redefine: come include, le definizioni appartengono allo stesso namespace, ma possono venire ridefiniti tipi, elementi, gruppi, ecc. u Import: le nuove definizioni appartengono ad un altro namespace, ed è l'unico modo per fare schemi che riguardino namespace multipli. <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.w1.org" xmlns="http://www.w1.org" xmlns:cd="http://www.w2.org"> <import namespace="http://www.w2.org" schemalocation="http://www.w2.org/s1.xsd"/> A seguire: Unicità e chiavi 43/47

Unicità e chiavi In XML Schema, è possibile richiedere che certi valori siano unici, o che certi valori siano chiavi di riferimenti, analoghi alla coppia ID/IDREF in XML classico. Tuttavia, è possibile specificare pattern molto complessi come elementi chiave. u Unicità: <xsd:unique name="code"> <xsd:selector xpath="/books/book"/> <xsd:field xpath="author"/> <xsd:field xpath="title"/> </xsd:unique> u Integrità referenziale <xsd:key name="code"> <xsd:selector xpath="/books/book"/> <xsd:field xpath="@code"/> </xsd:key> <xsd:keyref name="list" refer="code"> <xsd:selector xpath="/list/objects"/> <xsd:field xpath="@id"/> </xsd:keyref> A seguire: Riferirsi ad uno schema 44/47

Riferirsi ad uno schema <fv:pippo xmlns:fv = http://www.fabio.org/pippo xmlns:xsi= http://www.w3.org/2000/08/xmlschema xsi:schemalocation= http://www.fabio.org/pippo.xsi > </fv:pippo> Con l attributo schemalocation dentro all istanza del documento XML diamo un suggerimento sulla posizione dello schema al validatore (ma la stessa informazione può essere data off-line, ad esempio perché predefinita, o in un header della connessione HTTP). A seguire: Conclusioni 45/47

Conclusioni Oggi abbiamo parlato di XML Schema: u Motivazioni e status u Organizzazione dei tipi u Definizione di elementi ed attributi u Content model, gruppi ed altri aspetti A seguire: Riferimenti 46/47

Riferimenti n n P. V. Biron, A. Malhotra,XML Schema Part 2: Datatypes, W3C Recommendation 02 May 2001, http://www.w3.org/tr/xmlschema-2/ D. C. Fallside, XML Schema Part 0: Primer, W3C Recommendation, 2 May 2001,http://www.w3.org/TR/xmlschema-0/ n A. Malhotra, M. Maloney, XML Schema Requirements, W3C Note 15 February 1999, http://www.w3.org/tr/note-xml-schema-req n H. S. Thompson, D. Beech, M. Maloney, N. Mendelsohn, XML Schema Part 1: Structures, W3C Recommendation 2 May 2001,http://www.w3.org/TR/xmlschema-1/ Fine Presentazione