eXtensible Markup Language

Slides:



Advertisements
Presentazioni simili
Introduzione all’HTML
Advertisements

WWW XML-Namespace Fabio Vitali. WWW Fabio Vitali2 Introduzione Qui esaminiamo: u Lesigenza e il funzionamento dei Namespace in XML.
Introduzione al DTD Mario Arrigoni Neri.
Introduzione ad XML Mario Arrigoni Neri.
Lezione 1 Primi passi in HtML SCRIVERE TESTI di Sergio Capone
DBMS (DataBase Management System)
Informatica Recupero debito quarto anno Terzo incontro.
A. FERRARI Alberto Ferrari. L'HyperText Markup Language (HTML) (traduzione letterale: linguaggio di marcatura per ipertesti) è un linguaggio usato per.
1 Introduzione ad XML. 2 Problemi con SGML Complesso da comprendere ed utilizzare Non è pensato per la rete: mancano link ipertestuali e specifiche grafiche.
Lezione 18 MIDI e XML Programmazione MIDI (Prof. Luca A. Ludovico)
PHP.
XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis
Query OQL e XQUERY a confronto
Numerico-Vespignani, Informatica per le scienze umanistiche, Il Mulino, La rappresentazione dellinformazione testuale e i linguaggi di codifica.
XML Prof. Alfredo Pulvirenti. XML XML (eXtensible Markup Language) è un meta linguaggio. Può essere definito come un insieme di regole e convenzioni che.
DATAWAREHOUSE - Microstrategy
TW Analisi dei documenti n Classificazione dei componenti n Selezione dei componenti, costruzione della gerarchia, dei blocchi informativi e degli elementi.
JavaScript Laboratorio di Applicazioni Informatiche II mod. A.
XML Prof. Barbara Pernici Politecnico di Milano. Introduzione a XML.
XML e DTD. –il "PROLOG contiene: dichiarazione della versione di XML; commenti (facoltativi); dichiarazione del DOCUMENT TYPE. –il "DOCUMENT INSTANCE.
Architettura del World Wide Web
Basi di dati. Vantaggi degli archivi digitali Risparmio di spazio: sono facilmente trasferibili e duplicabili Risparmio di tempo: si può accedere ai dati.
Access: Query semplici
Un’introduzione a HTML (I)
Introduzione e nozioni fondamentali di sintassi
Unità Didattica 2 I Linguaggi di Programmazione
Linguaggi di markup1 LINGUAGGI DI MARKUP. Linguaggi di markup2 Documenti su Internet Internet permette (tra laltro) di accedere a documenti remoti In.
Progettazione di una base di dati
Modello E-R Generalizzazioni
Daniel Stoilov Tesi di Laurea
DBMS ( Database Management System)
Informatica Umanistica A.A. 2009/2010 eXtensible Markup Language (XML)
Importanza DTD La DTD (Document Type Definition) consente di dichiarare in maniera univoca la struttura di markup mediante la definizione dello schema.
1 IsaPress. 2 Obiettivo Realizzare uno strumento di facile uso per estrarre il contenuto da documenti binari di vario tipo in un formato utile per l'impaginazione.
1 IsaPress. 2 Obiettivo Realizzare uno strumento di facile uso per estrarre il contenuto da documenti binari di vario tipo in un formato utile per l'impaginazione.
HyperText Markup Language 17-23/6/08 Informatica applicata B Cristina Bosco.
Modulo 7 – reti informatiche u.d. 3 (syllabus – )
HTML Lezione 8 I collegamenti ipertestuali (link).
Creare pagine web Xhtlm. Struttura di una pagina.
Gianpaolo Cecere Introduzione
Paper Based Prototipe Laboratorio di Basi di Dati 2 Università di Roma La Sapienza Tecnologie Informatiche Anno 2003/2004.
HTML HyperText Markup Language Linguaggio per marcare un’Ipertesto
XHTML Corso linguaggi per il web a.s. 2011/2012 ITIS A. Righi – Corsico Relatore – Aldo Guastafierro.
HTML I tag HTML (parte 1). I tag HTML  I comandi che il browser interpreta  Etichette per marcare l’inizio e la fine di un elemento HTML  Formato e.
Lezione 3 Struttura lessicale del linguaggio
CORSO Di WEB DESIGN prof. Leonardo Moriello
Creazione di pagine per Internet Brevi note a cura di Emanuele Lana
Internet e HTML Diffusione di informazioni mediante la rete Internet.
Introduzione a Javascript
Tecnologie di InternetDocument Type Definition Dott. Nicola Dragoni Document Type Definition  Document Type Definition (DTD)  Documento XML valido 
HTML HTML e il web.
HTML e CSS C. Gena, C. Picardi, J. Sproston HTML e CSS.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
HTML. Notizie storiche Tim Berners-Lee stava cercando un modo per gestire e distribuire fra i colleghi grandi quantità d'informazioni e nel 1989 propose.
Fondamenti di Markup Languages: Richiami di HTML © 2005 Stefano Clemente Stefano Clemente
Microsoft Access Chiavi, struttura delle tabelle.
LTW Annotazioni sul progetto Fabio Vitali. LTW Scopo del progetto Realizzare un sito Web per la lettura e la ricerca di testi e dati su un argomento specifico.
Progettazione di una base di dati Ciclo di vita di un sistema informativo Studio di fattibilità definisce le varie alternative possibili, i relativi costi.
Cenni Su SGML, HTML, XML SGML (Standard Generalized Markup Language) è il padre di tutti i linguaggi "Markup" – Lo svantaggio è la "pesantezza" dei suoi.
WWW La sintassi di SGML  XML Fabio Vitali. WWW Fabio Vitali2 Introduzione Qui esaminiamo in breve tutti gli aspetti di SGML che sono in comune con XML:
Servizi Internet Claudia Raibulet
Creazione di pagine per Internet Brevi note a cura di Emanuele Lana
Cloud informatica V anno.
2 Indice Un esempio Che cosa è A cosa serve Confronto con HTML Punti di forza La sua struttura.
Cloud Tecno V. Percorso didattico per l’apprendimento di Microsoft Access 4 - Le maschere.
Le basi di dati.
Un sito con Wordpress Includere Digital-mente – Corso livello 4 docente: prof.ssa MANUELA MARSILI.
Interazione Persona Computer prova di progetto Gruppo: IO Componenti: Carlo Solimando Sito analizzato:
Dal problema al programma – ciclo di sviluppo del software La scrittura del programma è solo una delle fasi del processo di sviluppo di un'applicazione.
HTML. Pagina HTML Struttura Titolo Hello World! Paragrafo apre il documento html contiene informazioni come il titolo della pagina, i meta tags, la codifica.
Transcript della presentazione:

eXtensible Markup Language XML eXtensible Markup Language

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

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) XML - Guido Boella

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 XML - Guido Boella

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

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 XML - Guido Boella

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

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? XML - Guido Boella

In un database XML - Guido Boella nome cognome via telefono Guido svizzera 185 011990987 John Doe Dawson 555023432 XML - Guido Boella

Con questo formato… &@#@#@@@@Guido@#@#f88%&/Boella@@€àewr#@€#€€€ @#@#f88%&/ @#@#f88%&/John @#@#f88%&/ @#@#f88%&/Doe @#@#f88%&/ @#@#f88%&/9990923423 XML - Guido Boella

In HTML... <head><title>agenda</title></head> <body bgcolor="white"> <table border="1"> <tr><th>nome</th><th>cognome</th><th>via</th> <th>telefono</th><th>cellulare</th></tr> <tr><td>Guido</td><td>Boella</td><td>svizzera 185</td> <td>011990987</td><td>03384323</td></tr> <tr><td>John</td><td>Doe</td><td>Dawson</td> <td>555023432</td><td></td></tr> </table> </body> </html> VEDI XML - Guido Boella

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 <td> è 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? XML - Guido Boella

Perchè un nuovo linguaggio ? Cosa è questo? <td>011990987</td> Il numero di telefono ? Il numero civico di una via ? Entrambe le cose ? Nessuna delle due ? • Nessuna delle due ? XML - Guido Boella

HTML è sempre lo stesso Posso cambiare lo stile di visualizzazione con CSS normale a 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.) XML - Guido Boella

Modifiche a tabella XML - Guido Boella nome cognome via telefono cellulare John Doe Dawson 555023432 Guido Boella svizzera 185 011990987 03384323 nome cognome via telefono Guido Boella svizzera 185 011990987 John Doe Dawson 555023432 nome cognome via telefono email Guido Boella svizzera 185 011990987 g@unito.it John Doe Dawson 555023432 J@berk.edu nome cognome via telefono cellulare John Doe Dawson 555023432   XML - Guido Boella

Formati diversi   John Doe Dawson 555023432 Guido Boella svizzera 185 11990987 03384323 nome cognome via telefono cellulare John Doe Dawson 555023432 Guido Boella svizzera 185 011990987 03384323 pard \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\lang1040\langfe1033\langnp1040 Guido\tab Boella\tab }{\lang1040\langfe1033\langnp1040 XML - Guido Boella

Da xml a ... XML - Guido Boella

Trasformazione XML - Guido Boella

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). XML - Guido Boella

Interscambio XML - Guido Boella

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. XML - Guido Boella

Raggiungere il sito Web dell’ospedale Diventare un utente autorizzato 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: Raggiungere il sito Web dell’ospedale Diventare un utente autorizzato Accedere alla documentazione medica del paziente attraverso il browser Stampare la documentazione 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. XML - Guido Boella

La soluzione ideale sarebbe la seguente: Raggiungere il sito Web dell’ospedale Diventare un utente autorizzato Accedere alla documentazione medica del paziente attraverso una interfaccia Web che rappresenti la documentazione con una icona a cartella Fare un drag della cartella dall’applicazione Web nel database interno 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); XML - Guido Boella

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. XML - Guido Boella

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 <allergia> oppure <reazione>; infatti chi legge il documento è subito allertato (da una applicazione apposita) del fatto che un paziente può essere allergico alla penicillina. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

Motori di ricerca XML permette di aggiungere informazioni semantiche al testo: <Autore>Giancarlo Parma</Autore> 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. XML - Guido Boella

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. XML - Guido Boella

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’. XML - Guido Boella

Ecco a voi…

In XML... <agenda data="01/02/00"> <contatto> <nome>Guido</nome> <cognome>Boella</cognome> <via>Svizzera</via><numero>185</numero> <tel>011990987</tel> <cellulare>011990987</cellulare> </contatto> <contatto> <nome>John</nome> <cognome>Doe</cognome> <via>Dawson</via> <tel>0510-00423223</tel> </agenda> XML - Guido Boella

In technicolor... <agenda data="01/02/00"> <contatto> <nome>Guido</nome> <cognome>Boella</cognome> <via>Svizzera</via><numero>185</numero> <tel>011990987</tel> <cellulare>011990987</cellulare> </contatto> <contatto> <nome>John</nome> <cognome>Doe</cognome> <via>Dawson</via> <tel>0510-00423223</tel> </agenda> XML - Guido Boella

Come in HTML <agenda data="01/02/00"> <contatto> <nome>Guido</nome> <cognome>Boella</cognome> <via>Svizzera</via><numero>185</numero> <tel>011990987</tel> <cellulare>011990987</cellulare> </contatto> <contatto> <nome>John</nome> <cognome>Doe</cognome> <via>Dawson</via> <tel>0510-00423223</tel> </agenda> XML - Guido Boella

