La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

La famiglia di linguaggi XML

Presentazioni simili


Presentazione sul tema: "La famiglia di linguaggi XML"— Transcript della presentazione:

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

2 «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” Fabio Vitali

3 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) Fabio Vitali

4 Parte I Cos’è il markup Definizione di markup Tipi di markup
Il markup procedurale Il markup dichiarativo

5 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. Fabio Vitali

6 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. Fabio Vitali

7 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. Fabio Vitali

8 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. Fabio Vitali

9 Un testo su carta 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 Fabio Vitali

10 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. Treuominiinbarcajeromekjerome1889capitoloprimotreinvalidilesofferenzedigeorgeeharrislavittimadicentosettemalattieinguaribilieravamoinquattrogeorge,williamsamuelharrisioemontmorencystandocenesedutiincameramiafumavamoeparlavamodiquantofossimomalridottimalridottidalpuntodivistadellasaluteintendonaturalmentecisentivamotuttipiuttostogiùdicorda Fabio Vitali

11 Markup metabolizzato Aggiungiamo markup puntuazionale e presentazionale: maiuscole/minuscole, punteggiatura, spazi e ritorni a capo sono essi stessi elementi di markup. 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, 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, ... Fabio Vitali

12 Markup procedurale Sono 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. {\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 }} Fabio Vitali

13 Markup descrittivo Sono informazioni (descrizioni) sugli elementi del documenti, che ne specificano il ruolo, la giustificazione, la relazione con gli altri elementi. <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> Fabio Vitali

14 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à Fabio Vitali

15 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. Fabio Vitali

16 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. Fabio Vitali

17 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. Fabio Vitali

18 La storia del markup Anni ‘60: primo WP in IBM
GCA-GenCode e IBM-GML ( ) Anni ‘80: WP WYSIWYG e DTP 1986: SGML è standard ISO 8879 1991: HTML 1997: la convergenza su XML Fabio Vitali

19 SGML SGML (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 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. Fabio Vitali

20 Parte II Introduzione a XML e famiglia
Cos’è XML Perché XML La famiglia XML Cosa si fa con XML Un esempio: XML News

21 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. Fabio Vitali

22 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. Fabio Vitali

23 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. Fabio Vitali

24 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. Fabio Vitali

25 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 Fabio Vitali

26 Cosa si fa con XML? Data Interchange Document publishing
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. Fabio Vitali

27 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. Fabio Vitali

28 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. Fabio Vitali

29 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. Fabio Vitali

30 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. Fabio Vitali

31 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 Fabio Vitali

32 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. Fabio Vitali

33 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. Fabio Vitali

34 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. Fabio Vitali

35 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. Fabio Vitali

36 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. Fabio Vitali

37 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 :28 ET</story.date> </dateline> </body.head> <body.content> … </body.content> </body> </nitf> Fabio Vitali

38 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> Fabio Vitali

39 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=“ ”>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. Fabio Vitali

40 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. Fabio Vitali

41 Parte III Analisi 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

42 Perché convengono i linguaggi di markup?
SGML DTP prof. WP + stili Word Processor ASCII Bitmap Carta La conversione è difficile La conversione è facile Energia / Informazione Fabio Vitali

43 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. Fabio Vitali

44 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. Fabio Vitali

45 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 Fabio Vitali

46 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 Fabio Vitali

47 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. Fabio Vitali

48 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. Fabio Vitali

49 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.). Fabio Vitali

50 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. Fabio Vitali

51 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. Fabio Vitali

52 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. Fabio Vitali

53 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. Fabio Vitali

54 Parte IV La 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

55 XML 1.0 Una raccomandazione W3C del 10 febbraio 1998.
È definita come un sottoinsieme di SGML URL ufficiale: Traduzione ufficiale in italiano: Molto più formalizzata della grammatica di SGML, usa una notazione formale, Extended Backus-Naur Form. Fabio Vitali

56 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. Fabio Vitali

