La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

XML eXtensible Markup Language. XML - Guido Boella2 ESERCIZI 1.Correggere un testo in base all’originale 2.Scrivere un ordine di acquisto e la relativa.

Presentazioni simili


Presentazione sul tema: "XML eXtensible Markup Language. XML - Guido Boella2 ESERCIZI 1.Correggere un testo in base all’originale 2.Scrivere un ordine di acquisto e la relativa."— Transcript della presentazione:

1 XML eXtensible Markup Language

2 XML - Guido Boella2 ESERCIZI 1.Correggere un testo in base all’originale 2.Scrivere un ordine di acquisto e la relativa risposta 3.Scrivere una agenda di indirizzi 4.Analisi grammaticale/logica di una frase

3 XML - Guido Boella3 XML Linguaggi di markup servono alla rappresentazione di informazione strutturata XML permette la definizione di tali linguaggi (come l’alfabeto permette di scrivere in lingue diverse) Un documento strutturato contiene del contenuto (testo, numeri, ma anche immagini) e le indicazioni sul ruolo giocato dal contenuto La strutturazione in ruoli non riguarda solo la forma (e.g., titolo, nota) ma anche la funzione del contenuto (e.g., le colonne di una tabella relazionale)

4 XML - Guido Boella4 Markup (marca, etichetta) Markup: tutto ciò che ha un significato speciale che deve essere ben caratterizzato, reso esplicito Esempi di markup: testo in corsivo, testo sottolineato anche identificatore, simbolo o altro espediente per distinguere un elemento da altri simili, può indicare l’inizio o la fine di un oggetto Ma html riguarda solo la visualizzazione su web

5 XML - Guido Boella5 Markup (marca, etichetta) Tutto ciò che è compreso tra i caratteri “ ” (angled brackets, parentesi angolari) è considerato markup, viene detto anche tag (etichetta), esempio: Anche HTML è un markup language inizialmente definito in SGML.

6 XML - Guido Boella6 Markup L’ introduzione di elementi esterni (markup) al contenuto di un documento permette di: Separare gli elementi logici del documento Specificare le elaborazioni a cui devono essere sottoposti questi elementi

7 XML - Guido Boella7 Informazione (non) strutturata La mia agenda elettronica (!): un file di solo testo (agenda.txt) con i nomi: Boella Guido Svizzera John Doe Dawson street Parco Realtà Virtuale. Cso Lombardia XX Torino Italia...

8 XML - Guido Boella8 Interpretazione di un file di testo Il nostro algoritmo per trovare il numero di telefono: Se un documento contiene un nome allora il numero seguente è quello di telefono... E se sono disordinato, se manca il numero di telefono? Se ho più di un numero?

9 XML - Guido Boella9 In un databasedatabase nomecognomeviatelefono GuidoBoellasvizzera JohnDoeDawson

10 XML - Guido Boella10 Con questo formato… #€€€

11 XML - Guido Boella11 In HTML... agenda nome cognome via telefono cellulare Guido Boella svizzera John Doe Dawson VEDI

12 XML - Guido Boella12 Interpretazione di HTML Il nostro algoritmo per trovare il numero di telefono: Se un documento contiene una tabella allora la prima parola dopo la prima riga dopo il quarto tag è il numero di telefono. Qualche miglioramento: non posso mettere un numero di telefono nella colonna sbagliata Ma se la tabella è diversa? se aggiungo una colonna prima di quella in questione? se ci sono più numeri di telefono?

13 XML - Guido Boella13 Perchè un nuovo linguaggio ? Cosa è questo? Il numero di telefono ? Il numero civico di una via ? Entrambe le cose ? Nessuna delle due ?

14 XML - Guido Boella14 HTML è sempre lo stesso Posso cambiare lo stile di visualizzazione con CSSCSS –normale –a coloria colori –più grosso ma la struttura resta la stessa: non posso –riordinare i dati –togliere delle colonne –aggiungere delle altre informazioni –selezionare solo alcuni dati –trasformare in formato diverso (testo, wml, xls, pdf, ps, ecc.)

15 XML - Guido Boella15 Modifiche a tabella nomecognomeviatelefono GuidoBoellasvizzera JohnDoeDawson nomecognomeviatelefono GuidoBoellasvizzera nomecognomeviatelefonocellulare JohnDoeDawson GuidoBoellasvizzera nomecognomeviatelefonocellulare JohnDoeDawson