XML vs HTML HTML ha un numero di tag predefinito cosi' come il loro significato Markup di formattazione e strutturazione e' mescolato (e.g. <H1>, titolo e grassetto, <TH> 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 XML - Guido Boella

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 XML - Guido Boella

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 XML - Guido Boella

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 XML - Guido Boella

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. XML - Guido Boella

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 XML - Guido Boella

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. XML - Guido Boella

Metalinguaggio mia agenda XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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, http://metalab.unc.edu/pub/sun-info/standards/xml/why/xmlapps.htm XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

Un esempio: XMLNews (2) XMLNews-Story: il testo di una notizia di agenzia è diviso in tre parti: l’head contiene informazioni di organizzazione, mentre il body è a sua volta diviso in intestazione e contenuto. <?xml version="1.0"?> <nitf> <head> <title>Colombia Earthquake</title> </head> <body> <body.head> <hedline><hl1>143 Dead in Earthquake</hl1></hedline> <byline><bytag>By Jared Kotler, AP </bytag></byline> <dateline> <location>Bogota, Colombia</location> <story.date>January 25 1999 7:28 ET</story.date> </dateline> </body.head> <body.content> … </body.content> </body> </nitf> XML - Guido Boella

Un esempio: XMLNews (3) XMLNews-Story: Il body ha un markup minimale di struttura del testo: <?xml version="1.0"?> <nitf> <head> … </head> <body> <body.head> … </body.head> <body.content> <p>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. </p> <p>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. </p> </body.content> </body> </nitf> XML - Guido Boella

Un esempio: XMLNews (4) XMLNews-Story: Però è possibile in qualunque momento aggiungere informazioni inline: <p>An <event>earthquake</event> struck <location>western <country>Colombia</country></location> on <chron norm="19990125">Monday</chron>, killing at least 143 people and injuring more than 900 as it toppled buildings across the country's coffee-growing heartland, <function>civil defense officials</function> said.</p> 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. XML - Guido Boella

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. XML - Guido Boella

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 XML - Guido Boella

XML 1.0 Prima bozza: 1996 Una raccomandazione W3C del 10 febbraio 1998. È definita come un sottoinsieme di SGML URL ufficiale: http://www.w3.org/TR/REC-xml Traduzione ufficiale in italiano: http://www.iat.cnr.it/xml/REC-xml-19980210-it.html Molto più formalizzata della grammatica di SGML, usa una notazione formale, Extended Backus-Naur Form. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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! XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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 XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

Documenti XML ben formati Un documento XML si dice ben formato se: Tutti i tag di apertura e chiusura corrispondono e sono ben annidati Esiste un elemento radice che contiene tutti gli altri I tag vuoti (senza contenuto) utilizzano un simbolo speciale di fine tag: <vuoto/> Tutti gli attributi sono sempre racchiusi tra virgolette Tutte le entità sono definite. XML - Guido Boella

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. XML - Guido Boella

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

Dichiarazione XML (1) <?XML version=“1.0” encoding=“UTF-16” standalone=“yes” ?> 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: <?XML version=“1.0” ?> XML - Guido Boella

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. XML - Guido Boella

Sezioni CDATA A volte può essere comodo inserire un blocco di caratteri comprendenti anche ‘&’ e ‘<‘, senza preoccuparsi di nasconderli dentro ad entità. Si usa allora la sezione CDATA, che ha la seguente sintassi: <![CDATA[ dati liberi comprendenti & e < ]]> L’unica sequenza di caratteri non accettabile è la sequenza ‘]]>’, che definisce la fine della sezione CDATA Il parser XML passa all’applicazione finale tutti i caratteri che trova fino alla sequenza ]]> <para>In HTML, “<![CDATA[ <h1>Questo è un titolo</h1>]]>” indica un titolo </para> XML - Guido Boella

Altre differenze tra SGML e XML (1) Elementi vuoti: un elemento con content model EMPTY ha il carattere di chiusura tag ‘/>’. <EMPTY/> Case sensitivity: in XML tutto il markup è case-sensitive (il maiuscolo è diverso dal minuscolo). È quindi necessario usare le maiuscole per ELEMENT, ATTLIST, ecc., e l’elemento <para> è diverso dall’elemento <PARA>. Valori tra virgolette: tutti i valori di tutti gli attributi debbono avere le virgolette (semplici o doppie, ma in maniera coerente), anche se numeri o appartenenti ad una lista di valori predefiniti. XML - Guido Boella

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à: <!ENTITY lt “<”> <!ENTITY gt “>”> <!ENTITY amp “&”> <!ENTITY apos “’”> <!ENTITY quot ‘”’> Processing instructions: la sequenza di chiusura di un’istruzione di elaborazione è ‘?>’: <?Fine-pagina?> XML - Guido Boella

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. XML - Guido Boella

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 XML - Guido Boella

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 XML - Guido Boella

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, http://metalab.unc.edu/pub/sun-info/standards/xml/why/xmlapps.htm T. Bray, J. Paoli, C.M. Sperberg-McQueen, Extensible Markup Language (XML) 1.0, W3C Recommendation, 10 February 1998, http://www.w3.org/TR/REC-xml T. Bray, The annotated XML Specification,1998, http://www.xml.com/axml/testaxml.htm XMLNews Specifications, http://www.xmlnews.org/ XML - Guido Boella

Sintassi

• Internet Explorer 5.0 has the following XML support: 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 XML - Guido Boella

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: <P>Questo è un elemento HTML Paragraph.</P> 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. XML - Guido Boella

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: <NOMETAG/>. In questo caso la barra segue il nome del tag, il che non è possibile nel linguaggio HTML. <tag attributo=“valore”>contenuto</tag> Nuova sintassi per i tag di chiusura Quando l’elemento è senza contenuto <tag attr=“3”></tag> <tag attr=“3”/> sono equivalenti XML - Guido Boella

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ì : <DOCUMENT> <PARENT1> <CHILD1></CHILD1> <CHILD2></CHILD2> </PARENT1> </DOCUMENT> XML - Guido Boella

Annidamento Regole per i tag Non permesso <a> <b> Corretto <a> <b> </b> </a> XML - Guido Boella

Overlapping • E’ vietata la sovrapposizione (overlapping) degli elementi <B>Bold <I> Bold e Italic </B> Continua solo Italic </I> Possibili Soluzioni: <B>Bold </B><I><B> Bold e Italic </B></I><I> solo Italic </I> <B>Bold </B><I><B> Bold e Italic </B> solo Italic </I> XML - Guido Boella

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: <A HREF = "http://www.microsoft.com">Microsoft Home Page</A> In questo caso l’elemento Anchor indicato dal tag <A> contiene un attributo denominato HREF. Il valore dell’attributo è http://www.microsoft.com. 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 XML - Guido Boella

Tag e attributi <? XML version="1.0" ?> <!DOCTYPE indirizzi SYSTEM "mio.dtd"> <tag att1="val1" att2="val2"> <tag1 att3="val3"><tag2>testo</tag2> </tag1> <tag1><tag2>testo</tag2></tag1> <tag1/> </tag> coppie attributo - valore elemento elemento vuoto: aperto e chiuso subito: equivale a <tag1></tag1> NB: diversamente da HTML ogni tag va chiuso: no <HR> XML - Guido Boella

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 XML - Guido Boella

Struttura di un documento XML - Guido Boella

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 <? ?>) <?xml version="1.0"?> 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. XML - Guido Boella

<!DOCTYPE Wildflowers SYSTEM "Wldflr.dtd"> 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. <?xml version="1.0"?> <!DOCTYPE Wildflowers SYSTEM "Wldflr.dtd"> XML - Guido Boella

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: <?xml version="1.0"?> <!DOCTYPE Wildflowers SYSTEM "Wldflr.dtd"> <PLANT> <COMMON>Columbine</COMMON> <BOTANICAL>Aquilegia canadensis</BOTANICAL> </PLANT> XML - Guido Boella

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: <PLANT>Blodroot</PLANT> 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) &amp ; & (e commerciale) &apos; ‘ (apostrofo) " " (virgolette doppie) XML - Guido Boella

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 : <!ENTITY LR1 "light requirement: mostly shade"> 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à. XML - Guido Boella

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: <TERM>Wild Ginger has the following &LR1;</TERM> XML - Guido Boella

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. XML - Guido Boella

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 : <!ENTITY MyImage SYSTEM "Image001.gif" NDATA GIF> XML - Guido Boella

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: <!NOTATION GIF SYSTEM "/Utils/Gifview.exe"> 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. XML - Guido Boella

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: <!ENTITY LR1 "light requirement: mostly shade"> 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: <!ENTITY MyImage SYSTEM "http://www.wildflowers.com/Image001.gif" NDATA GIF> In questo caso l’elaboratore di XML deve necessariamente leggere il file Image001.gif per recuperare il contenuto di questa entità. XML - Guido Boella

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. <!ENTITY MyImage PUBLIC "-//Wildflowers/TEXT Standard images//EN” "http://www.wildflowers.com/Image001.gif" NDATA GIF> Se non esiste l’oggetto pubblico si ricorre all’indentificatore di sistema opzionale XML - Guido Boella

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. XML - Guido Boella

DTD

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 XML - Guido Boella

<?xml version=”1.0” encoding=“UTF-8”?> <biblioteca> <libro codice=”R414”> <titolo>2001: Odissea nello spazio</titolo> <autore> <cognome>Clarke</cognome> <nome>Arthur Charles</nome> </autore> <editore>Rizzoli</editore> <parola_chiave>romanzo</parola_chiave> <parola_chiave>fantascienza</parola_chiave> </libro> </biblioteca> <nome>  <Nome>  <NOME> XML - Guido Boella

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 XML - Guido Boella