57 I componenti di XML Un documento XML contiene una varietà dei seguenti componenti Elementi Attributi Entità Testo (detto anche #PCDATA) Commenti Processing Instructions Fabio Vitali

58 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> Fabio Vitali

59 Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions
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> Fabio Vitali

60 Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions
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 è una bella giornata. Come dice &FV;: “divertitevi!” Fabio Vitali

61 Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions
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. Fabio Vitali

62 Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions
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 --> Fabio Vitali

63 Elementi, Attributi, Entità, #PCDATA, Commenti, Processing Instructions
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?> . Fabio Vitali

64 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 Fabio Vitali

65 Dichiarazione XML Document Type Declaration Document 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. Fabio Vitali

66 Dichiarazione XML Document Type Declaration Document Instance
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. Fabio Vitali

67 Dichiarazione XML Document Type Declaration Document Instance
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. Fabio Vitali

68 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. Fabio Vitali

69 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. Fabio Vitali

70 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. Fabio Vitali

71 Esempi 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=“ … </A> Entità: à

72 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. Fabio Vitali

73 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. Fabio Vitali

74 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. Fabio Vitali

75 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. Fabio Vitali

76 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/> Fabio Vitali

77 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. Fabio Vitali

78 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. Fabio Vitali

79 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. Fabio Vitali

80 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. Fabio Vitali

81 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. Fabio Vitali

82 Un esempio semplice Vogliamo 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> Fabio Vitali

83 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)> Fabio Vitali

84 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> <id><name>zysmergy inc</name> <simbolo>ZYSZ</simbolo></id> <prezzo>20.313</prezzo> </portfolio> Fabio Vitali

85 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> Fabio Vitali

86 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> Fabio Vitali

87 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)* > Fabio Vitali

88 Specifica di attributi
La dichiarazione <!ATTLIST… > permette di definire una lista di attributi lecita ad un elemento XML dichiarato in precedenza. <!ATTLIST nome nome-attributo-1 tipo-1 default-1 nome-attributo-2 tipo-2 default-2 nome-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 Fabio Vitali

89 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” Fabio Vitali

90 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. Fabio Vitali

91 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. Fabio Vitali

92 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 exchange=“Frankfurt”> <id><name>zysmergy inc</name> <simbolo>ZYSZ</simbolo></id> <prezzo>20.313</prezzo> </portfolio> Fabio Vitali

93 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”> Fabio Vitali

94 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> Fabio Vitali

95 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)* > Fabio Vitali

96 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. Fabio Vitali

97 <!ENTITY Z “pippo”>
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à </X> Fabio Vitali

98 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ù 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”> Fabio Vitali

99 <!ENTITY % Z “#PCDATA | K”>
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)* > Fabio Vitali

100 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; > Fabio Vitali

101 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.... Fabio Vitali

102 Complichiamo l’esempio: entità parametriche (III)
Realizziamo un DTD compatibile XML e SGML: File “romanzo.dtd”: <!ELEMENT ROMANZO %min; (TITOLO, AUTORE, ANNO, CAPITOLO+)> File “romanzosgml.dtd” <!ENTITY % min “- -”> <!ENTITY % dtd SYSTEM “romanzo.dtd”> %romanzo.dtd File “romanzoxml.dtd” <!ENTITY % min “”> <!ENTITY % dtd SYSTEM “romanzo.dtd”> %romanzo.dtd Fabio Vitali

103 Altre caratteristiche di XML
Sezioni CDATA (per scrivere testi con caratteri del markup) Rigore sintattico (case sensitivity, nessuna minimizzazione) Entità predefinite (< >, &, &apos; ") Gestione del white space (e’ sempre significativo) Attributi riservati (xml-space, xml-lang) Marked sections (parti attivabili del DTD) Fabio Vitali

104 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 è un titolo</h1>]]>” indica un titolo </para> Fabio Vitali

105 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 “<”> <!ENTITY gt “>”> <!ENTITY amp “&”> <!ENTITY apos “’”> <!ENTITY quot ‘”’> Fabio Vitali

106 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). Fabio Vitali

107 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” > Fabio Vitali

108 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, )> <!ELEMENT nome #PCDATA> <!ELEMENT cognome #PCDATA> <!ELEMENT #PCDATA> è equivalente a <autore> <nome>Fabio</nome> <cognome>Vitali</cognome> </autore> Fabio Vitali

109 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. Fabio Vitali

110 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. Fabio Vitali

111 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. Fabio Vitali

112 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 Fabio Vitali

113 Parte V Altri protocolli di XML
XML-Namespaces XPointer e XPath XSL e XSLT XLink XML-Schema

114 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. Fabio Vitali

115 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 Fabio Vitali

116 Un esempio di namespace
Supponiamo che venga creato un documento HTML che contiene degli elementi del nostro portfolio: <h:html xmlns:pt=" xmlns:h=" <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:table> </pt:stock> <h:p>L’ordine va eseguito oggi, al più presto</h:p> </pt:portfolio> </h:body></h:html> Fabio Vitali