16 XML - Guido Boella16 Formati diversi nomecognomeviatelefonocellulare JohnDoeDawson GuidoBoellasvizzera JohnDoe Dawson GuidoBoella svizzera pard \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright \rin0\lin0\itap0 {\lang1040\langfe1033\langnp1040 Guido\tab Boella\tab }{\lang1040\langfe1033\langnp1040

17 XML - Guido Boella17 Da xml a...

18 XML - Guido Boella18 Trasformazione

19 XML - Guido Boella19 I problemi degli informatici Problema attuale: scambio di documenti Formati proprietari difficilmente scambiabili XML studiato per facilitare scambi di dati anche tra applicazioni di tipo diverso (es.: i database e i word processor). Documento facilmente interpretabile tre parti fondamentali da tenere distinte: ·il contenuto; ·le specifiche relative agli elementi, la struttura (DTD); ·le specifiche relative alla rappresentazione, lo stile (Stylesheet).

20 XML - Guido Boella20 Interscambio

21 XML - Guido Boella21 Database eterogenei Un esempio di questa categoria di applicazioni Web è il sistema informativo di un’agenzia americana di "home health care". Questo tipo di agenzie sono il maggior componente dell’industria medica americana e la loro importanza sta aumentando da quando politiche governative hanno spostato l’assistenza medica ospedaliera verso l’assistenza medica domestica. Come si può ben capire la gestione dell’informazione è critica per questa industria; la salute di un paziente è rappresentata nel sistema informativo attraverso una collezione di documenti storici che rappresentano la vita medica di una persona, passata attraverso vari dottori, ospedali, farmacie e compagnie di assicurazioni; quando un nuovo paziente entra in una agenzia, c’è l’enorme compito di prelevare tutto il materiale e di memorizzarlo nel database dell’agenzia.

22 XML - Guido Boella22 L’avvento del Web diede alla comunità informatica medica la speranza di poter semplificare lo sforzo di memorizzazione delle informazioni nel database; sfortunatamente le applicazioni Web esistenti offrono modelli di soluzione a questo problema inadeguati. Gli ospedali offrono alle agenzie una soluzione che in poche parole è così riassunta: 1.Raggiungere il sito Web dell’ospedale 2.Diventare un utente autorizzato 3.Accedere alla documentazione medica del paziente attraverso il browser 4.Stampare la documentazione 5.Inserire manualmente i dati nel database (dalla stampa) Attualmente questa soluzione è proposta da un gran numero di ospedali americani. Una versione leggermente più sofisticata permette all’operatore di inserire manualmente i dati letti dal browser direttamente in un form dell’agenzia (in una finestra separata), evitando così la stampa del documento. Anche questa però non è una grande soluzione.

23 XML - Guido Boella23 La soluzione ideale sarebbe la seguente: 1.Raggiungere il sito Web dell’ospedale 2.Diventare un utente autorizzato 3.Accedere alla documentazione medica del paziente attraverso una interfaccia Web che rappresenti la documentazione con una icona a cartella 4.Fare un drag della cartella dall’applicazione Web nel database interno 5.Fare un drop della cartella nel database Attualmente questa soluzione non è possibile poiché ci si scontra con i limiti dell’HTML; le ragioni sono due: L’HTML non permette di rappresentare strutture dati L’HTML non permette il controllo dei dati per validare i documenti ricevuti Una soluzione tecnica per implementare questo scambio di documenti è quella di richiedere agli ospedali e alle agenzie di utilizzare un sistema informativo standard dettato dal governo (tale soluzione è attualmente allo studio);

24 XML - Guido Boella24 questo tipo di soluzione è però difficile da mettere in pratica, soprattutto in un ambiente dove ospedali e agenzie stanno attraversando un momento di difficoltà finanziaria (cambiare il sistema informativo comporta generalmente grosse spese). Un’altra soluzione è quella di adottare un formato standard di scambio dell’informazione; un grande numero di industrie nel campo spaziale, telecomunicazioni, hardware, software, ha utilizzato per anni un linguaggio standard per lo scambio dei dati e il processo è attualmente molto ben compreso. Tipicamente un consorzio di grandi industrie definisce un Document Type Definition (in ambiente SGML) per implementare un linguaggio di markup specifico per un determinato scopo; quindi il linguaggio è utilizzato come standard per lo scambio dei dati in determinati ambienti.

25 XML - Guido Boella25 La soluzione XML è indipendente dai sistemi, dalle organizzazioni e proviene dalla decennale esperienza dell’SGML; l’XML permette di utilizzare l’approccio SGML per lo scambio dei dati nel Web; è significativo come il giorno del rilascio della prima versione stabile dell’XML, l’organizzazione che raggruppa le maggiori agenzie di home health care, abbia annunciato lo sviluppo dell’Health Care Markup Language in ambiente SGML, che dovrebbe risolvere i tipi di problemi descritti in questo esempio. Si è anche dimostrato che rappresentare i dati con un ricco markup ha dei benefici che vanno oltre lo scambio dei dati; ad esempio è molto utile rappresentare risultati di un esame clinico con tag quali oppure ; infatti chi legge il documento è subito allertato (da una applicazione apposita) del fatto che un paziente può essere allergico alla penicillina.

26 XML - Guido Boella26 Processi distribuiti Un esempio di questa seconda categoria di applicazioni XML è il sistema di distribuzione dei dati adottato dall’industria dei semiconduttori. Ogni grande industria nel campo dei semiconduttori deve mantenere enormi quantità di dati tecnici sui circuiti integrati prodotti. Per abilitare lo scambio di questi dati, anni fa fu formato un consorzio (il Pinnacles Group) di industrie quali Intel, National Semiconductor, Philips, Texas Instrument e Hitachi; lo scopo era quello di sviluppare uno specifico linguaggio di markup in ambiente SGML; nel 1995 è stata presentata la prima versione stabile e attualmente le grandi compagnie sono impegnate nel processo d’implementazione di questo linguaggio. Si potrebbe pensare che l’incremento della popolarità dell’HTML avesse fatto cambiare idea ai membri del Pinnacles Group, ma le limitazioni di tale linguaggio li hanno convinti che l’idea originale fosse più che corretta.

27 XML - Guido Boella27 L’idea era che utilizzare il linguaggio di markup come veicolo per la distribuzione dei dati sui circuiti integrati potesse permettere non solo la loro visualizzazione, ma anche il progetto dei circuiti stessi. Questo approccio si integra molto bene con la tecnologia dei Java applet perché permette ad un ingegnere di accedere al sito Web di una industria di semiconduttori e di scaricarsi non solo i dati di un particolare circuito integrato, ma anche un Java applet che permetta di combinare i dati in vari modi. Questo esempio dei semiconduttori è una buona dimostrazione dei vantaggi dell’XML perché: Richiede uno specifico tag set che non può essere ottenuto con il non estensibile tag set dell’HTML. Richiede che la rappresentazione dei dati sia indipendente dai sistemi utilizzati nelle varie industrie.

28 XML - Guido Boella28 Creare il disegno dei circuiti dai dati è un processo computazionalmente molto intensivo; quindi in un ambiente Web client-server è necessario distribuire il processo computazionale per ridurre al minimo l’interazione fra il client e il server e lasciare la parte più intensiva del processo sul client; questo aspetto può essere riassunto nel seguente slogan: "XML fa lavorare Java". Bisogna notare che la validazione dei dati in questi processi non è sempre necessaria; infatti la validazione dei dati è cruciale quando questi devono essere memorizzati in un database, ma non sempre questo è richiesto; per rendere questi processi il più efficienti possibile, XML permette che la validazione sia un optional in applicazioni dove non è necessaria. L’esempio dei semiconduttori mostra come si integrano bene l’XML e Java in applicazioni in cui i dati devono essere manipolati in modo interessante sul client.

29 XML - Guido Boella29 Motori di ricerca XML permette di aggiungere informazioni semantiche al testo: Giancarlo Parma questo permette di semplificare la creazione di applicazioni che svolgono operazioni intelligenti con i documenti elettronici; un motore di ricerca sarebbe in grado di eseguire ricerche esplicite nel Web per trovare tutti i documenti in cui Giancarlo Parma è l’autore; in questo modo si può superare uno dei limiti dell’HTML, in cui i dati sono orientati al video e difficili da utilizzare per una elaborazione successiva; a questo riguardo, il commercio on-line è in pieno sviluppo e sempre più commercianti in tutto il mondo si stanno affacciando nel Web; però un’indagine su un campione di acquirenti abituali via Internet, ha evidenziato una certa frustrazione da parte dei consumatori per la difficoltà di trovare i prodotti di cui hanno bisogno; il problema risiede nel sistema di indicizzazione delle merci, non sempre intuitivo e semplice come l’utente vorrebbe.

30 XML - Guido Boella30 La chiave per risolvere questo tipo di problemi sta in questo slogan: "L’informazione ha bisogno di conoscere se stessa, ma ha anche bisogno di conoscere me"; supponiamo di dover implementare una guida TV personalizzata per un sistema via cavo di 500 canali; la guida TV personalizzata deve conoscere sia le preferenze e le caratteristiche dell’utente (livello di educazione, interessi, professione, età, etc.), sia le caratteristiche dei programmi trasmessi; queste informazioni devono essere fornite in modo tale da permettere al motore di ricerca implementato nella guida, di fare una selezione intelligente dei programmi più interessanti per l’utente; si ha quindi bisogno di un sistema standard che utilizzi uno specifico set di tag con cui poter esprimere le caratteristiche di un particolare programma (argomento, tipo di utenza a cui è rivolto, attori, lunghezza, data in cui è stato girato, lingua, etc.). Questo è un semplice esempio che può naturalmente essere esteso ad un qualsiasi ambiente in cui l’informazione debba essere ritagliati sui gusti degli utenti; l’XML è un’ottima soluzione anche per questo tipo di problemi e permetterà ad applicazioni Web di competere realmente con la grande distribuzione dislocata sul territorio.

31 XML - Guido Boella31 Come fare? Sarebbe meglio che accanto a Guido ci fosse scritto che è un nome, che accanto a Boella ci fosse scritto COGNOME Che si sapesse dove comincia il NOME e dove finisce Sarebbe meglio che ci sapesse che una agenda è fatta da un elenco di contatti Che i CONTATTI sono fatti da NOME e COGNOME, ma che il telefono puo’ non esserci, cosi’ come possono essercene piu’.

32 Ecco a voi…

33 XML - Guido Boella33 In XML... Guido Boella Svizzera John Doe Dawson

34 XML - Guido Boella34 In technicolor...technicolor Guido Boella Svizzera John Doe Dawson

35 XML - Guido Boella35 Come in HTML Guido Boella Svizzera John Doe Dawson

36 XML - Guido Boella36 XML vs HTML HTML ha un numero di tag predefinito cosi' come il loro significato Markup di formattazione e strutturazione e' mescolato (e.g., titolo e grassetto, intestazione tabella, e…) XML non specifica né formattazione né il significato dei tag ma solo quali tag sono usati in un tipo di documento e la relazione fra di loro HTML ha una sintassi troppo elastica

37 XML - Guido Boella37 Interpretazione di XML Il nostro algoritmo per trovare il numero di telefono: cerca il testo che si trova all’interno di un tag telefono Si’ ma quale fra i tanti? Il numero di telefono che si trova all’interno dello stesso tag contatto che contiene il tag nome della persona cercata

38 XML - Guido Boella38 XML vs SGML Standard Generalised Markup Language (ISO 8879) creato all'IBM negli anni '80 Stesso scopo: strutturazione documenti e interoperabilità DB SGML è troppo complesso per l'utilizzo su web (sintassi non definita da grammatica regolare) XML è una restrizione di SGML

39 XML - Guido Boella39 Scopo Definire un mezzo per la strutturazione di documenti e dati: –leggibile dagli esseri umani –flessibile alle diverse esigenze –standard (e non proprietario) Base per la trasformazione in formati diversi, ad esempio in HTML o in tabelle di DB relazionali

40 XML - Guido Boella40 Estensibilità XML non ha tag predefiniti, è estensibile, consente di definire nuovi linguaggi, è un metalinguaggio Metalinguaggio: nella logica formale, linguaggio impiegato nello studio di un linguaggio oggetto. Può essere o non essere formalizzato e a sua volta può essere oggetto di indagine che si attua mediante un metametalinguaggio. Detto anche linguaggio di descrizione del linguaggio L’insieme delle regole di HTML sono contenute in un documento (separato dal file.html) il DTD HTML (Document Type Definition) incorporato nel browser, è invisibile all’utente.

41 XML - Guido Boella41 Ricapitolando: limiti di HTML · non ci dice nulla sul contenuto del documento · non permette di estendere il linguaggio con tag personali · limitato come prodotto di pubblicazione · limitato come ipertesto · limitato come elaborazione · non supporta dati strutturati -> inefficiente per i motori di ricerca Serve un linguaggio semplice, flessibile HTML non verrà comunque sostituito, almeno nel più immediato futuro, perché offre il metodo più semplice per pubblicare informazioni sul Web

42 XML - Guido Boella42 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.

43 XML - Guido Boella43 Metalinguaggio mia agenda

44 XML - Guido Boella44 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.

45 XML - Guido Boella45 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.

46 XML - Guido Boella46 XML non fa nulla! Nessuna elaborazione Il linguaggio XML non produce nessun effetto: non comprende le istruzioni di elaborazioni (neanche quelle di visualizzazioni) Necessita sempre di qualche applicazione che decide cosa fare per ogni tag.

47 XML - Guido Boella47 I vantaggi di XML (1) Documenti auto-descrittivi –La scelta dei nomi degli elementi può essere fatta per facilitare la comprensione del ruolo strutturale dell’elemento. –Inoltre, l’uso di un DTD può esplicitare le regole di composizione ed i rapporti possibili tra le varie parti dei documenti. Struttura navigabile dei documenti –La rigida struttura ad albero e l’assenza di regole di minimizzazione rendono semplice la visualizzazione e l’analisi della struttura del documento, e la possibilità di visualizzare il documento è indipendente dal foglio di stile che vi si applica.

48 XML - Guido Boella48 I vantaggi di XML (2) 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.

49 XML - Guido Boella49 Cosa si fa con XML? (Bradley) Data Interchange –Ogni volta che più programmi si debbono scambiare dati, ci sono problemi di compatibilità. Ogni programma ha le proprie assunzioni in termini di caratteri, separatori, ripetibilità di elementi, differenza tra elementi vuoti e assenti, ecc. –XML si propone come la sintassi intermedia più semplice per esprimere dati anche complessi in forma indipendente dall’applicazione che li ha creati. Document publishing –XML è ideale come linguaggio per esprimere documenti strutturati o semi strutturati, e per esprimerli in maniera indipendente dalla loro destinazione finale. –Lo stesso documento XML può essere preso e trasformato per la stampa, il Web, il telefonino, l’autoradio.

50 XML - Guido Boella50 Cosa si fa con XML? Bosak (1) Applicazioni che richiedono che il client Web si ponga a mediare tra due o più database eterogenei Applicazioni che distribuiscono una parte significativa del carico computazionale dal server al client Applicazioni che richiedono che il client Web presenti view diverse degli stessi dati agli utenti Applicazioni in cui agenti Web intelligenti adattano la scoperta di informazioni alle esigenze degli specifici utenti. Da J. Bosak, XML, Java, and the future of the Web,

51 XML - Guido Boella51 Cosa si fa con XML? Bosak (2) Accesso a 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.

52 XML - Guido Boella52 Cosa si fa con XML? Bosak (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.

53 XML - Guido Boella53 Cosa si fa con XML? Bosak (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.

54 XML - Guido Boella54 Cosa si fa con XML? Bosak (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. –Su questo specifico tema esistono argomenti di tesi di laurea.

55 XML - Guido Boella55 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.

56 XML - Guido Boella56 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. Colombia Earthquake 143 Dead in Earthquake By Jared Kotler, AP Bogota, Colombia January :28 ET …

57 XML - Guido Boella57 Un esempio: XMLNews (3) XMLNews-Story: Il body ha un markup minimale di struttura del testo: … … An earthquake struck western Colombia on Monday, killing at least 143 people and injuring more than 900 as it toppled buildings across the country's coffee-growing heartland, civil defense officials said. The early afternoon quake had a preliminary magnitude of 6, according to the U.S. Geological Survey in Golden, Colo. Its epicenter was located in western Valle del Cauca state, 140 miles west of the capital, Bogota.

58 XML - Guido Boella58 Un esempio: XMLNews (4) XMLNews-Story: Però è possibile in qualunque momento aggiungere informazioni inline: An earthquake struck western Colombia on Monday, killing at least 143 people and injuring more than 900 as it toppled buildings across the country's coffee-growing heartland, civil defense officials said. Questo permette di arricchire la storia con molte informazioni e 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.

59 XML - Guido Boella59 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.

60 XML - Guido Boella60 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: per focalizzare un punto del documento –XPointer e XLink: tre linguaggi per la creazione di link ipertestuali –XSL: extensible stylesheet language (trasformazione di XML per formattazione) –XSLT: extensible stylesheet language transformation (trasformo da XML a XML) –XML schema: un linguaggio per la specifica di criteri di validazione di documenti XML –RDF: un linguaggio per l’espressione di metainformazioni su documenti XML. –XHTML: HTML con sintassi XML –XQuery: per cercare nel documento come in un database

61 XML - Guido Boella61 XML 1.0 Prima bozza: 1996 Una raccomandazione W3C del 10 febbraio È definita come un sottoinsieme di SGML URL ufficiale: Traduzione ufficiale in italiano: xml it.html Molto più formalizzata della grammatica di SGML, usa una notazione formale, Extended Backus-Naur Form.

62 XML - Guido Boella62 Criteri di progettazione di XML (1) Nel documento ufficiale di XML si elencano i seguenti obiettivi progettuali di XML: 1. XML deve essere utilizzabile in modo diretto su Internet. Non significa che deve essere possibile usarlo sul browser del giorno. Significa che si dovevano tenere in conto le esigenze di applicazioni distribuite su reti a larga scala. 2. XML deve supportare un gran numero di applicazioni. Cioè XML non si limita al supporto di documenti in rete, ma a una larga classe di applicazioni che non c’entrano con la rete. Specificamente: deve essere possibile creare applicazioni come tool di authoring, filtri, formattatori, e traduttori.

63 XML - Guido Boella63 Criteri di progettazione di XML (2) 3. XML deve essere compatibile con SGML Tool SGML esistente debbono essere in grado di leggere e scrivere documenti XML Istanze XML debbono essere istanze SGML così come sono, senza traduzioni, per quanto semplici. Dato un documento XML, deve essere possibile generare un DTD SGML tale per cui un tool SGML esegue lo stesso parsing di un tool XML. XML deve avere essenzialmente lo stesso potere espressivo di SGML. Questi goal sono stati sostanzialmente raggiunti.

64 XML - Guido Boella64 Criteri di progettazione di XML (3) 4. Deve essere facile lo sviluppo di programmi che elaborino documenti XML Deve essere possibile creare applicazioni XML utili che non dipendano dal leggere ed interpretare il DTD Obiettivo dichiarato: un diplomato in informatica deve essere in grado di scrivere un processore minimale XML in meno di una settimana. 5. Il numero di caratteristiche opzionali deve essere mantenuto al minimo possibile, idealmente a zero. SGML, per generalità, aveva adottato un numero molto alto di caratteristiche opzionali, di dubbia utilità, o molto specifiche Risultato: ogni processore SGML implementava solo una parte delle caratteristiche opzionali, e quindi documenti SGML conformi che potevano essere letti da un processore SGML non venivano letti da un altro, e viceversa.

65 XML - Guido Boella65 Criteri di progettazione di XML (4) 6. I documenti XML dovrebbero essere leggibili da umani e ragionevolmente chiari. Formati testuali sono più aperti, più utili, più gradevoli da lavorarci che formati binari. Inoltre, per quanti capricci possa fare il tuo editor specializzato XML, puoi sempre aprire il documento con un editor di testi e rimettere a posto le cose. 7. La specifica del linguaggio XML deve avvenire rapidamente. La paura era che le esigenze di estensibilità del Web potessero essere soddisfatte da una qualche combinazione di complicati formati binari e di accrocchi proprietari. Es: DHTML!

66 XML - Guido Boella66 Criteri di progettazione di XML (5) 8. La progettazione XML deve essere formale e concisa. La specifica di SGML è composta di un documento di oltre 300 pagine in testo, ottuso e burocratico. Il manuale SGML ne richiede più di 600, e comunque non è leggibile. Inoltre non è neanche immediatamente utilizzabile da un programmatore per realizzare tool. La scelta di formalismi nitidi e pochi commenti ha permesso la creazione di una specifica notevolmente più corta e immediatamente utilizzabile dai realizzatori di tool. 9. I documenti XML devono essere facili da creare. In particolare, deve essere facile creare tool di authoring di documenti XML.

67 XML - Guido Boella67 Criteri di progettazione di XML (6) 10. Non ha importanza l'economicità del markup XML. Le esigenze di economicità di markup (terseness) di SGML avevano portato all’adozione di molte pratiche di minimizzazione dei caratteri, che però rendevano i documenti poco leggibili e molto più complicati da parsare. XML non ha meccanismi di minimizzazione, e dove si poteva scegliere tra economicità e chiarezza, si è scelta la chiarezza. Esistono poi due obiettivi progettuali non riportati: A. Supporto per l’internazionalizzazione XML deve funzionare con tutti i set di caratteri. B. Desperate Perl hacker Il programmatore a cui viene imposto di eseguire un compito di modifica globale su una grande quantità di documenti e che riesce a farla applicando un qualche script semplice sulla struttura pulita dei documenti XML.

68 XML - Guido Boella68 Introduzione Qui esaminiamo in breve tutti gli aspetti di XML che non sono derivati da SGML: –Differenze sintattiche –Differenze architettoniche –Usi innovativi e visioni del futuro di XML

69 XML - Guido Boella69 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.

70 XML - Guido Boella70 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.

71 XML - Guido Boella71 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: –Tutti gli attributi sono sempre racchiusi tra virgolette –Tutte le entità sono definite.

72 XML - Guido Boella72 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.

73 XML - Guido Boella73 Le novità sintattiche di XML La dichiarazione XML Sezioni CDATA Sintassi di, degli elementi vuoti, delle processing instructions Rigore sintattico (case sensitivity, nessuna minimizzazione) Entità predefinite Gestione del white space Attributi riservati

74 XML - Guido Boella74 Dichiarazione XML (1) Un documento XML può includere una dichiarazione XML. Questa specifica le caratteristiche opzionali del documento in questione. Poiché esse sono ridotte al minimo, la dichiarazione XML è brevissima. La sintassi usata per la dichiarazione XML è quella delle Processing Instructions, La non obbligatorietà della dichiarazione XML è dovuta a motivi di convenienza, per poter usare la grande quantità di documenti HTML e SGML che sono ben formati senza richiedere modifiche anche stupide. In assenza di dichiarazione XML, si assume la forma:

75 XML - Guido Boella75 Dichiarazione XML (2) Esistono esattamente tre valori che possono essere messi in una dichiarazione XML: –Il parametro “version” identifica quale versione di XML si sta usando. Per il momento, 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.

76 XML - Guido Boella76 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: 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 ]]> In HTML, “ Questo è un titolo ]]>” indica un titolo

77 XML - Guido Boella77 Altre differenze tra SGML e XML (1) Elementi vuoti: un elemento con content model EMPTY ha il carattere di chiusura tag ‘/>’. 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 è diverso dall’elemento. 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.

78 XML - Guido Boella78 Altre differenze tra SGML e XML (2) Tag omissibili: Non esiste il concetto di tag omissibili, e nella definizione degli elementi non ci sono i parametri di minimizzazione. Entità predefinite: sono pre-definite e non ridefinibili 5 entità: Processing instructions: la sequenza di chiusura di un’istruzione di elaborazione è ‘?>’:

79 XML - Guido Boella79 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.

80 XML - Guido Boella80 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