una DTD XML che rappresenta la struttura definita precedentemente: <!DOCTYPE biblioteca [ <!ELEMENT biblioteca (libro+)> <!ELEMENT libro (titolo, autore+, editore, parola_chiave+)> <!ATTLIST libro codice ID #REQUIRED> <!ELEMENT titolo (#PCDATA)> <!ELEMENT autore (cognome, nome)> <!ELEMENT editore (#PCDATA)> <!ELEMENT parola_chiave (#PCDATA)> <!ELEMENT cognome (#PCDATA)> <!ELEMENT nome (#PCDATA)> ]> Elemento (1) Elemento ? (0,1) Elemento * (0,1,+) Elemento + (1,+) Elemento1 | Elemento2 (or) <!ATTLIST nome_elemento nome_ attributo1 tipo_ attributo valore_di_default #REQUIRED (obbligatorio) nome_ attributo2 tipo_ attributo #IMPLIED (opzionale) nome_ attributo3 tipo_ attributo valore_di_default #FIXED (obbligatorio con valore prefissato) > XML - Guido Boella

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. XML - Guido Boella

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. <!DOCTYPE catalog PUBLIC "-//flowers//DTD Standard //EN" http://www.wildflowers.com/dtd/Wldflr.dtd XML - Guido Boella

una DTD semplice <?xml version="1.0"?> <!DOCTYPE EMAIL [ <!ELEMENT EMAIL (TO, FROM, CC, SUBJECT, BODY)> <!ELEMENT TO (#PCDATA)> <!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT BODY (#PCDATA)> ]> <EMAIL> <TO>Jodie@msn.com</TO> <FROM>Bill@msn.com</FROM> <CC>Philip@msn.com</CC> <SUBJECT>My first DTD</SUBJECT> <BODY>Hello, World</BODY> </EMAIL> XML - Guido Boella

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 XML - Guido Boella

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. XML - Guido Boella

Tipi di dati Per dichiarare una sezione come dati di carattere, è necessario indicare l’inizio della sezione con la sequenza <![CDATA[ e la fine con due parentesi di chiusura ]]. Tutti i dati che risiedono all’interno di questo insieme di marcatori verranno interpretati come semplici dati non analizzabili. <![CDATA[ *p = &q; b = (i <= 3); ]]> XML - Guido Boella

DICHIARAZIONI DI ATTRIBUTO Nel linguaggio XML gli attributi vengono dichiarati nella DTD utilizzando la sintassi seguente: <!ATTLIST ElementName AttributeName Type Default> In questo caso <!ATTLIST> 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. XML - Guido Boella

Tipo di attributo Utilizzo 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. XML - Guido Boella

Tipo di attributo Utilizzo 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. XML - Guido Boella

Tipo di attributo Utilizzo 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: <!ATTLIST MyAttribute (content1|content2)> XML - Guido Boella

Impostazione predefinita Utilizzo #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. XML - Guido Boella

<!ELEMENT EMAIL (TO+, FROM, CC*, BCC*, SUBJECT?, \BODY?)> <?xml version="1.0"?> <!DOCTYPE EMAIL [ <!ELEMENT EMAIL (TO+, FROM, CC*, BCC*, SUBJECT?, \BODY?)> <!ATTLIST EMAIL LANGUAGE(Western|Greek|Latin|Universal) " Western" ENCRYPTED CDATA #IMPLIED PRIORITY (NORMAL|LOW|HIGH) "NORMAL"> <!ELEMENT TO (#PCDATA)> <!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT BCC (#PCDATA)> <!ATTLIST BCC HIDDEN CDATA #FIXED "TRUE"> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT BODY (#PCDATA)> ]> XML - Guido Boella

specificare il valore nella DTD, in questo caso TRUE. In questo esempio sono stati aggiunti attributi all’elemento Email e al nuovo elemento Bcc. Il primo attributo aggiunto all’elemento Email è 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 Email è 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 Email è 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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

Esempio almeno uno <!ELEMENT agenda (contatto+)> <! ELEMENT contatto (nome*, cognome, tel+, via, numero, email?, webaddress?)> <!ELEMENT nome #PCDATA> <!ATTRIBUTE agenda data CDATA required> <!ATTRIBUTE tel tipo (celluare | fisso) 'fisso'> zero o più uno opzionale parsable character data attributo obbligatorio character data valori possibili default XML - Guido Boella

IE5, XML e XSL Il browser IE5 permette di visualizzare un file XML facendolo tradurre da uno stylesheet CSS <?xml version="1.0"?> <?xml-stylesheet type="text/css" href="menu.css" ?> XML - Guido Boella

CSS per XML menu.xml <?xml version="1.0"?> <?xml-stylesheet type="text/css" href="menu.css" ?> <Menu effective="2000-04-01" expires="2000-06-30"> <Appetizers> <Item> <Name>Deep Fried Mushrooms with Stuff in Them</Name> <Price>6.00</Price> <Description>All mushrooms look alike. Focus on the conversation</Description> </Item> menu.css: NAME {BACKGROUND-COLOR: teal; COLOR: white; DESCRIPTION {BACKGROUND-COLOR: white; COLOR: blue;} XML - Guido Boella

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; float: right; FONT-SIZE: 8pt; FONT-WEIGHT: lighter } DESCRIPTION BACKGROUND-COLOR: white; COLOR: blue; FONT-STYLE: italic; FONT-WEIGHT: normal ENTREES BORDER-BOTTOM: black double; BORDER-LEFT: black double; BORDER-RIGHT: black double; BORDER-TOP: black double; FONT-SIZE: 18pt; FONT-WEIGHT: 700 DESSERTS BORDER-BOTTOM: blue thin groove; BORDER-LEFT: blue thin groove; BORDER-RIGHT: blue thin groove; BORDER-TOP: blue thin groove; FONT-SIZE: 12pt XML - Guido Boella

BACKGROUND-COLOR: white; COLOR: blue; FONT-FAMILY: Verdana; 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-SIZE: 18pt; FONT-WEIGHT: 700 } DESSERTS { BORDER-BOTTOM: blue thin groove; BORDER-LEFT: blue thin groove; BORDER-RIGHT: blue thin groove; BORDER-TOP: blue thin groove; FONT-SIZE: 12pt } XML - Guido Boella

DISPLAY e FLOAT block block block float left block block block block inline inline block inline block block float left block block block block block XML - Guido Boella

in a BOX margin top border padding left content right bottom XML - Guido Boella

XML in HTML DATA ISLANDS

Data island Due modi per includere XML dentro una pagina html <XML ID="XMLID"> <XMLDATA> <DATA>TEXT</DATA> </XMLDATA> </XML> <XML SRC="http://localhost/xmlFile.xml"></XML> XML - Guido Boella

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 XML - Guido Boella

Esempio <HTML> <BODY> <XML ID="xmlMeetings"> <?xml version="1.0" ?> <meetings> <meeting> <date>1/1/99</date> <time>9:00</time> <location>104</location> </meeting> <meeting> <date>2/1/99</date> <time>13:00</time> <location>34</location> </meeting> </meetings> </XML> <table datasrc="#xmlMeetings"> <tr> <td><div datafld="date"></div></td> <td><div datafld="time"></div></td> <td><div datafld="location"></div></td> </tr> </table> </BODY> </HTML> XML - Guido Boella

XML in HTML <XML ID="dsoData" SRC="authorsasxml.xml"></XML> <TABLE DATASRC="#dsoData"> <TR> <TD> <INPUT TYPE="TEXT" DATAFLD="au_id"></INPUT> </TD> <INPUT TYPE="TEXT" DATAFLD="au_fname"></INPUT> </TR> </TABLE> XML - Guido Boella

authors author author name id name id <authors> <author> <name>Graham Greene</name> <id>32454345</id> </author> <author> <name>James Joyce</name> <id>43535345</id> </author> </authors> authors author author name id name id XML - Guido Boella

documentelement authors lastchild firstchild childNodes author author parentNode firstchild name id name id nextSibling previousSibling XML - Guido Boella

authors author name id documentelement.firtchild author (1) documentelement.childnodes.item(1) author (1) documentelement.firtchild.parentNode document namednodemap("name").item(1) name (1) documenteelement.firtchild.firstchild.text G. Greene documentelement.firtchild.nextsibling author (2) documentelement.lastchild.previousSibling author (1) XML - Guido Boella

XSLT

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. XML - Guido Boella

Il modello di XSLT -> “html”,”h1”, “h2”, ecc. <book> <title>…</title> <chapter n=“1”> <title> …</title> … </chapter> </book> -> “html”,”h1”, “h2”, ecc. XSL -> “fo:block”,”fo:inline”, ecc. XSL XSL -> “libro”,”capitolo”, ecc. <libro> <titolo>…</titolo> <capitolo n=“1”> <titolo> …</titolo> … </capitolo> </libro> XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

Da XML... <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="agenda.xsl" ?> <agenda data="01/02/00"> <contatto> <nome>Guido</nome> <cognome>Boella</cognome> <via>Svizzera</via><numero>185</numero> <tel>011990987</tel> <tel tipo="cellulare">033843233</tel> </contatto> <contatto> <nome>john</nome> <cognome>Doe</cognome> </agenda> XML - Guido Boella

...a HTML... <html><head><title>agenda</title></head> <body bgcolor="#FFFFFF"> <table border=”2"> <tr><th align="left">nome</th><th align="left">cognome</th> <th align="left">via</th><th align="left">telefono</th> <th align="left">cellulare</th></tr> <tr><td><I>Guido</I></td><td><b>Boella</b></td><td>svizzera 185</td> <td style=“color:red”>011990987</td><td>03384323</td></tr> <tr><td>John</td><td>Doe</td><td>kansas</td> <td>555023432</td><td> </td></tr> </table> </body> </html> XML - Guido Boella

Regole di traduzione II Il cognome va riscritto in grassetto, il nome in italico. Il nome nella prima colonna il cognome nella seconda. <tr><td><I>Guido</I></td><td><b>Boella</b></td> Si’, ma colonna implica una tabella! XML - Guido Boella

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: <table border=”2"> </table> <tr><td><I>Guido</I></td><td><b>Boella</b></td> XML - Guido Boella

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 <table border=”2"> <tr><td><I>Guido</I></td><td><b>Boella</b></td> </table> E John Doe? XML - Guido Boella

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 <table border=”2"> <tr><td><I>Guido</I></td><td><b>Boella</b></td> <tr><td><I>John</I></td><td><b>Doe</b></td> </table> E se ho un altro tipo di tabella? (ad es. elenco libri) XML - Guido Boella

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. <table border=”2"> <tr><td><I>Guido</I></td><td><b>Boella</b></td> <tr><td><I>John</I></td><td><b>Doe</b></td> </table> Cosa manca? XML - Guido Boella

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: … <html><body> <table border=”2"> <tr><td><I>Guido</I></td><td><b>Boella</b></td> <tr><td><I>John</I></td><td><b>Doe</b></td> </table> </body></html> XML - Guido Boella

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: … <html><body> <table border=”2"> <tr><td><I>Guido</I></td><td><b>Boella</b></td> <tr><td><I>John</I></td><td><b>Doe</b></td> </table> </body></html> XML - Guido Boella

XML - Guido Boella

via XSLT <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> ... </xsl:template></xsl:stylesheet> XML - Guido Boella

via XSLT <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html><head><title>agenda</title></head> <body> ... </body></html> </xsl:template></xsl:stylesheet> XML - Guido Boella

via XSLT <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html><head><title>agenda</title></head> <body> <table border="2> ... </table></body></html> </xsl:template></xsl:stylesheet> XML - Guido Boella

via XSLT <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html><head><title>agenda</title></head> <body> <table border="2"><tr><th align="left">nome</th></tr> ... </table></body></html> </xsl:template></xsl:stylesheet> XML - Guido Boella

via XSLT <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html><head><title>agenda</title></head> <body> <table border="2><tr><th align="left">nome</th></tr> <agenda data="01/02/00"> <contatto> <nome>Guido</nome> <cognome>Boella</cognome> </contatto> <contatto>...</contatto> </agenda> </table></body></html> </xsl:template></xsl:stylesheet> XML - Guido Boella

via XSLT <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html><head><title>agenda</title></head> <body> <table border="2"><tr><th align="left">nome</th></tr> <xsl:for-each select="//contatto"> <contatto> <nome>Guido</nome> <cognome>Boella</cognome> </contatto> </xsl:for-each> </table></body></html> </xsl:template></xsl:stylesheet> XML - Guido Boella

via XSLT <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html><head><title>agenda</title></head> <body> <table border="2"><tr><th align="left">nome</th></tr> <xsl:for-each select="//contatto"> <tr><td> <nome>Guido</nome> </td> <td> <cognome>Boella</cognome> </td></tr> </xsl:for-each> </table></body></html> </xsl:template></xsl:stylesheet> XML - Guido Boella

via XSLT <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html><head><title>agenda</title></head> <body> <table border="2"><tr><th align="left">nome</th></tr> <xsl:for-each select="//contatto"> <tr><td><xsl:value-of select="nome"/></td> <td><xsl:value-of select="cognome"/></td></tr> </xsl:for-each> </table></body></html> </xsl:template></xsl:stylesheet> XML - Guido Boella

file xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="hello.xsl"?> <greeting>Hello world.</greeting> file xsl <?xml version="1.0"?> <html xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.0"> <head><title>Greeting</title></head> <body><p>Words of greeting:<br/> <b><i><u><xsl:value-of select="greeting"/></u></i></b> </p></body> </html> XML - Guido Boella

Risultato: <html> <head> <title>Greeting</title> </head> <body> <p>Words of greeting:<br> <b><i><u>Hello world.</u></i></b> </p> </body> </html> XML - Guido Boella

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) XML - Guido Boella

Un esempio di pull (1) <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet href="SalesToHTML.xsl" type="text/xsl" ?> <!-- SalesReport.cml --> <SalesReport> <Company>XMML.com</Company> <Period>2001-2002</Period> <Sales Region="EU">50,000</Sales> <Sales Region="NA">150,000</Sales> <Sales Region="AU">10,000</Sales> </SalesReport> XML - Guido Boella

Un esempio di pull (2) <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"><html><head><title>Sales Report, <xsl:value-of select="/SalesReport/Company" />: <xsl:value-of select="/SalesReport/Period" /></title> </head><body><br /> <table width="50%"><tr><th>Region</th></tr> <xsl:for-each select="/SalesReport/Sales"><tr> <td align="center"><xsl:value-of select="@Region"/></td> <td align="center"><xsl:value-of select="."/></td></tr> </xsl:for-each></table></body></html> </xsl:template> </xsl:stylesheet> XML - Guido Boella

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. XML - Guido Boella

Un esempio di push (1) <document> <title>To the Pole and Back</title> <section> <title>The First Day</title> <para>It was the <emph>best</emph> of days, it was the <emph>worst </emph> of days.</para> <para><emph>Best</emph> in that the sun was out, but <emph>worst</emph> in that it was 39 degrees below zero.</para> </section> ... </document> XML - Guido Boella

Un esempio di push (2) <xsl:stylesheet> <xsl:template match="/"> <HTML> <BODY> <H1><xsl:value-of select="document/title"/></H1> <xsl:apply-templates select="document/section"/> </BODY> </HTML> </xsl:template> <xsl:template match="section"> <HR/> <H2><xsl:value-of select="title"/></H2> <xsl:apply-templates /> <xsl:template match="para"> <P><xsl:apply-templates /></P> <xsl:template match="emph"> <I><xsl:apply-templates /></I> </xsl:stylesheet> XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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

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 <template>: <xsl:template match=pattern name=qname priority=number mode=qname > <!-- azione --> </xsl:template> XML - Guido Boella

I template (2) Ad esempio, dato il frammento: Il seguente template: Questo deve essere <emph>importante</emph> Il seguente template: <xsl:template match=“emph”> <html:b> <xsl:apply-templates/> </html:b> </xsl: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. XML - Guido Boella

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 • <xsl:value-of> • <xsl:element> • <xsl:attribute> • <xsl:text> • <xsl:processing-instruction> • <xsl:comment> • <xsl:namespace-alias> • <xsl:copy> • <xsl:number> Modificare la lista di nodi correnti • <xsl:apply-templates> • <xsl:for-each> • <xsl:if> • <xsl:choose> • <xsl:sort> XML - Guido Boella

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 <xsl:template match=“pippo”> <b>Viva Pippo</b> </xsl:template> XML - Guido Boella

Scrivere l’albero di destinazione (2) <xsl:value-of> <xsl:value-of> 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 <persona nome=”Guido” cognome=”Boella”/> e il template <xsl:template match=“persona”> <p><xsl:value-of select=“@nome”/> <xsl:text> </xsl:text> <xsl:value-of select=“@cognome”/></p> </xsl:template> ottengo il frammento <p>Guido Boella</p> XML - Guido Boella

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 <xsl:value-of> L’uso tipico è per convertire markup in altro markup (ad esempio il valore di un attributo nel nome di un tag). Dato il frammento <persona nome=”Fabio” cognome="Vitali”/> e il template <xsl:template match=“persona”> <mail to=“{@nome} {@cognome}”/> </xsl:template> ottengo il frammento <mail to=“Fabio Vitali”/> XML - Guido Boella

Scrivere l’albero di destinazione (4) <xsl:element> Se è necessario scrivere un elemento complesso o calcolato uso <xsl:element> 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 <persona tipo=”studente” nome=”Mario Rossi”/> e il template <xsl:template match=“persona”> <xsl:element name=“{@tipo}”> <xsl:value-of select=“@nome”/> </xsl:element> </xsl:template> ottengo il frammento <studente>Mario Rossi</studente> XML - Guido Boella

Scrivere l’albero di destinazione (5) <xsl:attribute> All’interno di un elemento (sia letterale che <xsl:element>) è possibile specificare degli attributi in maniera esplicita con il tag <xsl:attribute> 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 <persona id=”1678.1245” nome=”Mario Rossi”/> e il template <xsl:template match=“persona”> <A><xsl:attribute name=“HREF”> <xsl:value-of select=“@id”/>.html </xsl:attribute> <xsl:value-of select=“@nome”/></A> </xsl:template> ottengo il frammento <A HREF=“1678.1245.html”>Mario Rossi</A> XML - Guido Boella

Scrivere l’albero di destinazione (6) <xsl:attribute> All’interno di un elemento (sia letterale che <xsl:element>) è possibile specificare degli attributi in maniera esplicita con il tag <xsl:attribute> 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 <persona id=”1678.1245” nome=”Mario Rossi”/> e il template <xsl:template match=“persona”> <A><xsl:attribute name=“HREF”> <xsl:value-of select=“@id”/>.html </xsl:attribute> <xsl:value-of select=“@nome”/></A> </xsl:template> ottengo il frammento <A HREF=“1678.1245.html”>Mario Rossi</A> XML - Guido Boella

Scrivere l’albero di destinazione (7) <xsl:text> 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). <xsl:processing-instruction> Le processing instruction dentro al foglio di stile vengono ignorate, non trasferite. Per scriverle esplicitamente nel documento di arrivo debbo usare <xsl:processing-instruction> Ad esempio, <xsl:processing-instruction name="xml-stylesheet"> href="book.css" type="text/css” </xsl:processing-instruction> genera il seguente output: <?xml-stylesheet href="book.css" type="text/css"?> <xsl:comment> Inserisce esplicitamente del commento dentro al documento. XML - Guido Boella

Scrivere l’albero di destinazione (8) <xsl:namespace-alias> Permette di specificareesplicitamente il namespace di arrivo <xsl:copy> Copia nell’output il nodo di riferimento, insieme al suo namespace, ma non al suo contenuto e ai suoi attributi, che vanno copiati esplicitamente. <xsl:number> 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.) XML - Guido Boella

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: <xsl:apply-templates> <xsl:apply-templates inserisce nella lista dei nodi corrent i figli diretti dell’elemento considerato, nell’ordine in cui appaiono. Se usato con l’attributo select, inserisce solo i figli diretti che fanno match con il pattern. Nel momento in cui incontra un elemento <xsl:apply-templates>, il parser sospende il processing del template in corso e procede ricorsivamente ad esaminare i figli. XML - Guido Boella

