XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

193
XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna

Transcript of XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

Page 1: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLLa famiglia di linguaggi XML

Fabio Vitali

Università di Bologna

Page 2: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali2

«Quando io uso una parola», disse Humpty Dumpty in tono piuttosto sprezzante, «significa quello che io scelgo che significhi - né più, né meno.»

Lewis Carroll

“Attraverso lo specchio”

Page 3: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali3

Sommario

Oggi esaminiamo: Parte I: Cos’è il markup (16 slides) Parte II: XML: a cosa serve (21 slides) Parte III: Analisi dei documenti (10 slides) Parte IV: La sintassi di XML (57 slides) Parte V: Linguaggi connessi con XML (53 slides):

Namespaces XPointer e XLink XSLT XML Schema

Parte VI: Strumenti e indirizzi per XML (24 slides)

Page 4: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLParte ICos’è il markup

Definizione di markup Tipi di markup Il markup procedurale Il markup dichiarativo

Page 5: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali5

Perché tutto questo chiasso?

Quando si porta una collezione di documenti in forma elettronica, si ha di solito in mente in generale una specifica applicazione (metterla in rete, prepararla per la stampa, ecc.).

Di solito, si cerca di trasformare il documento nella forma più opportuna perché venga utilizzato nell’applicazione suddetta.

Spesso per questo si fanno delle scelte che impediscono o ostacolano notevolmente un ulteriore riuso della stessa collezione per una diversa applicazione.

L’impaginato poco si adatta ad un’indicizzazione per la rete, o viceversa i linguaggi di visualizzazione su rete sono troppo poco sofisticati per una produzione tipografica di buon livello, ecc.

I linguaggi di markup derivati da SGML sono i linguaggi più opportuni per strutturare e marcare i documenti in maniera indipendente dall’applicazione, favorendo la riusabilità, la flessibilità e la apertura ad applicazioni complesse.

Page 6: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali6

Cos’è il markup? (1) Definiamo markup ogni mezzo per rendere esplicita una

particolare interpretazione di un testo. Per esempio, tutte quelle aggiunte al testo scritto che permettono

di renderlo più fruibile. Oltre a rendere il testo più leggibile, il markup permette anche di

specificare ulteriori usi del testo. Con il markup per sistemi informatici (il nostro caso),

specifichiamo le modalità esatte di utilizzo del testo nel sistema stesso.

Il markup non è soltanto un’inevitabile e sgradevole risultato della informatizzazione dell’arte tipografica. Non è qualcosa che sta con noi a causa dell’informatica.

Page 7: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali7

Cos’è il markup? (2)

Quando un autore scrive, da millenni a questa parte, specifica anche i delimitatori di parola (chiamati spazi), i delimitatori di frase (chiamati virgole) e i delimitatori di periodo (chiamati punti).

La numerazione delle pagine o l’uso dei margini per creare effetti sul contenuto sono noti da centinaia di anni.

Eppure questo a stretto rigore non fa parte del testo, ma del markup: nessuno dirà ad alta voce ‘virgola’ o ‘punto’ nel leggere un testo, ma creerà adeguati comportamenti paralinguistici (espressioni, toni, pause) per migliorare in chi ascolta la comprensione del testo.

Page 8: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali8

Tipi di markup

Il markup assolve a diversi ruoli a seconda del sistema di elaborazione, dell’applicazione, dello scopo a cui il documento è soggetto.

Puntuazionale: punteggiatura, spazi, ecc. Presentazionale: ritorni a capo, allineamenti, cambi pagina, ecc.

Procedurale: le istruzioni di computer da eseguire per ottenere un certo effetto

Descrittivo: l’associazione ad ogni porzione di un documento dell’etichetta che ne descrive il senso e il ruolo

Referenziale: l’uso di abbreviazioni e sigle che fanno riferimento e vengono sostituite con entità più lunghe e complesse.

Page 9: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali9

Tre Uomini in Barca

Jerome K. Jerome

1889

Capitolo primo

Tre invalidi - Le sofferenze di George e Harris - La vittima di centosette malattie inguaribili - […]

Eravamo in quattro: George, William Samuel Harris, e io, Montmorency. Standocene seduti in camera mia, fumavamo e parlavamo di quanto fossimo malridotti… malridotti, dal punto di vista della salute, intendo, naturalmente. Ci sentivamo tutti piuttosto giù di corda, ...

3

Un testo su carta

Page 10: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali10

Treuominiinbarcajeromekjerome1889capitoloprimotreinvalidilesofferenzedigeorgeeharrislavittimadicentosettemalattieinguaribilieravamoinquattrogeorge,williamsamuelharrisioemontmorencystandocenesedutiincameramiafumavamoeparlavamodiquantofossimomalridottimalridottidalpuntodivistadellasaluteintendonaturalmentecisentivamotuttipiuttostogiùdicorda

Il testo senza markup

Questo è il testo completamente senza markup, come poteva essere scritto su un papiro della biblioteca di Alessandria, nel II o III secolo a.C.

Page 11: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali11

Tre Uomini in BarcaJerome K. Jerome (1889)Capitolo primoTre invalidi - Le sofferenze di George e Harris - La vittima di centosette malattie inguaribili - […]Eravamo in quattro: George, William Samuel Harris, io, e Montmorency. Standocene seduti in camera mia, fumavamo e parlavamo di quanto fossimo malridotti… malridotti, dal punto di vista della salute, intendo, naturalmente. Ci sentivamo tutti piuttosto giù di corda, ...

Markup metabolizzatoAggiungiamo markup puntuazionale e presentazionale: maiuscole/minuscole, punteggiatura, spazi e ritorni a capo sono essi stessi elementi di markup.

Page 12: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali12