81 XML - Guido Boella81 Conclusioni Qui abbiamo parlato di XML, soprattutto per quanto non è derivato da SGML: –Il senso di XML –Usi innovativi di XML –I criteri progettuali –La distinzione tra documenti ben formati e validi –Le principali differenze sintattiche

82 XML - Guido Boella82 Riferimenti Wilde’s WWW, capitolo 7 Altri testi: Neil Bradley, The XML companion, Addison Wesley 1998 J. Bosak, XML, Java, and the future of the Web, info/standards/xml/why/xmlapps.htm T. Bray, J. Paoli, C.M. Sperberg-McQueen, Extensible Markup Language (XML) 1.0, W3C Recommendation, 10 February 1998, xml T. Bray, The annotated XML Specification,1998, XMLNews Specifications,

83 Sintassi

84 XML - Guido Boella84 Browsers e XML Internet Explorer 5.0 has the following XML support: · Viewing of XML documents · Full support for W3C DTD standards · XML embedded in HTML as Data Islands · Binding XML data to HTML elements · Transforming and displaying XML with XSL · Displaying XML with CSS · Access to the XML DOM

85 XML - Guido Boella85 Apertura e chiusura dei tag Nel codice HTML un elemento contiene in genere sia tag di apertura che di chiusura. A differenza dell’HTML, l’XML richiede che un tag di chiusura venga utilizzato per ogni elemento. Si consideri ad esempio l’elemento HTML Paragraph che dovrebbe in genere includere un tag di apertura, il contenuto e un tag di chiusura come mostrato di seguito: Questo è un elemento HTML Paragraph. Non sempre viene utilizzato un tag di chiusura in questo contesto. Questo avviene perché l’HTML e il linguaggio di origine SGML consentono di omettere i tag di chiusura senza invalidare il codice. Poiché un paragrafo in HTML non può essere annidato all’interno di un altro paragrafo, l’elaboratore è in grado di leggere il tag di apertura del paragrafo e di presumere che indichi anche la fine del paragrafo precedente. Queste tecniche di minimizzazione non sono consentite nel linguaggio XML.

86 XML - Guido Boella86 IL TAG DI ELEMENTO VUOTO Il linguaggio XML supporta un collegamento per elementi vuoti, il tag di elemento vuoto. Questo tag unisce i tag di apertura e di chiusura per un elemento senza alcun contenuto. Viene utilizzato un formato speciale:. In questo caso la barra segue il nome del tag, il che non è possibile nel linguaggio HTML. contenuto Nuova sintassi per i tag di chiusura Quando l’elemento è senza contenuto sono equivalenti

87 XML - Guido Boella87 Annidamento L’annidamento è il processo che consente di incorporare un oggetto o un costrutto l’uno all’interno dell’altro. Un documento XML può ad esempio contenere elementi nidificati e altri documenti. Ogni elemento secondario, cioè un elemento diverso dall’elemento Document risiede interamente all’interno del relativo elemento principale, così :

88 XML - Guido Boella88 Annidamento Regole per i tag Non permesso Corretto

89 XML - Guido Boella89 Overlapping E’ vietata la sovrapposizione (overlapping) degli elementi Bold Bold e Italic Continua solo Italic Possibili Soluzioni: Bold Bold e Italic solo Italic

90 XML - Guido Boella90 Attributi Gli attributi consentono di associare valori a un elemento senza che siano considerati parte del contenuto dell’elemento stesso. HTML e l’utilizzo di un attributo: Microsoft Home Page In questo caso l’elemento Anchor indicato dal tag contiene un attributo denominato HREF. Il valore dell’attributo è Questo formato del nome e del valore mostra il modo in cui sono utilizzati gli attributi nel linguaggio XML. I valori vanno sempre tra virgolette

91 XML - Guido Boella91 coppie attributo - valore elemento NB: diversamente da HTML ogni tag va chiuso: no elemento vuoto: aperto e chiuso subito: equivale a Tag e attributi testo testo

92 XML - Guido Boella92 Attributi - Problemi Non esistono regole per scegliere gli attributi o gli elementi Alcuni problemi con l’ uso di attributi: – non possono contenere valori multipli (gli elementi si) – non sono facilmente espandibili per un uso futuro – non descrivono la struttura gerarchica – sono più difficili da essere manipolati dalle applicazioni – i loro valori sono più difficili da controllare da un parser di DTD

93 XML - Guido Boella93 Struttura di un documento

94 XML - Guido Boella94 PROLOGO Il primo elemento strutturale di un documento XML è un prologo opzionale: DICHIARAZIONE XML: identifica la versione delle specifiche XML a cui è conforme il documento. E’ un elemento opzionale, ma deve sempre essere inserita in documento XML (espresso come processing instruction ) Una dichiarazione XML può contenere una dichiarazione di codifica (encoding) e una dichiarazione di documento autonomo (standalone). La dichiarazione di codifica identifica lo schema di codifica dei caratteri, ad esempio UTF-8 o EUC- JP. Schemi di codifica diversi assegnano formati di caratteri o linguaggi diversi. La dichiarazione di documento autonomo identifica l’esistenza delle dichiarazioni di markup esterne al documento. Questo tipo di dichiarazione può assumere valore yes o no.

95 XML - Guido Boella95 DICHIARAZIONE DEL TIPO DI DOCUMENTO La dichiarazione del tipo di documento è costituita da codice di markup che indica le regole grammaticali o la definizione del tipo di documento DTD per una particolare classe di documenti. Questa dichiarazione può anche essere diretta a un file esterno che contiene tutta o parte della DTD e deve essere visualizzata dopo la dichiarazione XML e prima dell’elemento Document.

96 XML - Guido Boella96 L’ELEMENTO DOCUMENT L’elemento Document contiene tutti i dati di un documento XML inclusi tutti i sottoelementi nidificati e le entità esterne. Può essere considerato simile all’unità C: del computer. Tutti i dati del computer sono memorizzati in questa singola unità in cui le cartelle e le sottocartelle contengono le singole parti di dati in una struttura logica e di semplice gestione. Queste stringhe di codice aggiungono un elemento Document, in questo caso l’elemento Plant all’esempio: Columbine Aquilegia canadensis

97 XML - Guido Boella97 ENTITA' PREDEFINITE Nel linguaggio XML alcuni caratteri sono utilizzati per contrassegnare il documento in modo specifico. Le parentesi angolari (<>) e la barra (/) sono interpretate come markup e non come dati di un carattere effettivo: Blodroot Questi e altri caratteri sono riservati per il markup e non possono essere utilizzati come contenuto. Se si desidera che questi caratteri siano visualizzati come dati, è necessario utilizzare determinati codici: < < (parentesi angolare di apertura) > > (parentesi angolare di chiusura) & ; & (e commerciale) ' ‘ (apostrofo) " " (virgolette doppie)

98 XML - Guido Boella98 ENTITA’ ANALIZZABILI E NON ANALIZZABILI Un’entità può essere analizzabile o non analizzabile. Per entità analizzabile si intende un’entità in grado di essere letta dall’elaboratore di XML che ne consente l’estrazione. Al termine dell’estrazione, questo tipo di entità viene visualizzata come parte del testo del documento nella posizione di riferimento dell’entità stessa. Ad esempio, una dichiarazione del tipo analizzabile potrebbe essere questa : Ogni volta che nel documento viene fatto riferimento a questa entità, quest’ultima verrà sostituita dal contenuto. Se si desidera modificare il contenuto dell’entità, è necessario effettuare questa operazione solo nella dichiarazione e la modifica si rifletterà in qualsiasi punto del documento in cui venga utilizzata l’entità.

99 XML - Guido Boella99 RIFERIMENTI DI ENTITA’ Il contenuto di ogni entità viene aggiunto al documento ogni volta che viene fatto riferimento a quell’entità. Il riferimento ha la funzione di segnaposto per l’autore del contenuto e l’elaboratore di XML colloca il contenuto effettivo nei punti di riferimento. Per includere un riferimento, bisogna inserire una e commerciale (&) e immettere il nome dell’entità seguito da punto e virgole (;). All’interno di un documento assumerebbe il seguente aspetto: Wild Ginger has the following &LR1;

100 XML - Guido Boella100 Struttura fisica del linguaggio XML La struttura fisica di un documento XML è costituita da tutto il contenuto del documento stesso. Le unità di memorizzazione definite entità, possono essere parte integrante del documento o possono essere esterne. Ogni entità è identificata da un nome univoco e da un contenuto specifico che può essere costituito da un singolo carattere all’interno del documento o da un file esterno di grandi dimensioni. In termini di struttura logica di un documento XML, le entità vengono dichiarate nel prologo e viene loro fatto riferimento nell’elemento Document. Dopo aver dichiarato la DTD, l’entità può essere utilizzata in un punto qualsiasi del documento. Un riferimento di entità indica all’elaboratore di recuperare il contenuto di un’entità, come stabilito dalla dichiarazione di entità, e di utilizzarla all’interno del documento.

101 XML - Guido Boella101 ENTITA’ DI PARAMETRO Un’entità non analizzabile viene indicata talvolta come entità binaria in quanto il contenuto è spesso costituito da un file binario, ad esempio un’immagine, che non può essere interpretato direttamente dall’elaboratore XML. Un’entità non analizzabile richiede informazioni diverse da quelle incluse in un’entità analizzabile. Viene richiesta un’annotazione che identifica il formato o il tipo di risorsa per cui l’entità viene dichiarata. Ad esempio :

102 XML - Guido Boella102 ENTITA’ DI PARAMETRO Questa dichiarazione significa che l’entità MyImage è un file binario nell’annotazione GIF. Perché queste dichiarazione di entità siano valide, anche l’annotazione deve essere dichiarata. La dichiarazione di annotazione consente all’applicazione di XML di gestire i file binari esterni. Nel caso dell’annotazione GIF utilizzata nell’esempio, può essere impiegata la dichiarazione di annotazione seguente: Questa stringa di codice indica all’elaboratore di XML di utilizzare Gifview.exe per elaborare l’entità di tipo GIF ogni volta che viene rilevata. Dopo essere stata dichiarata, la dichiarazione di annotazione può essere utilizzata all’interno del documento.

103 XML - Guido Boella103 ENTITA’ INTERNE ED ESTERNE Nel primo caso si tratta di un’entità in cui non esistono unità di memorizzazione fisica separate e il cui contenuto viene fornito nella dichiarazione corrispondente, ad esempio: Un’entità esterna fa riferimento a un’unità di memorizzazione nella dichiarazione mediante un identificatore pubblico o di sistema. L’identificatore di sistema fornisce un collegamento alla posizione in cui si trova il contenuto dell’entità, ad esempio un URI (Uniform Resource Identifier) come ad esempio: In questo caso l’elaboratore di XML deve necessariamente leggere il file Image001.gif per recuperare il contenuto di questa entità.

104 XML - Guido Boella104 identificatore pubblico fornisce un metodo opzionale e alternativo per il recupero del contenuto di un’entità da parte dell’elaboratore di XML. Utilizzato se l’applicazione è collegata a una libreria del documento disponibile pubblicamente. Se non esiste l’oggetto pubblico si ricorre all’indentificatore di sistema opzionale

105 XML - Guido Boella105 RIFERIMENTI DI ENTITA’ DI PARAMETRO Un altro tipo di riferimento è quello relativo all’entità di parametro che utilizza un modulo (%) invece di una e commerciale anche se l’aspetto è simile a qualsiasi altro riferimento di entità. %CDF; è un esempio di entità di parametro.

106 DTD

107 XML - Guido Boella107 DTD Document type definition permette di creare un nuovo linguaggio di markup per scrivere documenti di un certo tipo. Definisce quali sono i tag, l'ordine degli elementi, i loro attributi e valori Un DTD serve ad un parser per controllare la correttezza di un documento Un DTD è opzionale e puo' essere specificato all'inizio di un documento XML

108 XML - Guido Boella : Odissea nello spazio Clarke Arthur Charles Rizzoli romanzo fantascienza  

109 XML - Guido Boella109 DTD - Document Type Definition Struttura gerarchica contiene le regole di definizione dei tag indica gli elementi e il loro ordine all’interno del documento XML il suo uso non è obbligatorio; ne è consigliato l'utilizzo può essere interna o esterna al documento XML il suo nome per convenzione corrisponde a quello dell'elemento radice

110 XML - Guido Boella110 una DTD XML che rappresenta la struttura definita precedentemente: ]> Elemento (1) Elemento ? (0,1) Elemento * (0,1,+) Elemento + (1,+) Elemento1 | Elemento2 (or)

111 XML - Guido Boella111 Documenti ben formati Anche se ben formato significa che è necessario seguire alcune regole, non è richiesto la stessa rigidità dei limiti di validità. Il concetto di documento ben formato è relativamente nuovo in XML. Un documento XML ben formato è più facile da leggere per un programma ed è pronto per la distribuzione in rete. Più specificatamente, i documenti ben formati hanno queste caratteristiche: Tutti i tag di apertura e di chiusura corrispondono. I tag vuoti utilizzano una sintassi XML speciale. Tutti i valori degli attributi sono racchiusi tra virgolette. Tutte le entità sono dichiarate. Quindi, un documento XML valido rispetta i tag e le norme di nidificazione impostate nel DTD del documento, mentre un documento XML ben formato viene strutturato in modo appropriato per l’utilizzo da parte di un computer.

112 XML - Guido Boella112 Struttura della DTD Una DTD può essere costituita da due parti: un sottoinsieme DTD esterno e un sottoinsieme DTD interno. Un documento può contenere una o entrambi i tipi di sottoinsiemi. In questo caso il sottoinsieme interno viene elaborato per primo e gli viene data la precedenza su qualsiasi sottoinsieme esterno. DTD interno al documento: è sufficiente scriverlo nella dichiarazione del tipo di documento. Un sottoinsieme DTD esterno tuttavia deve essere incluso mediante un riferimento DTD, che indica al processore dove trovare il sottoinsieme esterno specificando il nome del file DTD.

113 XML - Guido Boella113 una DTD semplice My first DTD Hello, World

114 XML - Guido Boella114 Dichiarazioni di elementi Ogni dichiarazione di elemento contiene il nome dell’elemento e il tipo di dati definito specifiche di contenuto costituite da uno tra i quattro tipi seguenti: Un elenco di altri elementi, denominato modello di contenuto La parola chiave EMPTY La parola chiave ANY Contenuto di vario tipo