Cambiare la lista di nodi correnti (2) <xsl:apply-templates> - segue Questo template trasforma un “para” in un “p” di HTML: <xsl:template match=”PARA"> <P><xsl:apply-templates/></P> </xsl:template> Questo template crea un indice delle intestazioni di primo livello di un documento HTML e lo pone prima del testo: <xsl:template match=”BODY"> <xsl:apply-templates select=“H1” /> <HR/> <xsl:apply-templates /> </xsl:template> XML - Guido Boella

Cambiare la lista di nodi correnti (3) <xsl:for-each> <xsl:apply-templates> 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 <xsl:for-each>. Ad esempio il template: <xsl:template match=”BODY"> <xsl:apply-templates select=“H1”/> </xsl:template> <xsl:template match=”H1"> <P><xsl:value-of select=“.”/></P> </xsl:template> viene più facilmente realizzato così: <xsl:template match=”BODY"> <xsl:for-each select=“H1”/> <P><xsl:value-of select=“.”/></P> </xsl:for-each> </xsl:template> XML - Guido Boella

Cambiare la lista di nodi correnti (4) <xsl:if> <xsl:if> 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: <xsl:template match="item"> <tr> <xsl:if test="position() mod 2 = 0"> <xsl:attribute name="bgcolor"> yellow </xsl:attribute> </xsl:if> <xsl:apply-templates/> </tr> </xsl:template> XML - Guido Boella

Cambiare la lista di nodi correnti (5) <xsl:choose>, <xsl:when>, <xsl:otherwise> <xsl:choose> seleziona una tra molte alternative (la funzione di switch in C). <xsl:template match="item"><tr> <xsl:choose> <xsl:when test="position() mod 3 = 0"> <xsl:attribute name="bgcolor">blue</xsl:attribute> </xsl:when> <xsl:when test="position() mod 3 = 1"> <xsl:attribute name="bgcolor">green</xsl:attribute> </xsl:when> <xsl:otherwise> <xsl:attribute name="bgcolor">red</xsl:attribute> </xsl:otherwise> </xsl:choose> <xsl:apply-templates/> </tr> </xsl:template> XML - Guido Boella

Cambiare la lista di nodi correnti (4) <xsl:sort> <xsl:sort> ordina i nodi nella lista dei nodi correnti. Esso può essere soltanto figlio di un <xsl:apply-templates> o di un <xsl:for-each>. Gli elementi <xsl:sort> possono annidarsi per realizzare chiavi primarie, secondarie, ecc. per il sort. <xsl: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. XML - Guido Boella

Cambiare la lista di nodi correnti (5) <xsl:sort> - segue <xsl:template match=”persona"> <ul> <xsl:apply-templates select=“.”> <xsl:sort select=”cognome"/> <xsl:sort select="nome"/> </xsl:apply-templates> </ul> </xsl:template> <xsl:template match=”persona"> <li> <xsl:value-of select=”nome"/> <xsl:text> </xsl:text> <xsl:value-of select=”cognome"/> </li> </xsl:template> XML - Guido Boella

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 $ <xsl:variable name=”fs">12pt</xsl:variable> <xsl:template match="para"> <fo:block font-size="{$fs}"> <xsl:apply-templates/> </fo:block> </xsl:template> XML - Guido Boella

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 <xs:call-template> Posso specificare anche dei parametri per ottimizzare l’uso dei template nominali <xsl:template name="numbered-block"> <xsl:param name="format">1. </xsl:param> <p> <xsl:number format="{$format}"/> <xsl:apply-templates/></p> </xsl:template> <xsl:template match="ol//ol/li"> <xsl:call-template name="numbered-block"> <xsl:with-param name="format">a. </xsl:with-param> </xsl:call-template> </xsl:template> XML - Guido Boella

Indirezioni (3) <xsl:attribute-set> Posso avere una lista nominale di attributi con l’elemento <xsl:attribute-set>. Con l’attributo <xsl:use-attribute-sets> di elementi testuali e nei tag <xsl:element> e <xsl:copy> uso la lista predefinita di attributi. <xsl:attribute-set name=“ts”> <xsl:attribute name="font-size">12pt</xsl:attribute> <xsl:attribute name="font-weight">bold</xsl:attribute> </xsl:attribute-set> <xsl:template match=“heading”> <fo:block xsl:use-attribute-sets=“ts”> <xsl:apply-templates/> </fo:block> </xsl:template> XML - Guido Boella

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 <xsl:apply-templates> e di <xsl:template> crea questo binding. Merging E’ possibile porre frammenti di folgi di stile in file esterni. Con gli elementi <xsl:import> e <xsl:include> è possibile inserire frammenti esterni con due significati leggermente diversi: <xsl:import> aumenta la priorità degli elementi inclusi, mentre <xsl:include> la mantiene. Metodi di output E’ possibile specificare che il documento risultante è XML, HTML o testo con l’elemento <xsl:output>. Se l’output è HTML o testo, il processore è meno rigoroso nel valutare la buona forma del documento risultante XML - Guido Boella

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, <xsl:preserve-space> e <xsl:strip-space>. Template di default Esistono delle regole di default che vengono applicate in mancanza di template più specifici. Esse ricopiano semplicemente l’input nell’output. <xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="processing-instruction()”/> <xsl:template match=" comment()"/> XML - Guido Boella

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: <?xml-stylesheet type=“text/xml” href=“style.xsl”?> <doc> … </doc> XML - Guido Boella

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 <?xml-stylehseet?> 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. XML - Guido Boella

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 XML - Guido Boella

Riferimenti James Clark, XSL Transformations (XSLT) Version 1.0, W3C Recommendation 16 November 1999, http://www.w3.org/TR/xslt E.R. Harold, XSL Transformations (XSLT), capitolo 14 del libro XML Bible, disponibile in rete: http://metalab.unc.edu/xml/books/bible/updates/14.html James Clark, XSLT in Perspective, http://www.jclark.com/xml/xslt-talk.htm XML - Guido Boella

Descrizionexsl:apply-templates 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. XML - Guido Boella

DescrizioneAbsoluteChildNumber 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: <xsl:template match="NAME"> <TD STYLE="font-style:italic; font-size:20"> <xsl:value-of select="COMMON"/> item number: <xsl:eval> formatIndex(childNumber(this),"1") </xsl:eval> </TD> </xsl:template>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. XML - Guido Boella

Link in XML

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) XML - Guido Boella

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: http://www.site.com/dir/file.html#nome 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. XML - Guido Boella

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) XML - Guido Boella

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. XML - Guido Boella

