Roberta Gerboni
Introduzione Lo sviluppo tecnologico relativo alle reti il crescente sviluppo della distribuzione di hardware per la comunicazione hanno reso necessaria Semantic Web significa un Web comprensibile per le macchine. Esse devono essere in grado di comunicare tra loro scambiandosi dati aventi un preciso significato: non semplici dati ma informazioni. la definizione di standard per lo scambio di documenti e informazioni. Presupposto per lo scambio di dati fra le applicazioni è che le macchine comprendano i dati del Web. Questo è possibile strutturando le informazioni al momento della loro archiviazione. 2
Le origini: SGML Da molti anni le organizzazioni per la standardizzazione lavorano alla definizione di linguaggi di scambio di informazioni. Già nel 1986 l International Organization for Standardization (ISO) approvò lo standard ISO n.8879 con il nome: SGML (Standard Generalized Markup Language) SGML è stato sviluppato dal 1960 al 1980 ed è un metalinguaggio, cioè un linguaggio usato per la descrizione di altri linguaggi, che serve per definire linguaggi di tipo markup. La sua caratteristica principale è quella di fornire una modalità di codifica dei documenti ipertestuali in modo da renderli indipendenti dalla macchina e dalla loro piattaforma software. Deve essere possibile leggere documenti creati da altri anche se questi sono stati realizzati con applicativi diversi. Per rendere chiara ed esplicita l'interpretazione di ogni parte di un documento, viene usato un meccanismo di codifica detto markup; questo meccanismo permette di descrivere, usando particolari simboli (detti tag), la struttura di un documento, indicando, ad esempio, l'inizio e la fine di una parola o l'inizio e la fine delle varie parti di cui si compone un documento (paragrafi, sezioni, capitoli). Tutto ciò prima che nascesse il world wide web e si moltiplicassero siti e portali. 3
Esempio di SGML Un documento in un linguaggio di markup definito sulla base di SGML è sempre composto delle seguenti tre parti: <!SGML ISO 8879:1986...> <!DOCTYPE NOVEL [ <!ELEMENT NOVEL (FRONT,CONTENT) > <!ELEMENT FRONT (TITLE, SUBTITLE?, AUTHOR)> <!ELEMENT CONTENT (CHAPTER)+ > <!ELEMENT CHAPTER (TITLE, PARA+)> <!ELEMENT TITLE #PCDATA > <!ELEMENT SUBTITLE #PCDATA > <!ELEMENT AUTHOR #PCDATA > <!ELEMENT PARA #PCDATA > ]> <NOVEL> <FRONT> <TITLE>Three men in a boat</title> <SUBTITLE>To say nothing of the dog!</subtitle> <AUTHOR>Jerome K. Jerome</AUTHOR> </FRONT> <CONTENT> <CHAPTER> <TITLE>Chapter 1</TITLE> <PARA>There were four of us... </PARA> <PARA>We were all feeling... </PARA> </CHAPTER> </CONTENT> </NOVEL> Dichiarazione SGML Una dichiarazione SGML è lunga varie centinaia di righe. Non è obbligatoria. Se è assente, viene usata una dichiarazione di default detta Reference Concrete Syntax. La RCS definisce lunghezze e sintassi standard (come l'uso del carattere "<" per indicare l'inizio del tag) DTD Document Type Definition La dichiarazione del tipo del documento serve a specificare le regole che permettono di verificare la correttezza strutturale di un documento. Istanza del documento L istanza del documento è quella parte del documento che contiene il testo vero e proprio, dotato del markup appropriato. Esso contiene una collezione di elementi, attributi, entità, PCDATA, commenti, ecc. Le applicazioni SGML sono in grado di verificare se l istanza del documento segue le regole specificate nel DTD, e di identificare le violazioni. 4
Parser SGML L'elaborazione SGML si compone fondamentalmente di un programma in grado di verificare la correttezza formale di un sorgente SGML in base al suo DTD. Questo tipo di programma è l'analizzatore SGML (SGML parser) e il suo compito si estende frequentemente alla generazione di un risultato intermedio, pronto per una rielaborazione successiva, normalmente attraverso programmi e sistemi di composizione tipografica. Documento preelaborato secondo il DTD 5
Le origini: XML XML è stato sviluppato dal World Wide Web Consortium (W3C). Nel 1996 è stato formato un gruppo di lavoro con l incarico di definire un linguaggio a markup estensibile di uso generale. Nel 1998 sono state rilasciate le specifiche di XML come W3C Recommendation e aggiornate nel 2004. XML deriva da SGML, un linguaggio di markup (ISO 8879) e nasce come un sottoinsieme semplificato di SGML orientato all utilizzo su World Wide Web. XML ha assunto ormai un ruolo autonomo e una diffusione ben maggiore del suo progenitore. Metalinguaggi 6
Metalinguaggi e linguaggi di markup 7
XML XML (Extensible Markup Language) è lo standard più utilizzato per l interscambio: di documenti prodotti con applicazioni software diverse di dati tra DBMS di produttori diversi. I documenti scritti in XML sono destinati ad essere interpretati da applicazioni. Volendo fare un confronto: HTML è concepito per la visualizzazione dati in formato ipertestuale e multimediale XML è concepito per La creazione, la memorizzazione e la distribuzione (interscambio) di dati e NON la visualizzazione 8
Caratteristiche di XML È un metalinguaggio, che permette di definire sintatticamente linguaggi di markup. XML permette di esplicitare la struttura di un documento in modo formale mediante marcatori che vanno inclusi all interno del testo. Permette la rappresentazione di qualsiasi tipo di documento (e di struttura testuale) indipendentemente dalle finalità applicative. Adotta un formato di file di tipo testuale: sia il markup sia il testo sono stringhe di caratteri e si basa sul sistema di codifica dei caratteri ISO 10646/UNICODE. Per la sua sintassi rigorosa e allo stesso tempo flessibile può essere usato per la rappresentazione di dati strutturati (archivi, tabelle, matrici) e in alternativa ai formati di database tradizionali Un documento XML è leggibile da un utente umano senza la mediazione di software specifico. È indipendente dal tipo di piattaforma hardware e software su cui viene utilizzato. È uno standard di pubblico dominio e ogni software conforme XML è in grado di gestire dati in formato XML 9
Caratteristiche di XML Sono disponibili numerose applicazioni e librerie open source per la manipolazione di dati in formato XML basate su diversi linguaggi di programmazione (Java, C, C# Python, Perl, PHP ). Un applicazione in grado di elaborare dati in formato XML viene definita elaboratore XML. È indipendente dai dispositivi di archiviazione e visualizzazione in quanto un documento XML può essere archiviato su qualsiasi tipo di supporto digitale (attuale e futuro). Può essere facilmente trasmesso via Internet tramite i protocolli HTTP, SMTP, FTP. Un documento XML può essere visualizzato su qualsiasi dispositivo di output. 10
Pubblica amministrazione e XML La Finanziaria 2008 ha stabilito che la fatturazione nei confronti delle amministrazioni dello stato debba avvenire esclusivamente in forma elettronica. Fatturazione Elettronica verso la Pubblica Amministrazione La trasmissione delle fatture elettroniche (fatturapa) destinate all amministrazione dello stato deve essere effettuata attraverso il Sistema di Interscambio (SdI). Una fattura PA è un documento in formato XML, sottoscritto con firma elettronica qualificata o digitale che contiene il codice identificativo univoco dell'ufficio destinatario della fattura riportato nell'indice delle Pubbliche Amministrazioni (c.d. IPA) (art.21 DPR n. 633/1972) e che viene inviato, tramite posta elettronica certificata (PEC) o intermediario a un sistema di interscambio con la pubblica amministrazione. 11
Pubblica amministrazione e XML Decreto ministeriale 3 aprile 2013, n. 55 Le ricevute ed i messaggi di notifica sono predisposti secondo un formato XML la cui struttura e' riportata nelle specifiche tecniche del Sistema di Interscambio 12
La strutturazione dei documenti XML La strutturazione dei documenti è un aspetto importante perché permette di: Elaborare i documenti in modo automatico - archiviazione dei documenti - estrazione dati da pagine XML - ricerca di contenuti Rendere il documento facilmente recuperabile ed interpretabile. Archiviazione Portare un documento XML in un database risulta essere una cosa molto semplice, infatti un documento XML risulta essere una sorta di base di dati. Quindi la struttura di un documento XML permette una facile archiviazione. Inoltre l archiviazione risulterà tanto dettagliata quanto risulta fine la granularità dei documenti, superando così gli inconvenienti della archiviazione dei documenti come file interi. 13
La strutturazione dei documenti XML Generalmente un documento strutturato viene visto come un insieme ordinato di nodi etichettati, organizzato gerarchicamente con una struttura ad albero, permettendo un ulteriore gestione della struttura gerarchica che a sua volta avvia una catena di elaborazioni automatiche del documento stesso. Estrazione informazioni Nei documenti XML si può identificare, elaborare ed estrarre qualsiasi parte di documento isolata tra due tag: più fine è il dettaglio della struttura del documento maggiori saranno le possibilità di isolare informazioni utili nelle pagine. 14
Esempi di documenti XML La strutturazione dei documenti XML 15
La strutturazione dei documenti XML Si devono definire dei vincoli per l'utilizzo dei tag all'interno dei documenti. Si deve poter stabilire quali tag e come possono essere utilizzati, secondo una precisa struttura logica. È necessario definire una grammatica. Una grammatica è un insieme di regole che indica: quali vocaboli (elementi) possono essere utilizzati quale struttura deve essere seguita per comporre frasi (documenti). In XML ci sono: regole sintattiche - Come dobbiamo scrivere le informazioni all interno dei documenti regole semantiche (ma non è obbligatorio) - Cosa possiamo scrivere in un documento XML. Un documento XML che rispetta le regole sintattiche si dice ben formato (well-formed) Un documento XML che rispetta le regole sintattiche e semantiche definite da una grammatica si dice valido. 16
La struttura logica e fisica di un documento XML Un documento XML è un semplice file di testo strutturato in modo gerarchico composto da elementi. Un elemento XML è ciò che è compreso tra un tag di apertura e il corrispondente tag di chiusura (inclusi). Un elemento può contenere testo, attributi e altri elementi, oppure essere vuoto. Gli attributi sono rappresentati con una coppia nome=valore all interno dei tag. Un documento può contenere anche spazi bianchi, a capo e commenti. attributo Elemento radice elemento documento XML che rappresenta un messaggio SMS 17
La struttura logica e fisica di un documento XML Elementi e attributi Non c è una regola precisa per decidere se scegliere una rappresentazione di una informazione come elemento o come attributo di un elemento. Un elemento È estendibile in termini di contenuto (con elementi figli) e di attributi. È un entità a se stante. Un attributo non è estendibile: può solo modellare una proprietà di un elemento in termini di valore. È strettamente legato ad un elemento. Può solamente contenere un valore atomico. La scelta dipende da diversi fattori: leggibilità, semantica, tipo di applicazione, efficienza 18
La sintassi XML Tutti i documenti XML devono iniziare con una delle seguenti dichiarazioni: <?xml version="1.0"?> che identifica la versione di riferimento del linguaggio <?xml version="1.0 encoding= UTF-8?> che contiene anche informazioni sul set di caratteri Se il file che contiene un documento XML contiene caratteri che non appartengono all insieme ASCII, come per esempio i caratteri accentati della nostra lingua, è necessario specificare il tipo di codifica utilizzato. Esempi: UTF-8: Unicode da 8 a 32 bit/car UTF-16: Unicode a 16 bit/car (Java) ISO-8859-1: set Latin 1 con lettere accentate 8 bit/car (Europa occidentale) Windows-1252: Codifica a 8 bit dei caratteri dell Europa occidentale adottata dai sistemi operativi Windows <?xml-stylesheet type= text/css href= gree.css?> che contiene riferimenti a documenti esterni utili per il trattamento del documento 19
La sintassi XML È case-sensitive I nomi iniziano con il simbolo _ o una lettera dell alfabeto I caratteri consentiti all interno dei nomi sono: _. lettere e numeri I tag sono nomi compresi tra <. > e ogni tag deve chiuso <tag> </tag> Se un tag non ha un contenuto deve avere la forma <tag/> oppure <tag attributo=" "/> I tag devono essere nidificati in maniera gerarchica a specchio L intero documento XML, a esclusione della dichiarazione iniziale, deve essere compreso in un solo elemento «radice» I tag possono avere attributi per i quali è possibile specificare valori che devono essere necessariamente delimitati da un apice o da doppio apice Un commento è compreso tra i simboli <!-- e --> 20
La sintassi XML I simboli chiave sono caratteri riservati del linguaggio. Essi sono rappresentati mediante delle entità e per inserirli all interno del testo occorre usare il corrispondente riferimento: Si possono rappresentare i caratteri UNICODE usando la notazione &#XXXX: ½ ½ è è Il linguaggio XML prevede un attributo predefinito speciale denominato xml:lang per indicare la lingua del testo contenuto in un elemento; i valori più comuni sono i seguenti: 21
La sintassi XML Ogni elemento presente in XML può contenere a sua volta altri elementi e gli strumenti software che gestiscono i documenti XML analizzano l intero contenuto di ogni elemento. Per evitare che il contenuto di un elemento sia analizzato e permettere che al suo interno possa essere inserita qualsiasi sequenza di caratteri, è possibile qualificarlo come CDATA (Character DATA) inserendolo tra i simboli <![CDATA[ e ]]>. La possibilità di definire testo di tipo CDATA consente di inserire codice HTML come contenuto di un elemento di un file XML. 22
Regole nella creazione di un file XML Un documento XML è well formed (ben formato) se rispetta le regole sintattiche: tutti i tag sono chiusi nell'ordine corretto esiste un solo elemento radice i valori degli attributi sono scritti fra virgolette gli elementi non hanno due attributi con lo stesso nome i nomi degli elementi e degli attributi non contengono caratteri speciali (&,...) i nomi degli elementi non contengono spazi.. Un documento XML è valido se: è ben formato rispetta le regole del DTD associato. Documento XML DTD Analizzatore validante Documento valido Documento non valido Per validare l'xml Lo apriamo col browser che ci dice se è valido oppure http://www.w3schools.com/xml/xml_validator.asp Per validare l'html http://alidator.w3.org/#validate_by_input 23
Document Type Definition Il DTD (Document Type Definition), è un documento che definisce la grammatica per i documenti XML dove la sintassi è costituita da due dichiarazioni: <!ELEMENT> (struttura del documento ed elementi utilizzabili all'interno del documento stesso) <!ATTLIST> (lista di attributi di ogni elemento). Vengono inoltre espressi dei caratteri speciali per indicare il numero di occorrenze di un elemento: * indica che l'elemento è presente zero o più volte? indica che l'elemento è presente zero o una volta + indica che l'elemento è presente una o più volte indica un alternativa Esempio: <!ELEMENT paragrafo (testo+, immagine*) > Gli elementi possono essere caratterizzati meglio tramite la specifica di una lista di attributi. NUMERO è attualmente definito come un elemento nel DTD, ed ha degli attributi: il prefisso e la compagnia. Dal punto di vista sintattico un attributo è così specificato: <!ATTLIST nome_elem nome_attr tipo valore_default > #PCDATA significa parsed character data CDATA: sequenza di caratteri (una stringa) #IMPLIED significa che l attributo è opzionale 24
Document Type Definition Il DTD viene scritto da colui che definisce cosa è valido e cosa non lo è per un certo tipo di documento XML. Essoviene specificato all interno deldocumento XML. Il primo elemento strutturale di un documento XML è: un prologo opzionale costituito da due componenti anch essi opzionali : La dichiarazione XML La dichiarazione del tipo di documento Il corpo del documento XML che contiene dei dati strutturati (albero) Prologo La dichiarazione XML abbiamo già visto che è del tipo: <?xml version="1.0 encoding= UTF-8?> La dichiarazione del tipo di documento deve iniziare con: <! DOCTYPE. > Questo tag contiene il riferimento al DTD che può essere sia esterno che interno al file XML: DTD interno (o in-line): <! DOCTYPE root [ Codice DTD ] > DTD esterno: il tag contiene il riferimento al file DTD <! DOCTYPE root SYSTEM url del file > Dove root è il nome dell elemento radice. 25
articolo.dtd <!ELEMENT articolo (paragrafo+)> <!ELEMENT paragrafo (immagine*, testo+, codice*)> <!ELEMENT immagine EMPTY> <!ELEMENT testo (#PCDATA)> <!ELEMENT codice (#PCDATA)> <!ATTLIST articolo titolo CDATA #REQUIRED> <!ATTLIST paragrafo titolo CDATA #IMPLIED tipo (abstract bibliografia note) #IMPLIED> <!ATTLIST immagine file CDATA #REQUIRED> <?xml version= 1.0 > <!DOCTYPE articolo SYSTEM articolo.dtd > <articolo titolo= Titolo dell articolo > <paragrafo titolo= Titolo del primo paragrafo > <testo> Blocco di testo del primo paragrafo </testo> <immagine file= immagine1.jpg > </immagine> </paragrafo> <paragrafo titolo= Titolo del secondo paragrafo > <testo> Blocco di testo del secondo paragrafo </testo> <codice> Esempio di codice </codice> <testo> Altro blocco di testo </testo> </paragrafo> < /articolo> Esempi di documenti XML e DTD <?xml version= 1.0 > <!DOCTYPE articolo [ <!ELEMENT articolo(paragrafo+)> <!ELEMENT paragrafo (immagine*, testo+, codice*)> <!ELEMENT immagine EMPTY> <!ELEMENT testo (#PCDATA)> <!ELEMENT codice (#PCDATA)> <!ATTLIST articolo titolo CDATA #REQUIRED> <!ATTLIST paragrafo titolo CDATA #IMPLIED tipo (abstract bibliografia note) #IMPLIED> <!ATTLIST immagine file CDATA #REQUIRED> ]> <articolo titolo= Titolo dell articolo > <paragrafo titolo= Titolo del primo paragrafo > <testo> Blocco di testo del primo paragrafo </testo> <immagine file= immagine1.jpg > </immagine> </paragrafo> <paragrafo titolo= Titolo del secondo paragrafo > <testo> Blocco di testo del secondo paragrafo </testo> <codice> Esempio di codice </codice> <testo> Altro blocco di testo </testo> </paragrafo> < /articolo> 26
Il DTD per XHTML HTML è una grammatica SGML, ma non XML. È stata definita una versione di HTML corretta in modo da rispettare la sintassi XML: XHTML. Il W3C definisce il DTD per il linguaggio HTML, e si parla quindi di XHTML che segue le seguenti regole sintattiche: L'element root e' <html> html deve contenere uno e un solo <head> deve contenere uno e un solo <body> dentro a <body> ci possono essere un numero qualunque di <p> (da 0 a n)... 27
XML Schema Definition (XSD) L'uso dei DTD per definire la grammatica per i documenti XML, tuttavia risulta incompleto, dato che: - la sintassi non sempresegue le regole dell'xml - non sempre vengono specificati gli attributi e il numero di occorrenze di un elemento. Queste limitazioni hanno fatto sì che nascessero nuovi approcci come l XSD (XML Schema Definition). A differenza dei DTD, XML Schema : usa la stessa sintassi dell'xml. permette di tipizzare i dati (intero, stringa, ora, data, ecc.) Un XML-Schema è un documento XML, con estensione.xsd che descrive la grammatica di un linguaggio XML utilizzando un linguaggio di mark-up specifico. Un documento XSD comprende: Namespace di riferimento: http://www.w3.org/2001/xmlschema Dichiarazione di: - Elementi anche eventualmente vuoti del documento XML e la loro gerarchia - Attributi degli elementi - Il numero e l ordinamento degli elementi Definizione di tipi: - Semplici - Complessi dei dati contenuti negli elementi e negli attributi Valori: - predefiniti o costanti del contenuto degli elementi e degli attributi 28
XML Schema Definition (XSD) Namespace La radice del documento XML, root, viene rappresentata dal tag <xs:schema> e indica al parser che nel documento vengono utilizzati i tag definiti dal namespace standard definito dal W3C. In questo elemento <xs:schema> è presente l attributo xmlns:xs= nome file che specifica il file che contiene gli elementi e i tipi di dati standard utilizzabili. xmlns indica al parser che nel documento saranno utilizzati dei tag definiti dal namespace standard del W3C. La struttura generale di un XSD è: <?xml version="1.0"?> < xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> Definizione della grammatica. < /xs:schema> Questo tag dice che: apre un elemento schema del namespace individuato dal prefisso xs che si riferisce allo schema http://www.w3.org/2001/xmlschema Il namespace indica a quale grammatica fanno riferimento i tag che sono presenti nel documento. In questo caso i tag sono caratterizzati dal prefisso xs. 29
XML Schema Definition (XSD) XML Schema Definition (XSD) Namespace Un documento XML che fa riferimento ad uno schema XSD deve dichiarare il file contenente lo schema inserendo i seguenti attributi predefiniti nella definizione dell elementoradice: xmlns:xsi= http://www.w3.org/xmlschema-instance xsi:nonamespaceschemalocation=" Esempio: 30
XML Schema Definition (XSD) Esempio: libro.xsd Schema XSD per un documento XML che rappresenta un singolo libro Un documento XML che si riferisce allo schema salvato come file libro.xsd 31
XML Schema Definition (XSD) Elementi e tipi di dato semplice Per definire gli elementi contenuti nel documento XML, si usa l'attributo name all'interno della stringa che contiene il tag element: <xs:element name=.. > Per definire gli attributi, si usa type. Esistono due categorie di tipi: semplici (usati come tipo per gli elementi e gli attributi) e complessi (usati come tipo solo per gli elementi e può contenere Tipo di dato semplice può contenere elementi figlio, attributi e testo). Serve per definire gli elementi che non possono contenere altri elementi e non prevedono attributi. Si possono usare tipi di dato semplice predefiniti (tipi base) oppure è possibile personalizzarli tramite raffinamenti e (aaaa-mm-gg) restrizioni. (hh:mm:ss) con eventuale fuso orario Esempi. Per indicare che l'elemento image o l elemento testo può contenere solo stringhe, mentre quantità può contenere solo interi la sintassi è: <xs:element name="image" type="xs:string" /> <xs:element name="testo" type="xs:string"/> <xs:element name="quantita" type="xs:integer" /> 32
XML Schema Definition (XSD) Elementi e tipi di dato semplice Tipi di dato predefiniti utilizzabili in uno schema XSD 33
XML Schema Definition (XSD) Elementi e tipi di dato semplice Tipi di dato predefiniti utilizzabili in uno schema XSD (Universal Time Coordinated) (Tempo Coordinato Universale) 34
XML Schema Definition (XSD) Elementi e tipi di dato semplice 35
XML Schema Definition (XSD) Tipi di dato semplice Un elementosemplice può avere: un valore predefinito che assume nel caso che il documento XML non ne specifichi uno, (attributo default) un valore costante che impedisce che nel documento XML ne possa essere definito uno diverso (attributo fixed) Esempio <xs:element name="colore type="xs:string" default="rosso"/> <xs:element name="pigreco" type="xs:decimal" fixed="3.14159"/> 36
XML Schema Definition (XSD) Tipi di dato semplice personalizzato Ogni tipo semplice è caratterizzato da alcune proprietà, dette facets, che ne descrivono i formati (permessi ed obblighi) e vincoli. Alcuni esempi di facets: minexclusive, mininclusive, maxinclusive, maxexclusive enumeration, lenght, maxlenght, minlenght, pattern, whitespace (rif. http://www.w3.org/tr/xmlschema-0/#simpletypefacets) Tipi di dato semplici personalizzati Sono ottenuti per derivazione dai tipi semplici predefiniti (built-in tipi di dati incorporati). I tipi semplici personalizzati possono essere definiti in uno dei seguenti modi: restriction: limita i valori disponibili per il tipo semplice a un sottoinsieme di quelli del tipo semplice ereditato list: definisce un tipo semplice contenente un elenco di valori, separati da uno spazio vuoto, di un tipo semplice ereditato union: definisce un tipo semplice contenente un'unione di valori di due o più tipi semplici ereditati. Dopo aver definito un tipo semplice, questo può essere utilizzato in un attributo, in una dichiarazione dell'elemento in una definizione complextype (tipo di dato complesso) 37
XML Schema Definition (XSD) Tipi di dato semplice personalizzato Elemento restriction Per ottenere un tipo semplice personalizzato si utilizza: l elemento: simpletype e l elemento: restriction per indicare il tipo base e le possibili facets per stabilire il range di valori Possibili restrizioni per i tipi numerici: le stringhe di caratteri: 38
Elemento restriction Esempio XML Schema Definition (XSD) Tipi di dato semplice personalizzato L elemento indirizzo a partire dal tipo semplice string predefinito, dovrà avere una lunghezza minima di 10 caratteri e massima di 100 caratteri. Il CAP dovrà essere esattamente di 5 caratteri. A partire dal tipo semplice integer predefinito, il valore che può essere assegnato all elemento quantita potrà variare da 1 a 10. A partire dal tipo semplice decimal predefinito si impone una restrizione accettando valori con al massimo due sole cifre decimali. Elementi XML validi: <indirizzo>via delle Fornaci, 20 Livorno</indirizzo> <CAP>57128</CAP> <quantità>10</quantità> <prezzo>0.99</prezzo> <prezzo>99</prezzo> Non validi: <indirizzo>via Re</indirizzo> <CAP>1234</CAP> <quantità>0</quantità> <quantità>100</quantità> <prezzo>1.999</prezzo> <xs:element name="indirizzo"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:minlength value= 10"/> <xs:maxlength value="100"/> </xs:restriction> </xs:simpletype> </xs:element> <xs:element name="cap"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:length value="5"/> </xs:restriction> </xs:simpletype> </xs:element> <xs:element name="quantità"> <xs:simpletype> <xs:restriction base="xs:integer"> <xs:minexclusive value="0"/> <xs:maxinclusive value="10"/> </xs:restriction> </xs:simpletype> </xs:element> <xs:element name="prezzo"> <xs:simpletype> <xs:restriction base="xs:decimal"> <xs:fractiondigits value="2"/> </xs:restriction> </xs:simpletype> </xs:element> 39
XML Schema Definition (XSD) Tipi di dato semplice personalizzato Elemento restriction Tra le possibili facets c è anche pattern che consente di specificare un ben preciso formato con il quale controllare se una certa espressione è scritta correttamente e si applicano a tipi: date, time, string, ed altri. Esempi Un numero telefonico è una stringa di 8 caratteri dove i primi tre sono digit poi è previsto un trattino seguito da altri 4 digit. Il tipo di dato semplice Età fa riferimento ad un tipo base: intero non negativo con la restizione che può valere al massimo 150. Viene poi definito il tipo semplice EtàAdulta che pone delle restizioni a partire dal tipo di dato semplice Età (fa riferimento al tipo personalizzato definito localmente infatti non c è il prefisso xs: nella restriction base= Età ) specificando che il valore minimo deve essere 18. 40
Elemento restriction (e facet enumeration) Si utilizza: l elemento: simpletype l elemento: restriction XML Schema Definition (XSD) Tipi di dato semplice personalizzato e l elemento: enumeration che consente di elencare le stringhe valide Esempio In questo caso l elemento giornolavorativo prevede che siano scritti solo i giorni da lunedì a venerdì. Un tipo semplice personalizzato come quello enumerativo può essere utilizzato in un elemento: <xs:simpletype name="giornolavorativo"> <xs:restriction base="xs:string"> <xs:enumeration value="lunedì"/> <xs:enumeration value="martedì"/> <xs:enumeration value="mercoledì"/> <xs:enumeration value="giovedì"/> <xs:enumeration value="venerdì"/> </xs:restriction> </xs:simpletype> <xs:element name="nomegiorno" type="giornolavorativo"/> 41
XML Schema Definition (XSD) Tipi di dato semplice personalizzato Elemento list Per ottenere un tipo semplice personalizzato che consenta di ottenere ad esempio un elenco di date si utilizza: l elemento: simpletype e l elemento: list per indicare il tipo base Le voci dell elenco devono essere separate da uno spazio bianco. Elemento union Per rappresentare l'unione di altri tipi semplici, i quali definiscono, a loro volta, gli insiemi di valori previsti. Si scrive: l elemento: simpletype e l elemento: union per indicare l'elenco di nomi dei tipi di dati incorporati oppure degli elementi simpletype. 42
Esempi Elemento list <?xml version="1.0"?> XML (XSD) <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="intvalues" type="valuelist"/> <xs:simpletype name="valuelist"> <xs:list itemtype="xs:integer"/> </xs:simpletype> </xs:schema> <intvalues>100 34 56-23 1567</intvalues> XML Schema Definition (XSD) Tipi di dato semplice personalizzato XML Elemento union XML (XSD) <xs:simpletype name="integerordata"> <xs:union membertypes="xs:integer xs:date"/> </xs:simpletype> <integerordata>2009-11-18</integerordata> <integerordata>670</integerordata> XML <?xml version="1.0"?> XML (XSD) <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema">. <xs:simpletype name="listofdates"> <xs:list itemtype="xs:date"/> </xs:simpletype> </xs:schema> <listofdates> 2009-11-18 2000-01-23 </listofdates> XML <xs:simpletype name="unionoflists"> <xs:union> <xs:simpletype> <xs:list itemtype="xs:date"/> </xs:simpletype> <xs:simpletype> <xs:list itemtype="xs:integer"/> </xs:simpletype> </xs:union> </xs:simpletype> XML (XSD) XML <UnionOfLists>100 34 56-23 1567 </UnionOfLists> <UnionOfLists>2009-11-18 2000-01-23 </UnionOfLists> 43
XML Schema Definition (XSD) Elementi complessi I tipi di elemento complessi Si riferiscono ad elementi che possono contenere altri elementi figli e possono avere attributi. E' l'equivalente di un tipo strutturato. Definire un elemento di tipo complesso corrisponde a definire la relativa struttura. Per la definizione di un elemento di tipo complesso si utilizza: l elemento: complextype <xs:element name= nome_elemento > <xs:complextype> Definizione del tipo complesso...(<xs:sequence> oppure <xs:choice> oppure <xs:all> )... Definizione degli attributi (<xs:attribute name= type= >) </xs:complextype> < /xs:element> Se l elemento può contenere altri elementi possiamo definire la sequenza di elementi che possono stare al suo interno utilizzando uno dei costruttori di tipi complessi previsti: <xs:sequence> Consente di definire una sequenza ordinata di sottoelementi <xs:choice> Consente di definire un elenco di sottoelementi alternativi <xs:all> Consente di definire una sequenza non ordinata di sottoelementi Per ciascuno di questi costruttori e per ciascun elemento è possibile definire il numero di occorrenze previste utilizzando gli attributi minoccurs e maxoccurs. 44
Il costruttore di tipo complesso <xs:sequence> XML Schema Definition (XSD) Elementi complessi Si utilizza per definire un elemento complesso ottenuto come una sequenza ordinata di sottoelementi per ognuno dei quali può essere specificato un limite al numero di occorrenze che possono comparire. <xs:element name= articolo"> <xs:complextype> <xs:sequence> <xs:element name= titolo /> <xs:element name="testo"/> </xs:sequence> </xs:complextype> </xs:element> XML (XSD) Documento XML valido Non valido <articolo> <titolo> Il linguaggio XML </titolo> <testo> Questo linguaggio deriva. </testo> </articolo > <articolo> <titolo> Il linguaggio XML </titolo> </articolo> 45
Il costruttore di tipo complesso <xs:sequence> <xs:element name= articolo"> XML (XSD) <xs:complextype> <xs:sequence> <xs:element name= autore type= xs:string /> <xs:element name= paragrafo > <xs:complextype> <xs:element name="testo minoccurs= 1 maxoccurs="unbounded"/> </xs:complextype> </xs:element> </xs:sequence> </xs:complextype> </xs:element> XML Schema Definition (XSD) Elementi complessi l elemento testo può essere presente una o infinite volte all interno di un paragrafo Documento XML valido <articolo> <autore>rossi </autore> <paragrafo> <testo> primo testo </testo> <testo> secondo testo </testo> </paragrafo> </articolo> Documento XML non valido <articolo> <autore>rossi </autore> <paragrafo> </paragrafo> </articolo> 46