{\rtf1 \mac \ansicpg10000 \uc1 \pard \plain \s15 \qc \widctlpar \adjustright \f4 \fs48 \cgrid {Tre Uomini in Barca \par } \pard \plain \widctlpar \adjustright \f4 \cgrid { \line \par \par \par \par \par } \pard \plain \s1 \qc \keepn \widctlpar \outlinelevel0 \adjustright \i \f4 \fs36 \cgrid {Jerome K. Jerome \par } \pard \plain \qc \widctlpar \adjustright \f4 \cgrid { \fs36 […] \par 1889 \line \par } \pard \widctlpar \adjustright { \page } { \b \fs36 Capitolo primo} { \par \par \par \line } { \i Tre invalidi - Le sofferenze di George e Harris - La vittima di centosette malattie inguaribili - [ \u8230 \'c9] \par } { \line } { \fs28 Eravamo in quattro: George, William Samuel Harris, io, e Montmorency. Standocene seduti in camera mia, fumavamo e parlavamo di quanto fossimo malridotti \u8230 \'c9 malridotti, dal punto di vista della salute, intendo, naturalmente. \line Ci sentivamo tutti piuttosto gi \u249 \'9d di corda, ... \par }}

Markup proceduraleSono comandi, o istruzioni che il sistema di lettura (umano o elettronico) deve eseguire sul testo. Ad esempio, istruzioni su come andare a capo, come decidere i margini, ecc. Questo è RTF.

Page 13: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali13

<ROMANZO> <TITOLO>Tre Uomini in Barca</TITOLO> <AUTORE>Jerome K. Jerome</AUTORE> <ANNO>1889</ANNO> <CAPITOLO> <TITOLO>Capitolo primo</TITOLO> <INDICE> <EL>Tre invalidi</EL> <EL>Le sofferenze di George e Harris </EL> <EL>La vittima di centosette malattie inguaribili</EL> </INDICE> <PARA>Eravamo in quattro: George, William Samuel Harris, io, e Montmorency. Standocene seduti in camera mia, fumavamo e parlavamo di quanto fossimo malridotti… malridotti, dal punto di vista della salute, intendo, naturalmente. </PARA> <PARA>Ci sentivamo tutti piuttosto giù di corda,</PARA> </CAPITOLO>… </ROMANZO>

Markup descrittivoSono informazioni (descrizioni) sugli elementi del documenti, che ne specificano il ruolo, la giustificazione, la relazione con gli altri elementi.

Page 14: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali14

Il markup procedurale (1)

Basato sull’aspetto Ad ogni elemento del documento viene associata la

procedura per visualizzarlo in maniera voluta: font, dimensione, corsivi, grassetti, margini, interlinea, ecc.

Dipendente dal sistema ogni sistema di visualizzazione impone le proprie

regole e la propria sintassi, dipendendo da: Filosofia sintattica (comandi-punto per troff, comandi-barra per

RTF, ecc.) Capacità di raggruppamento (parentesi graffe in RTF,

comando di disattivazione esplicita in troff, ecc.) Supporto di specifiche funzionalità

Page 15: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali15

Il markup procedurale (2)

Associato agli individui ogni elemento possiede le proprie procedure per la

visualizzazione, che possono anche essere tutte diverse anche per elementi dello stesso tipo.

Non contestuale Le regole di visualizzazione non dipendono dal contesto in cui

vengono fatte, ma ognuna fa specie a sé. Ad esempio, una lista in troff è fatta come segue: .li

.it elemento 1

.it elemento 2.el

Nessun controllo impone di chiudere la lista alla fine, o di usare i comandi .it solo dentro alla lista.

Page 16: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali16

Il markup dichiarativo (1)

Basato sul ruolo Di ogni elemento viene descritto il ruolo all’interno del testo, più che le

regole per la sua visualizzazione: Ad esempio: “questo è un titolo, questo è un paragrafo, questo è il nome

dell’autore, questa è una citazione.”

Indipendente dal sistema Poiché il markup dichiarativo assegna ruoli (e non regole di

visualizzazione) agli elementi del testo, questi sono intrinseci agli elementi stessi, e non alle funzionalità disponibili nel sistema di visualizzazione.

Un sistema incapace di variare l’interlinea, o con un elenco limitato di font e dimensioni, può aver problemi ad interpretare un markup procedurale troppo ricco, ma la differenza tra (per esempio) un “titolo” o un “elenco” o un “paragrafo” non dipende dalla sofisticazione del sistema di visualizzazione.

Page 17: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali17

Il markup dichiarativo (2)

Basato su categorie I ruoli sono categorie. Ogni elemento è associato ad una

categoria, e ne riflette tutte le caratteristiche automaticamente.

Contestuale Con il markup dichiarativo è possibile definire delle regole

che permettano o impediscano l’assegnazione di una categoria (ruolo) ad un elemento del testo a seconda del contesto.

Ad esempio, si può richiedere che il titolo vada all’inizio del testo, o che una lista sia composta solo di elementi della lista, e non da paragrafi, ecc.

Page 18: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali18

La storia del markup

Anni ‘60: primo WP in IBM GCA-GenCode e IBM-GML (1968-70) Anni ‘80: WP WYSIWYG e DTP 1986: SGML è standard ISO 8879 1991: HTML 1997: la convergenza su XML

Page 19: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali19

SGMLSGML (Standard Generalized Markup Language) è un meta-linguaggio standard e non proprietario per il markup dichiarativo. Facilita markup leggibili, generici, strutturati, gerarchici.

Un meta-linguaggio è un linguaggio per definire linguaggi, una grammatica di costruzione di linguaggi.

SGML è lo standard ISO (International Standard Organization) n. 8879 del 1986.

Non proprietario significa che non esiste un’unica ditta o casa produttrice che ne detiene il controllo.

In SGML il markup è posto in maniera leggibile a fianco degli elementi del testo a cui si riferiscono.

SGML ha teorizzato l’uso del markup per informazioni (descrizioni) sugli elementi del documenti, che ne specificano il ruolo, la giustificazione, la relazione con gli altri elementi.

SGML permette di definire delle strutture, suggerite o imposte, a cui i documenti si debbono adeguare.

Le strutture imposte da SGML sono tipicamente a livelli di dettaglio successivi.

Page 20: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLParte IIIntroduzione a XML e famiglia

Cos’è XML Perché XML La famiglia XML Cosa si fa con XML Un esempio: XML News

Page 21: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali21

XML

XML (Extensible Markup Language [sic!]) è un meta-linguaggio di markup, progettato per lo scambio e la interusabilità di documenti strutturati su Internet.

XML prevede una sintassi semplificata rispetto a SGML, e definisce contemporaneamente una serie piuttosto lunga di linguaggi associati: uno per i link, uno per i nomi di tag, uno per i fogli di stile, uno per la descrizione di meta-informazioni, ecc.

XML si propone di integrare, arricchire e, nel lungo periodo, sostituire HTML come linguaggio di markup standard per il World Wide Web.

Page 22: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali22

Perché XML?HTML nacque come un DTD di SGML (non proprio!!!), che permetteva di mettere in rete documenti di un tipo molto specifico, semplici documenti di testo con qualche immagine e dei link ipertestuali.

Con il successo del WWW, HTML venne iniziato ad usare per molti scopi, molti più di quelli per cui era stato progettato.

Si iniziò ad abusare dei tag di HTML per gli effetti grafici che forniva, più che per gli aspetti strutturali o semantici.

Si iniziarono a desiderare elaborazioni sofisticate sui dati HTML, elaborazioni che non era possibile fornire.

Si iniziò a trovare limitata la capacità grafica di HTML, anche abusando dei tag.

Page 23: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali23

Perché non SGML?

SGML ha molti pregi, ma ha dalla sua una complessità d’uso e di comprensione notevole. Inoltre, a SGML mancano caratteristiche di notevole importanza per l’uso pratico, come link ipertestuali e specifiche grafiche.

L’avvento di HTML ha fatto capire come i linguaggi di markup siano ormai maturi per essere compresi dal largo pubblico, ma che la semplicità d’uso di HTML doveva costituire un elemento di partenza.

XML contiene tutte le caratteristiche di SGML che servono per creare applicazioni generali senza scendere nel livello di dettaglio e pedanteria richiesti da SGML.

Page 24: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali24

I vantaggi di XML

Documenti auto-descrittivi La scelta dei nomi degli elementi può essere fatta per facilitare la

comprensione del ruolo strutturale dell’elemento.

Struttura navigabile dei documenti La rigida struttura ad albero e l’assenza di regole di

minimizzazione rendono semplice la visualizzazione

Platform-independence XML è uno standard aperto, e chiunque può realizzare strumenti

che lo usino come formato di dati.

Facile convertibilità a formati Web La totale interdipendenza tra XML, SGML, HTML etc. fa sì che la

conversione tra formati interni e formati per il Web sia facile.

Page 25: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali25

Cosa c’è con XML?

XML è in realtà una famiglia di linguaggi, alcuni già definiti, altri in corso di completamento. Alcuni hanno l’ambizione di standard, altri sono solo proposte di privati o industrie interessate. Alcuni hanno scopi generali, altri sono applicazioni specifiche per ambiti più ristretti. Noi di occupiamo, tra gli altri, di:

XML 1.0: un meta-linguaggio di markup, sottoinsieme di SGML XML-Namespace: un meccanismo per la convivenza di nomi di

tag appartenenti a DTD diversi XPath, XPointer e XLink: tre linguaggi per la creazione di link

ipertestuali XSL: un linguaggio di stylesheet per XML XML schema: un linguaggio per la specifica di criteri di

validazione di documenti XML

Page 26: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali26

Cosa si fa con XML?

Data Interchange Ogni volta che più programmi si debbono scambiare dati, ci sono

problemi di compatibilità. Ogni programma ha le proprie assunzioni in termini di caratteri, separatori, ripetibilità di elementi, differenza tra elementi vuoti e assenti, ecc.

XML si propone come la sintassi intermedia più semplice per esprimere dati anche complessi in forma indipendente dall’applicazione che li ha creati.

Document publishing XML è ideale come linguaggio per esprimere documenti strutturati

o semi strutturati, e per esprimerli in maniera indipendente dalla loro destinazione finale.

Lo stesso documento XML può essere preso e trasformato per la stampa, il Web, il telefonino, l’autoradio.

Page 27: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali27

Cosa si fa con XML? (2)

Interazione tra database eterogenei Ogni volta che è necessario trasferire dei dati da un database

all’altro, la soluzione più economica a tutt’oggi è stampare i dati dal primo DB su carta e ribatterli a mano sul secondo.

Idealmente io vorrei accedere via Web ai dati del primo DB, selezionare quelli che voglio in una cartella, e sbattere la cartella sul secondo DB, che si preoccupa di adattarli alle sue esigenze.

Il secondo DB, dunque, deve essere in grado di comprendere la sintassi dei dati, di interpretare la struttura (eventualmente, in parte, aiutato da un essere umano) e di isolare le informazioni di suo interesse.

Per questo potrebbe essere aiutato da un formato di interscambio tipo XML, che permetterebbe di etichettare i dati esplicitamente ed in maniera generale e comprensibile agli esseri umani.

Page 28: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali28

Cosa si fa con XML? (3)

Computazioni client-side Esistono molte esigenze di testing e computazione su oggetti descrivibili

parametricamente: Caratteristiche e funzionalità di chip, semilavorati, e prodotti industriali Scheduling in aerei, treni, ecc. Shopping on-demand, e user-tailoring Applicazioni per il customer suppot

In tutti questi casi, attualmente si creano applicazioni server-side che interrogano i database per i parametri e usano cicli del server per le computazioni, mentre i client sono in attesa.

Poter esprimere in Java o altri linguaggi client-side la logica della computazione, che scarica i parametri dal sito giusto ed esegue le computazioni indipendentemente, sarebbe molto comodo, e permetterebbe confronti incrociati e ogni altro tipo di valutazione ottimale per le esigenze di chi compra.

Page 29: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali29

Cosa si fa con XML? (4)

Viste selettive L’esempio tipico è l’indice sommario dinamico di un documento:

interrogo una base documentaria e ottengo il primo livello di indice di un documento. Seleziono una voce e ri-interrogo la base dati per avere il secondo livello dell’indice.

Ogni espansione richiede un passaggio al server, con ovvi problemi di latenza. Sarebbe possibile fare tutto client-side con Javascript, ma o si fa l’indice a mano del documento HTML, oppure bisogna ricorrere a documenti ben strutturati, come XML.

Altri esempi: Un grafico che si trasforma in una tabella Un documento annotato in cui vedo il contenuto, o le annotazioni, o tutti e

due Un manuale di due versioni dello stesso sistema, con testi e immagini che

cambiano a seconda di quale specifica versione si sta esaminando.

Page 30: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali30

Cosa si fa con XML? (5)

Agenti Web Mattew Fuchs (Disney Imagineering): “Data needs to

know about itself, and data needs to know about me” Agenti di filtro, selezione, rilevamento hanno bisogno di

sapere le caratteristiche dei dati che stanno filtrando in maniera vendor-independent, ben strutturata e flessibile (nuove esigenze, categorie, comunità virtuali, sub-società si formano continuamente)

Ad esempio, bot personalizzati, la guida dei canali TV, i sistemi di classificazione del contenuto delle pagine Web, ecc.

Page 31: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali31

Quando scegliere XML? (1)

Quali sono le condizioni per adottare XML in un progetto? Ovviamente:

E’ nuovo E’ di moda E’ compatibile con Web Può essere imposto dal committente Può essere imposto dai partner

Ma ci sono almeno quattro buone ragioni per XML: Produzione di documenti automatici Gestione indipendente di produzione e uso di dati Elaborazione di dati con aspetti strutturali complessi Elaborazione di dati strutturati in contenitori semi-strutturati

Page 32: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali32

Quando scegliere XML? (2)

Produzione di documenti automatici XML è la soluzione in assoluto più elegante (anche se ad

oggi ancora faticosa) per integrare collezioni di dati strutturati sul Web.

Documenti dinamici, che mescolano blocchi testuali con output tabellari di informazioni strutturate, sono facilmente esprimibili in XML, e gli strumenti attuali si concentrano su questo, per il momento.

Integra e sostituisce le tecnologie server-side di accesso ai dati: ASP, PHP, server-side Javascript, ecc.

Page 33: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali33

Quando scegliere XML? (3)

Gestione indipendente di produzione ed uso di dati Spesso l’interscambio di dati avviene all’interno di un workflow

controllato e noto. In questo caso, data producers e data consumers sono creati ad hoc per lo specifico flusso informativo. XML è una complicazione inutile.

Tuttavia esistono delle situazioni in cui non c’è progettazione integrata di producer e consumer. In questo caso, un’adeguata progettazione del producer facilita molto il lavoro di tutti i possibili consumer

XML è strutturato, auto-esplicativo, enfatizza la descrizione del dato più che del suo scopo nella elaborazione. E’ quindi ideale per le situazioni in cui l’elaborazione non è nota in anticipo.

Page 34: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali34

Quando scegliere XML? (4)

Elaborazione di dati con aspetti strutturali complessi I database utilizzano le relazioni per ogni tipo di esigenza:

dalla descrizione di connessioni logiche tra entità concettualmente diverse, alla gestione di dati strutturati in maniera complessa.

Ad esempio, è complicato gestire, in una tabella, record con un numero variabile di campi, o situazioni alternative complesse.

XML prevede strutture con blocchi ripetuti, alternativi, facoltativi. La descrizione di queste strutture in XML è molto più naturale che con DB relazionali.

Page 35: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali35

Quando scegliere XML? (5)

Elaborazione di dati in contenitori semi-strutturati A volte l’informazione ha uno stato naturale semi-strutturato

(e.g., documenti testuali), al cui interno esistono informazioni atomiche su cui è necessario attivare computazioni.

La soluzione classica è di estrarre le informazioni atomiche, metterle in un DB tradizionale, e buttare via il contenitore naturale. Questo ha il grosso difetto di eliminare il contesto e omogeneizzare in maniera forzata informazioni organizzate diversamente.

XML permette di inserire all’interno di strutture documentarie (pensate per la visualizzazione) tag di natura descrittiva utilizzabili per elaborazioni sofisticate.

Page 36: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali36

Un esempio: XMLNews (1)

XMLNews definisce il contenuto testuale e le meta-informazioni di notizie da agenzia stampa. E’ una parte dello standard denominato News Industry Text Format (NITF), sviluppato dal International Press Telecommunications Council e dalla Newspaper Association of America.

XMLNews è composto di due parti: XMLNews-Story è un DTD XML per descrivere in maniera

variamente arricchita il testo delle notizie XMLNews-Meta definisce il formato delle meta-informazioni

per notizie d’agenzia. E’ conforme al Resource Description Framework (RDF), e on si riferisce solo alle notizie testuali, ma anche a immagini, video-clip, ecc.

Page 37: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali37

Un esempio: XMLNews (2)

XMLNews-Story: il testo di una notizia di agenzia è diviso in tre parti: l’head contiene informazioni di organizzazione, mentre il body è a sua volta diviso in intestazione e contenuto.

<?xml version="1.0"?> <nitf> <head> <title>Colombia Earthquake</title> </head> <body> <body.head> <hedline><hl1>143 Dead in Earthquake</hl1></hedline> <byline><bytag>By Jared Kotler, AP </bytag></byline> <dateline> <location>Bogota, Colombia</location> <story.date>January 25 1999 7:28 ET</story.date> </dateline> </body.head> <body.content> … </body.content> </body> </nitf>

Page 38: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali38

Un esempio: XMLNews (3)XMLNews-Story: Il body ha un markup minimale di struttura del testo:

<?xml version="1.0"?> <nitf> <head> … </head> <body> <body.head> … </body.head> <body.content> <p>Un terremoto ha colpito la Colombia occidentale lunedì, uccidendo almeno 143 persone e ferendone più di 900 mentre scoperchiava edifici nella zona delle coltivazioni di caffè più ricca e fertile della nazione. Gli addetti alla difesa civile sono immediatamente intervenuti.</p> <p>Il terremoto è avvenuto nel primo pomeriggio, con una magnitudine del 6 grado, secondo il Geological Survey Americano, in Golden, Colorado. L’epicentro è stato identificato nella valle dello stato del Cauca, a 210 chilometri a ovest della capitale, Bogotà.</p> </body.content> </body> </nitf>

Page 39: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali39

Un esempio: XMLNews (4)XMLNews-Story: Però è possibile in qualunque momento aggiungere informazioni inline:

<p>Un <event>terremoto</event> ha colpito la <location> <country>Colombia</country> occidentale</location> <chron norm=“19990125”>Lunedì</chron>, uccidendo almeno 143 persone e ferendone più di 900 mentre scoperchiava edifici nella zona delle coltivazioni di caffè più ricca e fertile della nazione. Gli <function>addetti alla difesa civile</function> sono immediatamente intervenuti.</p>

Questo permette di arricchire la storia con altre informazioni in maniera semi-automatica:

Nella ricerca: è possibile cercare tutto quello che è successo in Colombia, o cosa è successo in una certa data.

Nella presentazione: un provider potrebbe fornire semi-automaticamente dei link o delle cartine della Colombia.

Nell’organizzazione delle news: è possibile cercare tutti i terremoti effettivi, e non le notizie che ne usano la parola, magari figurativamente.

Page 40: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali40

Un esempio: XMLNews (5)

XMLNews-Meta: Assieme ad ogni notizia, vengono scritte delle informazioni sulla notizia, che possono avere una distribuzione separata.

XMLNews-Meta permette di gestire insieme informazioni come:

Informazioni sul contenuto della notizia (titolo, lingua, formato, ecc.) Informazioni sulle date della notizia: creazione, pubblicazione,

scadenza, ecc. Informazioni sulla provenienza ed attendibilità della notizia Informazioni sui possessori dei diritti di distribuzione e copyright Informazioni di classificazione ed organizzazione Link a documenti connessi: versioni precedenti, seguenti, ed altre

notizie connesse.

Page 41: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLParte IIIAnalisi dei documenti

Classificazione dei componenti Selezione dei componenti,

costruzione della gerarchia, dei blocchi informativi e degli elementi di dati

Identificazione delle connessioni Verifica e miglioramento iterativo

delle specifiche

Page 42: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali42

Perché convengono i linguaggi di markup?

La c

onve

rsio

ne è

diff

icile La conversione è facile

Energia / Informazione

Page 43: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali43

Classificazione dei componenti

La parte più importante del lavoro di progettazione di un’applicazione SGML è l’identificazione delle strutture e del significato delle parti dei documenti e delle loro relazioni.

L’identificazione semantica dei componenti avviene quando si evidenzia l’esigenza di distinguere tra un tipo di dati ed un altro.

Se due pezzi diversi di un documento contengono lo stesso tipo di informazione, li si deve considerare appartenenti alla stesso componente semantico, anche se sono separati tra loro.

Viceversa, se due pezzi contengono due tipi diversi di informazione, o è necessario distinguerli in qualche maniera per i fini dell’applicazione, allora debbono essere distinti in due componenti semantici separati.

Possiamo distinguere tra tre tipi di classificazione dei componenti di un documento: contenuto, struttura e presentazione.

Page 44: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali44

Classificazione basata sul contenuto

Si identificano i componenti per il significato che essi hanno, indipendentemente dalla loro posizione nel documento o dal loro aspetto grafico.

Ad esempio: indirizzi, città, codici postali; ricette, ingredienti, tempi di preparazione; termini, sviluppo grammaticale, significato.

Page 45: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali45

Classificazione basata sulla struttura

Si identificano i componenti per il loro ruolo all’interno del documento, per il senso che hanno in quella posizione e in quella forma

Ad esempio: sezioni, capitoli, liste, paragrafi, titoli

Page 46: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali46

Classificazione basata sulla presentazione

Si identificano i componenti per le variazioni nel modo in cui debbono apparire graficamente, senza implicazioni sul loro “vero significato”.

Ad esempio: Frasi con un determinato font o dimensione Blocchi da mantenere sulla stessa pagina Posti dove spezzare una pagina

Page 47: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali47

Caratteristiche delle classificazioni

Questi tre modi di classificare i componenti di un documento sono presenti contemporaneamente bell’analisi di un documento. Persone diverse, sugli stessi documenti, possono identificare questa o quella classe a seconda di professione, forma mentis, esigenze.

I tre tipi di classificazione hanno anche caratteristiche diverse di identificabilità, flessibilità e durata.

Page 48: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali48

Classificazione basata sul contenuto

È la classificazione più complessa da realizzare, ma la più flessibile, identificabile, flessibile e duratura.

Poiché identifico i componenti basati sul loro significato, è immediato identificare il senso di un componente.

La classificazione è indipendente dalla struttura del documento e dall’aspetto grafico, così posso cambiare idea su queste decisioni in qualunque momento, e anche fornire soluzioni diverse sugli stessi componenti.

Poiché un componente avrà sempre quel significato in qualunque contesto, anche cambiamenti di stile, organizzazione del documento ecc. non impediranno a questa classificazione di sopravvivere.

Page 49: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali49

Classificazione basata sulla struttura

La classificazione strutturale identifica l’organizzazione di un documento in maniera sufficientemente generale, ma rozza per quel che riguarda il senso del documento.

È possibile in qualunque momento modificare la resa grafica degli elementi, ma non il loro ruolo nella struttura globale del documento.

Cambiamenti stilistici non preoccupano (il font, la larghezza di un paragrafo, l’esistenza o meno di un bordo in una tabella), cambiamenti strutturali importanti invece sì (ad esempio, passare da una forma a lista ad una a tabella, ecc.).

Page 50: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali50

Classificazione basata sulla presentazione

In generale, ci sono più classi di contenuto che classi di presentazione. Per uniformità grafica e facilità di lettura molti componenti aventi significato diverso vengono resi graficamente nello stesso modo.

L’identificazione delle sole classi grafiche fa sparire immediatamente l’identificabilità di elementi di significato diverso ma resa grafica uguale.

Decisione successive di cambiamenti grafici di solo alcuni componenti, e non altri, saranno impossibili.

Utilizzi del documento per scopi diversi dalla presentazione (ad esempio, la creazione di un indice, l’inserimento in un motore di ricerca, ecc.), saranno impossibili.

Page 51: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali51

Regole guida per la classificazione

Identificare il più possibile i componenti per il loro significato e contenuto. Richiede più lavoro ma ne vale la pena. È necessario, ovviamente, fermarsi ad un livello ragionevole di specificità.

Attribuire a questi componenti significati strutturali (tabelle, liste, paragrafi, organizzazioni gerarchiche tipo sezioni, sotto-sezioni, ecc.).

Specificare la resa grafica dei componenti. Quest’ultima specificazione tipicamente avviene al di fuori del contesto di SGML, con appositi strumenti e linguaggi di stylesheet.

Page 52: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali52

Altri suggerimenti (1)

Scartare elementi puramente presentazionali: numero di pagina, elementi che si ripetono pagina dopo pagina (un logo, una decorazione, il nome di un capitolo) possono tipicamente essere aggiunti automaticamente dal formattatore e non è necessario considerarli come componenti del documento.

Identificare classi generali di informazioni. Anche se presenti in varie parti del documento, alcune informazioni possono avere lo stesso significato e lo stesso ruolo, e quindi debbono essere identificati nella stessa maniera.

Page 53: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali53

Altri suggerimenti (2)

Identificare informazioni ripetute in varie parti del documento. Alcune informazioni (nomi propri o di organizzazioni, riferimenti ad immagini, date importanti, elementi ripetuti di una struttura, ecc.) debbono essere presenti in varie parti del testo in maniera identica, e debbono cambiare in maniera coerente.È utile avere un componente unico che registri una sola volta l’informazione da stampare, e venga usato ovunque necessario.

Identificare i componenti che provengono da sistemi informativi esistenti. Tipicamente un database ha già distinzioni di elementi basate sul contenuto. Se alcune informazioni provengono da un database è comodo e si risparmia tempo usare o basarsi sulla strutturazione dei dati già esistenti nel sistema informativo.

Page 54: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLParte IVLa sintassi di XML 1.0

Sezione I: visione generale Elementi di un documento XML Formato di un documento XML

Sezione II: Il contenuto di un DTD Definizione di elementi Definizione di attributi Definizione di entità generali Definizione di entità parametriche Altri aspetti di XML

Page 55: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali55

XML 1.0

Una raccomandazione W3C del 10 febbraio 1998. È definita come un sottoinsieme di SGML URL ufficiale: http://www.w3.org/TR/REC-xml Traduzione ufficiale in italiano:

http://www.iat.cnr.it/xml/REC-xml-19980210-it.html

Molto più formalizzata della grammatica di SGML, usa una notazione formale, Extended Backus-Naur Form.

Page 56: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali56

XML e Unicode

XML (come Java) abbandona completamente ASCII e le codifiche ad un byte, e si basa direttamente su Unicode.

Questo porta a due vantaggi nei riguardi dell’internazionalizzazione:

È possibile scrivere documenti misti, senza ricorrere a trucchi strani per identificare la parte che usa un alfabeto dalla pare che ne adopera un altro.

Un documento scritto in un linguaggio non latino non deve basarsi su parametri esterni per essere riconosciuto come tale, ma la codifica stessa dei caratteri lo identifica.

Page 57: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali57

I componenti di XML

Un documento XML contiene una varietà dei seguenti componenti

Elementi Attributi Entità Testo (detto anche #PCDATA) Commenti Processing Instructions

Page 58: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali58

Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions

Gli elementi sono le parti di documento dotate di un senso proprio.

Il titolo, l’autore, i paragrafi del documento sono tutti elementi.

Un elemento è individuato da un tag iniziale, un contenuto ed un tag finale.

Non confondere i tag con gli elementi!

<TITOLO>Tre uomini in barca</TITOLO>

Page 59: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali59

Gli attributi sono informazioni aggiuntive sull’elemento che non fanno effettivamente parte del contenuto (meta-informazioni).

Essi sono posti dentro al tag iniziale dell’elemento. Tipicamente hanno la forma nome=valore

<romanzo file=“threemen.sgm”>…</romanzo>

<capitolo N=“1”>Capitolo primo</capitolo>

Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions

Page 60: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali60

Le entità sono frammenti di documento memorizzati separatamente e richiamabili all’interno del documento.

Esse permettono di riutilizzare lo stesso frammento in molte posizioni garantendo sempre l’esatta corrispondenza dei dati, e permettendo una loro modifica semplificata.

Oggi &egrave; una bella giornata. Come dice &FV;: “divertitevi!”

Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions

Page 61: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali61

Rappresenta il contenuto vero e proprio del documento.

Esso corrisponde alle parole, gli spazi e la punteggiatura che costituiscono il testo.

Viene anche detto #PCDATA (Parsed Character DATA) perché XML usa questo nome per indicare il contenuto di elementi di testo.

Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions

Page 62: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali62

I documenti XML possono contenere commenti, ovvero note da un autore all’altro, da un editore all’altro, ecc.

Queste note non fanno parte del contenuto del documento, e le applicazioni XML li ignorano.

Sono molto comodi per passare informazioni tra un autore e l’altro, o per trattenere informazioni per se stessi, nel caso le dimenticassimo.

<!-- Questa parte è ignorata da XML -->

Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions

Page 63: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali63

Le processing instructions (PI) sono elementi particolari (spesso di senso esplicitamente procedurale) posti dall’autore o dall’applicazione per dare ulteriori indicazioni su come gestire il documento XML nel caso specifico

Per esempio, in generale è l’applicazione a decidere quando cambiare pagina. Ma in alcuni casi può essere importante specificare un comando di cambio pagina (oppure tutti i cambi pagina di un documento già impaginato).

<?NEWPAGE?> .

Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions

Page 64: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali64

I documenti XML

Un documento in un linguaggio di markup definito sulla base di XML è composto dalle seguenti tre parti:

Dichiarazione XML (opzionale) La specifica delle opzioni attivabili nel documento XML

Document Type Declaration (opzionale) Le regole di validità a cui il documento deve sottostare

Istanza del documento Il contenuto ed il markup effettivo del documento

Page 65: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali65

Dichiarazione XMLDocument Type DeclarationDocument Instance

<?XML version=“1.0” encoding=“UTF-16” standalone=“yes” ?>

La dichiarazione XML specifica le caratteristiche opzionali del documento in questione. Poiché esse sono ridotte al minimo, la dichiarazione XML è brevissima.

Esistono esattamente tre valori che possono essere messi in una dichiarazione XML:

Il parametro “version” identifica quale versione di XML si sta usando. Ora l’unico valore possibile è “1.0”. Necessario.

Il parametro “encoding” permette di specificare, se il dubbio può sorgere, quale codifica di caratteri viene usata per il documento. Facoltativo.

Il parametro “standalone” permette di specificare se le informazioni necessarie per valutare e validare il documento sono interne o se ne esistono anche di esterne. Facoltativo.

Page 66: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali66

La dichiarazione del tipo del documento serve a specificare le regole che permettono di verificare la correttezza strutturale di un documento.

Vengono cioè elencati [i file che contengono] gli elementi ammissibili, il contesto in cui possono apparire, ed altri eventuali vincoli strutturali.

Nella terminologia XML, si parla di modellare una classe (cioè una collezione omogenea) di documenti attribuendogli un tipo.

Dichiarazione XMLDocument Type DeclarationDocument Instance

Page 67: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali67

L’istanza del documento è quella parte del documento che contiene il testo vero e proprio, dotato del markup appropriato.

Le applicazioni XML sono in grado di verificare se l’istanza del documento segue le regole specificate nel DTD, e a identificare le violazioni.

Dichiarazione XMLDocument Type DeclarationDocument Instance

Page 68: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali68

Documenti ben formati o validi

XML distingue due tipi di documenti rilevanti per le applicazioni XML: i documenti ben formati ed i documenti validi.

In SGML, un DTD è necessario per la validazione del documento. Anche in XML, un documento è valido se presenta un DTD ed è possibile validarlo usando il DTD.

Tuttavia XML permette anche documenti ben formati, ovvero documenti che, pur essendo privi di DTD, presentano una struttura sufficientemente regolare e comprensibile da poter essere controllata.

Page 69: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali69

Documenti XML ben formati

Un documento XML si dice ben formato se: Tutti i tag di apertura e chiusura corrispondono e

sono ben annidati Esiste un elemento radice che contiene tutti gli altri I tag vuoti (senza contenuto) utilizzano un simbolo

speciale di fine tag: <vuoto/> Tutti gli attributi sono sempre racchiusi tra

virgolette Tutte le entità sono definite.

Page 70: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali70

Parser validanti e non validanti

Il cuore di un applicazione XML è il parser, ovvero quel modulo che legge il documento XML e ne crea una rappresentazione interna utile per successive elaborazioni (come la visualizzazione).

Un parser validante, in presenza di un DTD, è in grado di verificare la validità del documento, o di segnalare gli errori di markup presenti.

Un parser non validante invece, anche in presenza di un DTD è solo in grado di verificare la buona forma del documento.

Un parser non validante è molto più semplice e veloce da scrivere, ma è in grado di fare meno controlli. In alcune applicazioni, però, non è necessario validare i documenti, solo verificare la loro buona forma.

Page 71: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLEsempi di sviluppo del DTD

Ci sono quattro caratteristiche dei DTD XML che vale la pena considerare a fondo:

La dichiarazione di tipo ( <!DOCTYPE … > ) Elementi <A> … </A> Attributi <A HREF=“http://…”> … </A> Entità: &agrave;

Page 72: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali72

La dichiarazione di tipo

Il <!DOCTYPE … > è la dichiarazione del tipo di documento. Essa permette alle applicazioni XML di determinare le regole sintattiche da applicare alla verifica e validazione del documento.

La dichiarazione non è, ma contiene o fa riferimento alla Document Type Definition, o DTD, ove vengono elencati gli elementi validi e i loro vincoli.

Il DTD può essere posto in un file esterno, internamente al documento, o in parte esternamente ed in parte internamente.

Page 73: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali73

Dichiarazione del DTD: <!DOCTYPE … >1 <!DOCTYPE mydoc SYSTEM “document.dtd“>

2 <!DOCTYPE mydoc [<!ELEMENT …

]>

3 <!DOCTYPE mydoc SYSTEM “document.dtd” [<!ELEMENT …

]> La prima forma di dichiarazione indica che il DTD è contenuto in un file

esterno (per esempio, condivisa con altri documenti). Il DTD viene chiamato external subset perché è posto in un file esterno.

La seconda forma precisa il DTD internamente (cioè nello stesso file), che quindi non può essere condiviso da altri file. Il DTD si chiama in questo caso internal subset.

La terza forma precisa una parte del DTD come contenuta in un file esterno (e quindi condivisibile con altri documenti), e una parte come propria del documento, e non condivisibile.

Page 74: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali74

Specifica di elementi

<!ELEMENT nome content-model >

<!ELEMENT para (#PCDATA | bold)+ >

Content-model: la specificazione formale del contenuto permesso nell’elemento, secondo una sintassi specifica di gruppi di modelli.

Page 75: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali75

Specifica di elementi Content model

Tramite il content model posso specificare quali sono gli elementi leciti all’interno di un elemento, in quale numero e quale posizione rispetto agli altri.

Ci sono cinque famiglie di content model: Qualunque: un elemento può contenere qualunque elemento

definito nel DTD Vuoto: un elemento non ha contenuto, e spesso ha solo il tag

iniziale. Testo: un elemento può contenere solo testo (#PCDATA) Strutturato: un elemento può contenere solo altri elementi Misto: un elemento può contenere sia testo che altri elementi.

XML ha solo UNA forma ammessa di content model misto.

Page 76: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali76

Specifica di elementi Content model: ANY ed EMPTY

<!ELEMENT X ANY> L’elemento X può contenere qualunque altro elemento

specificato nel DTD, o anche testo

<!ELEMENT X EMPTY> L’elemento X non può contenere niente. Debbo

scrivere il tag con la sintassi tipica degli elementi vuoti: <X/>

Page 77: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali77

Specifica di elementi Content model testo e strutturato

<!ELEMENT X #PCDATA> L’elemento X può solo contenere testo. E’ proibito

mettere altri elementi al suo interno

<!ELEMENT X (Y, (W | Z)+ , K*)> L’elemento X può contenere solo elementi secondo la specifica

data, usando i separatori e gli operatori di ripetizione specificati.

Page 78: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali78

Specifica di elementi Separatori

Separano specifiche determinando l’ordine o l’obbligatorietà:

‘,’ (virgola): richiede la presenza di entrambe le specifiche nell’ordine precisato. Es.: (a , b): ci devono essere sia a che b, e prima ci deve essere a e poi b.

‘|’ (barra verticale): ammette la presenza di una sola delle due specifiche. Es.: (a | b): ci può essere o a, oppure b, ma solo uno di essi.

Page 79: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali79

Specifica di elementi Operatori di ripetizione (1)

Permettono di specificare se un gruppo può comparire esattamente una volta, almeno una volta, oppure zero o più volte.

Niente: la specifica precedente deve comparire esattamente una volta. Es.: c, (a, b): a e b devono comparire in quest’ordine esattamente una volta. È lecito solo: cab. Si dice che è una specifica richiesta e non ripetibile.

? (punto interrogativo): la specifica precedente può e può non comparire, ma solo una volta. Es.: c, (a , b)?: a e b possono comparire una volta, ma possono non comparire. Sono lecite: c, cab. Si dice che è una specifica facoltativa e non ripetibile.

Page 80: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali80

Specifica di elementi Operatori di ripetizione (2)

+ (più): la specifica precedente deve comparire almeno una volta. Es.: c, (a , b)+: a e b devono comparire almeno una volta, ma possono comparire anche più di una. Sono lecite: cab, cabab, cababababab, ma non c, ca, cb, cba, cababa. Si dice che è una specifica richiesta e ripetibile.

* (asterisco): la specifica precedente deve comparire zero o più volte. Es.: c, (a, b)*: a e b possono comparire o no, a scelta e in numero libero. Sono lecite: c, cab, cabab, cababababab, ma non ca, cb, cba, cababa. Si dice che è una specifica facoltativa e ripetibile.

Page 81: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali81

Specifica di elementi Content model misto

<!ELEMENT X (#PCDATA | Y | W | Z)*>

L’elemento X può contenere sia testo sia altri elementi in maniera ed ordine specificati.

L’unica forma accettabile di content model misto in XML è composta da una ripetizione di elementi alternativi, in cui il primo è #PCDATA. Cioè solo content model della forma qui sopra.

Page 82: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali82

Un esempio sempliceVogliamo descrivere il contenuto del mio portfolio di azioni. Invento un frammento di DTD per descrivere le mie azioni:

<!DOCTYPE stock SYSTEM “stock.dtd”><stock> <id> <nome>zacx corp</nome> <simbolo>ZCXM</simbolo> </id> <prezzo>28.875</prezzo> <quantita>1150</quantita> </stock>

Page 83: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali83

Il file “stock.dtd”

<!ELEMENT stock(id, prezzo, quantita)>

<!ELEMENT id (nome, simbolo) >

<!ELEMENT nome (#PCDATA)>

<!ELEMENT simbolo (#PCDATA)>

<!ELEMENT prezzo (#PCDATA)>

<!ELEMENT quantita (#PCDATA)>

Page 84: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali84

Complichiamo l’esempio: ripetizioni ed alternative

Il portfolio è composto da più azioni. Di ogni azione posso possederne o meno. Se ne posseggo, allora registro il prezzo di acquisto, altrimenti il prezzo attuale. <!DOCTYPE portfolio SYSTEM “portfolio.dtd”><portfolio> <stock> <id><nome>zacx corp</nome> <simbolo>ZCXM</simbolo></id> <acquisto>28.875</acquisto> <quantita>1150</quantita> </stock> <stock> <id><nome>zaffymat inc</nome> <simbolo>ZFFX</simbolo></id> <prezzo>92.250</prezzo> </stock> <stock> <id><name>zysmergy inc</name> <simbolo>ZYSZ</simbolo></id> <prezzo>20.313</prezzo> </stock> </portfolio>

Page 85: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali85

Il file “portfolio.dtd”

<!ELEMENT portfolio (stock)+>

<!ELEMENT stock (id, (prezzo | (acquisto, quantita)))>

<!ELEMENT id (nome, simbolo) >

<!ELEMENT nome #PCDATA>

<!ELEMENT simbolo #PCDATA>

<!ELEMENT prezzo #PCDATA>

<!ELEMENT acquisto #PCDATA>

<!ELEMENT quantita #PCDATA>

Page 86: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali86

Un altro esempio: content model misto

Un libro, fatto di capitoli e a loro volta di paragrafi. <!DOCTYPE ROMANZO SYSTEM “romanzo.dtd”><ROMANZO> <TITOLO>Tre Uomini in Barca</TITOLO> <AUTORE>Jerome K. Jerome</AUTORE> <ANNO>1889</ANNO> <CAPITOLO> <TITOLO>Capitolo primo</TITOLO> <INDICE> <EL>Tre invalidi</EL><EL>Le sofferenze di George e Harris </EL><EL>La vittima di centosette malattie inguaribili</EL> </INDICE> <PARA>Eravamo in quattro: George, William Samuel Harris, io, e Montmorency. Standocene seduti in camera mia, fumavamo e parlavamo di quanto fossimo malridotti… <INCISO>malridotti, dal punto di vista della salute, <INCISO>intendo,</INCISO> naturalmente</INCISO>. </PARA> <PARA>Ci sentivamo tutti piuttosto giù di corda,</PARA> </CAPITOLO>… </ROMANZO>

Page 87: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali87

Il file “romanzo.dtd”

<!ELEMENT ROMANZO (TITOLO, AUTORE, ANNO, CAPITOLO+)><!ELEMENT CAPITOLO (TITOLO, INDICE, PARA+)> <!ELEMENT TITOLO (#PCDATA) ><!ELEMENT AUTORE (#PCDATA) ><!ELEMENT ANNO (#PCDATA) ><!ELEMENT INDICE (EL+) ><!ELEMENT EL (#PCDATA) ><!ELEMENT PARA (#PCDATA | INCISO) * ><!ELEMENT INCISO (#PCDATA | INCISO)* >

Page 88: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali88

Specifica di attributi La dichiarazione <!ATTLIST… > permette di definire una lista di attributi lecita ad un elemento XML dichiarato in precedenza.

<!ATTLIST nomenome-attributo-1 tipo-1 default-1nome-attributo-2 tipo-2 default-2nome-attributo-3 tipo-3 default-3 …

>

Gli attributi sono informazioni aggiuntive poste insieme all’elemento. Tecnicamente non fa parte del contenuto del documento, ma descrive e specifica l’elemento.

Ci sono quattro famiglie di attributi importanti: Qualunque stringa è lecita E’ possibile scegliere solo uno dei valori proposti (lista) Il valore deve essere unico su tutto il documento (ID) Il valore deve essere uguale a quello di un ID esistente

Page 89: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali89

Specifica di attributi Attributi stringa e lista

<!ATTLIST X att CDATA “uno”>

Il tag iniziale di X può contenere un attributo chiamato “att”. Qualunque stringa è lecita. Se non viene specificata una stringa, il valore definito per default è “uno”

<!ATTLIST X att (uno|due|tre) “due”>

Il tag iniziale di X può contenere un attributo chiamato “att”. Sono leciti solo i valori descritti. Se non viene specificata una stringa, il valore definito per default è “due”

Page 90: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali90

Specifica di attributi Attributi ID e IDREF

<!ATTLIST X att ID #IMPLIED>

Il tag iniziale di X può contenere un attributo chiamato “att”. Sono leciti solo valori unici su tutto il documento. L’elemento X assume identificabilità assoluta all’interno del documento: è un “luogo notevole”. Poiché il valore deve essere sempre diverso, non è possibile specificare un valore di default.

<!ATTLIST X att IDREF #IMPLIED

> Il tag iniziale di X può contenere un attributo chiamato “att”. I valori di “att”

debbono essere uguali ad un valore di un attributo di tipo ID esistente da qualche parte nel documento.

Page 91: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali91

Specifica di attributi Valori di default negli attributi

I valori di default importanti in XML sono di quattro tipi:

Valore esplicito: un stringa tra virgolette Valore necessario: la keyword #REQUIRED. Valore facoltativo: la keyword #IMPLIED. Valore esplicito e non modificabile: la keyword

#FIXED e una stringa tra virgolette. Usata per scopi particolari. La vedremo per XLink.

Page 92: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali92

Il primo esempio, più: attributi testo e lista

Ogni azione viene attribuita alla borsa a cui appartiene. Ogni prezzo ha specificata la valuta. <!DOCTYPE portfolio SYSTEM “portfolio.dtd”><portfolio> <stock exchange=“nyse”> <id><nome>zacx corp</nome> <simbolo>ZCXM</simbolo></id> <acquisto unit=“USD”>28.875</acquisto> <quantita>1150</quantita> </stock> <stock exchange=“nasdaq”> <id><nome>zaffymat inc</nome> <simbolo>ZFFX</simbolo></id> <prezzo unit=“USD”>92.250</prezzo> </stock> <stock exchange=“Frankfurt”> <id><name>zysmergy inc</name> <simbolo>ZYSZ</simbolo></id> <prezzo>20.313</prezzo> </stock> </portfolio>

Page 93: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali93

Il file “portfolio.dtd”

<!ELEMENT portfolio (stock)+><!ELEMENT stock (id, (prezzo | (acquisto, quantita)><!ATTLIST stock exchange CDATA #REQUIRED>

<!ELEMENT id (nome, simbolo) ><!ELEMENT nome #PCDATA><!ELEMENT simbolo #PCDATA><!ELEMENT quantita #PCDATA> <!ELEMENT prezzo #PCDATA><!ELEMENT acquisto #PCDATA><!ATTLIST prezzo unit (“USD”|“DM”|“LST”|“LIT”|“YEN”) “YEN”><!ATTLIST acquisto unit (“USD”|“DM”|“LST”|“LIT”|“YEN”) “YEN”>

Page 94: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali94

Il secondo esempio, più: attributi ID e IDREF

L’elemento dell’indice punta al paragrafo che vi si riferisce: <!DOCTYPE ROMANZO SYSTEM “romanzo.dtd”><ROMANZO> <TITOLO>Tre Uomini in Barca</TITOLO> <AUTORE>Jerome K. Jerome</AUTORE> <ANNO>1889</ANNO> <CAPITOLO> <TITOLO>Capitolo primo</TITOLO> <INDICE> <EL p=“uno”>Tre invalidi</EL><EL p=“due”>Le sofferenze di George e Harris</EL><EL p=“tre”>La vittima di centosette malattie inguaribili</EL> </INDICE> <PARA n=“uno”>Eravamo in quattro: George, William Samuel Harris, io, e Montmorency. Standocene seduti in camera mia, fumavamo e parlavamo di quanto fossimo malridotti… <INCISO> malridotti, dal punto di vista della salute, <INCISO>intendo, </INCISO> naturalmente</INCISO>. </PARA> <PARA>Ci sentivamo tutti piuttosto giù di corda,</PARA> </CAPITOLO>… </ROMANZO>

Page 95: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali95

Il file “romanzo.dtd”

<!ELEMENT ROMANZO (TITOLO, AUTORE, ANNO, CAPITOLO+)><!ELEMENT CAPITOLO (TITOLO, INDICE, PARA+)> <!ELEMENT TITOLO (#PCDATA) ><!ELEMENT AUTORE (#PCDATA) ><!ELEMENT ANNO (#PCDATA) ><!ELEMENT INDICE (EL+) ><!ELEMENT EL (#PCDATA) ><!ATTLIST EL p IDREF #REQUIRED ><!ELEMENT PARA (#PCDATA | INCISO) * ><!ATTLIST PARA n ID #IMPLIED ><!ELEMENT INCISO (#PCDATA | INCISO)* >

Page 96: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali96

Entità

Le entità sono macro testuali a sostituire dei riferimenti brevi, univocamente associati al loro significato esteso.

Ci sono due tipi di entità: Generali: definite in un DTD, possono essere usate nell’istanza

di documento. Parametriche: definite in un DTD, possono essere usate nello

stesso DTD, subito dopo.

Page 97: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali97

Entità generali

<!ENTITY Z “pippo”>

<!ENTITY Q SYSTEM “pippo.txt”> Ogni volta che scrivo il nome dell’entità, “&Z;” il

processore sostituisce la stringa corrispondente, “pippo”. Un’entità della forma “&#NNN;”, dove NNN sono cifre

decimali, viene sostituita con il carattere corrispondente nella tabella caratteri di default.

<X>Oggi ho visto &Z; </X>

<X>Che bella entit&#224; </X>

Page 98: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali98

Complichiamo l’esempio: entità generali

Forniamo supporto per le lettere accentate e forniamo un abbreviazione per i personaggi:

<EL p=“due”>Le sofferenze di &G; e &H;</EL>

<PARA>Eravamo in quattro: &G;, &WSH;, io, e &M;. … </PARA>

<PARA>Ci sentivamo tutti piuttosto gi&ugrave; di corda,</PARA>

Nel file “romanzo.dtd” metteremo definizioni come:

<!ENTITY G “George”>

<!ENTITY H “Harris”>

<!ENTITY WSH “William Samuel Harris”>

<!ENTITY M “Montmorency”>

<!ENTITY ugrave “&#227”>

Page 99: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali99

Entità parametriche

<!ENTITY % Z “#PCDATA | K”>

<!ENTITY % Q SYSTEM “pippo.txt”> Ogni volta che scrivo il nome dell’entità, “%Z;” il

processore sostituisce la stringa corrispondente, “#PCDATA | K”.

Posso usare questa notazione solo all’interno di un DTD

<!ELEMENT X (%Z;)*>

<!ELEMENT Y (%Z; | W)* >

Page 100: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali100

Complichiamo l’esempio: entità parametriche (I)

Centralizziamo il content model misto, in modo da poterlo cambiare in un colpo solo.

<!ENTITY % testo “(#PCDATA | INCISO) * “>

<!ELEMENT PARA %testo; ><!ELEMENT INCISO %testo; >

Page 101: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali101

Complichiamo l’esempio: entità parametriche (II)

Separiamo in un file esterno parte del DTD. Ad esempio, la definizione delle entità carattere:

File entity.dtd <!ENTITY ugrave “&#227”>…

File romanzo.dtd<!ENTITY % chars SYSTEM “entity.dtd”>%chars;

Etc....

Page 102: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali102

Complichiamo l’esempio: entità parametriche (III)

Realizziamo un DTD compatibile XML e SGML:

File “romanzo.dtd”:<!ELEMENT ROMANZO %min; (TITOLO, AUTORE, ANNO,

CAPITOLO+)>

File “romanzoxml.dtd”<!ENTITY % min “”><!ENTITY % dtd SYSTEM

“romanzo.dtd”>%romanzo.dtd

File “romanzosgml.dtd”<!ENTITY % min “- -”><!ENTITY % dtd SYSTEM

“romanzo.dtd”>%romanzo.dtd

Page 103: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali103

Altre caratteristiche di XML

Sezioni CDATA (per scrivere testi con caratteri del markup)

Rigore sintattico (case sensitivity, nessuna minimizzazione)

Entità predefinite (&lt; &gt;, &amp;, &apos; &quot;) Gestione del white space (e’ sempre significativo) Attributi riservati (xml-space, xml-lang) Marked sections (parti attivabili del DTD)

Page 104: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali104

Sezioni CDATA A volte può essere comodo inserire un blocco di caratteri

comprendenti anche ‘&’ e ‘<‘, senza preoccuparsi di nasconderli dentro ad entità.

Si usa allora la sezione CDATA, che ha la seguente sintassi: <![CDATA[ dati liberi comprendenti & e < ]]>

L’unica sequenza di caratteri non accettabile è la sequenza ‘]]>’, che definisce la fine della sezione CDATA

Il parser XML passa all’applicazione finale tutti i caratteri che trova fino alla sequenza ]]><para>In HTML, “<![CDATA[ <h1>Questo &egrave; un titolo</h1>]]>” indica un titolo </para>

Page 105: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali105

Altre caratteristiche di XML

Case sensitivity: in XML tutto il markup è case-sensitive (il maiuscolo è diverso dal minuscolo). È quindi necessario usare le maiuscole per ELEMENT, ATTLIST, ecc., e l’elemento <para> è diverso dall’elemento <PARA>.

Valori tra virgolette: tutti i valori di tutti gli attributi debbono avere le virgolette (semplici o doppie, ma in maniera coerente), anche se numeri o appartenenti ad una lista di valori predefiniti.

Entità predefinite: sono pre-definite e non ridefinibili 5 entità: <!ENTITY lt “&#60;”><!ENTITY gt “&#62;”><!ENTITY amp “&#38;”><!ENTITY apos “’”><!ENTITY quot ‘”’>

Page 106: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali106

Il white space

Il white space sono tutti quei caratteri senza aspetto visibile, che influenzano la formattazione del documento.

Essi includono sicuramente lo spazio, il tab, il carriage return ed il line feed, più eventuali altri caratteri.

SGML è nato in ambiente IBM, e le righe erano separate da caratteri chiamati RS e RE (record start e record end). Essi sono poi confluiti in ASCII 13 (CR) e ASCII 10 (LF).

Page 107: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali107

Il white space nel markup

All’interno dei tag, il white space è equivalente ad un singolo spazio, e può essere usato per separare attributi ed altro.

<book issue=“3” date=“15/3/97”>

è equivalente a

<book issue =“3” date =“15/3/97” >

Page 108: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali108

Il white space nel contenuto (1)

Per leggibilità del documento SGML, gli autori possono inserire white

space tra elementi e tra contenuto ed elementi.

<!ELEMENT autore (nome, cognome, e-mail)><!ELEMENT nome #PCDATA><!ELEMENT cognome #PCDATA> <!ELEMENT e-mail #PCDATA>

<autore><nome>Fabio</nome><cognome>Vitali</cognome><e-mail>[email protected]</e-mail></autore>

è equivalente a

<autore><nome>Fabio</nome><cognome>Vitali</cognome><e-mail>[email protected]</e-mail>

</autore>

Page 109: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali109

Il white space nel contenuto (2)

Nell’esempio precedente, il parser, avendo visto dal DTD che il content model di autore non contiene #PCDATA, può dedurre che il white space non è parte del contenuto.

Tuttavia possono esservi problemi di ambiguità:

<para> Questo e’ un paragrafo con degli<emph> spazi </emph> che non so come trattare.

</para>

Poiché para ha ovviamente un content model misto, non so più distinguere tra white space significativo e white space di presentazione.

Page 110: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali110

Il white space nel contenuto (3)

L’operazione di rimuovere il white space presentazionale lasciando intatto il contenuto vero e proprio è detto normalizzazione del documento.

Il white space può essere: Preservato: tutti i caratteri di white space vengono passati

intatti all’applicazione

Collassato: tutti i caratteri di white space vengono ridotti ad uno e passati come un singolo spazio.

Rimosso: tutti i caratteri di white space vengono cancellati non passati all’applicazione.

Page 111: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali111

XML e il white space

XML adotta convenzioni molto semplici e dirette per il white space:

New line: Per semplicità ed uniformità, XML trasforma ogni tipo di new line (CRLF, LF e CR) nel solo carattere LF.

“If it ain’t markup, it’s data”: Ogni white space che appare nel contenuto del documento è rilevante, e deve essere passato intatto all’applicazione.

Tuttavia, un parser validante è tenuto a precisare all’applicazione quale white space è stato riscontrato in elementi con content model di tipo elemento, cosicché l’applicazione possa decidere cosa farne.

Page 112: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali112

Attributi per white space e lingua

Esistono in XML due attributi riservati (ma da definire se usati):

xml:space (valori possibili: “default” o “preserve”) permette all’autore di indicare all’applicazione se è opportuno che mantenga il white space

xml:lang (valori possibili: i codici a due lettere di RFC 1766): permette all’applicazione di identificare la lingua in cui è scritto il contenuto di un elemento, per attivare funzionalità dipendenti dalla lingua: Rendering corretto Spell-checking Full-text indexing Editing

Page 113: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLParte VAltri protocolli di XML

XML-Namespaces XPointer e XPath XSL e XSLT XLink XML-Schema

Page 114: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali114

XML-Namespaces

Nella visione XML, i tipi di documenti si mescolano e si fondono tra loro in maniera complessa. Lo stesso documento potrebbe avere alcuni elementi definiti in un tipo ed altri in un altro.

Un esempio comune è un documento XML di valori di borsa che adopera i tag di HTML per definire gli elementi di testo, ed un insieme di tag specifico per gli elementi di borsa.

I problemi sono conciliare la presenza di elementi non definiti nel l’uno nel set di tag dell’altro, e soprattutto conciliare la presenza di elementi definiti con lo stesso nome in entrambi i set.

I namespace in XML si propongono per risolvere questi problemi. XML-Namespaces è una recommendation di W3C del 1999.

Page 115: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali115

Uso dei namespace

Ogni nome (elementi, attributi, entità, ecc.) del documento XML è preceduto da un prefisso che specifica l’origine del nome stesso. Il prefisso è separato da il carattere ‘:’ dal nome dell’elemento o dell’attributo.

Poiché ogni namespace userà un prefisso diverso,è possibile capire quali elementi appartengono all’uno e all’altro, e di evitare qualunque problema di collisione.

L’attributo predefinito “xmlns” serve per introdurre i prefissi usati dai namespace del documento. Il valore dell’attributo è un URI che non ha nessun valore dichiarativo, ma solo informativo.

E’ possibile far convivere anche attributi e elementi di namespace diversi

Page 116: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali116

Un esempio di namespaceSupponiamo che venga creato un documento HTML che contiene degli elementi del nostro portfolio:<h:html xmlns:pt="http://www.fabiovitali.com/portfolio” xmlns:h="http://www.w3.org/HTML/1998/html4"><h:head><h:title>Acquisto di azioni</h:title></h:head><h:body> <pt:portfolio> <h:h1>Ordine di acquisto</h:h1> <h:p>Si ordina l’acquisto delle seguenti azioni</h:p> <pt:stock exchange=“nyse”> <h:table> <h:tr> <h:td>Simbolo</h:td><h:td>Prezzo</h:td><h:td>Numero</h:td> </h:tr> <h:tr> <h:td><pt:simbolo>ZCXM</pt:simbolo></h:td> <h:td><pt:acquisto>25.000</pt:acquisto></h:td> <h:td><pt:quantita>352</pt:quantita></h:td> </h:tr> </h:table> </pt:stock> <h:p>L’ordine va eseguito oggi, al pi&ugrave; presto</h:p> </pt:portfolio> </h:body></h:html>

Page 117: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali117

Namespace di defaultL’assenza del prefisso nell’attributo xmlns indica la presenza di un namespace di default, per cui tutti i nomi privi di prefisso di debbono intendere appartenenti a quel namespace. <html xmlns:pt="http://www.fabiovitali.com/portfolio” xmlns="http://www.w3.org/HTML/1998/html4"><head><title>Acquisto di azioni</h:title></h:head><body> <pt:portfolio> <h1>Ordine di acquisto</h1> <p>Si ordina l’acquisto delle seguenti azioni</p> <pt:stock exchange=“nyse”> <table> <tr> <td>Simbolo</td><td>Prezzo</td><td>Numero</td> </tr> <tr> <td><pt:simbolo>ZCXM</pt:simbolo></td> <td><pt:acquisto>25.000</pt:acquisto></td> <td><pt:quantita>352</pt:quantita></td> </tr> </table> </pt:stock> <p>L’ordine va eseguito oggi, al pi&ugrave; presto</p> </pt:portfolio> </body></html>

Page 118: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali118

XPointer e XPath

Gli XPointer e gli XPath sono indirizzi di locazioni interne a documenti XML. Possono essere usati per indicare link da o a specifiche parti di documenti XML.

Sono una elaborazione del nome in un URL: http://www.domain.com/dir/file.html#nome

Sono dunque usati in un locatore, tipicamente un URI o URL, per indicare un frammento di quella risorsa.

Un XPointer è composto di una sequenza di termini di locazione separati da barre. Ogni termine individua più precisamente un frammento della risorsa individuata in precedenza.

Es.: /doc/chapter[5]/section[2]: la seconda sezione del quinto capitolo dell documento.

Page 119: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali119

Location Path e StepIl tipo più importante di XPath è il Location Path. Questo può essere o assoluto o relativo. Un Location Path assoluto inizia con ‘/’. Un Location Path relativo, invece, fa riferimento ad un nodo dell’albero del documento detto Nodo Contesto (NC)

Un Location Path è composto di una sequenza di passi di locazione (Location Steps) separati da ‘/’, e letti da sinistra a destra. Ogni termine individua più precisamente un frammento della risorsa individuata in precedenza.

Es.: /child::chapter/descendant::para identifica gli elementi “para” che discendono da un elemento “chapter” del documento.

Un location step ha tre parti: Un asse, che individua la direzione del location step Un test, che individua il tipo o il nome del nodo identificato Zero o più predicati che raffinano l’insieme di nodi selezionati

La sintassi è:

axis::test[pred1][pred2]…[pred N]

Page 120: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali120

Assi

Gli assi identificano la direzione rispetto alla struttura del documento in cui andare a cercare l’oggetto da restituire rispetto al nodo contesto (NC). Tra gli assi possibili troviamo:

child, descendant: figlio diretto e a qualunque livello del NC parent, ancestor: il genitore immediato e a qualunque livello del

NC self: il NC; attribute: gli attributi del NC preceding-sibling, following-sibling: i nodi allo stesso

livello ma precedenti o seguenti il NC. preceding, following: i nodi a qualunque livello (ma fuori al NC)

che precedono o seguono il NC.

Page 121: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali121

Test

Il test di un nodo identifica attraverso il nome o il tipo l’oggetto da restituire.

Se si specifica un nome solo i nodi con quel nome vengono selezionati. Altrimenti si possono utilizzare:

text(): il nodo testo contenuto nel nodo indicato dall’asse comment(): il nodo commento *: tutto il contenuto del nodo indicato dall’asse

Esempi: child::text(): il testo di un elemento (il nodo testo figlio del

nodo contesto) attribute::* tutti gli attributi del nodo contesto

Page 122: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali122

Predicati

Un predicato filtra l’insieme dei nodi rispetto alla direzione indicata dall’asse per produrre un nuovo insieme di nodi.

Il filtro può essere attuato sulla posizione, o valutando un’espressione booleana

Ad esempio, child::para[3] individua il terzo nodo di nome “para” dentro al NC. child::para[last()] individua l’ultimo nodo di nome “para” nel NC. N.B.: child::para[3] è equivalente a child::para[position()=3]

Altre funzioni: count() - il numero di nodi id() - l’ID univoco di un nodo name() - il nome qualificato del nodo

Page 123: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali123

Sintassi abbreviataIn molti casi esistono delle forme abbreviate usabili invece della sintassi completa:

child::x diventa x, attribute::x diventa @x, self diventa ‘.’, descendant::x diventa ‘//x’, parent diventa ‘..’

/doc/chapter[5]/section[2]: la seconda sezione del quinto capitolo dell documento.

chapter//para: tutti i para discendenti a qualunque livello del nodo chapter figlio del NC

//para: tutti i para discendenti a qualunque livello della radice. para[@type=“warning”]: tutti i para figli del NC che abbiano l’attributo “warning”. para[@type=“warning”][5]: il quinto para figlio di NC ad avere l’attributo

typeuguale a “warning”. para[5][@type=“warning”]: il quinto para figlio di NC, ma solo se ha l’attributo

type uguale a “warning”.

Page 124: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali124

XPointer

XPointer permettono di specificare la parte fragment di un URL. Essi sono di tre tipi:

Un nome (che identifica l’elemento il cui ID è il nome dato) http://www.sito.com/file.xml#pippo Equivalente a: …#xpointer(id(”pippo”))

Una sequenza di attraversamento http://www.sito.com/file.xml#2/5/3 Equivalente a: …#xpointer(*[2]/*[5]/*[3])

Uno o più forme generali di frammento (General Fragment part) http://www.sito.com/file.xml#xpointer(a/b)

Page 125: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali125

Estensioni a XPath

XPointer estende il concetto di node in quello di locazione. Una locazione è un nodo, o un punto, o un range di un documento XML. Quindi XPointer definisce due nuovi location types:

Point: è definito da un nodo ed un indice, e rappresenta una posizione descritto dall’indice al’interno del nodo. Se il nodo non ha nodi figli, allora l’indice si riferisce alla stringa contenuta nel nodo. XPointer(para/point(127))

Range: è definito come due punti, il primo precedente al secondo.

XPointer(id("sec2.1")/descendant::P[last()] to id("sec2.2")/descendant::P[last()])

Page 126: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali126

XSL: un linguaggio di stylesheet

Poiché nessun elemento di XML possiede un significato predefinito, il linguaggio di stylesheet si occupa di dare un significato agli elementi di un documento XML.

XSL (Extended Stylesheet Language) è una proposta che permette di attribuire significati “ben noti” (come caratteri, font, ecc.) agli elementi di un documento XML.

La proposta è divisa in due parti: un linguaggio di trasformazione da documenti XML a documenti XML (chiamato XSLT), ed un vocabolario di elementi XML con semantica di formattazione (chiamato XSL-FO, o anche solo XSL).

Il linguaggio XSL non ha ancora uno stato concluso. XSLT è una recommendation W3C del novembre 1999, mentre XSL-FO è ancora in fase di discussione.

Page 127: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali127

Come funziona XSLT

Innanzitutto XSL è un linguaggio di trasformazione: dato un documento XML, è possibile generare un altro documento XML derivato applicando delle regole di trasformazione specificate nello stylesheet.

Se poi nel documento XML di destinazione abbiamo scritto elementi i cui nomi ed attributi sono noti ad un browser (ad esempio, HTML o XSL-FO), allora il documento può essere visualizzato dal browser.

XSLT, tuttavia, è molto più di un linguaggio di visualizzazione di documenti XML: è un linguaggio per trasformare un documento XML in un altro documento XML secondo regole predefinite. Non è potentissimo, ma si possono fare molte cose.

Page 128: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali128

Cos’è un documento XSL? Un documento XSL è un documento XML che utilizza un set di elementi speciali in cui gli elementi hanno senso predefinito. Un documento XSL è composto di template di costruzione, che permettono di riscrivere certi elementi del documento XML d’origine in altri elementi del documento destinazione. Esistono due filosofie di riscrittura disponibili in XSLT, che vengono dette push e pull.

Push: basata su regole, usata tipicamente per trasformare documenti. Per ogni elemento del documenti di input, si cerca la regola più appropriata e la si usa per scrivere il risultato

Pull: basata su template, viene usata tipicamente per trasformare dati. In un documento pre-formattato per l’output, si vanno ad inserire le parti di documento tratte dal file XML d’origine.

Page 129: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali129

Un esempio di pull (1)Il documento del portfolio ha una struttura di database, molto ripetitiva:<?xml version='1.0'?> <!DOCTYPE portfolio SYSTEM “portfolio.dtd”><portfolio> <stock> <id><nome>zabyrint ltd</nome> <simbolo>ZABW</simbolo></id> <prezzo>12.020</prezzo> </stock> <stock> <id><nome>zaffymat inc</nome> <simbolo>ZFFX</simbolo></id> <prezzo>92.250</prezzo> </stock> <stock> <id><name>zysmergy inc</name> <simbolo>ZYSZ</simbolo></id> <prezzo>20.313</prezzo> </stock> </portfolio>

Page 130: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali130

Un esempio di pull (2)

Questo è un foglio di stile XSLT di tipo pull per generare un documento HTML con quei dati:

<HTML> <BODY> <TABLE BORDER="2"> <TR> <TD>Nome</TD> <TD>Simbolo</TD> <TD>Quant.</TD></TR> <xsl:for-each select="portfolio/stock"> <TR> <TD><xsl:value-of select=”id/nome"/> </TD> <TD><xsl:value-of select=”id/simbolo"/></TD> <TD><xsl:value-of select=”prezzo"/></TD> </TR> </xsl:for-each> </TABLE> </BODY> </HTML>

Page 131: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali131

Il foglio di stile per il pull

Questo è sostanzialmente un documento HTML con qualche tag strano:

xsl:for-each va a cercare uno ad uno una sequenza di elementi ed applica le istruzioni al suo interno per ciascun elemento

xsl:value-of va a cercare il valore (cioè il contenuto) di ogni elemento all’interno di xsl:foreach, e lo inserisce al suo posto.

xsl:template dice che questa regola è un template da applicare all’elemento radice del documento XML di partenza (match=“/”). E’ quindi possibile applicare la stessa regola anche a sottoparti di un documento XML.

xsl:stylesheet è l’elemento radice del foglio di stile e specifica i namespace che vengono utilizzati nel foglio di stile stesso (nel nostro caso, uno per le istruzioni XSL ed uno per il set di tag di destinazione, cioè HTML.

Page 132: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali132

Un esempio di push (1)Il documento del romanzo, invece, ha una forma più libera e più strutturata:<!DOCTYPE ROMANZO SYSTEM “romanzo.dtd”><ROMANZO> <TITOLO>Tre Uomini in Barca</TITOLO> <AUTORE>Jerome K. Jerome</AUTORE> <ANNO>1889</ANNO> <CAPITOLO> <TITOLO>Capitolo primo</TITOLO> <INDICE> <EL>Tre invalidi</EL><EL>Le sofferenze di George e Harris </EL><EL>La vittima di centosette malattie inguaribili</EL> </INDICE> <PARA>Eravamo in quattro: George, William Samuel Harris, io, e Montmorency. Standocene seduti in camera mia, fumavamo e parlavamo di quanto fossimo malridotti… <INCISO>malridotti, dal punto di vista della salute, <INCISO>intendo,</INCISO> naturalmente</INCISO>. </PARA> <PARA>Ci sentivamo tutti piuttosto giù di corda,</PARA> </CAPITOLO>… </ROMANZO>

Page 133: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali133

Un esempio di push (2)Questo è un foglio di stile XSLT di tipo push:<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <HTML> <BODY> <H1><xsl:value-of select=”romanzo/titolo"/></H1> <xsl:apply-templates select=”capitolo"/> </BODY> </HTML> </xsl:template>

<xsl:template match=”capitolo"> <HR/> <H2><xsl:value-of select=”titolo"/></H2> <xsl:apply-templates select=“para”/> </xsl:template>

<xsl:template match="para"> <P><xsl:apply-templates /></P> </xsl:template>

<xsl:template match=”inciso"> <I><xsl:apply-templates /></I> </xsl:template>

<xsl:template match=”inciso/inciso"> <B><xsl:apply-templates /></B> </xsl:template></xsl:stylesheet>

Page 134: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali134

Il foglio di stile per il push

Questo non assomiglia ad un documento HTML, ma ad una serie di istruzioni di compilazione separate:

xsl:template è la regola da applicare se l’elemento in esame corrisponde al valore dell’attributo match. Di volta in volta applicherò il template della radice (“/”), dell’elemento “section”, dell’elemento “para”, dell’elemento “emph”, ecc.

xsl:apply-templates spinge a cercare, all’interno dell’elemento che stiamo considerando, se esistono altri template applicabili.E’ il modo per far ripartire ricorsivamente la ricerca di altri template.

Quindi il motore XSL cerca sempre un template per la radice, e trovandolo esegue quello che c’è dentro.

Se ci sono istruzioni del tipo xsl:for-each, esamina il contenuto della radice e sostituisce ogni xsl:value-of con il valore dell’elemento trovato.

Se invece ci sono istruzioni del tipo xsl:apply-templates cerca, per ogni elemento all’interno dell’elemento, un template adatto e ripete ricorsivamente la procedura.

Page 135: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali135

Usare XSL

E’ necessario indicare al browser dove trovare lo stylesheet da usare. Questo può essere fatto in tre modi:

Specificando nell’intestazione MIME del collegamento HTTP la locazione del foglio di stile

Specificando un gruppo di documenti, uno dei quali è il foglio di stile

Specificando con una Processing Instruction (PI) il collegamento:<?xml-stylesheet type=“text/xsl” href=“style.xsl”?><doc> … </doc>

L’ultima soluzione è l’unica che funziona oggi con Internet Explorer 5.0, ma non è ancora ufficiale. In prospettiva, credo che la soluzione migliore sia la seconda.

Page 136: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali136

XLink

XPath, XLink e XPointer sono tre documenti di W3C per la specifica di link ipertestuali sui documenti XML. Originariamente erano un’unica proposta chiamata XLL (da cui la terna XML, XLL e XSL), poi divisa in tre per semplicità.

XPointer specifica i meccanismi per riferirsi a parti del documento XML (SGML permette di riferirsi solo ad elementi con l’attributo “ID”, HTML solo ad elementi con l’attributo “NAME”).

XPath specifica i meccanismi per indicare percorsi all’interno di un documento XML. E’ usato anche da XSLT per l’attributo match.

XLink usa i meccanismi di indirizzamento di XPointer per descrivere link anche sofisticati tra documenti XML.

Page 137: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali137

XLinkGli XLink sono elementi di un documento XML che hanno significato e comportamento di link ipertestuale.

Un elemento XML è identificato come un XLink se possiede degli attributi riservati. Stiamo sfruttando il concetto di architectural form introdotto da HyTime

Questa è una soluzione di compromesso tra il riservare nomi specifici di elementi (che avrebbe limitato la libertà di creazione dei DTD) e il lasciare tutta la gestione dei link ai fogli di stile (che avrebbe negato di attribuire inequivocabilmente agli elementi la natura di link).

Gli XLink sono di due tipi: Link semplici: elementi inline e uni-direzionali Link estesi: inline o out-of-line, spesso multi-direzionali.

Page 138: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali138

Funzionamento di XLink

XLink definisce un namespace e alcuni attributi globali in questo namespace. Includere il namespace equivale ad ammettere XLink nel proprio documento.

Qualunque namespace definito come "http://www.w3.org/1999/xlink” definisce degli XLink

Ad esempio:<b:doc xmlns:a="http://www.w3.org/1999/xlink” xmnls:b=“http://www.sito.com/mio-namespace”> <b:para> Clicca <b:link a:type=“simple” a:href=“dest.xml”> qui!

</b:link> </b:para></b:doc>

Page 139: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali139

XLink sempliciLa presenza dell’attributo xml:type con valore “simple” identifica l’elemento come un XLink semplice. Un link semplice ha esattamente due risorse collegate, di cui una è locale ed una è remota. Dunque il link è sempre inline.

<A xl:type=“simple” xl:href=“http://…/”> W3C </A>

L’attributo href identifica il o i locatori coinvolti. Un locatore è un URL.

Il modo più semplice di definire elementi è specificare in un DTD (o nel subset inline di DTD) la presenza dell’attributo:

<!DOCTYPE mydoc [ <!ATTLIST A xl:type CDATA #FIXED “simple”

xl:href CDATA #REQUIRED >]>... <A xl:href=“http://www.w3.org/”> W3C </A>

Page 140: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali140

XLink estesiUn XLink esteso associa un numero arbitrario di risorse, alcune locali, altre remote. Un link si dice inline se c’è almeno una risorsa locale.

Un link esteso deve contenere elementi tratti dai seguenti: L’elemento locator, che indica l’indirizzo di una risorsa remota) L’elemento arc che specifica regole di attraversamento tra le risorse del link L’elemento resource che indica una risorsa locale (e quindi inline) del

documento.

I link estesi sono utili per: Creare link in uscita da documenti che non possono essere modificati (e quindi non

permettono link inline) Creare link da o per documenti in formati non XML. Eseguire l’attivazione di collezioni di link a richiesta. Specificare link mutli-direzionali e multi-destinazione.

Page 141: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali141

Link inline e out-of-line

Un link HTML è un link inline: il testo linkante o linkato è il contenuto dell’elemento A, e il link appartiene al documento in cui appare.

I link out-of-line sono link che vengono memorizzati in un documento, e appaiono in un altro. Questo è molto comodo per creare link a o da risorse read-only (CD-ROM) o su cui non si hanno permessi di modifica (documenti altrui).

XLink determina il tipo di link tramite la presenza dell’elemento resource

Page 142: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali142

Un esempio di link esteso

<extlink xl:type=“extended” xl:role=“extlink”

xl:title=“prova”> <ruolo xl:type=“arc” xl:from=“uno” xl:to=“due”/> <ruolo xl:type=“arc” xl:from=“uno” xl:to=“tre”/> <local xl:type=“resource” xl:role=“uno”> Clicca qui </local> <url xl:type=“locator” xl:role=“due” xl:href=“http://www.sitodue.com/”/> <url xl:type=“locator” xl:role=“tre” xl:href=“http://www.sitotre.com/”/>

</extlink>

Page 143: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali143

Un altro esempio di link esteso

<extlink xl:type=“extended”> <ruolo xl:type=“arc” xl:from=“due” xl:to=“tre”/> <ruolo xl:type=“arc” xl:from=“tre” xl:to=“due”/> <url xl:type=“locator” xl:role=“due” xl:href=“http://www.sitodue.com/index.xml

#para[5]/Range(point(7) to point(12))”/> <url xl:type=“locator” xl:role=“tre” xl:href=“http://www.sitotre.com/index.xml

#para[7]/img[4]”>Ecco qui

</url>

</extlink>

Page 144: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali144

Lo stesso esempio<!DOCTYPE [ <!ATTLIST extlink xl:type CDATA #FIXED “extended”>

<!ATTLIST ruolo xl:type CDATA #FIXED “arc”>

<!ATTLIST local xl:type CDATA #FIXED “resource”>

<!ATTLIST url xl:type CDATA #FIXED “locator”>

]>

<extlink xl:role=“extlink” xl:title=“prova”> <ruolo xl:from=“uno” xl:to=“due”/> <ruolo xl:from=“uno” xl:to=“tre”/> <local xl:role=“uno”> Clicca qui </local> <url xl:role=“due” xl:href=“http://www.sito2.com/”/> <url xl:role=“tre” xl:href=“http://www.sito3.com/”/>

</extlink>

Page 145: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali145

Quasi lo stesso esempio (2)<!DOCTYPE [ <!ATTLIST extlink xl:type CDATA #FIXED “extended”> <!ATTLIST andata

xl:type CDATA #FIXED “arc”xl:from CDATA #FIXED “uno” xl:to CDATA #FIXED “due”

> <!ATTLIST ritorno

xl:type CDATA #FIXED “arc”xl:from CDATA #FIXED “due” xl:to CDATA #FIXED “uno”

><!ATTLIST da

xl:type CDATA #FIXED “resource”xl:role CDATA #FIXED “uno”

><!ATTLIST finoa

xl:type CDATA #FIXED “locator”xl:role CDATA #FIXED “due”

>]>

<extlink xl:role=“extlink” xl:title=“prova”> <ritorno/> <andata/> <da> Clicca qui </da> <finoa xl:href=“http://www.sito2.com/”/></extlink>

Page 146: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali146

Linkset esterniVisto che molti link finiscono con l’essere esterni al documento, come si fa ad associare un documento con l’elenco dei link definiti su di esso?

Il metodo migliore è usando un metodo out-of-band: per esempio, un header della trasmissione HTTP

Altrimenti, esiste un valore riservato per l’attributo role, external-linkset, per creare un link esteso che punti alla locazione del set di link relativo al documento:

<extendedlink

xmlns:xl="http://www.w3.org/1999/xlink"

xl:type="xl:external-linkset">

<loc xl:href=“http://…” />

</extendedlink>

Page 147: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali147

Altri attributiAltri importanti attributi sono:

title: contiene una stringa intelligibile all’utente di spiegazione del senso della risorsa (usabile su simple, locator, resource e arc)

show (valori possibili: “embed”, “replace”, “new”): specifica come visualizzare o elaborare la risorsa specificata. “new” indica che la risorsa va visualizzata in un contesto nuovo, come una finestra nuova; “replace” indica che la risorsa nuova sostituisce la vecchia nel contesto esistente. “embed” indica che il contesto della risorsa nuova è la risorsa locale, a cui va sostituita. Per esempio, rimpiazzando il testo del link con il testo della destinazione. (usabile su simple e arc)

actuate (valori possibili: “onLoad” e “onRequest”): specifica quando l’attivazione del link debba avvenire. “onRequest” indica che deve essere l’utente ad attivare l’azione, per esempio facendo click su un pulsante. “onLoad” significa che il link deve essere attivato appena la risorsa locale viene caricata. (usabile su simple e arc)

Page 148: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali148

XML Schema

XML Schema è una proposta per sostituire i DTD di XML con qualcosa di più potente e flessibile.

La proposta è divisa in tre parti: Un’introduzione alle caratteristiche di XML Schema

(non normativa) Una parte dedicata alle strutture del linguaggio Una parte dedicata ai tipi di dati definibili nel

linguaggio.

Page 149: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali149

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.

Page 150: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali150

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): Un’interfaccia tra autore e lettore, attraverso XSL e XLink, per

portare significato tra creatore ed utente Un’interfaccia tra applicazione ed applicazione, attraverso XML

Schema, per esprimere contratti sui formati, e verificarne il rispetto.

Page 151: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali151

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; ”

Page 152: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali152

Validazione e buona formaLa 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:

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.

Page 153: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali153

XML Schema e DTD

I DTD non sono espressi con XML, così da dover creare strumenti appositi per la validazione.

I DTD non distinguono tra nome del tag e tipo del tag, ed hanno solo due tipi: complesso (cioè strutturato) e semplice (cioè CDATA o #PCDATA).

XML Schema, invece, fornisce un set complesso di tipi, a cui i tag e il loro contenuto debbono aderire.

Inoltre permette di agire in maniera obect-oriented, permettendo di ampliare i tipi disponibili e di estenderne e precisarne le proprietà.

Infine, XML Schema è scritto in XML, permettendo l’uso di applicazioni XML per la verifica della validità dei dati espressi.

Page 154: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali154

XML Schema

E’ una delle attività del working group su XML. Ha prodotto 6 generazioni di working draft, di cui l’ultima, del 7 aprile, dovrebbe essere pressoché definitiva.

E’ diviso in tre parti: XML Schema Part 0: Primer (un’introduzione) XML Schema Part 1: Structures (struttura del

documento XML Schema) XML Schema Part 2: Datatypes (modello dei dati e

meccanismi di estensione dei tipi)

Recommendation W3C prima dell’estate?

Page 155: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali155

Formato di un XML SchemaUn documento di XML Schema è racchiuso in un elemento <schema>, e può contenere, in varia forma ed ordine, i seguenti elementi:

<import> ed <include> per inserire, in varia forma, altri frammenti di schema da altri documenti

<simpleType> e <complexType> per la definizione di tipi denominati usabili in seguito

<element> ed <attribute> per la definizione di elementi ed attributi globali del documento.

<attributeGroup> e <group> per definire serie di attributi e gruppi di content model complessi e denominati.

<notation> per definire notazioni non XML all’interno di un documento XML

<annotation> per esprimere commenti per esseri umani o per applicazioni diverse dal parser di XML Schema.

Page 156: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali156

I tipi in XML Schema

XML Schema usa i tipi per esprimere vincoli sul contenuto di elementi ed attributi.

Un tipo semplice è un tipo di dati che non può contenere markup e non può avere attributi. In pratica è una sequenza di caratteri.

Un tipo complesso è un tipo di dati che può contenere markup e avere attributi.

Esiste un grande numero di tipi predefiniti, di tipo semplice: string, decimal, float, boolean, uriReference, date, time, ecc.

Ogni tipo è 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.

Page 157: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali157

Un esempio

<xsi:simpleType name='bodytemp’ base='decimal'> <xsi:precision value=’3'/> <xsi:scale value='1'/> <xsi:minInclusive value=’36.5'/> <xsi:maxInclusive value=’44.0'/></xsi:simpleType>

<xsi:complexType name='name'> <xsi:element name='forename' minOccurs='0' maxOccurs='*'/> <xsi:element name='surname'/></xsi:complexType>

Page 158: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali158

Facets

Per ogni tipo io posso precisare dei facets, delle caratteristiche indipendenti tra di loro che specificano aspetti del tipo:

length, minLength, maxLength: numero richiesto, minimo e massimo di caratteri

minExclusive, minInclusive, maxExclusive, maxInclusive: valore massimo e minimo, inclusivo ed esclusivo

precision, scale: numero di cifre significative e di decimali significativi

pattern: espressione regolare a cui deve soddisfare il valore enumeration: lista all’interno dei quali scegliere il valore. period, duration, encoding, ecc.

Page 159: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali159

Derivazione di tipi

I tipi possono formare un albero complesso di derivazioni, permettendo a nuovi tipi di attingere a definizioni di altri tipi.

E’ possibile estendere i tipi in due maniere: Per restrizione (derivedBy=“restriction”) ad esempio specificando

facets aggiuntivi. Per estensione (derivedBy=“extension”) ad esempio estendendo il

content model lecito. N.B.: l’estensione non ha senso per i tipi semplici.

Inoltre è possibile specificare equivalenze tra gli elementi, con l’attributo equivClass, il che permette di specificare degli elementi come totalmente sostituibili nei content model. Attenzione: elementi, non tipi!

Page 160: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali160

Esempi di derivazione (1)

<xsi:simpleType name='bodytemp’ base='decimal'> <xsi:precision value=’3'/> <xsi:scale value='1'/> <xsi:minInclusive value=’36.5'/> <xsi:maxInclusive value=’44.0'/></xsi:simpleType>

<xsi:simpleType name=’healthbodytemp’ base=’bodytemp'> <xsi:maxInclusive value=’37.0'/></xsi:simpleType>

Page 161: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali161

Esempi di derivazione (2)

<xsi:complexType name='name'> <xsi:element name='forename' minOccurs='0' maxOccurs='*'/> <xsi:element name='surname'/></xsi:complexType>

<xsi:complexType name=’fullname’ base=“name” derivedBy=“extension”> <xsi:element name='title' minOccurs='0'/></xsi:complexType>

Page 162: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali162

Tipi complessi

Oltre ai facets, nella definizione di un tipo complesso debbo anche poter precisare un content model ed una serie di attributi leciti.

Per questo uso gli elementi <element>, <group> e <attribute>. Questi hanno vari attributi importanti:

Name: il nome del tag o dell’attributo Ref: il nome di un elemento o attributo definito altrove (globale) Type: il nome del tipo, se non esplicitato come content maxOccurs, minOccurs: il numero minimo e massimo di

occurrenze Fixed, default, nullable, ecc.

Page 163: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali163

Content model complessi (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> e <sequence>. Questi sostituiscono anche le parentesi.

(A, B) diventa

<xsi:sequence> <xsi:element name=”A” /> <xsi:element name=”B” /></xsi:sequence>

(A | B) diventa

<xsi:choice> <xsi:element name=”A” /> <xsi:element name=”B” /></xsi:choice>

Page 164: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali164

Content model complessi (2) (A, ( B | C)) diventa

<xsi:sequence> <xsi:element name=”A” /> <xsi:choice> <xsi:element name=”B” /> <xsi:element name=”C” /> </xsi:choice></xsi:sequence>

Il content model misto aggiunge semplicemente l’attributo content con valore “mixed”. Altri valori: elementOnly (default), empty, textOnly.

(#PCDATA | B | C )* diventa<xsi:complexType content='mixed'> <xsi:element name=”B” /> <xsi:element name=”C” /></xsi:element>

Page 165: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali165

AttributiLa dichiarazione di attributi può avvenire con l’elemento <attribute>, dentro alla dichiarazione dell’elemento<!ELEMENT A (B,C)><!ATTLIST A p CDATA #IMPLIED q (uno|due|tre) #IMPLIED>corrisponde a:<xsi:element name=”A”> <xsi:element name=”B” /> <xsi:element name=”C” /> <xsi:attribute name=”p” type=”xsi:string”/> <xsi:attribute name=”q"> <xsi:simpleType base="xsi:string"> <xsi:enumeration value=”uno"/> <xsi:enumeration value=”due"/> <xsi:enumeration value=”tre"/> </xsi:simpleType> </xsi:attribute></xsi:element>

Page 166: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali166

Gruppi di attributiE’ anche possibile raccogliere questi attributi esternamente in un gruppo:

<xsi:element name=”A”> <xsi:element name=”B” /> <xsi:element name=”C” /> <xsi:attributeGroup ref=”attrsA” /></xsi:element>

<xsi:attributeGroup name=”attrsA"> <xsi:attribute name=”p” type=”xsi:string”/> <xsi:attribute name=”q"> <xsi:simpleType base="xsi:string"> <xsi:enumeration value=”uno"/> <xsi:enumeration value=”due"/> <xsi:enumeration value=”tre"/> </xsi:simpleType> </xsi:attribute> </xsi:attributeGroup>

Page 167: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali167

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

<xsi:element name=’pippo'> <annotation> <documentation>elemento pippo</documentation> </annotation> <xsi:element name=“pluto” /></xsi:element>

Page 168: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali168

Altri aspetti

Namespace In XML schema ogni nome definito appartiene ad un namespace

specificato. I tipi estendono tipi predefiniti o definiti nello schema. In ogni caso vanno specificati con il namespace appropriato.

Inclusioni e importazioni In XML Schema, esistono meccanismi per dividere lo schema in più

file, o per importare definizioni appartenenti ad altri namespace.

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.

Page 169: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali169

Riferirsi ad uno schema

<fv:pippo xmlns:fv =“http://www.fabio.org/Pippo” xmlns:xsi=“http://www.w3.org/1999/XMLSchema/instance” 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).

Page 170: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLParte VIStrumenti per XML

Editor Browser XML Conversion Tools Document Storage Systems DTD Development Tools

Page 171: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali171

Editors

Questa categoria comprende gli strumenti utilizzabili per la creazione di documenti XML.

Xmetal - SoftQuad Software Inc. (Win32) Http://www.softquad.com/XML Notepad - Microsoft

(Win32) Xeena - IBM Alphaworks (Java)

Page 172: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali172

Xmetal (1)

http://www.softquad.com/products/xmetal/

Prodotto commerciale completo: creazione di DTD creazione di stylesheet CSS integrazione con DBMS

Page 173: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali173

Xmetal (2)

Page 174: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali174

XMLNotepad

http://msdn.microsoft.com/xml/notepad/intro.asp

Freeware, utilizza il supporto XML di IE5

Page 175: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali175

Xeena

http://alphaworks.ibm.com/tech/xeena

Freeware e portabile

Page 176: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali176

Browsers

Questa categoria comprende gli strumenti per la visualizzazione e la navigazione di documenti XML

Internet Explorer 5 - Microsoft (Win32, Mac, HP-UX) Netscape 6 - Netscape (Win32, Mac, Linux,

OpenVMS, FreeBSD) Xplorer - IBM Alphaworks (IBM)

Page 177: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali177

Internet Explorer 5

http://www.microsoft.com/ie/

supporta XML, DOM, CSS e XSL

Page 178: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali178

Netscape 6http://home.netscape.com/browsers/6

preview release, supporta XML, DOM e CSS (ma non XSL)

Page 179: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali179

Xplorerhttp://alphaworks.ibm.com/tech/xplorer

Freeware e portabile. E' solo un visualizzatore locale

Page 180: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali180

XML Conversion Tools

Non XML to XML converters trasformano dati non XML in XML;

XML to XML converters trasformano dati XML da un formato in un altro;

Page 181: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali181

Non XML to XML Converters

Questi strumenti trasformano dati non XML in XML DB2XML - Volker Turau (Java)

trasforma il risultato di query SQL in XML ???

OmniMark - OmniMark Technologies Corp. (Win, Unix) trasforma documenti di qualunque tipo in XML http://www.omnimark.com

Page 182: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali182

XML to XML Converters

Questi strumenti trasformano documenti XML da un formato in un'altro formato

LotusXSL- IBM alphaWorks (Java) processore XSL

TransformXML - Frank Boumphrey (Win32) utilizza un linguaggio proprietario

Page 183: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali183

Document Storage Systems

Strumenti per la gestione dei documenti XML, in grado di gestirne la memorizzazione e di semplificare le operazioni di ricerca.

Database con supporto per XML XML Data Store

Page 184: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali184

Oracle 8i

http://www.oracle.com

Database con supporto per XML inserimento di documenti XML come dati primitivi

(ricerche testuali) importazione dati da XML esportazione dati in XML

Page 185: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali185

eXcelon (1)

http://www.exceloncorp.com

XML Data Store gestione nativa dei dati XML interrogazione mediante XML query languages

(XQL) accesso ai dati attraverso interfacce DOM

Page 186: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali186

eXcelon (2)

Page 187: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali187

DTD Development Tools

Questa categoria comprende gli strumenti per la creazione e la manutenzione dei DTD

DTD editors DTD generators

Page 188: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali188

ezDTDhttp://www.geocities.com/SiliconValley/Haven/2638/ezDTD.htm

Editor visuale di DTD

Page 189: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali189

Data Descriptors by Example

http://www.alphaworks.ibm.com/tech/DDbE

Crea DTD basandosi su documenti XML di esempio.

Page 190: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali190

Siti Web interessanti

The XML Cover Pages http://www.oasis-open.org/cover/

The Whirlwind Guide to XML Tools and Vendors http://www.infotek.no/sgmltool/guide.htm

Free XML tools and software http://www/xmlsoftware.org/http://www.garshol.priv.no/download/xmltools/

W3C XML page http://www.w3.org/XML/

Page 191: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali191

Riferimenti (1) XML

J. Bosak, XML, Java, and the future of the Web, http://metalab.unc.edu/pub/sun-info/standards/xml/why/xmlapps.htm

T. Bray, J. Paoli, C.M. Sperberg-McQueen, Extensible Markup Language (XML) 1.0, W3C Recommendation, 10 February 1998, http://www.w3.org/TR/REC-xml

T. Bray, The annotated XML Specification,1998, http://www.xml.com/axml/testaxml.htm

XML Namespace T. Bray, D. Hollander, A. Layman, Namespaces in XML, W3C Recommendation,

14 January 1999, http://www.w3.org/TR/REC-xml-names T. Bray, XML Namespaces by Example,

http://www.xml.com/xml/pub/1999/01/namespaces.html J. Clark, XML Namespaces, http://www.jclark.com/xml/xmlns.htm

Page 192: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali192

Riferimenti (2) XSLT

James Clark, XSL Transformations (XSLT) Version 1.0, W3C Recommendation 16 November 1999, http://www.w3.org/TR/xslt

E.R. Harold, XSL Transformations (XSLT), capitolo 14 del libro XML Bible, disponibile in rete: http://metalab.unc.edu/xml/books/bible/updates/14.html

James Clark, XSLT in Perspective, http://www.jclark.com/xml/xslt-talk.htm

XPointer e XLink S. DeRose, E. Maler, D. Orchard, B. Trafford, XML Linking Language (XLink),

W3C Working Draft , 21 February 2000, http://www.w3.org/TR/xlink/ J. Clark, S. DeRose, XML Path Language (XPath), Version 1.0, W3C

Recommendation 16 November 1999, http://www.w3.org/TR/xpath S. DeRose, R. Daniel Jr., E. Maler, XML Pointer Language (XPointer), W3C

Working Draft 6 December 1999, http://www.w3.org/TR/xptr

Page 193: XML La famiglia di linguaggi XML Fabio Vitali Università di Bologna.

XMLFabio Vitali193

Riferimenti (3) XML Schema

D. C. Fallside, XML Schema Part 0: Primer, W3C Working Draft, 25 February 2000, http://www.w3.org/TR/xmlschema-0

H. S. Thompson, D. Beech, M. Maloney, N. Mendelsohn, XML Schema Part 1: Structures, W3C Working Draft 25 February 2000, http://www.w3.org/TR/xmlschema-1

P. V. Biron, A. Malhotra, XML Schema Part 2: Datatypes, W3C Working Draft 25 February 2000, http://www.w3.org/TR/xmlschema-2