axis::test[pred1][pred2]…[pred N] 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] XML - Guido Boella

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. XML - Guido Boella

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 XML - Guido Boella

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 XML - Guido Boella

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 con @x 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. XML - Guido Boella

Altri esempi di XPath Para[@type=“warning”]: tutti i para figli del NC che abbiano l’attributo “warning”. Para[@type=“warning”][5]: il quinto para figlio di NC ad avere l’attributo typeuguale a “warning”. Para[5][@type=“warning”]: il quinto para figlio di NC, ma solo se ha l’attributo type uguale a “warning”. Chapter[title]: il “chapter” figlio del NC che contenga uno o più elementi “title” XML - Guido Boella

XPointer XPointer permettono di specificare la parte fragment di un URL. Essi sono di tre tipi: Un nome (che identifica l’elemento il cui ID è il nome dato) http://www.sito.com/file.xml#pippo Equivalente a: …#xpointer(id(”pippo”)) Una sequenza di attraversamento http://www.sito.com/file.xml#2/5/3 Equivalente a: …#xpointer(*[2]/*[5]/*[3]) Uno o più forme generali di frammento (General Fragment part) http://www.sito.com/file.xml#xpointer(a/b) XML - Guido Boella

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()]) XML - Guido Boella

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. XML - Guido Boella

Funzionamento di XLink XLink definisce un namespace e alcuni attributi globali in questo namespace. Includere il namespace equivale ad ammettere XLink nel proprio documento. Qualunque namespace definito come "http://www.w3.org/1999/xlink” definisce degli XLink Ad esempio: <b:doc xmlns:a="http://www.w3.org/1999/xlink” xmnls:b=“http://www.sito.com/mio-namespace”> <b:para> Clicca <b:link a:type=“simple” a:href=“dest.xml”> qui! </b:link> </b:para> </b:doc> XML - Guido Boella

XLink semplici La presenza dell’attributo xml:type con valore “simple” identifica l’elemento come un XLink semplice. Un link semplice ha esattamente due risorse collegate, di cui una è locale ed una è remota. Dunque il link è sempre inline. <A xl:type=“simple” xl:href=“http://…/”> W3C </A> L’attributo href identifica il o i locatori coinvolti. Un locatore è un URL. Il modo più semplice di definire elementi è specificare in un DTD (o nel subset inline di DTD) la presenza dell’attributo: <!DOCTYPE mydoc [ <!ATTLIST A xl:type CDATA #FIXED “simple”> ]> ... <A xl:href=“http://www.w3.org/”> W3C </A> XML - Guido Boella

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. XML - Guido Boella

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 XML - Guido Boella

Un esempio di link esteso <extlink xl:type=“extended” xl:role=“extlink” xl:title=“prova”> <ruolo xl:type=“arc” xl:from=“uno” xl:to=“due”/> <ruolo xl:type=“arc” xl:from=“uno” xl:to=“tre”/> <local xl:type=“resource” xl:role=“uno”> Clicca qui </local> <url xl:type=“locator” xl:role=“due” xl:href=“http://www.sitodue.com/”/> <url xl:type=“locator” xl:role=“tre” xl:href=“http://www.sitotre.com/”/> </extlink> XML - Guido Boella