115 XML - Guido Boella115 Tipi di dati All’interno del contenuto dei documenti, il linguaggio XML consente di utilizzare dati di caratteri analizzabili dichiarati mediante la parola chiave #PCDATA e i dati di caratteri dichiarati mediante la parola chiave CDATA. I dati di caratteri analizzabili sono dati di caratteri di markup, contengono quindi tag di markup. I dati di caratteri sono costituiti da testo ordinario che può includere caratteri in genere riservati al markup. In base all’impostazione predefinita, gli elaboratori di XML presuppongono che il contenuto di un file XML sia costituito da dati di caratteri. Mentre i dati di caratteri analizzabili sono in genere utilizzati nel contenuto di un documento XML, i dati di carattere possono essere utilizzati nel caso in cui un autore desideri includere dati che non possono essere analizzati.

116 XML - Guido Boella116 Tipi di dati Per dichiarare una sezione come dati di carattere, è necessario indicare l’inizio della sezione con la sequenza

117 XML - Guido Boella117 DICHIARAZIONI DI ATTRIBUTO Nel linguaggio XML gli attributi vengono dichiarati nella DTD utilizzando la sintassi seguente: In questo caso rappresenta il tag che identifica una dichiarazione di attributo. La voce ElementName rappresenta il nome dell’elemento a cui vengono applicati gli attributi, La voce AttributeName rappresenta il nome dell’attributo. La voce Type identifica il tipo di attributo dichiarato. La voce Default specifica le impostazioni predefinite relative all’attributo.

118 XML - Guido Boella118 Tipo di attributoUtilizzo CDATA In questo attributo possono essere utilizzati solo dati in formato carattere. ENTITY Il valore dell’attributo deve fare riferimento a un’entità binaria esterna dichiarata nella DTD. ENTITIES E’ equivalente all’attributo ENTITY, ma consente l’utilizzo di più valori separati da spazi. ID Il valore dell’attributo deve essere un identificatore univoco. Se un documento contiene attributi ID con lo stesso valore, l’elaboratore produrrà un errore.

119 XML - Guido Boella119 Tipo di attributoUtilizzo IDREF Il valore deve essere un riferimento a un ID dichiarato in un altro punto del documento. Se l’attributo non corrisponde al valore dell’ID specificato, l’elaboratore produrrà un errore. IDREFS E’ equivalente all’attributo IDREF, ma consente l’utilizzo di più valori separati da spazi. NMTOKEN Il valore dell’attributo consiste in una qualsiasi combinazione di caratteri del token del nome, rappresentati da lettere, numeri, punti trattini, due punti o caratteri di sottolineatura.

120 XML - Guido Boella120 Tipo di attributoUtilizzo NMTOKENS E’ equivalente all’attributo NMTOKEN, ma consente l’utilizzo di più valori separati da spazi. NOTATION Il valore dell’attributo deve fare un riferimento a un’annotazione dichiarata in un altro punto della DTD. La dichiarazione può anche essere costituita da un elenco di annotazioni. Il valore deve corrispondere a una delle annotazioni dell’elenco. Enumerated Il valore dell’attributo deve corrispondere a uno dei valori inclusi. Ad esempio:

121 XML - Guido Boella121 Impostazione predefinitaUtilizzo #REQUIRED Ogni elemento contenente questo attributo deve specificarne un valore. Un valore mancante può causare un errore. #IMPLIED Questo attributo è opzionale. L’elaboratore può ignorare questo attributo se non viene rilevato alcun valore. #FIXED fixedvalue Questo attributo deve avere il valore fixedvalue. Se l’attributo non è incluso nell’elemento, viene stabilito il valore fixedvalue. Default Identifica un valore predefinito per un attributo. Se l’elemento non include l’attributo, viene stabilito il valore default.

122 XML - Guido Boella122 ]>

123 XML - Guido Boella123 In questo esempio sono stati aggiunti attributi all’elemento e al nuovo elemento Bcc. Il primo attributo aggiunto all’elemento è LANGUAGE. Questo attributo può contenere una tra le numerose opzioni. L’attributo conterrà il valore predefinito Western se non verrà specificato un altro valore. L’attributo successivo dell’elemento è ENCRYPTED. Questo elemento deve contenere i dati di carattere e poiché l’impostazione predefinita è #IMPLIED, l’elaboratore ignorerà questo attributo se non verrà specificato alcun valore. L’ultimo attributo dell’elemento è PRIORITY. Questo attributo può assumere uno dei tre valori NORMAL, LOW e HIGH. Il valore predefinito è NORMAL. L’attributo HIDDEN è stato incluso nell’elemento Bcc. Questo attributo è di tipo CDATA e il valore predefinito di #FIXED viene specificato dopo la parola chiave #FIXED. Questo attributo deve sempre specificare il valore nella DTD, in questo caso TRUE.

124 XML - Guido Boella124 XML utilizza una serie di simboli per specificare la struttura di una dichiarazione di elementi. Parentesi Racchiudono una sequenza, un gruppo di elementi o una serie di alternative (content1, content2) L’elemento deve contenere la sequenza content1 e content2. Virgola Separa gli elementi di una sequenza e identifica l’ordine in cui devono essere visualizzati (content1, content2, content3) L’elemento deve contenere content1, content2 e content3 nell’ordine specificato.

125 XML - Guido Boella125 Pipe Separa gli elementi in un gruppo di alternative (content1| content2 | content3) L’elemento deve contenere content1, content2 o content3. Punto di domanda Indica che un elemento deve essere visualizzato una sola volta o non apparire mai content1? L’elemento può contenere content1. Se content1 viene visualizzato, deve apparire una sola volta.

126 XML - Guido Boella126 Asterisco Indica che l’elemento può essere visualizzato ogni volta che l’autore desidera content1* L’elemento può contenere content1. Se viene visualizzato, può apparire una o più volte. Segno più Un elemento deve essere visualizzato una o più volte content1+ L’elemento deve contenere content1 una volta, ma può essere visualizzato anche più di una volta. Nessun simbolo Indica che deve essere visualizzato un elemento content1 L’elemento deve contenere content1.

127 XML - Guido Boella127 Esempio parsable character data character data attributo obbligatorio valori possibilidefault almeno uno zero o più uno opzionale

128 XML - Guido Boella128 IE5, XML e XSL Il browser IE5 permette di visualizzare un file XML facendolo tradurre da uno stylesheet CSS

129 XML - Guido Boella129 CSS per XMLXML menu.xml Deep Fried Mushrooms with Stuff in Them 6.00 All mushrooms look alike. Focus on the conversation menu.css: NAME {BACKGROUND-COLOR: teal; COLOR: white; DESCRIPTION {BACKGROUND-COLOR: white; COLOR: blue;}

130 XML - Guido Boella130 APPETIZERS { BORDER-BOTTOM: red thin groove; BORDER-LEFT: red thin groove; BORDER-RIGHT: red thin groove; BORDER-TOP: red thin groove; COLOR: black; DISPLAY: block; FONT-FAMILY: 'Times New Roman'; FONT-SIZE: 12pt } ITEM { BACKGROUND-COLOR: white; } NAME {BACKGROUND-COLOR: teal; COLOR: white; DISPLAY: inline; FONT-FAMILY: Verdana; FONT-SIZE: 10pt; FONT-STYLE: normal; FONT-WEIGHT: bold;} PRICE { BACKGROUND-COLOR: silver; COLOR: black; float: right; FONT-SIZE: 8pt; FONT-WEIGHT: lighter } DESCRIPTION { BACKGROUND-COLOR: white; COLOR: blue; FONT-FAMILY: Verdana; FONT-SIZE: 10pt; FONT-STYLE: italic; FONT-WEIGHT: normal } ENTREES { BORDER-BOTTOM: black double; BORDER-LEFT: black double; BORDER-RIGHT: black double; BORDER-TOP: black double; COLOR: black; DISPLAY: block; FONT-FAMILY: Verdana; FONT-SIZE: 18pt; FONT-WEIGHT: 700 } DESSERTS { BACKGROUND-COLOR: white; BORDER-BOTTOM: blue thin groove; BORDER-LEFT: blue thin groove; BORDER-RIGHT: blue thin groove; BORDER-TOP: blue thin groove; DISPLAY: block; FONT-SIZE: 12pt }

131 XML - Guido Boella131 DESCRIPTION { BACKGROUND-COLOR: white; COLOR: blue; FONT-FAMILY: Verdana; FONT-SIZE: 10pt; FONT-STYLE: italic; FONT-WEIGHT: normal } ENTREES { BORDER-BOTTOM: black double; BORDER-LEFT: black double; BORDER-RIGHT: black double; BORDER-TOP: black double; COLOR: black; DISPLAY: block; FONT-FAMILY: Verdana; FONT-SIZE: 18pt; FONT-WEIGHT: 700 } DESSERTS { BACKGROUND-COLOR: white; BORDER-BOTTOM: blue thin groove; BORDER-LEFT: blue thin groove; BORDER-RIGHT: blue thin groove; BORDER-TOP: blue thin groove; DISPLAY: block; FONT-SIZE: 12pt }

132 XML - Guido Boella132 block inline DISPLAY e FLOAT block float left

133 XML - Guido Boella133 in a BOX content padding border margin top bottom rightleft

134 XML in HTML DATA ISLANDS

135 XML - Guido Boella135 Data island Due modi per includere XML dentro una pagina html TEXT

136 XML - Guido Boella136 Data binding Oppure il contenuto è accessibile in DHTML tramite gli attributi DATASRC e DATAFLD DATASRC fa riferimento all'ID del data island preceduto da # DATAFLD si riferisce ad un elemento XML DATASRC può essere associato ad una TABLE, ma DATAFLD non può essere associato a TD direttamente: solo tramite altro tag come DIV

137 XML - Guido Boella137 Esempio 1/1/99 9: /1/99 13:00 34

138 XML - Guido Boella138 XMLXML in HTML HTML

139 XML - Guido Boella139 Graham Greene James Joyce authors author name id

140 XML - Guido Boella140 authors author name id documentelement lastchild firstchild parentNode firstchild nextSiblingpreviousSibling childNodes

141 XML - Guido Boella141 authors author name id documentelement.firtchildauthor (1) documentelement.childnodes.item(1)author (1) documentelement.firtchild.parentNode document namednodemap("name").item(1) name (1) documenteelement.firtchild.firstchild.textG. Greene documentelement.firtchild.nextsibling author (2) documentelement.lastchild.previousSibling author (1)

142 XSLT

143 XML - Guido Boella143 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) è un working group di W3C che si occupa 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.

144 XML - Guido Boella144 Il modello di XSLT … … … … -> “html”,”h1”, “h2”, ecc. -> “fo:block”,”fo:inline”, ecc. -> “libro”,”capitolo”, ecc. XSL

145 XML - Guido Boella145 Come funziona XSLT XSLT è 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 da un browser. XSLT, quindi, è 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.

146 XML - Guido Boella146 I fogli di stile XSLT Un foglio di stile XSL è un documento XML che utilizza un DTD i cui elementi hanno senso noto al motore XSLT. Un foglio di stile XSL è composto sostanzialmente di template di costruzione, che permettono di riscrivere una selezione elementi del documento XML d’origine in altri elementi del documento destinazione. Ogni template individua un pattern da ricercare nel documento di partenza, e vi associa un blocco di elementi e testo da inserire nel documento di destinazione XSLT si basa fondamentalmente su XPath per questi pattern. L’inclusione di XPath (del gruppo di lavoro XLink) ha costituito una notevole modifica rispetto alle prime proposte.

147 XML - Guido Boella147 Da XML... Guido Boella Svizzera john Doe

148 XML - Guido Boella148...a HTML... agenda nome cognome via telefono cellulare Guido Boella svizzera John Doe kansas

149 XML - Guido Boella149 Regole di traduzione II Il cognome va riscritto in grassetto, il nome in italico. Il nome nella prima colonna il cognome nella seconda. Guido Boella Si’, ma colonna implica una tabella!

150 XML - Guido Boella150 Regole di traduzione III Costruisci una tabella vuota. Il cognome va riscritto in grassetto, il nome in italico: cioe’ il contenuto del tag cognome va circondato da un tag boldface di HTML Il nome nella prima colonna il cognome nella seconda. Si’, ma se ho costruito la tabella come faccio a dire dove mettere le cose: Guido Boella

151 XML - Guido Boella151 Regole di traduzione IV Chiama la regola di traduzione delle tabelle: –Inserisci il tag di inizio tabella. –Il cognome va riscritto in grassetto, il nome in italico. –Il nome nella prima colonna il cognome nella seconda. –Chiudi la tabella Guido Boella E John Doe?

152 XML - Guido Boella152 Regole di traduzione V Chiama la regola di traduzione delle tabelle: –Inserisci il tag di inizio tabella. –Per ogni contatto dell’agenda: Il cognome va riscritto in grassetto, il nome in italico. Il nome nella prima colonna il cognome nella seconda. –Chiudi la tabella Guido Boella John Doe E se ho un altro tipo di tabella? (ad es. elenco libri)

153 XML - Guido Boella153 Regole di traduzione VI Chiama la regola di traduzione delle tabelle: –Inserisci il tag di inizio tabella. –Chiama le regole per tradurre gli elementi che incontra. –Chiudi la tabella. Regola per le agende: –Per ogni contatto dell’agenda: Il cognome va riscritto in grassetto, il nome in italico. Il nome nella prima colonna il cognome nella seconda. Guido Boella John Doe Cosa manca?

154 XML - Guido Boella154 Regole di traduzione VII Regola per tradurre un documento XML: –Metti tag HTML, intestazione e body –Chiama la regola di traduzione delle tabelle: –Inserisci il tag di inizio tabella. –Chiama le regole per tradurre gli elementi che incontra. –Chiudi la tabella. –Chiudi il tag body e HTML Regola per le agende: … Guido Boella John Doe

155 XML - Guido Boella155 Regole di traduzione VII Regola per tradurre la radice di un documento XML: / –Metti tag HTML, intestazione e body –Chiama la regola di traduzione delle tabelle: –Inserisci il tag di inizio tabella. –Chiama le regole per tradurre gli elementi che incontra. –Chiudi la tabella. –Chiudi il tag body e HTML Regola per le agende: … Guido Boella John Doe

156 XML - Guido Boella156