117 Namespace di default L’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=" xmlns=" <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> </table> </pt:stock> <p>L’ordine va eseguito oggi, al più presto</p> </pt:portfolio> </body></html> Fabio Vitali

118 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: 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. Fabio Vitali

119 axis::test[pred1][pred2]…[pred N]
Location Path e Step Il 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] Fabio Vitali

120 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. Fabio Vitali

121 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 Fabio Vitali

122 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 Fabio Vitali

123 Sintassi abbreviata In molti casi esistono delle forme abbreviate usabili invece della sintassi completa: child::x diventa x, attribute::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. tutti i para figli del NC che abbiano l’attributo “warning”. il quinto para figlio di NC ad avere l’attributo typeuguale a “warning”. il quinto para figlio di NC, ma solo se ha l’attributo type uguale a “warning”. Fabio Vitali

124 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) Equivalente a: …#xpointer(id(”pippo”)) Una sequenza di attraversamento Equivalente a: …#xpointer(*[2]/*[5]/*[3]) Uno o più forme generali di frammento (General Fragment part) Fabio Vitali

125 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()]) Fabio Vitali

126 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. Fabio Vitali

127 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. Fabio Vitali

128 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. Fabio Vitali

129 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> <id><name>zysmergy inc</name> <simbolo>ZYSZ</simbolo></id> <prezzo>20.313</prezzo> </portfolio> Fabio Vitali

130 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> Fabio Vitali

131 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. Fabio Vitali

132 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> Fabio Vitali

133 Un esempio di push (2) Questo è un foglio di stile XSLT di tipo push:
<xsl:stylesheet xmlns: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 match="para"> <P><xsl:apply-templates /></P> <xsl:template match=”inciso"> <I><xsl:apply-templates /></I> <xsl:template match=”inciso/inciso"> <B><xsl:apply-templates /></B> </xsl:stylesheet> Fabio Vitali

134 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. Fabio Vitali

135 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. Fabio Vitali

136 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. Fabio Vitali

137 XLink Gli 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. Fabio Vitali

138 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 " definisce degli XLink Ad esempio: <b:doc xmlns:a=" xmnls:b=“ <b:para> Clicca <b:link a:type=“simple” a:href=“dest.xml”> qui! </b:link> </b:para> </b:doc> Fabio Vitali

139 XLink semplici La 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=“ 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=“ W3C </A> Fabio Vitali

140 XLink estesi Un 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. Fabio Vitali

141 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 Fabio Vitali

142 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=“ <url xl:type=“locator” xl:role=“tre” xl:href=“ </extlink> Fabio Vitali

143 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=“ #para[5]/Range(point(7) to point(12))”/> <url xl:type=“locator” xl:role=“tre” xl:href=“ #para[7]/img[4]”> Ecco qui </url> </extlink> Fabio Vitali

144 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=“ <url xl:role=“tre” xl:href=“ </extlink> Fabio Vitali

145 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=“ </extlink> Fabio Vitali

146 Linkset esterni Visto 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=" xl:type="xl:external-linkset"> <loc xl:href=“ /> </extendedlink> Fabio Vitali

147 Altri attributi Altri 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) Fabio Vitali

148 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. Fabio Vitali

149 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. Fabio Vitali

150 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. Fabio Vitali

151 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 ( "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; ” Fabio Vitali

152 Validazione e buona forma
La buona forma di un documento XML è una proprietà puramente sintattica. La validazione, viceversa, è la verifica di un impegno preso sopra al formato, ad un livello già semantico: 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. Fabio Vitali

153 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. Fabio Vitali

154 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? Fabio Vitali

155 Formato di un XML Schema
Un documento di XML Schema è racchiuso in un elemento <schema>, e può contenere, in varia forma ed ordine, i seguenti elementi: <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. Fabio Vitali

156 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. Fabio Vitali

157 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> Fabio Vitali

158 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. Fabio Vitali

159 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! Fabio Vitali

160 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> Fabio Vitali

161 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> Fabio Vitali

162 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. Fabio Vitali

163 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> Fabio Vitali

164 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> Fabio Vitali

165 Attributi La 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> Fabio Vitali

166 Gruppi di attributi E’ 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> Fabio Vitali

167 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> Fabio Vitali

168 Altri aspetti Namespace Inclusioni e importazioni Unicità e chiavi
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. Fabio Vitali

169 Riferirsi ad uno schema
<fv:pippo xmlns:fv =“ xmlns:xsi=“ xsi:schemaLocation=“ … </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). Fabio Vitali