Lo stesso esempio <!DOCTYPE [ <!ATTLIST extlink xl:type CDATA #FIXED “extended”> <!ATTLIST ruolo xl:type CDATA #FIXED “arc”> <!ATTLIST local xl:type CDATA #FIXED “resource”> <!ATTLIST url xl:type CDATA #FIXED “locator”> ]> <extlink xl:role=“extlink” xl:title=“prova”> <ruolo xl:from=“uno” xl:to=“due”/> <ruolo xl:from=“uno” xl:to=“tre”/> <local xl:role=“uno”> Clicca qui </local> <url xl:role=“due” xl:href=“http://www.sito2.com/”/> <url xl:role=“tre” xl:href=“http://www.sito3.com/”/> </extlink> XML - Guido Boella

O perfino... <!DOCTYPE [ <!ATTLIST extlink xl:type CDATA #FIXED “extended”> <!ATTLIST andata xl:type CDATA #FIXED “arc” xl:from CDATA #FIXED “uno” xl:to CDATA #FIXED “due”> <!ATTLIST ritorno xl:type CDATA #FIXED “arc” xl:from CDATA #FIXED “due” xl:to CDATA #FIXED “uno”> <!ATTLIST primo xl:type CDATA #FIXED “locator” xl:role CDATA #FIXED “uno”> <!ATTLIST secondo xl:type CDATA #FIXED “locator” xl:role CDATA #FIXED “due”> ]> <extlink> <andata/> <primo xl:href=“http://www.sito2.com/”/> <secondo xl:href=“http://www.sito3.com/”/> </extlink> XML - Guido Boella

Linkset esterni Visto che molti link finiscono con l’essere esterni al documento, come si fa ad associare un documento con l’elenco dei link definiti su di esso? Il metodo migliore è usando un metodo out-of-band: per esempio, un header della trasmissione HTTP Altrimenti, esiste un valore riservato per l’attributo role, external-linkset, per creare un link esteso che punti alla locazione del set di link relativo al documento: <extendedlink xmlns:xl="http://www.w3.org/1999/xlink" xl:role="xl:external-linkset"> <loc xl:href=“http://…” /> </extendedlink> XML - Guido Boella

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) XML - Guido Boella

Riferimenti S. DeRose, E. Maler, D. Orchard, B. Trafford, XML Linking Language (XLink), W3C Working Draft , 21 February 2000, http://www.w3.org/TR/xlink/ J. Clark, S. DeRose, XML Path Language (XPath), Version 1.0, W3C Recommendation 16 November 1999, http://www.w3.org/TR/xpath S. DeRose, R. Daniel Jr., E. Maler, XML Pointer Language (XPointer), W3C Working Draft 6 December 1999, http://www.w3.org/TR/xptr XML - Guido Boella

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. XML - Guido Boella

lastChild Returns the last child node. Read-only. 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. XML - Guido Boella

prefix* Returns the namespace prefix. Read-only. 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. XML - Guido Boella

* denotes an extension to the W3C DOM. 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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

XMLDOM DOMDocument Represents the top node of the XML DOM tree. XMLDOMNode Represents 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. XMLDOMNodeList Supports iteration and indexed access operations on the live collection of XMLDOMNode objects. XMLDOMNamedNodeMap Provides iteration and access by name to the collection of attributes. This interface includes support for namespaces. XMLDOMParseError Returns detailed information about the last error, including the error number, line number, character position, and a text description. XML - Guido Boella

XMLHttpRequest Provides client-side protocol support for communication with HTTP servers. XTLRuntime Implements methods that can be called from XSL style sheets. DOM Objects XMLDOMAttribute Represents an attribute object. XMLDOMCDATASection Quotes or escapes blocks of text so that text is not interpreted as markup language. XMLDOMCharacterData Provides text manipulation methods used by several objects. XMLDOMComment Represents the content of an XML comment. XMLDOMDocumentFragment Represents a lightweight object that is useful for tree insert operations. XML - Guido Boella

XMLDOMElement Represents the element object. XMLDOMDocumentType Contains information associated with the document type declaration. XMLDOMElement Represents the element object. XMLDOMEntity Represents a parsed or unparsed entity in the XML document. XMLDOMEntityReference Represents an entity reference node. XMLDOMImplementation Provides methods that are independent of any particular instance of the document object model. XMLDOMNotation Contains a notation declared in the DTD or schema. XMLDOMProcessingInstruction Represents a processing instruction, which XML defines to keep processor-specific information in the text of the document. XML - Guido Boella

XMLDOMText Represents the text content of an element or attribute. The DOMNodeType enumeration lists all valid node types. XML - Guido Boella

SCHEMAs L'alternativa al DTD

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 XML - Guido Boella

DTD e XML <!DOCTYPE PGROUP [ <!ELEMENT PGROUP (PERSONA+, GRPDESCR) > <!ELEMENT PERSONA (#PCDATA) > <!ELEMENT GRPDESCR (#PCDATA) > ]> <?xml version="1.0" ?> <PGROUP> <PERSONA>MACBETH</PERSONA> <PERSONA>BANQUO</PERSONA> <GRPDESCR>generals of the king's army.</GRPDESCR> </PGROUP> XML - Guido Boella

Schema e XML <?xml version="1.0"?> <Schema name="schema_sample_1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="PERSONA" content="textOnly" model="closed"/> <ElementType name="GRPDESCR" content="textOnly" model="closed"/> <ElementType name="PGROUP" content="eltOnly" model="closed"> <element type="PERSONA" minOccurs="1" maxOccurs="*"/> <element type="GRPDESCR" minOccurs="1" maxOccurs="1"/> </ElementType> </Schema> XML - Guido Boella

Content model di un elemento Definizione di elementi e attributi: <elementType name="nometag"> <attributeType name="nomeatt"> Occorrenza di elementi e attributi come parte di altri: <elementType name="autore"> <element type="nome"/> <attribute type="elenco"/> </elementType> attributeType può essere locale o globale per essere condiviso TYPE, non NAME XML - Guido Boella

ElementType ed element Attributi ElementType: content: textonly, eltonly, mixed (default), empty (mixed: <nome>Bill <tag/> Gates</nome>) 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 XML - Guido Boella

Attributi ElementType: content: textonly, eltonly, mixed (default), empty (mixed: <nome>Bill <tag/> Gates</nome>) 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) XML - Guido Boella

ELEMENTO DI ALTRO NAMESPACE SCHEMA aperto <ElementType name="shipTo" xmlns:e-com="http://e-commerce.org/stuff.xml"> <element type="e-com:Address"/> </ElementType> <PurchaseOrder xmlns:e-com="http://e-commerce.org/stuff.xml"> <shipTo> <e-com:Address> <e-com:name>Alice Smith</e-com:name> <e-com:street>123 Maple Street</e-com:street> </e-com:Address> </shipTo> <orderDate>1999-05-20</orderDate> <shipDate>1999-05-25</shipDate> </PurchaseOrder> ELEMENTO DI ALTRO NAMESPACE DOCUMENTO aperto XML - Guido Boella

SOLO UNO DEI DUE ELEMENTI 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"): <elementType name="autore"> <element type="nome"/> <group order="one"> <element type="address"/> <element type="email"/> </group> </elementType> SOLO UNO DEI DUE ELEMENTI XML - Guido Boella

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: <AttributeType="number" default = "no" dt:values= "yes no" required=yes> NAMESPACE dei tipi XML - Guido Boella

Elementi e attributi si possono tipare namespace dei tipi: xmlns:dt="urn:schemas-microsoft-com:datatypes"> <Schema name="myschema" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="pages" dt:type="int"/> <AttributeType="number" required=yes> <datatype dt:type= "int"/> </ElementType> </Schema> NAMESPACE dt XML - Guido Boella

Estensione per vincoli semantici <ElementType name="pages" xmlns:myExt="urn:myschema-extensions"> <datatype dt:type="int" /> <myExt:min>50</myExt:min> <myExt:max>100</myExt:max> </ElementType> RESTRIZIONI NON SINTATTICHE, CIOE' NON VERIFICATE DA XML MA DA APPLICAZIONE CHE USA XML XML - Guido Boella

<ElementType name="au_id" content="textOnly"/> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="au_id" content="textOnly"/> <ElementType name="au_lname" content="textOnly"/> <ElementType name="au_fname" content="textOnly"/> <ElementType name="phone" content="textOnly"/> <ElementType name="Author" content="eltOnly"> <element type="au_id"/> <element type="au_lname"/> <element type="au_fname"/> <element type="phone"/> </ElementType> <ElementType name="Authors" content="eltOnly"> <element type="Author" maxOccurs="*"/> </Schema> XML - Guido Boella

<au_id>172-32-1176</au_id> <Authors> <Author> <au_id>172-32-1176</au_id> <au_lname>White</au_lname> <au_fname>Johnson</au_fname> <phone>408 496-7223</phone> <address>10932 Bigge Rd.</address> … </Author> <au_id>213-46-8915</au_id> <au_lname>Green</au_lname> <au_fname>Marjorie</au_fname> <phone>415 986-7020</phone> <address>309 63rd St. #411</address> </Author></Authors> XML - Guido Boella

<s:Schema id="RowsetSchema"> <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> <s:Schema id="RowsetSchema"> <s:ElementType name="row" content="eltOnly"> <s:AttributeType name="au_id" rs:number="1" rs:writeunknown="true"> <s:datatype dt:type="string" dt:maxLength="11" rs:maybenull="false" /> </s:AttributeType> <s:AttributeType name="au_lname" rs:number="2" rs:writeunknown="true"> <s:datatype dt:type="string" dt:maxLength="40" rs:maybenull="false" /> <s:AttributeType name="au_fname" rs:number="3" rs:writeunknown="true"> <s:datatype dt:type="string" dt:maxLength="20" rs:maybenull="false" /> ... <s:extends type="rs:rowbase" /> </s:ElementType> </s:Schema> XML - Guido Boella

XML e XSL <rs:data> <z:row au_id="172-32-1176" au_lname="White" au_fname="Johnson" phone="408 496-7223" address="10932 Bigge Rd." city="Menlo Park" state="CA" zip="94025" contract="True" /> <z:row au_id="213-46-8915" au_lname="Green" au_fname="Marjorie" phone="415 986-7020" address="309 63rd St. #411" city="Oakland" state="CA" zip="94618" contract="True" /> <z:row au_id="238-95-7766" au_lname="Carson" au_fname="Cheryl" phone="415 548-7723" address="589 Darwin Ln." city="Berkeley" state="CA" zip="94705" contract="True" /> <z:row au_id="267-41-2394" au_lname="O'Leary" au_fname="Michael" phone="408 286-2428" address="22 Cleveland Av. #14" city="San Jose" state="CA" zip="95128" contract="True" /> <z:row au_id="274-80-9391" au_lname="Straight" au_fname="Dean" phone="415 834-2919" address="5420 College Av." city="Oakland" state="CA" zip="94609" contract="True" /> </rs:data> </xml> XML - Guido Boella

Salvare recordset in XML <% 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 XML - Guido Boella

.save strFile, 1 'adPersistent .close() end if End with 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 "<textarea>"& objStream.readAll()&"</textarea>" objFile.close XML - Guido Boella

XML - Guido Boella

XML - Guido Boella

XML Schema Fabio Vitali 5 maggio 2000

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 XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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

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. XML - Guido Boella

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. XML - Guido Boella

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? XML - Guido Boella

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

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. XML - Guido Boella

Un esempio <xsi:simpleType name='bodytemp’ base='decimal'> <xsi:precision value=’3'/> <xsi:scale value='1'/> <xsi:minInclusive value=’36.5'/> <xsi:maxInclusive value=’44.0'/> </xsi:simpleType> <xsi:complexType name='name'> <xsi:element name='forename' minOccurs='0' maxOccurs='*'/> <xsi:element name='surname'/> </xsi:complexType> XML - Guido Boella

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. XML - Guido Boella

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! XML - Guido Boella

Esempi di derivazione (1) <xsi:simpleType name='bodytemp’ base='decimal'> <xsi:precision value=’3'/> <xsi:scale value='1'/> <xsi:minInclusive value=’36.5'/> <xsi:maxInclusive value=’44.0'/> </xsi:simpleType> <xsi:simpleType name=’healthbodytemp’ base=’bodytemp'> <xsi:maxInclusive value=’37.0'/> </xsi:simpleType> XML - Guido Boella

Esempi di derivazione (2) <xsi:complexType name='name'> <xsi:element name='forename' minOccurs='0' maxOccurs='*'/> <xsi:element name='surname'/> </xsi:complexType> <xsi:complexType name=’fullname’ base=“name” derivedBy=“extension”> <xsi:element name='title' minOccurs='0'/> </xsi:complexType> XML - Guido Boella

Tipi complessi Oltre ai facets, nella definizione di un tipo complesso debbo anche poter precisare un content model ed una serie di attributi leciti. Per questo uso gli elementi <element>, <group> e <attribute>. Questi hanno vari attributi importanti: Name: il nome del tag o dell’attributo Ref: il nome di un elemento o attributo definito altrove (globale) Type: il nome del tipo, se non esplicitato come content maxOccurs, minOccurs: il numero minimo e massimo di occurrenze Fixed, default, nullable, ecc. XML - Guido Boella

Content model complessi (1) Come nei DTD si usano virgole e caret per specificare obblighi e scelte tra gli elementi di un content model complesso, così in XML schema si usano <choice> e <sequence>. Questi sostituiscono anche le parentesi. (A, B) diventa <xsi:sequence> <xsi:element name=”A” /> <xsi:element name=”B” /> </xsi:sequence> (A | B) diventa <xsi:choice> <xsi:element name=”A” /> <xsi:element name=”B” /> </xsi:choice> XML - Guido Boella

Content model complessi (2) (A, ( B | C)) diventa <xsi:sequence> <xsi:element name=”A” /> <xsi:choice> <xsi:element name=”B” /> <xsi:element name=”C” /> </xsi:choice> </xsi:sequence> Il content model misto aggiunge semplicemente l’attributo content con valore “mixed”. Altri valori: elementOnly (default), empty, textOnly. (#PCDATA | B | C )* diventa <xsi:complexType content='mixed'> <xsi:element name=”B” /> <xsi:element name=”C” /> </xsi:element> XML - Guido Boella

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

Gruppi di attributi E’ anche possibile raccogliere questi attributi esternamente in un gruppo: <xsi:element name=”A”> <xsi:element name=”B” /> <xsi:element name=”C” /> <xsi:attributeGroup ref=”attrsA” /> </xsi:element> <xsi:attributeGroup name=”attrsA"> <xsi:attribute name=”p” type=”xsi:string”/> <xsi:attribute name=”q"> <xsi:simpleType base="xsi:string"> <xsi:enumeration value=”uno"/> <xsi:enumeration value=”due"/> <xsi:enumeration value=”tre"/> </xsi:simpleType> </xsi:attribute> </xsi:attributeGroup> XML - Guido Boella

Annotazioni Nei DTD l’unico posto dove mettere note e istruzioni di compilazione sono i commenti. Però i commenti sono a perdere: possono essere mangiati in qualunque fase dell’elaborazione. In XML Schema, invece, esiste un posto specifico dove mettere note ed istruzioni, l’elemento <annotation>. L’elemento <annotation> può contenere elementi <documentation> (pensati per essere letti da esseri umani) oppure elementi <appInfo>, pensati per essere digeriti da applicazioni specifiche <xsi:element name=’pippo'> <annotation> <documentation>elemento pippo</documentation> </annotation> <xsi:element name=“pluto” /> </xsi:element> XML - Guido Boella

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

Riferirsi ad uno schema <fv:pippo xmlns:fv =“http://www.fabio.org/Pippo” xmlns:xsi=“http://www.w3.org/1999/XMLSchema/instance” xsi:schemaLocation=“http://www.fabio.org/pippo.xsi”> … </fv:pippo> Con l’attributo schemaLocation dentro all’istanza del documento XML diamo un suggerimento sulla posizione dello schema al validatore (ma la stessa informazione può essere data off-line, ad esempio perché predefinita, o in un header della connessione HTTP). XML - Guido Boella

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

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

XSL-FO

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

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. XML - Guido Boella

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. XML - Guido Boella

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) XML - Guido Boella

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 XML - Guido Boella

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

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

Raffinamento dell’albero (1) XML - Guido Boella

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 XML - Guido Boella

Costruzione albero delle aree e rendering XML - Guido Boella

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. XML - Guido Boella

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). XML - Guido Boella

Aree Rettangolari, caratteristiche comuni XML - Guido Boella

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. XML - Guido Boella

Aree Rettangolari e writing-mode XML - Guido Boella

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 XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

Aree Rettangolari adiacenti XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

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. XML - Guido Boella

Esempio XML - Guido Boella

Tipi particolari di block-area Reference-area Page-area Line-area XML - Guido Boella

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’. XML - Guido Boella

Tipi particolari di inline-area Reference-area Glyph-area XML - Guido Boella

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’. XML - Guido Boella

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. XML - Guido Boella

Esempio di albero delle aree XML - Guido Boella

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. XML - Guido Boella

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 XML - Guido Boella

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

Esempio di Block-level FO <xsl:template match="chapter"> <fo:block break-before="page"> <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="chapter/title"> <fo:block text-align="center" space-after="8pt" space-before="16pt" space-after.precedence="3"> XML - Guido Boella

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. XML - Guido Boella

Esempio di Inline-level FO <xsl:template match="p"> <fo:block> <fo:initial-property-set font-variant="small-caps"/> <xsl:apply-templates/> </fo:block> </xsl:template> XML - Guido Boella

Altri FO fo:wrapper Permette di attribuire un set di proprietà a tutti i suoi elementi figli. Utilizzo classico: <fo:wrapper font-style=“italic”> Testo in stile corsivo </fo:wrapper> XML - Guido Boella

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 XML - Guido Boella

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

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. XML - Guido Boella

Implementazioni esistenti FOP James Tauber http://xml.apache.org/fop/ INDelv http://www.indelv.com/ REXP http://www.esng.dibe.unige.it/REXP Reperibili anche al sito http://www.w3.org/style/XSL XML - Guido Boella

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. XML - Guido Boella

<?xml version='1.0' encoding='utf-8'?> <!-- 'Chapter_03_01.xml' --> <Toysco xml:base='http://www.wrox.com/ProXML2e/' xmlns:Addr='urn:ProXML2e:www.wrox.com/Addresses' xmlns:Inv='urn:ProXML2e:www.wrox.com/Invoices' xmlns:Per='urn:ProXML2e:www.wrox.com/Persons' xmlns='urn:ProXML2e:www.wrox.com/Invoices' > <!-- Customers --> <Customer customerID='CU02'> <Per:Name> <Per:FirstName>Buffy</Per:FirstName> <Per:LastName>Summers</Per:LastName> </Per:Name> <Addr:BillingAddress> <Addr:Street>1630 Matilda Drive</Addr:Street> <Addr:City>Sunnyvale</Addr:City> <Addr:State>CA</Addr:State> <Addr:Zip>94086</Addr:Zip> <Addr:Country>USA</Addr:Country> </Addr:BillingAddress> <ContactDetails> <Email>buffy@buffster.com</Email> <Phone phonetype='HOME'>408/555-5555</Phone> <Phone phonetype='WORK'>650/555-5555</Phone> </ContactDetails> </Customer> <Customer customerID='CU03'> <Per:FirstName>Willow</Per:FirstName> <Per:LastName>Rosenberg</Per:LastName> <Addr:Street>Fiend House</Addr:Street> <Addr:Street>23 University Ave</Addr:Street> <Email>willow@wicken-bint.com</Email> <Customer customerID='CU04'> <Per:FirstName>Riley</Per:FirstName> <Per:LastName>Finn</Per:LastName> <Addr:MailingAddress> <Addr:Street>Spawn House</Addr:Street> <Addr:Street>25 University Ave</Addr:Street> </Addr:MailingAddress> <Email>rileyfinn@secretagency.gov</Email> <Phone phonetype='WORK'>555 5656</Phone> <Phone phonetype='CELL'>1555 4543454</Phone> <Customer customerID='CU05'> <Per:FirstName>Angel</Per:FirstName> <Per:LastName>Forgotten</Per:LastName> <Addr:Street>12345 Mullholland Drive</Addr:Street> <Addr:City>Los Angeles</Addr:City> <Addr:Zip>90666</Addr:Zip> <Email>angelus@fearful.com</Email> <Phone phonetype='CELL'>555 5656</Phone> <Phone phonetype='WORK'>555 1234</Phone> <Customer customerID='CU06'> <Per:FirstName>Andy</Per:FirstName> <Per:LastName>DuFresne</Per:LastName> <Addr:Street>1 Prison Road</Addr:Street> <Addr:City>Bangor</Addr:City> <Addr:State>ME</Addr:State> <Addr:Zip>03533</Addr:Zip> <Addr:Street>34 Old Address</Addr:Street> <Email>nonexistant@didnayexist.gov</Email> <Phone phonetype='WORK'>55555</Phone> <!-- Products --> <Product productID='GH4544' hire='false' > <Inv:Name>Public Grokker</Inv:Name> <Inv:Description xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' > <html> <head><title>Toysco Product Description</title></head> <body> <h1>Public Grokker</h1> <p>Allows grokking of a scale never before witnessed</p> </body> </html> </Inv:Description> <Price currency='USD'>9.99</Price> <Units>2</Units> <Stock>48</Stock> </Product> <Product productID='FG5645' hire='false' > <Inv:Name>Quake III</Inv:Name> <h1>Quake III</h1> <p>Great Game, Great Price</p> <Price currency='USD'>29.99</Price> <Units>1</Units> <Stock>99</Stock> <Product productID='ST4545' hire='false' > <Inv:Name>Hardwood Stake</Inv:Name> <h1>Hardwood Stake</h1> <p>Allows slaying of a hitherto unheard of scale</p> <Price currency='USD'>5.00</Price> <Units>5</Units> <Stock>540</Stock> <Product productID='SP4544' hire='true' > <Inv:Name>Spell Book</Inv:Name> <h1>Spell Book</h1> <p>All the best spells, including how to counter vengeance demons</p> <Price currency='USD'>19.99</Price> <Stock>58</Stock> <Product productID='BL4123' hire='false' > <Inv:Name>Blood Ball</Inv:Name> <h1>Blood Ball</h1> <p>Pretend blood squirts out when bitten on</p> <Price currency='USD'>40.00</Price> <Units>3</Units> <Stock>75</Stock> <Product productID='CV4533' hire='false' picture='prod.CV4533.png' > <Inv:Name>Scrabble</Inv:Name> <h1>Scrabble</h1> <p>The world&apos;s favorite word board game</p> <Price currency='USD'>24.99</Price> <Stock>31</Stock> <Product productID='SC4323' hire='false' picture='prod.SC4323.png' > <Inv:Name>Chess set</Inv:Name> <h1>Toysco Chess set</h1> <p>Beautiful ornate pieces, and an elegant inlaid board</p> <Price>9.99</Price> <Stock>45</Stock> <!-- Invoices --> <Invoice invoiceID='TC3422' customerID='CU06' date='2001-03-01' terms='Monthly' paid='false' > <InvoiceOrder productID='SC4323' units='1' /> </Invoice> <Invoice invoiceID='TC1232' customerID='CU04' date='2001-03-15' terms='Immediate' paid='true' > <InvoiceOrder invoiceID='TC1232' productID='CV4533' units='1' notes='Please pack carefully' /> <InvoiceOrder invoiceID='TC1232' productID='BL4123' units='3' /> <Invoice invoiceID='TC4543' customerID='CU03' date='2001-04-01' <InvoiceOrder productID='SP4544' units='1' /> <InvoiceOrder productID='ST4545' units='10' /> <Invoice invoiceID='TC2787' customerID='CU02' date='2001-01-16' <InvoiceOrder productID='CV4533' units='1' /> <InvoiceOrder productID='BL4123' units='10' /> </Toysco> <!-- End of 'Chapter_03_01.xml' --> XML - Guido Boella

<!ENTITY copy "©" > <?xml version='1.0' ?> <!DOCTYPE Invoice [ <!ENTITY copy "©" > <!ENTITY Vendor "Toysco Inc. Ltd." > <!ENTITY Disclaimer "No warranty! © 2001 &Vendor;" > <!ELEMENT Invoice (Notice?) > <!ATTLIST Invoice name CDATA #REQUIRED > <!ELEMENT Notice (#PCDATA) > ]> <Invoice name="&Vendor;"> <Notice>&Disclaimer;</Notice> </Invoice> XML - Guido Boella

<!ENTITY copy "©" > <?xml version='1.0' ?> <!DOCTYPE Invoice [ <!ENTITY copy "©" > <!ENTITY Vendor "Toysco Inc. Ltd." > <!ENTITY Disclaimer SYSTEM "ProXML2e.Disclaimer.txt" > <!ELEMENT Invoice (Notice?) > <!ATTLIST Invoice name CDATA #REQUIRED > <!ELEMENT Notice (#PCDATA) > ]> <Invoice name="&Vendor;"> <Notice>&Disclaimer;</Notice> </Invoice> XML - Guido Boella

<?xml version = "1.0" encoding = "UTF-8"?> <!-- Conforms to w3c http://www.w3.org/2001/XMLSchema --> <xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema" targetNamepsace = "http://www.toysco.com/schemas/dailyReport" xmlns:tc = "http://www.toysco.com/schemas/dailyReport" > <xsd:annotation> <xsd:documentation>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. </xsd:documentation> </xsd:annotation> <xsd:element name = "toysco"> <xsd:complexType> <xsd:sequence> <xsd:element ref = "customer" minOccurs = "1" maxOccurs = "unbounded"/> <xsd:element ref = "product" <xsd:element ref = "invoice" </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:documentation>The customer element contains four child elements: name (required), deliveryAddress, billingAddress(required), and contactDetails(required).</xsd:documentation> <xsd:element name = "customer"> <xsd:element name = "name"> <xsd:attribute name = "firstName" use = "required" type = "limitedString"/> <xsd:attribute name = "lastName" use = "required" <xsd:element name = "deliveryAddress" type="addressType" minOccurs = "1" maxOccurs = "unbounded" > <xsd:attribute name = "addressID" type = "xsd:ID" /> <xsd:element name = "billingAddress" type="addressType" /> <xsd:element name = "contactDetails"> <xsd:element name = "email" type = "limitedString" /> <xsd:element name = "homePhone" type = "xsd:integer" /> <xsd:element name = "workPhone" type = "xsd:integer" /> <xsd:element name = "cellPhone" type = "xsd:integer" /> <xsd:element name = "fax" type = "xsd:integer" /> <xsd:attribute name = "customerID" use = "required" type = "xsd:ID"/> <xsd:unique name = "uniqueCustomerKey"> <xsd:selector xpath = "tc:customer" /> <xsd:field xpath = "@customerID" /> </xsd:unique> <xsd:key name = "customerKey"> </xsd:key> <xsd:complexType name = "addressType"> <xsd:element name = "Street" type = "limitedString"/> <xsd:element name = "City" type = "limitedString"/> <xsd:element name = "State" type = "limitedString"/> <xsd:element name = "Zip" type = "limitedString"/> <xsd:documentation>The product element is a single element with seven attributes that hold the details of the each product sold that month.</xsd:documentation> <xsd:element name = "product"> <xsd:attribute name = "productID" use = "required" type = "xsd:ID"/> <xsd:attribute name = "name" use = "required" type = "xsd:string"/> <xsd:attribute name = "description" use = "required" type = "xsd:string"/> <xsd:attribute name = "unit" type = "xsd:positiveInteger"/> <xsd:attribute name = "price" use = "required" type = "xsd:decimal"/> <xsd:documentation>The invoice element holds details of each individual invoice that is made for the day. It holds a repeatable lineItem element and eight attributes. <xsd:element name = "invoice"> <xsd:element name = "lineItem" minOccurs = "1" maxOccurs = "unbounded"> <xsd:attribute name = "productIDref" use = "required" type = "xsd:IDREF"/> <xsd:attribute name = "units" use = "required" type = "xsd:byte"/> <xsd:attribute name = "price" use = "required" type = "xsd:decimal"/> <xsd:attribute name = "invoiceID" use = "required" type = "xsd:ID"/> <xsd:attribute name = "customerRef" use = "required" /> <xsd:attribute name = "date" use = "required" type = "xsd:date"/> <xsd:attribute name = "notes" type = "xsd:string"/> <xsd:attribute name = "paymentTerms" type = "paymentOptions" /> <xsd:attribute name = "paid" use = "required" type = "xsd:boolean"/> <xsd:attribute name = "deliverTo" use = "required" <xsd:keyref name = "customerRef" ref = "customerKey"> <xsd:selector xpath = "tc:invoice" /> <xsd:field xpath = "@customerRef" /> </xsd:keyref> <xsd:simpleType name = "limitedString"> <xsd:restriction base = "string"> <xsd:maxLength value = "100" /> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name = "paymentOptions"> <xsd:enumeration value = "cashOnDelivery" /> <xsd:enumeration value = "30dayCredit" /> <xsd:enumeration value = "90dayCredit" /> </xsd:schema> XML - Guido Boella

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. XML - Guido Boella

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”. XML - Guido Boella

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 XML - Guido Boella

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: <?xml version="1.0"?> <!-- il default namespace e’ "books" --> <book xmlns='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'> <title>Cheaper by the Dozen</title> <isbn:number>1568491379</isbn:number> <notes> <!-- Adesso diventa HTML --> <p xmlns='urn:w3-org-ns:HTML'> This is a <i>funny</i> book! </p> </notes> </book> XML - Guido Boella

XMLDOM ASP parla XML

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à XML - Guido Boella

ESEMPIO DTD <!ELEMENT Team (Manager , Members , Person+ )> <!ATTLIST Team project ID #REQUIRED > <!ELEMENT Manager EMPTY> <!ATTLIST Manager person IDREF #REQUIRED > <!ELEMENT Members EMPTY> <!ATTLIST Members people IDREFS #REQUIRED > <!ELEMENT Person (Name )> <!ATTLIST Person sn ID #REQUIRED > <!ELEMENT Name (First , Last )> <!ELEMENT First (#PCDATA )> <!ELEMENT Last (#PCDATA )> XML - Guido Boella

ESEMPIO XML <?xml version="1.0"?><!DOCTYPE Team SYSTEM "team.dtd"> <Team project="a134"> <Manager person="a1"/> <Members people="b1 c2 c9"/> <Person sn="a1"> <Name> <First>John</First> <Last>Doe</Last> </Name> </Person> <Person sn="b1"> <First>Dudley</First> <Last>Doright</Last> </Person></Team> XML - Guido Boella

ESEMPIO XML con XSL <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="stylecontacts.xsl" ?> <CONTACT_INFO> <BUSINESS><CONTACT> <NAME>John Doe</NAME> <PHONE>555-5319</PHONE></CONTACT> </BUSINESS> <PERSONAL><CONTACT relation="family"> <NAME>Mary Jones</NAME> <PHONE>555-9013</PHONE></CONTACT> <CONTACT> <NAME>Mike Wilson</NAME> <PHONE>555-4138</PHONE></CONTACT> </PERSONAL></CONTACT_INFO> XML - Guido Boella

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <HTML> <BODY> <xsl:apply-templates /> </BODY></HTML> </xsl:template> XML - Guido Boella

PROVA DI STYLESHEETS <xsl:template match="CONTACT_INFO"> <xsl:for-each select="./*"> <xsl:choose> <xsl:when test="[!nodeName()='PERSONAL']"> <DIV STYLE="background-color:teal;"> Personal Contacts </DIV> </xsl:when> <xsl:otherwise> <DIV STYLE="background-color:black;"> Business Contacts</DIV> </xsl:otherwise></xsl:choose> <xsl:apply-templates /><P/></xsl:for-each> </xsl:template> PROVA DI STYLESHEETS XML - Guido Boella

<xsl:template match="CONTACT"> <xsl:for-each select="."> <DIV> <xsl:if test=".[@relation = 'family']"> <xsl:attribute name="STYLE">font-weight:bold</xsl:attribute> </xsl:if> <xsl:value-of select="NAME"/> <DIV STYLE="font-size:10pt;left:.25cm;position:relative;"> <xsl:value-of select="PHONE"/> </DIV> </xsl:for-each> </xsl:template> </xsl:stylesheet> XML - Guido Boella

NUOVO STYLESHEET <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/">Traduzione root element<br/> Elenco contatti: <xsl:apply-templates select="*" /></xsl:template> <xsl:template match="PERSONAL"> <xsl:apply-templates select="*" /> </xsl:template> <xsl:template match="CONTACT"><A> <xsl:attribute name="href">chiama.asp?<xsl:value-of select="./PHONE"> </xsl:value-of>"</xsl:attribute></A><br/> <xsl:value-of select="./NAME"></xsl:value-of> <xsl:value-of select="./@relation"></xsl:value-of> </xsl:template></xsl:stylesheet> XML - Guido Boella

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 XML - Guido Boella

Traduzione tramite XSL in ASP sul server 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) XML - Guido Boella

APPLICAZIONE STILE ON SERVER <%@ Language=VBScript %> (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)) %> XML - Guido Boella

<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> http://localhost/asp/Chapter%2008/sortedContacts.html <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <TITLE></TITLE> </HEAD> <BODY> <XML id="XMLdoc"> <CONTACT_INFO> <BUSINESS> <CONTACT> <NAME>John Doe</NAME> <PHONE>555-5319</PHONE> </CONTACT> </BUSINESS> <PERSONAL> <CONTACT relation="family"> <NAME>Mary Jones</NAME> <PHONE>555-9013</PHONE> <NAME>Mike Wilson</NAME> <PHONE>555-4138</PHONE> </PERSONAL> </CONTACT_INFO> </XML> <XML id="XSLstylesheet"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="/CONTACT_INFO"> </BODY> </HTML> <xsl:template match="CONTACT_INFO"> <xsl:for-each select="./*"> <xsl:choose> <xsl:when test=".[.!nodeName()='PERSONAL']"> <DIV STYLE="background-color:teal; color:white; font-family:Verdana,arial,helvetica,sans-serif; font-size:12pt; padding:2px"> Personal Contacts</DIV> </xsl:when> <xsl:otherwise> <DIV STYLE="background-color:black; color:white; font-family:Verdana,arial,helvetica,sans-serif; font-size:12pt; padding:2px"> Business Contacts</DIV> </xsl:otherwise> </xsl:choose> <xsl:for-each select="./CONTACT" order-by = "+ NAME"> <DIV> <xsl:if test=".[@relation = 'family']"> <xsl:attribute name="STYLE">font-weight:bold</xsl:attribute> </xsl:if> <DIV cursor="hand" onclick="DoSort('NAME')"> <xsl:value-of select="NAME"/> </DIV> <DIV onclick="DoSort('PHONE')" STYLE="font-size:10pt;left:.25cm;position:relative;"> <xsl:value-of select="PHONE"/> </xsl:for-each> <P/> </xsl:stylesheet> <DIV id="displayarea"/> <SCRIPT language="Javascript"> <!-- var display = document.all("displayarea"); display.innerHTML= XMLdoc.documentElement.transformNode(XSLstylesheet.documentElement); function DoSort(sortParm) { var sortAttr = XSLstylesheet.selectSingleNode("//@order-by"); sortAttr.value = sortParm; } //--> </SCRIPT> XML - Guido Boella

Compatibilità con vecchi browser <%@ Language="JavaScript" %><% 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")); … XML - Guido Boella

authors author author name id name id <authors> <author> <name>Graham Greene</name> <id>32454345</id> </author> <author> <name>James Joyce</name> <id>43535345</id> </author> </authors> authors author author name id name id XML - Guido Boella

documentelement authors lastchild firstchild childNodes author author parentNode firstchild name id name id nextSibling previousSibling XML - Guido Boella

authors author name id documentelement.firtchild author (1) documentelement.childnodes.item(1) author (1) documentelement.firtchild.parentNode document namednodemap("name").item(1) name (1) documenteelement.firtchild.firstchild.text G. Greene documentelement.firtchild.nextsibling author (2) documentelement.lastchild.previousSibling author (1) XML - Guido Boella

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 <!-- METADATA TYPE="typelib"FILE="c:\Progammi\file comuni\system\msxml.dll" --> 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 XML - Guido Boella

Esempi <XML attributo1="valore1" attributo2="valore2"> <Team project="a134"> <Manager person="a1"/> <Members people="b1 c2 c9"> <Person sn="a1"> <Name> <First>John</First><Last>Doe</Last></Name> </Person> <Person sn="b1"> <First>Dudley</First><Last>Doright</Last></Name> </Person></Members></Team> </XML> XML - Guido Boella

Conteggio 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));} %> XML - Guido Boella