157 XML - Guido Boella157 via XSLT...

158 XML - Guido Boella158 via XSLT agenda...

159 XML - Guido Boella159 via XSLT agenda...

160 XML - Guido Boella160 via XSLT agenda nome...

161 XML - Guido Boella161 via XSLT agenda nome Guido Boella...

162 XML - Guido Boella162 via XSLT agenda nome Guido Boella

163 XML - Guido Boella163 via XSLT agenda nome Guido Boella

164 XML - Guido Boella164 via XSLT agenda nome

165 XML - Guido Boella165 Greeting Words of greeting: Hello world. file xml file xsl

166 XML - Guido Boella166 Risultato: Greeting Words of greeting: Hello world.

167 XML - Guido Boella167 I fogli di stile XSLT Nel documento XSLT si usano dunque elementi provenienti da almeno due namespace: quello di XSLT e quello del modello di documenti di destinazione. Esistono due filosofie di riscrittura disponibili in XSLT, che vengono dette pull e push. –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. Si ispirano sostanzialmente ai linguaggi di inclusione (ad es. server- side include tipo PHP e simili). –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. Si ispirano ai linguaggi di riscrittura basati su regole (tipo DSSSL)

168 XML - Guido Boella168 Un esempio di pull (1) XMML.com , ,000 10,000

169 XML - Guido Boella169 Un esempio di pull (2) Sales Report, : Region

170 XML - Guido Boella170 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.

171 XML - Guido Boella171 Un esempio di push (1) To the Pole and Back The First Day It was the best of days, it was the worst of days. Best in that the sun was out, but worst in that it was 39 degrees below zero....

172 XML - Guido Boella172 Un esempio di push (2)

173 XML - Guido Boella173 Il foglio di stile per il push Questo non assomiglia ad un documento HTML, ma ad una serie di istruzioni di riscrittura 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.

174 XML - Guido Boella174 Modello di processing (1) Il parser costruisce una lista di nodi correnti e per default gli inserisce il nodo radice. Quindi cerca tutti i template che possono essere applicati alla testa della lista di nodi correnti e seleziona il più importante sulla base di criteri espliciti di preferenza L’applicazione del template può creare dei frammenti di albero di destinazione e può anche inserire altri nodi nella lista di nodi correnti. Poi il ciclo si ripete fino ad esaurimento della lista di nodi correnti.

175 XML - Guido Boella175 Modello di processing (2) Style sheet Source document Destination document Current node list

176 XML - Guido Boella176 I template (1) Ogni foglio di stile contiene uno o più template. Un template ha o un nome o un pattern di attivazione –Se ha un nome, può essere esplicitamente attivato da un’altra azione –Se ha un pattern, può essere attivato se il pattern fa match con il nodo corrente Un template è indicato dall’elemento :

177 XML - Guido Boella177 I template (2) Ad esempio, dato il frammento: Questo deve essere importante Il seguente template: Fa match con l’elemento emph e scrive un elemento B di HTML ed inserisce tutti i nodi figlio del nodo di match nella lista dei nodi correnti.

178 XML - Guido Boella178 Dentro ad un template All’interno dell’elemento template vi sono una varietà di istruzioni che servono o per modificare la lista di nodi o per scrivere frammenti dell’albero di destinazione. Modificare l’albero di destinazione elementi letterali Modificare la lista di nodi correnti

179 XML - Guido Boella179 Scrivere l’albero di destinazione (1) Poiché l’albero di destinazione è esso stesso un documento XML, debbo poter creare nodi elemento, attributi e testo in maniera sofisticata. Nodi risultato letterali –Sono il modo più semplice: dentro al template scrivo direttamente il frammento XML richiesto. –Ogni elemento che non appartiene al namespace di xsl viene direttamente scritto nell’albero di destinazione così come appare nel template. –Analogamente viene fatto per ogni nodo di testo Viva Pippo

180 XML - Guido Boella180 Scrivere l’albero di destinazione (2) – crea un nodo di testo nell’albero di destinazione. L’attributo select (obbligatorio) contiene un espressione XPath che viene valutata e convertita in stringa. La stringa viene combinata con gli altri nodi di testo intorno. –L’uso tipico è per convertire markup in testo (ad esempio il valore di attributi in contenuto). –Dato il frammento e il template ottengo il frammento Guido Boella

181 XML - Guido Boella181 Scrivere l’albero di destinazione (3) Parentesi graffe {} –Laddove non sia possibile usare del markup (ad esempio come valore di un attributo, è possibile usare le parentesi graffe, che hanno in questo senso lo stesso significato di –L’uso tipico è per convertire markup in altro markup (ad esempio il valore di un attributo nel nome di un tag). –Dato il frammento e il template ottengo il frammento

182 XML - Guido Boella182 Scrivere l’albero di destinazione (4) –Se è necessario scrivere un elemento complesso o calcolato uso –Ad esempio può servire per trasformare nel nome di un tag nel documento destinazione il valore di un attributo del dcumento di partenza. –Dato il frammento e il template ottengo il frammento Mario Rossi

183 XML - Guido Boella183 Scrivere l’albero di destinazione (5) –All’interno di un elemento (sia letterale che ) è possibile specificare degli attributi in maniera esplicita con il tag –E’ più chiaro e più potente delle parentesi graffe. Lo si può usare per stabilire con espressione anche il nome dell’attributo. –Dato il frammento e il template.html ottengo il frammento Mario Rossi

184 XML - Guido Boella184 Scrivere l’albero di destinazione (6) –All’interno di un elemento (sia letterale che ) è possibile specificare degli attributi in maniera esplicita con il tag –E’ più chiaro e più potente delle parentesi graffe. Lo si può usare per stabilire con espressione anche il nome dell’attributo. –Dato il frammento e il template.html ottengo il frammento Mario Rossi

185 XML - Guido Boella185 Scrivere l’albero di destinazione (7) –Inserisce esplicitamente il testo contenuto dentro al documento. –E’ vantaggioso rispetto a mettere il testo letterale perché rispetta il white space ed i caratteri speciali (“&” e “<“, per esempio). –Le processing instruction dentro al foglio di stile vengono ignorate, non trasferite. Per scriverle esplicitamente nel documento di arrivo debbo usare –Ad esempio, href="book.css" type="text/css” genera il seguente output: –Inserisce esplicitamente del commento dentro al documento.

186 XML - Guido Boella186 Scrivere l’albero di destinazione (8) –Permette di specificareesplicitamente il namespace di arrivo –Copia nell’output il nodo di riferimento, insieme al suo namespace, ma non al suo contenuto e ai suoi attributi, che vanno copiati esplicitamente. –Viene usato per inserire esplicitamente numeri formattati dentro all’albero dei risultati. Ha vari attributi, tra cui: Level: quanti livelli dell’albero sorgente vanno considerati Count: quale pattern di nodi vanno contati per trovare il numero From: da dove partire nel conto Value: come identificare il numero (se diverso dalla posizione) Format: il formato del numero (1, 2, 3 oppure A, B, C, ecc.)

187 XML - Guido Boella187 Cambiare la lista di nodi correnti (1) Nel corso del processing di un nodo, debbo alimentare la lista dei nodi correnti con altri nodi, figli o altro. Qualunque nodo può essere inserito, anche più volte, nel documento, e in qualunque ordine (non è uno stack!). Alcuni tag XSL permettono di controllare la lista: –

188 XML - Guido Boella188 Cambiare la lista di nodi correnti (2) - segue –Questo template trasforma un “para” in un “p” di HTML: –Questo template crea un indice delle intestazioni di primo livello di un documento HTML e lo pone prima del testo:

189 XML - Guido Boella189 Cambiare la lista di nodi correnti (3) – mette i nodi figlio dentro alla lista dei nodi correnti e procede cercando template da applicare. –Se invece voglio che un comportamento specifico venga applicato ad ognuno dei figli direttamente dentro al template, uso. –Ad esempio il template: viene più facilmente realizzato così:

190 XML - Guido Boella190 Cambiare la lista di nodi correnti (4) – attiva condizionalmente dei comportamenti a seconda della verità di un XPath di test. –Ad esempio il template seguente colora di giallo lo sfondo di una riga ogni due di una tabella HTML: yellow

191 XML - Guido Boella191 Cambiare la lista di nodi correnti (5),, – seleziona una tra molte alternative (la funzione di switch in C). blue green red

192 XML - Guido Boella192 Cambiare la lista di nodi correnti (4) – ordina i nodi nella lista dei nodi correnti. Esso può essere soltanto figlio di un o di un. –Gli elementi possono annidarsi per realizzare chiavi primarie, secondarie, ecc. per il sort. – ha vari attributi: Select: l’espressione in base alla quale fare il sort Data-type: il tipo di dato da ordinare (numero o testo o altro) Order: il tipo ascendete o discendente di ordine Case-order: come trattare le maiuscole e le minuscole.

193 XML - Guido Boella193 Cambiare la lista di nodi correnti (5) - segue

194 XML - Guido Boella194 Indirezioni (1) E’ possibile raccogliere intere azioni o almeno bocchi di attributi riutilizzabili varie volte in maniera indiretta. Variabili –Posso definire delle variabili. Il valore di una variabile è quello di qualunque espressione. –La variabile può essere usata nel sottoalbero in cui è definita e deve essere richiamata con l’uso delle graffe e del segno $ 12pt

195 XML - Guido Boella195 Indirezioni (2) Template nominali –Se in un elemento template uso l’attributo name, invece che match, ottengo un template nominale che viene esplicitamente attivato con il tag –Posso specificare anche dei parametri per ottimizzare l’uso dei template nominali 1. a.

196 XML - Guido Boella196 Indirezioni (3) –Posso avere una lista nominale di attributi con l’elemento. Con l’attributo di elementi testuali e nei tag e uso la lista predefinita di attributi. 12pt bold

197 XML - Guido Boella197 Altri aspetti di XSLT (1) Modi –Permettono di avere template diversi se uso gli stessi nodi di input in più posti diversi. Per esempio, uno stile per le intestazioni negli indici e un altro nel corpo del testo. L’attributo “mode” di e di crea questo binding. Merging –E’ possibile porre frammenti di folgi di stile in file esterni. Con gli elementi e è possibile inserire frammenti esterni con due significati leggermente diversi: aumenta la priorità degli elementi inclusi, mentre la mantiene. Metodi di output –E’ possibile specificare che il documento risultante è XML, HTML o testo con l’elemento. Se l’output è HTML o testo, il processore è meno rigoroso nel valutare la buona forma del documento risultante

198 XML - Guido Boella198 Altri aspetti di XSLT (2) White space –E’ possibile specificare quali elementi debbano preservare e quali debbano collassare il white space con due appositi elementi, e. Template di default –Esistono delle regole di default che vengono applicate in mancanza di template più specifici. Esse ricopiano semplicemente l’input nell’output.

199 XML - Guido Boella199 Specificare il foglio di stile XSLT 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 XLink, uno dei quali è il foglio di stile –Specificando con una Processing Instruction (PI) il collegamento: …

200 XML - Guido Boella200 Internet Explorer 5.0 e XSLT Ci sono varie differenze tra XSLT pubblicato nel novembre 1999 e il supporto di Internet Explorer 5.0 ad esso. Namespace –XSLT prevede la dicitura: “http://www.w3.org/1999/XSL/Tranform”, mentre Explorer richiede la precedente: “http://www.w3.org/TR/WD-xsl” Tipo MIME –Il documento dello stylesheet deve essere dichiarato nella PI di tipo “text/xsl”, invece che “text/xml” Template di default –Non esiste nessun template di default per Explorer. In particolare, è necessario fornire template sia per la radice che per l’elemento radice.

201 XML - Guido Boella201 Conclusioni Oggi abbiamo parlato di XSLT, concentrandoci su: –I template –Il meccanismo di processing –Come modificare il documento di uscita –Come modificare la lista di nodi correnti

202 XML - Guido Boella202 Riferimenti 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, talk.htm

203 XML - Guido Boella203 Elemento XSL Descrizionexsl:apply-templates Indica all’elaboratore XSL di cercare il modello corretto da applicare, in base al pattern specificato. xsl:attribute Genera un nodo di attributo e lo applica all’elemento di output. xsl:cdata Genera una sezione CDATA nell’output. xsl:choose Consente di eseguire test condizionali. Questo elemento viene utilizzato in combinazione con gli elementi xsl:otherwise e xsl:when. xsl:comment Crea un commento nella struttura di output. xsl:copy Crea una copia del nodo di destinazione dalla fonte da includere nell’output. xsl:define-template-set Definisce un insieme di modelli a un specifico livello di validità. xsl:element Genera un elemento nell’output con il nome specificato. xsl:entity-ref Genera un riferimento all’entità nell’output con il nome specificato. xsl:eval Valuta una stringa di testo, solitamente codice script. xsl:for-each Applica lo stesso modello a più nodi del documento. xsl:if Consente test condizionali in un modello. xsl:node-name Inserisce il nome del nodo corrente nell’output come stringa di testo. xsl:otherwise Fornisce test condizionali. Questo elemento viene utilizzato in combinazione con gli elementi xsl:choose e xsl:when. xsl:pi Genera un istruzione di elaborazione nell’output. xsl:script Definisce dichiarazioni e funzioni di variabili globali. xsl:stylesheet Definisce l’insieme di modelli che vengono applicati alla struttura del documento di origine per generare il documento di output. xsl:template Definisce un modello per l’output basato su un pattern specifico. xsl:value-of Valuta un pattern XSL specificato nell’attributo select e restituisce il valore del nodo identificato come testo, che verrà poi inserito nel modello. xsl:when Fornisce test condizionali. Questo elemento viene utilizzato in combinazione con gli elementi xsl:choose e xsl:otherwise.

204 XML - Guido Boella204 METODI XSL Oltre agli elementi, nell’XSL sono inclusi anche metodi. Questi metodi possono essere chiamati dall’elemento xsl:eval o da un normale codice script. Ad esempio, il metodo formatIndex potrebbe essere utilizzato come di seguito: item number: formatIndex(childNumber(this),"1") Ecco un elenco dei metodi supportati: Metodo XSL DescrizioneAbsoluteChildNumber Restituisce il numero del nodo specificato relativo a tutti gli elementi di pari livello. AncestorChildNumber Restituisce il numero del predecessore di un nodo con il nome specificato. ChildNumber Restituisce il numero del nodo relativo agli elementi di pari livello. Depth Restituisce, per il nodo specificato, il livello gerarchico all’interno della struttura del documento. ElementIndexList Restituisce una matrice di numeri secondari per il nodo specificato e per tutti i nodi principali. Questo elemento è ricorsivo fino al nodo principale. FormatDate Formatta la data mediante le opzioni di formattazione specificate. FormatIndex Formatta il numero intero fornito utilizzando il sistema numerico specificato. FormatNumber Formatta il numero fornito utilizzando il formato specificato. FormatTime Formatta l’ora mediante le opzioni di formattazione specificate. UniqueID Restituisce l’unico identificatore per il nodo specificato.

205 Link in XML

206 XML - Guido Boella206 XPath, XPointer e 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à. –XPath specifica i meccanismi per indicare percorsi all’interno di un documento XML. E’ usato anche da XSLT. E’ una raccomandazione W3C –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”). E’ un Working Draft (6/12/99) –XLink usa i meccanismi di indirizzamento di XPointer per descrivere link anche sofisticati tra documenti XML. E’ un Working Draft (21/2/2000)