170 Parte VI Strumenti per XML
Editor Browser XML Conversion Tools Document Storage Systems DTD Development Tools

171 Editors Questa categoria comprende gli strumenti utilizzabili per la creazione di documenti XML. Xmetal - SoftQuad Software Inc. (Win32) Notepad - Microsoft (Win32) Xeena - IBM Alphaworks (Java) Fabio Vitali

172 Xmetal (1) http://www.softquad.com/products/xmetal/
Prodotto commerciale completo: creazione di DTD creazione di stylesheet CSS integrazione con DBMS Fabio Vitali

173 Xmetal (2) Fabio Vitali

174 XMLNotepad http://msdn.microsoft.com/xml/notepad/intro.asp
Freeware, utilizza il supporto XML di IE5 Fabio Vitali

175 Xeena http://alphaworks.ibm.com/tech/xeena Freeware e portabile
Fabio Vitali

176 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) Fabio Vitali

177 Internet Explorer 5 http://www.microsoft.com/ie/
supporta XML, DOM, CSS e XSL Fabio Vitali

178 Netscape 6 http://home.netscape.com/browsers/6
preview release, supporta XML, DOM e CSS (ma non XSL) Fabio Vitali

179 Xplorer http://alphaworks.ibm.com/tech/xplorer
Freeware e portabile. E' solo un visualizzatore locale Fabio Vitali

180 XML Conversion Tools Non XML to XML converters XML to XML converters
trasformano dati non XML in XML; XML to XML converters trasformano dati XML da un formato in un altro; Fabio Vitali

181 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 Fabio Vitali

182 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 Fabio Vitali

183 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 Fabio Vitali

184 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 Fabio Vitali

185 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 Fabio Vitali

186 eXcelon (2) Fabio Vitali

187 DTD Development Tools Questa categoria comprende gli strumenti per la creazione e la manutenzione dei DTD DTD editors DTD generators Fabio Vitali

188 ezDTD Editor visuale di DTD
Editor visuale di DTD Fabio Vitali

189 Data Descriptors by Example
Crea DTD basandosi su documenti XML di esempio. Fabio Vitali

190 Siti Web interessanti The XML Cover Pages The Whirlwind Guide to XML Tools and Vendors Free XML tools and software W3C XML page Fabio Vitali

191 Riferimenti (1) XML XML Namespace
J. Bosak, XML, Java, and the future of the Web, T. Bray, J. Paoli, C.M. Sperberg-McQueen, Extensible Markup Language (XML) 1.0, W3C Recommendation, 10 February 1998, T. Bray, The annotated XML Specification,1998, XML Namespace T. Bray, D. Hollander, A. Layman, Namespaces in XML, W3C Recommendation, 14 January 1999, T. Bray, XML Namespaces by Example, J. Clark, XML Namespaces, Fabio Vitali

192 Riferimenti (2) XSLT XPointer e XLink
James Clark, XSL Transformations (XSLT) Version 1.0, W3C Recommendation 16 November 1999, E.R. Harold, XSL Transformations (XSLT), capitolo 14 del libro XML Bible, disponibile in rete: James Clark, XSLT in Perspective, XPointer e XLink S. DeRose, E. Maler, D. Orchard, B. Trafford, XML Linking Language (XLink), W3C Working Draft , 21 February 2000, J. Clark, S. DeRose, XML Path Language (XPath), Version 1.0, W3C Recommendation 16 November 1999, S. DeRose, R. Daniel Jr., E. Maler, XML Pointer Language (XPointer), W3C Working Draft 6 December 1999, Fabio Vitali

193 Riferimenti (3) XML Schema
D. C. Fallside, XML Schema Part 0: Primer, W3C Working Draft, 25 February 2000, H. S. Thompson, D. Beech, M. Maloney, N. Mendelsohn, XML Schema Part 1: Structures, W3C Working Draft 25 February 2000, P. V. Biron, A. Malhotra, XML Schema Part 2: Datatypes, W3C Working Draft 25 February 2000, Fabio Vitali


Scaricare ppt "La famiglia di linguaggi XML"

Presentazioni simili


Annunci Google