<au_id>172-32-1176</au_id> <Authors> <Author> <au_id>172-32-1176</au_id> <au_lname>White</au_lname> <au_fname>Johnson</au_fname> <phone>408 496-7223</phone> <address>10932 Bigge Rd.</address> … </Author> <au_id>213-46-8915</au_id> <au_lname>Green</au_lname> <au_fname>Marjorie</au_fname> <phone>415 986-7020</phone> <address>309 63rd St. #411</address> </Author></Authors> XML - Guido Boella

<s:Schema id="RowsetSchema"> <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> <s:Schema id="RowsetSchema"> <s:ElementType name="row" content="eltOnly"> <s:AttributeType name="au_id" rs:number="1" rs:writeunknown="true"> <s:datatype dt:type="string" dt:maxLength="11" rs:maybenull="false" /> </s:AttributeType> <s:AttributeType name="au_lname" rs:number="2" rs:writeunknown="true"> <s:datatype dt:type="string" dt:maxLength="40" rs:maybenull="false" /> <s:AttributeType name="au_fname" rs:number="3" rs:writeunknown="true"> <s:datatype dt:type="string" dt:maxLength="20" rs:maybenull="false" /> ... <s:extends type="rs:rowbase" /> </s:ElementType> </s:Schema> XML - Guido Boella