207 XML - Guido Boella207 XPointer Gli XPointer sono indirizzi di locazioni interne a documenti XML. Possono essere usati per indicare link da o a specifiche parti di documenti XML. Gli XPointer sono una elaborazione dell’identificativo di frammento in un URL: Gli XPointer sono dunque usati in un locatore, tipicamente un URI o URL, per indicare un frammento di quella risorsa. Gli XPointer sono un’estensione degli XPath, di cui estendono leggermente la sintassi.

208 XML - Guido Boella208 XPath Gli XPath sono una sintassi comune per XSL e XPointer per esprimere locazioni all’interno di documenti XML. XPath opera sulla struttura logica del documento, non su quella sintattica, usando una sintassi non XML accettabile all’interno di URI e attributi. Un XPath è un espressione che restituisce un oggetto di uno di questi quattro tipi: –Un booleano –Una stringa –Un numero –Un insieme di nodi (nodi elemento, nodi attributi, nodi testo)

209 XML - Guido Boella209 Location Path 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 è 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 discendano da un elemento “chapter” che sia figlio diretto della radice del documento XML.

210 XML - Guido Boella210 Location Step Un location step ha tre parti: –Un asse, che individua la direzione di specifica del location step nell’albero e rispetto al contesto. –Un test, che individua il tipo e il nome completo del nodo identificato dal location step –Zero o più predicati che raffinano ulteriormente l’insieme di nodi selezionati dal location step La sintassi è: axis::test[pred1][pred2]…[pred N]

211 XML - Guido Boella211 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 quelaunque 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.

212 XML - Guido Boella212 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

213 XML - Guido Boella213 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

214 XML - Guido Boella214 Sintassi abbreviata In molti casi esistono delle forme abbreviate usabili invece della sintassi completa: –Child::x si può abbreviare con x –Attribute::x si può abbreviare –Descendant si può abbreviare con ‘//’, self con ‘.’, parent con ‘..’ Esempi: –/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 del documento.

215 XML - Guido Boella215 Altri esempi di XPath 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”. Chapter[title]: il “chapter” figlio del NC che contenga uno o più elementi “title”

216 XML - Guido Boella216 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)

217 XML - Guido Boella217 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. –Range: è definito come due punti, il primo precedente al secondo. XPointer(id("sec2.1")/descendant::P[last()] to id("sec2.2")/descendant::P[last()])

218 XML - Guido Boella218 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.

219 XML - Guido Boella219 Funzionamento di XLink XLink definisce un namespace e alcuni attributi globali in questo namespace. Includere il namespace equivale ad ammettere XLink nel proprio documento. Qualunque namespace definito come "http://www.w3.org/1999/xlink” definisce degli XLink Ad esempio: Clicca qui!

220 XML - Guido Boella220 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. W3C 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: ]>... W3C

221 XML - Guido Boella221 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.

222 XML - Guido Boella222 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

223 XML - Guido Boella223 Un esempio di link esteso Clicca qui

224 XML - Guido Boella224 Lo stesso esempio ]> Clicca qui

225 XML - Guido Boella225 O perfino... ]>

226 XML - Guido Boella226 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:

227 XML - Guido Boella227 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. “user” indica che deve essere l’utente ad attivare l’azione, per esempio facendo click su un pulsante. “auto” significa che il link deve essere attivato appena la risorsa locale viene caricata. (usabile su simple e arc)

228 XML - Guido Boella228 Riferimenti 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,

229 XML - Guido Boella229 PROPRIETA' di XMLDOM async* Indicates whether asynchronous download is permitted. Read/write. attributes Contains the list of attributes for this node. Read-only. baseName* Returns the base name for the name qualified with the namespace. Read- only. childNodes Contains a node list containing the children (for nodes that can have children). Read-only. dataType* Specifies the data type for this node. Read/write. definition* Returns the definition of the node in the DTD or schema. Read-only. doctype Contains the document type node that specifies the DTD for this document. Read-only. documentElement Contains the root element of the document. Read/write. firstChild Contains the first child of this node. Read-only.

230 XML - Guido Boella230 implementation Contains the XMLDOMImplementation object for this document. Read- only. lastChild Returns the last child node. Read-only. namespaceURI* Returns the URI for the namespace. Read-only. nextSibling Contains the next sibling of this node in the parent's child list. Read-only. nodeName Contains the qualified name of the element, attribute, or entity reference, or a fixed string for other node types. Read-only. nodeType Specifies the XML DOM node type, which determines valid values and whether the node can have child nodes. Read-only. nodeTypedValue* Contains this node's value, expressed in its defined data type. Read/write. nodeTypeString* Returns the node type in string form. Read-only. nodeValue Contains the text associated with the node. Read/write. ondataavailable* Specifies the event handler for the ondataavailable event. Read/write.

231 XML - Guido Boella231 onreadystatechange* Specifies the event handler to be called when the readyState property changes. Read/write. ontransformnode* Specifies the event handler for the ontransformnode event. Read/write. ownerDocument Returns the root of the document that contains this node. Read-only. parentNode Contains the parent node (for nodes that can have parents). Read-only. parsed* Contains True if this node and all descendants have been parsed and instantiated; False if any nodes remain to be parsed. Read-only. parseError* Returns an XMLDOMParseError object that contains information about the last parsing error. Read-only. prefix* Returns the namespace prefix. Read-only. preserveWhiteSpace* Contains True if default processing preserves white space; False otherwise. Read/write. previousSibling Contains the left sibling of this node. Read-only.

232 XML - Guido Boella232 readyState* Indicates the current state of the XML document. Read-only. resolveExternals* Indicates whether external definitions (resolvable namespaces, DTD external subsets, and external entity references) are to be resolved at parse time, independent of validation. Read/write. specified* Indicates whether the node (usually an attribute) is explicitly specified or derived from a default value in the DTD or schema. Read-only. text* Contains the text content of the node and its subtrees. Read/write. url* Returns the canonicalized URL for the last loaded XML document. Read-only. validateOnParse* Indicates whether the parser should validate this document. Read/write. xml* Contains the XML representation of the node and all its descendants. Read-only. * denotes an extension to the W3C DOM.

233 XML - Guido Boella233 Metodi di XMLDOM abort* Aborts an asynchronous download in progress. appendChild Appends newChild as the last child of this node. cloneNode Creates a new node that is an exact clone of this node. createAttribute Creates a new attribute with the specified name. createCDATASection Creates a CDATA section node that contains the supplied data. createComment Creates a comment node that contains the supplied data. createDocumentFragment Creates an empty DocumentFragment object. createElement Creates an element node using the specified name. createEntityReference Creates a new EntityReference object. createNode* Creates a node using the supplied type, name, and namespace. createProcessingInstruction Creates a processing instruction node that contains the supplied target and data.

234 XML - Guido Boella234 createTextNode Creates a text node that contains the supplied data. getElementsByTagName Returns a collection of elements that have the specified name. hasChildNodes Returns True if this node has children. insertBefore Inserts a child node to the left of the specified node or at the end of the list. load* Loads an XML document from the specified location. loadXML* Loads an XML document using the supplied string. nodeFromID* Returns the node whose ID attribute matches the supplied value. removeChild Removes the specified child node from the list of children and returns it. replaceChild Replaces the specified old child node with the supplied new child node in the set of children of this node, and returns the old child node. save* Saves an XML document to the specified location.

235 XML - Guido Boella235 selectNodes* Applies the specified pattern-matching operation to this node's context and returns the list of matching nodes. selectSingleNode* Applies the specified pattern-matching operation to this node's context and returns the first matching node. transformNode* Processes this node and its children using the supplied XSL style sheet and returns the resulting transformation. transformNodeToObject* Processes this node and its children using the supplied XSL style sheet and returns the resulting transformation in the supplied object. Eventi di XMLDOM ondataavailable* Indicates that XML document data is available. onreadystatechange* Indicates when the readyState property changes. ontransformnode* Fires before each node in the style sheet is applied to each node in the XML source.

236 XML - Guido Boella236 XMLDOM DOMDocument Represents the top node of the XML DOM tree. XMLDOMNodeRepresents a single node in the document tree; the base interface for accessing data in the XML object model. Valid node types are defined in the DOMNodeType enumeration. This interface includes support for data types, namespaces, DTDs, and XML schemas. XMLDOMNodeListSupports iteration and indexed access operations on the live collection of XMLDOMNode objects. XMLDOMNamedNodeMapProvides iteration and access by name to the collection of attributes. This interface includes support for namespaces. XMLDOMParseErrorReturns detailed information about the last error, including the error number, line number, character position, and a text description.

237 XML - Guido Boella237 XMLHttpRequestProvides client-side protocol support for communication with HTTP servers. XTLRuntimeImplements methods that can be called from XSL style sheets. DOM Objects XMLDOMAttributeRepresents an attribute object. XMLDOMCDATASectionQuotes or escapes blocks of text so that text is not interpreted as markup language. XMLDOMCharacterDataProvides text manipulation methods used by several objects. XMLDOMCommentRepresents the content of an XML comment. XMLDOMDocumentFragmentRepresents a lightweight object that is useful for tree insert operations.

238 XML - Guido Boella238 XMLDOMDocumentTypeContains information associated with the document type declaration. XMLDOMElementRepresents the element object. XMLDOMEntityRepresents a parsed or unparsed entity in the XML document. XMLDOMEntityReferenceRepresents an entity reference node. XMLDOMImplementationProvides methods that are independent of any particular instance of the document object model. XMLDOMNotationContains a notation declared in the DTD or schema. XMLDOMProcessingInstructionRepresents a processing instruction, which XML defines to keep processor-specific information in the text of the document.

239 XML - Guido Boella239 XMLDOMTextRepresents the text content of an element or attribute. The DOMNodeType enumeration lists all valid node types.

240 SCHEMAs L'alternativa al DTD

241 XML - Guido Boella241 XML Schema Microsoft ha (giustamente) proposto una alternativa al formalismo DTD (document type definition) per specificare documenti XML perchè un DTD non è un documento XML Uno Schema XML specifica gli elementi che possono essere presenti in un documenti e gli attributi a loro associati usando XML come sintassi Uniformità e possibile utilizzo di XSL

242 XML - Guido Boella242 DTD e XML MACBETH BANQUO generals of the king's army.

243 XML - Guido Boella243 Schema e XML

244 XML - Guido Boella244 Content model di un elemento Definizione di elementi e attributi: Occorrenza di elementi e attributi come parte di altri: attributeType può essere locale o globale per essere condiviso TYPE, non NAME

245 XML - Guido Boella245 ElementType ed element Attributi ElementType: –content: textonly, eltonly, mixed ( default ), empty (mixed: Bill Gates ) –order: seq ( default ), one ( solo uno dei figli ), many ( duplicazioni ) –model (novità): open ( default ), closed se un content model è open, può contenere elementi e attributi appartenenti ad altri namespace senza che siano dichiarati localmente

246 XML - Guido Boella246 Attributi ElementType: –content: textonly, eltonly, mixed ( default ), empty (mixed: Bill Gates ) –order: seq ( default ), one ( solo uno dei figli ), many ( duplicazioni ) –model (novità): open ( default ), closed se un content model è open, può contenere elementi e attributi appartenenti ad altri namespace senza che siano dichiarati localmente (diventa possibile riutilizzare schemi standard senza ridefinirli, vedi SOAP e Biztalk)

247 XML - Guido Boella247 Alice Smith 123 Maple Street SCHEMA aperto DOCUMENTO aperto ELEMENTO DI ALTRO NAMESPACE

248 XML - Guido Boella248 Element Attributi di Element: –minOccurs e maxOccurs: numero di occorrenze possibili dell'elemento nel content model 0,1,..., * (infinite) Raggruppamento di Elementi (con proprietà "order", "minOccurs", "maxOccurs"): SOLO UNO DEI DUE ELEMENTI

249 XML - Guido Boella249 Attributi Gli attributi non possono contenere sottoelementi, non hanno ordinamento, nè si possono porre alternative, occorrono una sola volta Opzionalità od obbligatorietà: required = yes o no Range di valori e default: NAMESPACE dei tipi

250 XML - Guido Boella250 Elementi e attributi si possono tipare namespace dei tipi: xmlns:dt="urn:schemas-microsoft-com:datatypes"> NAMESPACE dt

251 XML - Guido Boella251 Estensione per vincoli semantici RESTRIZIONI NON SINTATTICHE, CIOE' NON VERIFICATE DA XML MA DA APPLICAZIONE CHE USA XML

252 XML - Guido Boella252

253 XML - Guido Boella White Johnson Bigge Rd. … Green Marjorie rd St. #411

254 XML - Guido Boella254...

255 XML - Guido Boella255 XML e XSL

256 XML - Guido Boella256 Salvare recordset in XMLrecordset <% strsql = request.querystring("sql") if NOT strsql="" then strFile="c:\asp\file2.xml" Set rsAuthors = Server.CreateObject("ADODB.Recordset") Set objFSO = CreateObject("Scripting.FileSystemObject") if objFSO.FileExists(strFile) then objFSO.deletefile strFile end if set objFSO = nothing