XML e XSL <rs:data> <z:row au_id="172-32-1176" au_lname="White" au_fname="Johnson" phone="408 496-7223" address="10932 Bigge Rd." city="Menlo Park" state="CA" zip="94025" contract="True" /> <z:row au_id="213-46-8915" au_lname="Green" au_fname="Marjorie" phone="415 986-7020" address="309 63rd St. #411" city="Oakland" state="CA" zip="94618" contract="True" /> <z:row au_id="238-95-7766" au_lname="Carson" au_fname="Cheryl" phone="415 548-7723" address="589 Darwin Ln." city="Berkeley" state="CA" zip="94705" contract="True" /> <z:row au_id="267-41-2394" au_lname="O'Leary" au_fname="Michael" phone="408 286-2428" address="22 Cleveland Av. #14" city="San Jose" state="CA" zip="95128" contract="True" /> <z:row au_id="274-80-9391" au_lname="Straight" au_fname="Dean" phone="415 834-2919" address="5420 College Av." city="Oakland" state="CA" zip="94609" contract="True" /> </rs:data> </xml> XML - Guido Boella

Salvare recordset in XML <% 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 XML - Guido Boella

.save strFile, 1 'adPersistent .close() end if End with 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 "<textarea>"& objStream.readAll()&"</textarea>" objFile.close XML - Guido Boella

XML da DB <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="contatti1.xsl" ?> <rs:data xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> <z:row au_id="172-32-1176" au_lname="White" au_fname="Johnson" phone="408 496-7223" address="10932 Bigge Rd." city="Menlo Park" state="CA" zip="94025" contract="True" /> <z:row au_id="213-46-8915" au_lname="Green" au_fname="Marjorie" phone="415 986-7020" address="309 63rd St. #411" city="Oakland" state="CA" zip="94618" contract="True" /> <z:row au_id="238-95-7766" au_lname="Carson" au_fname="Cheryl" phone="415 548-7723" address="589 Darwin Ln." city="Berkeley" state="CA" zip="94705" contract="True" /> </rs:data> XML - Guido Boella

XSL per XML e DB <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/">Traduzione root element<br/> Elenco contatti: <xsl:apply-templates select="*" /></xsl:template> <xsl:template match="rs:data"><xsl:apply-templates select="*" /></xsl:template> <xsl:template match="z:row"><A> <xsl:attribute name="href">chiama.asp?<xsl:value-of select="./@au_id"> </xsl:value-of>"</xsl:attribute></A><br/> <xsl:value-of select="./@au_lname"></xsl:value-of> <xsl:value-of select="./@au_fname"></xsl:value-of> </xsl:template></xsl:stylesheet> XML - Guido Boella

Extensible Stylesheet Language (XSL) Specification, W3C Working Draft, Bibliografia Extensible Markup Language (XML) 1.0, W3C Recommendation 10 February 1998, http://www.w3.org/TR/1998/REC-xml-19980210. Extensible Stylesheet Language (XSL) Specification, W3C Working Draft, http://www.w3.org/TR/1999/WD-xsl-19990421. Extensible Linking Language (XLL), W3C Working Draft, http://www.w3.org/TR/1998/WD-xlink-19980303. XML-Data Specification, W3C Recommendation, http://www.w3.org/TR/1998/Rec/Note-xml-data. XML Namespace, W3C Working Draft, http://www.w3.org/TR/1998/WD-xml-names-19990114. Synchronized Multimedia Integration Language (SMIL) 1.0 Specification, W3C Recommendation, http://www.w3.org/TR/1998/REC-smil-19980615. XML in Action, William J.Pardi - Microsoft. XML Le Basi, Simon St.Laurent - Tecniche Nuove. Un sito interamente dedicato ad XML, http://www.xml.com. L’università di XML, http://www.xmlu.com. Il sito della Microsoft su XML, http://msdn.microsoft.com/xml/index.asp. Prime informazioni, approfondimenti, domande, http://xml.org, http://www.xmlinfo.com. Software XML, http://www.xmlsoftware.com. Il consorzio W3C, http://www.w3c.org. Un enorme elenco di link a risorse relative a XML, http://www.cs.caltech.edu/~adam/local/xml.html. Il sito di un noto esperto, Robin Cover, http://www.sil.org/sgml/xml.html. Le FAQ (Frequented Ask Question) dei membri dell’XML W3C, http://www.ucc.ie.xml/. Interessante corso sull'XML sviluppato da tre studenti milanesi, http://uva.usr.dsi.unimi.it/szema/homepino/corso.htm. 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, http://www.w3.org/TR/REC-xml-names T. Bray, XML Namespaces by Example, http://www.xml.com/xml/pub/1999/01/namespaces.html J. Clark, XML Namespaces, http://www.jclark.com/xml/xmlns.htm XML - Guido Boella

Neil Bradley, The XML companion, Addison Wesley 1998 Altri testi: Neil Bradley, The XML companion, Addison Wesley 1998 J. Bosak, XML, Java, and the future of the Web, http://metalab.unc.edu/pub/sun-info/standards/xml/why/xmlapps.htm T. Bray, J. Paoli, C.M. Sperberg-McQueen, Extensible Markup Language (XML) 1.0, W3C Recommendation, 10 February 1998, http://www.w3.org/TR/REC-xml T. Bray, The annotated XML Specification,1998, http://www.xml.com/axml/testaxml.htm XMLNews Specifications, http://www.xmlnews.org/ XML - Guido Boella

In HTML... VEDI <html> <head><title>agenda</title></head> <body bgcolor=”white"> <h1>Curriculum vitae</H1> <B><I>Nome</B> Cognome</I> <P>Indirizzo<br> via/corso numero<br> città <P>Dati personali </body> </html> VEDI XML - Guido Boella

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 XML - Guido Boella

La <italic>Banca</italic> ricorrente è proprietaria di un immobile sito in Siracusa, piazza Archimede, sede degli uffici della <italic>Banca </italic>, che è stato considerato dal Comune di <new>Siracusa</new> come edificio di interesse storico e monumentale ed inserito nel piano particolareggiato di recupero del centro storico di Ortigia adottato con <underlined color=“black” points=“2”> delibera consiliare</underlined> del 30 aprile 1988 e approvato con <underlined> decreto regionale </underlined> del ... VEDI XML - Guido Boella

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 XML - Guido Boella

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 XML - Guido Boella