257 XML - Guido Boella257 With rsAuthors.Open strsql, "Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\asp\Pro ASP 3.0\pubs.mdb" If (.state = 1) then.save strFile, 1 'adPersistent.close() end if End with Set objFSO = CreateObject("Scripting.FileSystemObject") set objFile = objFSO.getFile(strFile) set objStream = objFile.openAsTextStream() response.write " "& objStream.readAll()&" " objFile.close

258 XML - Guido Boella258

259 XML - Guido Boella259

260 XML Schema Fabio Vitali 5 maggio 2000

261 XML - Guido Boella261 Sommario Oggi esaminiamo in breve XML Schema –Perché non bastano i DTD –Tipi ed elementi –Definizione di elementi ed attributi –Altri aspetti rilevanti di XML Schema

262 XML - Guido Boella262 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.

263 XML - Guido Boella263 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.

264 XML - Guido Boella264 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; ”

265 XML - Guido Boella265 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.

266 XML - Guido Boella266 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.

267 XML - Guido Boella267 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?

268 XML - Guido Boella268 Formato di un XML Schema Un documento di XML Schema è racchiuso in un elemento, e può contenere, in varia forma ed ordine, i seguenti elementi: – ed per inserire, in varia forma, altri frammenti di schema da altri documenti – e per la definizione di tipi denominati usabili in seguito – ed per la definizione di elementi ed attributi globali del documento. – e per definire serie di attributi e gruppi di content model complessi e denominati. – per definire notazioni non XML all’interno di un documento XML – per esprimere commenti per esseri umani o per applicazioni diverse dal parser di XML Schema.

269 XML - Guido Boella269 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.

270 XML - Guido Boella270 Un esempio

271 XML - Guido Boella271 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.

272 XML - Guido Boella272 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!

273 XML - Guido Boella273 Esempi di derivazione (1)

274 XML - Guido Boella274 Esempi di derivazione (2)

275 XML - Guido Boella275 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, e. 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.

276 XML - Guido Boella276 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 e. Questi sostituiscono anche le parentesi. –(A, B) diventa –(A | B) diventa

277 XML - Guido Boella277 Content model complessi (2) –(A, ( B | C)) diventa Il content model misto aggiunge semplicemente l’attributo content con valore “mixed”. Altri valori: elementOnly (default), empty, textOnly. –(#PCDATA | B | C )* diventa

278 XML - Guido Boella278 Attributi La dichiarazione di attributi può avvenire con l’elemento, dentro alla dichiarazione dell’elemento corrisponde a:

279 XML - Guido Boella279 Gruppi di attributi E’ anche possibile raccogliere questi attributi esternamente in un gruppo:

280 XML - Guido Boella280 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. L’elemento può contenere elementi (pensati per essere letti da esseri umani) oppure elementi, pensati per essere digeriti da applicazioni specifiche elemento pippo

281 XML - Guido Boella281 Altri aspetti Namespace –In XML schema ogni nome definito appartiene ad un namespace specificato. I tipi estendono tipi predefiniti o definiti nello schema. In ogni caso vanno specificati con il namespace appropriato. Inclusioni e importazioni –In XML Schema, esistono meccanismi per dividere lo schema in più file, o per importare definizioni appartenenti ad altri namespace. Unicità e chiavi –In XML Schema, è possibile richiedere che certi valori siano unici, o che certi valori siano chiavi di riferimenti, analoghi alla coppia ID/IDREF in XML “classico”. Tuttavia, è possibile specificare pattern molto complessi come elementi chiave.

282 XML - Guido Boella282 Riferirsi ad uno schema … 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).

283 XML - Guido Boella283 Conclusioni Oggi abbiamo parlato di XML Schema: –Motivazioni e status –Organizzazione dei tipi –Definizione di elementi ed attributi –Content model, gruppi ed altri aspetti

284 XML - Guido Boella284 Riferimenti D.C. Fallside XML Schema Part 0: Primer, W3C Working Draft, 7 April 2000, H. S. Thompson, D. Beech, M. Maloney, N. Mendelsohn, XML Schema Part 1: Structures, W3C Working Draft 7 April 2000, P. V. Biron, A. Malhotra, XML Schema Part 2: Datatypes, W3C Working Draft 07 April 2000, Henry S. Thompson, XML Schema: An Intensive One-Day Tutorial, WWW’99 Conference, ftp://ftp.cogsci.ed.ac.uk/pub/ht/tutorials/docs/Schema%20 XML99.ppt R. L. Costello, XML Schemas,

285 XSL-FO

286 XML - Guido Boella286 Introduzione Oggi esaminiamo in breve: –XSLFO, ovvero un vocabolario di elementi che specificano una semantica di formattazione per documenti XML.

287 XML - Guido Boella287 Evoluzione di XSL –27 agosto 1997: prima nota del W3C che stabilisce la filosofia generale del linguaggio. –18 agosto 1998: primo Working Draft che separa nettamente la fase di trasformazione dalla fase di visualizzazione. Cambia la sintassi. Sono introdotti i namespace. –21 aprile 1999: separazione di XSL in due Draft distinti XSLT e XSL-FO. –Situazione attuale: XSLT è recommendation. XSL-FO è ancora in fase di discussione.

288 XML - Guido Boella288 XSL-FO Scopi del linguaggio: –definire la fase di formattazione. –definire un vocabolario di elementi di formattazione indipendenti dal tipo di supporto utilizzato per l’output. Il legame tra le due definizioni è ovviamente molto stretto in quanto la fase di formattazione interpreta l’albero che risulta dall’eventuale trasformazione in base alla semantica degli oggetti di formattazione che lo costituiscono.

289 XML - Guido Boella289 Introduzione alla formattazione Nell’output su supporti visuali per astrarre dal tipo di scrittura usato (ad esempio occidentale o orientale) si introduce il writing-mode che definisce: –Direzioni relative (block- e inline- progression-direction) –Riferimenti relativi (before, after, start o end)

290 XML - Guido Boella290 Fasi della formattazione La fase di formattazione è schematizzabile in 4 passi: –Trasformazione dell’albero ottenuto attraverso un’ elaborazione XSLT del documento XML iniziale in uno costituito, non da elementi e attributi, ma da oggetti di formattazione e loro proprietà. –Raffinamento dell’albero degli oggetti di formattazione ovvero mapping dalle proprietà nelle caratteristiche. –Costruzione dell’albero delle aree. –Rendering

291 XML - Guido Boella291 Costruzione dell’albero dei FO (1)

292 XML - Guido Boella292 Costruzione dell’albero dei FO (2) Scelta del modello: XMLC.

293 XML - Guido Boella293 Raffinamento dell’albero (1)

294 XML - Guido Boella294 Raffinamento (2) Valori specificati, calcolati e applicabili. –Valore in % –Valore assoluto –Valore espresso in unità di misura utilizzate dal supporto di output (es. pixel) Proprietà espresse in forma breve –Border: “ 10px solid blue ” Mapping di proprietà relative –Border-before = border-top se writing-mode è lr-tb

295 XML - Guido Boella295 Costruzione albero delle aree e rendering

296 XML - Guido Boella296 Modello delle aree Il modello delle aree definisce: aree rettangolari e spazi. Le aree rettangolari, generate dagli oggetti di formattazione, riservano spazio e racchiudono contenuto. Gli spazi riservano spazio prima e dopo le aree rettangolari e non hanno contenuto.

297 XML - Guido Boella297 Aree Rettangolari –Block-area –Inline-area. La loro differenza principale sta nel modo in cui normalmente il formatter le posiziona. Esse vengono tipicamente posizionate seguendo rispettivamente la block- progression-direction e la inline-progression-direction, in alcuni casi però è possibile che siano posizionate esplicitamente (ad esempio in base alle absolute-position- properties).

298 XML - Guido Boella298 Aree Rettangolari, caratteristiche comuni

299 XML - Guido Boella299 Caratteristiche comuni (2) –Content rectangle. –Padding Rectangle. –Border Rectangle. –Allocation Rectangle: definisce la dimensione usata per allocare spazio quando l’area viene posizionata nell’area padre.

300 XML - Guido Boella300 Aree Rettangolari e writing-mode

301 XML - Guido Boella301 Ordinamento delle aree Rettangolari Ci serve per definire termini come area in testa, in coda, seguente o precedente. L’ordine non è univocamente definito ma dipende dal tipo di visita che si esegue sull’albero: –Previsita –Postvisita

302 XML - Guido Boella302 Ordinamento delle aree Rettangolari (2) L’ordine delle aree può essere definito solo per quelle aree dell’albero che in fase di posizionamento rispettano: –l’annidamento definito dall’albero stesso –la direzione di posizionamento dipendente dal tipo di area (block- progression-direction o inline-progression-direction). Non ne sono coinvolte ad esempio le aree posizionate in maniera assoluta, le celle di una tabella o gli elementi di una lista. In questi casi l’area si definisce out-of-sequence.

303 XML - Guido Boella303 Aree rettangolari consecutive Se A e B sono block-area non out-of-sequence si dice che A precede consecutivamente B (o B segue consecutivamente A) se: –A precede B e non esistono aree non out-of-sequence tra A e B. –Tutti gli antenati di A che precedono B hanno border-after e padding-after nullo. –Tutti gli antenati di B che seguono A hanno border-before e padding-before nullo. La stessa definizione vale per le inline-area con la differenza che devono essere nulli border-, paddind-end e border-, padding-start.

304 XML - Guido Boella304 Aree consecutive (2) Se A e B sono block-area non out-of-sequence si dice che A è in testa a B se: –A è il primo figlio di B. –A è il primo figlio di C, C è in testa a B ed ha border- e padding- before nulli. Se A e B sono block-area non out-of-sequence si dice che A è in coda a B se: –A è l’ultimo figlio di B. –A è l’ultimo figlio di C, C è in coda a B ed ha border- e padding- after nulli. In entrambi i casi A e B sono considerate consecutive.

305 XML - Guido Boella305 Aree Rettangolari adiacenti

306 XML - Guido Boella306 Spazi Gli spazi riservano spazio prima e dopo le aree rettangolari e non hanno contenuto. Essi vengono definiti attraverso un tipo di dato composto dalle seguenti informazioni: –Space.minimum –Space.maximum –Space.optimum –Space.conditionality –Space.precedence In generale gli stessi formatting-object che generano aree rettangolari generano gli spazi ad esse associati.

307 XML - Guido Boella307 Regole di risoluzione degli spazi (1) Dato uno spazio S, per calcolare il suo corrispondente spazio risolto, è necessario considerare la massima sequenza di spazi consecutivi contenenti S. Gli spazi sono consecutivi quando sono associati ad aree consecutive.

308 XML - Guido Boella308 Regole di risoluzione degli spazi (2) Regola 1 –Se qualcuno degli spazi nella sequenza è conditional ed è in testa ad una reference-area o line-area, allora tale spazio sarà soppresso. Tutti gli spazi conditional che lo seguono consecutivamente saranno altresì soppressi. Lo stesso dicasi per gli spazi conditional in coda ad una reference-area o line-area.

309 XML - Guido Boella309 Regole di risoluzione degli spazi (3) Regola 2 –Se qualcuno degli spazi rimanenti e forcing allora ogni spazio non forcing è soppresso dalla sequenza. In questo caso lo spazio risultante avrà le dimensioni optimum, minimum e maximum pari alla somma dei valori corrispondenti di ogni spazio rimasto nella sequenza. Tale spazio sarà non conditional.

310 XML - Guido Boella310 Regole di risoluzione degli spazi (4) Regola 3 –Se tutti gli spazi sono non forcing saranno selezionati gli spazi con valore precedence più alto e a parità di questo con più grande valore optimum tutti gli altri spazi saranno soppressi dalla sequenza. A questo punto se rimane un solo spazio nella sequenza esso sarà preso come spazio risultante. Altrimenti il risultato sarà un nuovo spazio con valori: optimum pari al valore comune, minimum pari al più grande dei valori minimi e maximum pari al più piccolo dei valori massimi. Tale spazio sarà non conditional.

311 XML - Guido Boella311 Esempio

312 XML - Guido Boella312 Tipi particolari di block-area –Reference-area –Page-area –Line-area

313 XML - Guido Boella313 Posizionamento delle block-area Data un’area P i cui figli sono block-area, gli elementi in P si dicono propriamente posizionati se: Per ogni block-area B figlia di P sia ha che: I lati before e after dell’allocation-rectangle di B devono essere paralleli ai corrispondenti lati del content-rectangle di P. I lati start e end di B sono paralleli e coincidenti con i corrispondenti lati del content-rectangle dell’area P. Per ogni coppia di aree B e B’ figlie di P, la distanza tra esse (ovviamente nella block-progression-direction) è definita applicando le regole di risoluzione alla massima sequenza di spazi tra B e B’.

314 XML - Guido Boella314 Tipi particolari di inline-area –Reference-area –Glyph-area

315 XML - Guido Boella315 Posizionamento delle inline-area Data un’area P i cui figli sono inline-area, gli elementi in P si dicono propriamente posizionati se le seguenti condizioni sono verificate: –Per ogni inline-area I in P, i lati start, end, after e before dell’allocation-rectangle di I sono paralleli ai corrispondenti lati del content-rectangle dell’area P. –Per ogni coppia di aree I e I’ in P, la distanza tra esse (ovviamente nella inline-progression-direction) è definita applicando le regole di risoluzione alla massima sequenza di spazi tra I e I’.

316 XML - Guido Boella316 Viewport Ci sono situazioni in cui il contenuto di un’area non viene completamente visualizzato. Questo può accadere se tale contenuto genera un overflow e l’area che lo contiene ha la proprietà overflow uguale a hidden. Un altro caso può verificarsi se il designer riduce la zona visibile di un’area attraverso la proprietà clip. Date queste situazioni si definisce viewport la zona visibile di un area, ad esempio page-viewport-area o block-viewport-area.

317 XML - Guido Boella317 Esempio di albero delle aree

318 XML - Guido Boella318 I formatting-object Ci sono tre tipi di formatting-object: quelli che generano aree, quelli che restituiscono aree modificandone eventualmente le caratteristiche e quelli usati da altri formatting-object per generare aree. I primi due tipi sono comunemente chiamati flow-object, il terzo tipo può essere detto layout-object o auxiliary-object.

319 XML - Guido Boella319 FO di impaginazione e layout Permettono di definire sia la struttura di layout di una pagina o frame (dimensioni e posizione del body e sua eventuale suddivisione in colonne, header, footer, side-bar) sia le regole attraverso cui il contenuto XML di partenza è sistemato in questi contenitori attraverso: –fo:simple-page-master –fo:page-sequence

320 XML - Guido Boella320 Block-level FO –Sono generalmente usati per la formattazione di titoli, paragrafi, didascalie di immagini, tabelle o liste. –Generano block-area

321 XML - Guido Boella321 Esempio di Block-level FO

322 XML - Guido Boella322 Inline-level FO –Il loro utilizzo più comune è per la gestione di immagini, la formattazione di elementi all’interno di linee come ad esempio assegnare bordi colorati a caratteri o parole e la formattazione di elementi di link.

323 XML - Guido Boella323 Esempio di Inline-level FO

324 XML - Guido Boella324 Altri FO –fo:wrapper Permette di attribuire un set di proprietà a tutti i suoi elementi figli. –Utilizzo classico: Testo in stile corsivo

325 XML - Guido Boella325 Proprietà dei FO –Absolute properties –Aural properties –Border, padding and background properties –Font properties –Hyphenation properties –Keeps and Break properties –Margin properties block –Margin properties inline

326 XML - Guido Boella326 Proprietà dei FO (2) –Pagination and layout properties –Table properties –Character properties –Link properties –Miscellaneous properties

327 XML - Guido Boella327 XSLFO e CSS –I FO sono nati per essere applicati ad elementi privi di semantica, i CSS per essere applicati ad elementi HTML. –I FO hanno introdotto un complesso meccanismo di impaginazione. I CSS nascono per la visualizzazione sul web. –I FO hanno esteso i meccanismi di internazionalizzazione.

328 XML - Guido Boella328 Implementazioni esistenti –FOP James Tauber –INDelv –REXP Reperibili anche al sito

329 XML - Guido Boella329 XMLCFO –Implementazione Java dei fo block-level e inline-level basata su displet. –Amplia le caratteristiche delle tabelle e introduce la gestione per la sovrapposizione disgiunta di aree. –Tratta le immagini sia a livello inline che di blocco. –Non splitta ogni carattere ma delega gli oggetti fo:block e fo:inline alla gestione del testo.

330 XML - Guido Boella330 Buffy Summers 1630 Matilda Drive Sunnyvale CA USA 408/ / Willow Rosenberg Fiend House 23 University Ave Sunnyvale CA USA Riley Finn Spawn House 25 University Ave Sunnyvale CA USA Fiend House 23 University Ave Sunnyvale CA USA Angel Forgotten Mullholland Drive Los Angeles CA USA Andy DuFresne 1 Prison Road Bangor ME Old Address Bangor ME Public Grokker Toysco Product Description Public Grokker Allows grokking of a scale never before witnessed Quake III Toysco Product Description Quake III Great Game, Great Price Hardwood Stake Toysco Product Description Hardwood Stake Allows slaying of a hitherto unheard of scale Spell Book Toysco Product Description Spell Book All the best spells, including how to counter vengeance demons Blood Ball Toysco Product Description Blood Ball Pretend blood squirts out when bitten on Scrabble Toysco Product Description Scrabble The world's favorite word board game Chess set Toysco Product Description Toysco Chess set Beautiful ornate pieces, and an elegant inlaid board

331 XML - Guido Boella331 &Disclaimer;

332 XML - Guido Boella332 &Disclaimer;

333 XML - Guido Boella333 The toysco element is the root element of a document instance containing the daily summary info of sales from toysco. It contains three child elements: customer, product, and invoice. There is a relationship between customer details and orders to save repeating customer details should they place more than one order. The customer element contains four child elements: name (required), deliveryAddress, billingAddress(required), and contactDetails(required). The product element is a single element with seven attributes that hold the details of the each product sold that month. The invoice element holds details of each individual invoice that is made for the day. It holds a repeatable lineItem element and eight attributes.

334 XML - Guido Boella334 XML-Namespace 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.

335 XML - Guido Boella335 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. Un nome (di elemento o di attributo) che contiene prefisso di namespace e nome locale viene detto “nome qualificato”.

336 XML - Guido Boella336 Namespace di default Nella dichiarazione xmlns si pone il nome del prefisso che si intende usare nel corso del documento per gli elementi definiti in quel namespace. L’assenza di tale prefisso in xmlns indica la presenza di un namespace di default, per cui tutti i nomi privi di prefisso di debbono intendere appartenenti a quel namespace. I namespace di default non si applicano agli attributi

337 XML - Guido Boella337 Default NS: precisazioni La dichiarazione di namespace può essere fatta ovunque, e ha scope solo all’interno del’elemento in cui è stata fatta. Possono essere fatte più definizioni di namespace di default, quella interna ha ovviamente precedenza: Cheaper by the Dozen This is a funny book!

338 XMLDOM ASP parla XML

339 XML - Guido Boella339 XMLDOM Asp offre una serie di metodi per gestire file XML Il contenuto di un file XML diventa un oggetto di ASP e non solo una stringa di caratteri I recordset di un database possono essere trasformati in un file XML Necessari IE5, IIS5 con ADO2.5 per piena funzionalità

340 XML - Guido Boella340 ESEMPIO DTD

341 XML - Guido Boella341 John Doe Dudley Doright ESEMPIO XML

342 XML - Guido Boella342 John Doe Mary Jones Mike Wilson ESEMPIO XML con XSLXML

343 XML - Guido Boella343

344 XML - Guido Boella344 Personal Contacts Business Contacts PROVA DI STYLESHEETS

345 XML - Guido Boella345 font-weight:bold

346 XML - Guido Boella346 NUOVO STYLESHEET Traduzione root element Elenco contatti: chiama.asp? "

347 XML - Guido Boella347 XML DOM e ASP Il modello ad oggetti DOM permette di vedere un documento XML come una struttura dati di un linguaggio di programmazione (API) Il parser XML è il programma che permette di caricare il file XML, verificare la sua corrispondenza con il DTD e creare la struttura dati manipolabile da XML

348 XML - Guido Boella348 La struttura dati è un albero dove la radice è la root del documento XML: / Comandi di ASP (ma anche Jscript o PHP4) permettono di accedere o modificare la struttura dati Traduzione tramite XSL in ASP sul server Creazione oggetto XML: Set source = Server.CreateObject("Microsoft.XMLDOM") source.async = false source.validateOnParse= true 'non necessario: è default Caricamento file source.load(sourceFile)

349 XML - Guido Boella349 APPLICAZIONE STILE ON SERVERON SERVER (ON CLIENT)ON CLIENT <% sourceFile = Request.ServerVariables("APPL_PHYSICAL_PATH") + "\Chapter 08\contacts_basic.xml" styleFile = Request.ServerVariables("APPL_PHYSICAL_PATH") + "\Chapter 08\stylecontacts_basic.xsl" Set source = Server.CreateObject("Microsoft.XMLDOM") source.async = false source.load(sourceFile) Set style = Server.CreateObject("Microsoft.XMLDOM") style.async = false style.load(styleFile) Response.Write(source.transformNode(style)) %>

350 XML - Guido Boella350 John Doe Mary Jones Mike Wilson Personal Contacts Business Contacts font- weight:bold

351 XML - Guido Boella351 Compatibilità con vecchi browser <% var userAgent = new String(Request.ServerVariables("HTTP_USER_AGENT")); if (userAgent.indexOf("MSIE 5") >= 0) Response.Redirect("contacts.xml"); else Response.Write(OnServer()); function OnServer() { var doc, stylesheet; doc = Server.CreateObject("microsoft.xmldom"); stylesheet = Server.CreateObject("microsoft.xmldom"); if (doc != null && stylesheet != null){ doc.load(Server.MapPath("contacts.xml")); stylesheet.load(Server.MapPath("stylecontacts.xsl")); …

352 XML - Guido Boella352 Graham Greene James Joyce authors author name id

353 XML - Guido Boella353 authors author name id documentelement lastchild firstchild parentNode firstchild nextSiblingpreviousSibling childNodes

354 XML - Guido Boella354 authors author name id documentelement.firtchildauthor (1) documentelement.childnodes.item(1)author (1) documentelement.firtchild.parentNode document namednodemap("name").item(1) name (1) documenteelement.firtchild.firstchild.textG. Greene documentelement.firtchild.nextsibling author (2) documentelement.lastchild.previousSibling author (1)

355 XML - Guido Boella355 Accesso a documento XML Creazione oggetto set objXML = Server.CreateObject("Microsoft.XMLDOM") oppure Microsoft.FreeThreadedXMLDOM in global.asa come variabile di applicazione ATTENZIONE: bisogna fare riferimento alla libreria giusta Caricamento oggetto da file: objXML.load(strSourceFile) e.g. strSourceFile = server.MapPath("asp") & "\file.xml" Selezione di un nodo: set objColor = objXML.selectSingleNode("color") restituisce un oggetto node

356 XML - Guido Boella356 Esempi John Doe Dudley Doright

357 XML - Guido Boella357 ConteggioConteggio nodi XML <% var nodes = 0; var doc = new ActiveXObject("microsoft.xmldom"); doc.async = false; doc.load(Server.MapPath("menu.xml")); if (doc.readyState == 4 && doc.parseError.errorCode == 0) {Traverse(doc.documentElement); Response.Write("Nodes in the DOM for menu.xml: " + nodes);} else Response.Write("Error: " + doc.parseError.reason); doc = null; function Traverse(node){ nodes += 1; if (node.attributes != null) nodes += node.attributes.length; for (var i = 0; i < node.childNodes.length; i++) Traverse(node.childNodes(i));} %>

358 XML - Guido Boella White Johnson Bigge Rd. … Green Marjorie rd St. #411

359 XML - Guido Boella359...

360 XML - Guido Boella360 XML e XSL

361 XML - Guido Boella361 Salvare recordset in XMLrecordset <% strsql = request.querystring("sql") if NOT strsql="" then strFile="c:\asp\file2.xml" Set rsAuthors = Server.CreateObject("ADODB.Recordset") Set objFSO = CreateObject("Scripting.FileSystemObject") if objFSO.FileExists(strFile) then objFSO.deletefile strFile end if set objFSO = nothing

362 XML - Guido Boella362 With rsAuthors.Open strsql, "Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\asp\Pro ASP 3.0\pubs.mdb" If (.state = 1) then.save strFile, 1 'adPersistent.close() end if End with Set objFSO = CreateObject("Scripting.FileSystemObject") set objFile = objFSO.getFile(strFile) set objStream = objFile.openAsTextStream() response.write " "& objStream.readAll()&" " objFile.close

363 XML - Guido Boella363 XML da DB

364 XML - Guido Boella364 XSL per XML e DB Traduzione root element Elenco contatti: chiama.asp? "

365 XML - Guido Boella365 Bibliografia Extensible Markup Language (XML) 1.0, W3C Recommendation 10 February 1998, Extensible Stylesheet Language (XSL) Specification, W3C Working Draft, Extensible Linking Language (XLL), W3C Working Draft, XML-Data Specification, W3C Recommendation, XML Namespace, W3C Working Draft, Synchronized Multimedia Integration Language (SMIL) 1.0 Specification, W3C Recommendation, XML in Action, William J.Pardi - Microsoft. XML Le Basi, Simon St.Laurent - Tecniche Nuove. Un sito interamente dedicato ad XML, L’università di XML, Il sito della Microsoft su XML, Prime informazioni, approfondimenti, domande, Software XML, Il consorzio W3C, Un enorme elenco di link a risorse relative a XML, Il sito di un noto esperto, Robin Cover, Le FAQ (Frequented Ask Question) dei membri dell’XML W3C, Interessante corso sull'XML sviluppato da tre studenti milanesi, Il newsgroup msnews.microsoft.com della Microsoft dedicato a XML, microsoft.public.xml. T. Bray, D. Hollander, A. Layman, Namespaces in XML, W3C Recommendation, 14 January 1999, xml-names T. Bray, XML Namespaces by Example, J. Clark, XML Namespaces,

366 XML - Guido Boella366 Altri testi: Neil Bradley, The XML companion, Addison Wesley 1998 J. Bosak, XML, Java, and the future of the Web, info/standards/xml/why/xmlapps.htm T. Bray, J. Paoli, C.M. Sperberg-McQueen, Extensible Markup Language (XML) 1.0, W3C Recommendation, 10 February 1998, T. Bray, The annotated XML Specification,1998, XMLNews Specifications,

367 XML - Guido Boella367 In HTML... agenda Curriculum vitae Nome Cognome Indirizzo via/corso numero città Dati personali VEDI

368 XML - Guido Boella368 La Banca ricorrente è proprietaria di un immobile sito in Siracusa, piazza Archimede, sede degli uffici della Banca, che è stato considerato dal Comune di come edificio di interesse storico e monumentale ed inserito nel piano particolareggiato di recupero del centro storico di Ortigia adottato con delibera consiliare del 30 aprile 1988 e approvato con decreto regionale del 27 marzo 1990, con conseguente imposizione di nuovo vincolo conservativo. italic Siracusa

369 XML - Guido Boella369 La Banca ricorrente è proprietaria di un immobile sito in Siracusa, piazza Archimede, sede degli uffici della Banca, che è stato considerato dal Comune di Siracusa come edificio di interesse storico e monumentale ed inserito nel piano particolareggiato di recupero del centro storico di Ortigia adottato con delibera consiliare del 30 aprile 1988 e approvato con decreto regionale del... VEDI

370 XML - Guido Boella370 Perché passare dati al client? Per avere applicazioni che rispondono in maniera più veloce Per alleggerire il carico di lavoro del server: one page web applications

371 XML - Guido Boella371 IE5 e XML Il browser IE5 (e forse Netscape 6) offrono la possibilità di incorporare file XML all'interno di una pagina HTML e di manipolarli con VBscript (come con ASP) o Jscript I dati XML (xml data island) possono essere visualizzati in tabelle o in singoli elementi XML tramite DATAFLD XMLHTTP permette di trasmettere oggetti XML al server e viceversa


Scaricare ppt "XML eXtensible Markup Language. XML - Guido Boella2 ESERCIZI 1.Correggere un testo in base all’originale 2.Scrivere un ordine di acquisto e la relativa."

Presentazioni simili


Annunci Google