XML: eXstensible Markup Language Laura Papaleo [email protected] Il nostro Flusso di Lavoro… Perché XML? Per rappresentare le informazioni Per strutturare le informazioni XML Per creare gli ipertesti XSL XSLT - XPath XLink XPointer Il nostro Flusso di Lavoro… Validare Documenti XML DTD e PARSER Usare lo stesso TAG con significati diversi NameSpace I Metadata Manipolare Documenti Schema RDF DOM SAX Il nostro Flusso di Lavoro… Rappresentare senza trasformare Applicazioni CSS2 e CSS3 QUILT - XQL SMIL SVG ? Perché serve XML L’ipertesto, lacune di HTML ed esigenze di un nuovo linguaggio L’ipertesto Theodor Nelson - termine ipertesto nel ‘65: “Lasciate che io introduca il termine ipertesto per rappresentare un insieme di materiale scritto o figurato interconnesso in un modo così complesso da non poter essere rappresentato su carta.” L’ipertesto Può contenere sommari o mappe dei contenuti Può contenere annotazioni, note a fondo pagina di coloro che vi hanno lavorato sopra "iper" : ha il significato di estensione In grado di rappresentare le informazioni contenute attraverso una rappresentazione non lineare Il concetto di Link Elemento chiave che permette il salto tra testo e ipertesto Esistono diverse tipologie di Link tra le quali: link bidirezionali link multiplo (uno a molti e molti a uno) link che puntano su sezioni strutturali di un documento link che identificano una sequenza di documenti interrelati link definiti all'esterno del documento Struttura e Rappresentazione Un libro ha un certo ordine nelle cose che devono essere lette La scrittura ha definito il rapporto fra struttura gerarchica delle informazioni e la rappresentazione visiva Struttura e Rappresentazione Un libro riporta informazioni strutturate gerarchicamente in modo da risultare funzionali all’accesso, questo a prescindere dalla casa editrice, dalla tipologia estetica dal colore della carta e dal font usato A prescindere dalla sua rappresentazione Struttura e Rappresentazione Per i documenti elettronici il discorso è analogo Nel momento in cui si ha bisogno di un'informazione entrano in gioco i tre livelli Struttura Contenuto Rappresentazione Struttura e Rappresentazione In fase di progettazione titolo è a prescindere dal carattere usato La rappresentazione può essere utile in fase di individuazione per migliorare la leggibilità per favorire la percezione della struttura Struttura e Rappresentazione di un contenuto sono due cose assolutamente separate Rappresentazione Struttura I Linguaggi di Markup I word processor assumono nell’ambito dell’ipertesto un rilievo minore rispetto ai linguaggi di markup in genere sono sistemi WYSIWYG utilizzano per la rappresentazione dei caratteri di controllo invisibili e proprietari limitano la portabilità e il riutilizzo obbligando ad utilizzare per la lettura lo stesso software usato per la scrittura I Linguaggi di Markup Descrivono i meccanismi di strutturazione e di rappresentazione del testo "marcano" le porzioni di testo indicandone le caratteristiche Due gruppi: Di tipo procedurale, indicano le procedure di trattamento del testo aggiungendo le istruzioni Di tipo descrittivo, lasciano la scelta della rappresentazione al software Differenza nel meccanismo usato per definire la formattazione del testo I Linguaggi di tipo descrittivo I linguaggi di tipo descrittivo risultano più vantaggiosi, Lasciano la concentrazione sui problemi strutturali di leggibilità Prescindono in fase di lettura dal software con cui sono stati generati Garantiscono una corretta separazione tra struttura e rappresentazione Tra i linguaggi del primo tipo ci sono lo Script, il TROFF, il TEX, tra quelli del secondo tipo SGML, HTML, XML. Storia: Il Markup ed il Web La Graphic Communications Association crea GenCode Dopo IBM sviluppa GML (Generalized Markup Language) Una sintassi semplice di tag contenuti tra <> (/) Per avere un formato aperto e standardizzato per il trattamento di dati Per poter scambiare e manipolare documenti strutturati Storia: Il Markup ed il Web 1980 – GenCode/GML e si fonda “American National Standards Institute” (ANSI) Nel ‘86 nasce SGML GenCode GML SGML Presente anche il CERN Da SGML Lee ricava un sottoinsieme: HTML HTML Crisi del Web La potenza di HTML rappresenta anche il punto di massima debolezza Internet è in evoluzione Lo sviluppo abnorme deve comportare cambiamenti nella gestione delle informazioni La staticità degli standard tende a diventare un peso La maggiore duttilità dei nuovi standard può risolvere il problema Crisi del Web Costruire e Pubblicare in rete è semplicissimo Aumentando i documenti, la complessità diventa incredibile Primo Problema: “dead link”. I Problemi del Web Trovare “documenti significativi” è tutt’altro che semplice Problemi per individuare documenti utili alle proprie esigenze Link che annuncia finalmente un sito pieno di informazioni interessanti, “messaggio di errore” da parte del server ! HTML ed il Link Unidirezionale Documento B link link Point to Point Documento A Point to Topics Link elemento chiave della struttura ipertestuale <A> e HREF in HTML per saltare da un punto ad un altro del documento o dell'intero Web HTML usa solo link unidirezionale I Link Scomparsi L'indirizzo della risorsa è interno al file HTML. La teoria ipertestuale raccomandava di mantenerlo all'esterno del documento in un database o in un altro documento. Cancellazione di una risorsa di destinazione o modifica del path, comporta l’aggiornamento di tutti i documenti che puntano alla risorsa. Un problema da risolvere... Perdita Struttura/Rappresentazione Distinzione struttura/rappresentazione persa Tale distinzione è la base della concezione dei linguaggi di markup di tipo descrittivo come SGML, HTML Un altro Problema da risolvere… <i>, <b>, <hr>, … ? <h1>, <h2>, <p>, … Cosa è sbagliato in HTML? Una corretta divisione di Struttura e Rappresentazione permette: di individuare occorrenze di un certo termine significativo di stabilirne la rilevanza in base alla posizione nella gerarchia testuale Cosa è sbagliato in HTML? L’intento di HTML era di usare elementi per marcare le informazioni in relazione al loro significato Usare FONT e I o altro fornisce layout migliore rendendo difficile rispettare le richieste dell’utente proprietario del browser... Lasciare al browser la possibilità di interpretare le informazioni non è un atteggiamento semplicistico Cosa è sbagliato in HTML? La Staticità Se l’idea è marcare informazioni in modo molto preciso i TAG HTML possono non bastare Esempio un chimico per le formule Un costruttore di aeroplani per i motori, modelli... Mantenere tutti i tag possibili sarebbe davvero difficile! Cosa è sbagliato in HTML? Documenti non validi semanticamente Si possono scrivere documenti HTML validi che non hanno senso quando si considera la semantica <HTML> <BODY> <H2> Prova </H2> Non esiste un vincolo nello standard... <P> una prova <H1> titolo1 </H1> </HTML> Inadeguatezza di HTML PERL VBScript Javascript Applet CGI Flash PHP HTML NUOVE RICHIESTE Gli utenti richiedono pagine complesse, Le prestazioni hardware migliorano Javascript Shockvawe, Acrobat reader HTML diventa assemblatore di tecnologie Inadeguatezza di HTML Portabilità Le nuove tecnologie sono soluzioni proprietarie I Documenti HTML ci obbligano a scaricare una miriade di plugin DB WEB Ambiente Standard Lontanissimo dalla filosofia iniziale e dall'informatica distribuita Cercare ambienti standard Parallel HTML e SGML HTML è quindi un linguaggio SGML è un metalinguaggio SGML HTML HTML è semplice ma rigido SGML è duttile ma molto complesso Esigenza dell’XML SGML XML HTML Nell’estate del ‘96 il W3C inizia un lavoro per un nuovo standard di applicazioni Web per risolvere i problemi Nasce un nuovo working group (XWG) per creare un nuovo standard eXstensible Markup Language (XML) Qualcosa di più di HTML, qualcosa di più semplice di SGML Fasi di Lavoro il XWG individua tre fasi principali di lavoro: Definire uno standard per la creazione di linguaggi di markup Sviluppare uno standard comune per “linkare” a tali linguaggi Sviluppare uno standard comune per la specifica del layout di documenti scritti secondo tali linguaggi... XML 1.0 specifiche completate presso il sito del W3C http://www.w3c.org eXstensible Markup Language Tim Bray, uno degli autori di XML 1.0, scrive: Unfortunately, there are things that HTML just can't do for you. Fortunately, HTML is growing quickly to meet these needs. Unfortunately, no matter how many new tags are added, there will never be enough for all the good ideas people keep having. Fortunately, HTML is a form of SGML [...]. Unfortunately, the SGML standard is large, takes time to learn, and doesn't have a "starter kit". Fortunately, XML is here. XML - Introduzione XML = Extensible Markup Language “XML is a language for creating markup languages that describe structured data.” Mike Edwards, Microsoft Descrive i dati e non la loro rappresentazione Ha un formato aperto e leggibile visualmente simile all’HTML Elimina la necessità di Browser e tool di mezzo per aggiungere TAG speciali XML - Introduzione eXtensible - non rigido come HTML Ottimo per la trasmissione di dati da server e browser Ottimo per la trasmissione da applicazione a applicazione, da macchina a macchina… E’ un metalinguaggio usato per definire nuovi domini applicativi o linguaggi specifici XML - Aree Applicative Applicazioni che richiedono al Web Client di mediare tra due o più DB eterogenei Applicazioni che cercano di distribuire porzioni significanti di dati tra Client/Server Oracle … SQL XML – Aree Applicative Applicazioni che richiedono al Web Client di mostrare più viste dello stesso dato a diversi utenti Compito Testo Esercizio Soluzione Client User1 Testo Esercizio Client User2 Soluzione Applicazioni in cui Agenti Web Intelligenti decidono riguardo informazioni utili per un utente Agente Client con caratteristiche A, B, C, …. XML - Vantaggi Attenzione esclusivamente al contenuto La fase di grafica può essere attuata successivamente o da un altra persona Si possono sviluppare linguaggi ad HOC specifici per certe comunità di utenti Matematici, chimici, una singola società, un ente…etc… XML - Vantaggi La gestione semplice da SGML a XML rende le società che usano SGML per l’archiviazione dati proiettate alla pubblicazione di dati nel Web Strutturando le info bene, i software di ricerca, in IR, possono essere precisi e veloci scegliendo tra l’enorme quantità di materiale nel Web Che cosa è un documento? Documento si riferisce non soltanto ai documenti tradizionali ma anche alla miriade di altri formati di dati XML Questi includono le transazioni di commercio elettronico, le equazioni matematiche, i meta dati di un oggetto, ed altri mille generi di informazioni strutturate. XML e HTML XML non specifica né la semantica né un insieme di TAG XML è un metalinguaggio per la descrizione dei linguaggi di markup XML fornisce un modo per definire i tag ed i rapporti strutturali fra loro Poiché non vi è un insieme predefinito di TAG, non ci può essere alcuna semantica preesistente Gli obiettivi di sviluppo di XML Le specifiche XML hanno precisato i seguenti obiettivi: XML dovrà diventare il linguaggio di markup standard per Internet. Ogni utente deve poter visualizzare documenti XML come quelli HTML Compatibile con SGML. I documenti XML devono essere leggibili e chiari Il design XML deve essere redatto rapidamente Il design XML deve essere formale e conciso I documenti XML devono essere facili da creare. W3C - Termini W3C organizzazione mondiale per standard WEB Recommendation uno standard (più o meno); stabile; si può usare Proposed Recommendation: quasi standard; fissabile in 2-3 mesi; le feature possono essere usate Working Draft: Lavoro in fase di sviluppo; potrebbe diventare una Recommendation in meno di un anno; Note: idee completamente non affidabili XML – Standard collegati XML è una lingua “franca” che permette di descrivere la struttura di documenti Il W3C ha definito svariati standard per poter integrare la definizione di XML per consentire la: Definizione metadata Definizione link tra più documenti Trasformazione/Rappresentazione documenti XML Definizione di linguaggi di interrogazione Manipolazione documenti XML “da programma” Rappresentazione di informazione grafica Definizione di metadata Come detto in precedenza, i TAG non definiscono la semantica dei dati che rappresentano Occorre quindi introdurre il concetto di metadata cioè “dati sui dati” Si parla di metadata a diversi livelli a livello linguistico introducendo dizionari di nomi (Namespace) a livello di tipo introducendo gli schema (Xschema) a livello concettuale introducendo concetti e legami tra concetti (RDF -- Resource Description Framework) Definizione link tra più documenti Lo standard XML permette di rappresentare solo i link interni al documento, ma non i link tra documenti diversi Inoltre, si vogliono poter rappresentare tutte le forme di link che abbiamo visto in precedenza Per questo motivo sono stati introdotti i seguenti standard XLink che permette di definire link tra più documenti XPointer che permette di indirizzare una parte specifica di un documento Rappresentazione - Trasformazione Lo standard XML permette di strutturare documenti XML No rappresentazione Nasce XSL. XSL permette di Identificare parti di documento da rappresentare (Xpath) Trasformare le parti (attraverso il linguaggio XSLT) Rappresentare (HTML, PDF, ...) il documento risultante (attraverso il linguaggio XSL-FO) Linguaggi di interrogazione I documenti XML possono essere memorizzati in sorgenti di informazioni (DB). Ognuno può sottomettere alla sorgente richieste di documenti che soddisfano certe query. Esistono diversi linguaggi per poter interrogare sorgenti XML Attualmente non esiste uno standard W3C La proposta potrebbe essere QUILT Manipolazione “da programma” I documenti XML possono essere visti come canale di comunicazione tra applicazioni clientserver Cioè permettono alle applicazioni di scambiarsi informazioni. Un’applicazione deve saper leggere e manipolare documenti XML Sono stati introdotti standard per manipolare documenti XML Gli standard principalmente utilizzati sono DOM e SAX MathML Raccomandazione del W3C uscita il 21 febbraio 2001. MathML è una specifica a basso livello per la descrizione di oggetti matematici per la comunicazione macchina a macchina. Fornisce un fondamento necessario per l'inclusione delle espressioni matematiche in pagine Web SVG – Scalable Vector Graphics Linguaggio per la descrizione di grafica 2D in XML 1.0 SVG tiene conto tre tipi di oggetti grafici: vector graphic shapes (path che consistono in linee rette e curve), immagini e testo Gli oggetti grafici possono essere raggruppati, trasformati Gli oggetti SVG possono essere interattivi e dinamici. XForms 1.0 W3C Working Draft Purpose Data collection Presentation Time card How dates are entered Order form Information Please 8 June 2001 Arrangement of form controls How to render the form controls on small devices How the form integrates with a Web site Data Registration information Days and hours worked Order, shipping, and payment info User contact information Le Form di adesso non separano questi concetti ed offrono una rappresentazione restrittiva dei dati XForms fa questo ed altro. XHTML 1.0 (1.1): The Extensible HyperText Markup Language Una Riformulazione di HTML 4 in XML 1.0 XHTML rappresenta una famiglia di tipi di documenti correnti e futuri e moduli che riproducono ed estendono HTML 4. I tipi di documento XHTML sono basati su XML, XHTML 1.0 è il primo tipo di documento nella famiglia XHTM XML Encryption W3C Working Draft 2001-April-20 Requirements Questa specifica fornisce le richieste per una sintassi XML ed istruzioni di processing per la codifica di contenuti digitali, Tali documenti possono includere anche porzioni di documenti XML e messaggi di protocollo. XML Query Working Draft June 2001 La missione di XML Query è di fornire facilitazioni nella fase di estrazione di dati reali o virtuali da documenti WEB e di fornire l’interazione necessaria tra il WEB e il mondo dei database Infine dovrebbe servire ad accedere ai file XML come se fossero DB essi stessi. XML Signature Working Draft April 2001 Lo standard dovrebbe identificare sintassi XML per creare e rappresentare firme digitali XML Signatures può essere applicato a qualsiasi digital content (data object), non solo XML. XML Signature è un metodo di associazione di chiavi a dati riferiti (octets); Non specifica come le chiavi sono associate con persone o istituzioni, né il significato dei dati che si sono riferiti e firmati. CML - Chemical Markup Language CML porta la potenza di XML nella gestione delle informazioni legate alla chimica. "HTML con le molecole“ Si preoccupa della fase di porting tra gli archivi presenti ed i nuovi documenti CML Si interessa di strutturare le info chimiche in modo “significativo” i TAG usati possono servire anche per cercare le informazioni SMIL Synchronized Multimedia Integration Language Permette la gestione di presentazioni nelle quali interagiscono audio e video, ed in generali elementi multimediali Basato su XML Esempi di linguaggi da XML CSD: CORBA Software Description (OMG) CDF: Channel Definition Format (MS) GedML: Genealogical exchange format (M.Kay) WIDL: Web IDL (webMethods) UXF: UML eXchange Format (J. Suzuki) XML-RPC: XML-based RPC (Userland) …ed altri… PAUSA 10 minuti? --- 20 minuti? Imparare XML Per imparare XML occorre conoscere un po’ di HTML HTML, semplice linguaggio di Markup HTML usato per marcare delle porzioni di testo HTML, metodologia per la codifica di dati con una certa semantica Imparare XML Esempio di un libro e dell’atto di evidenziare E’ considerato uno standard che il testo evidenziato implica importante, e quasi tutti operiamo nello stesso modo Evidenziando una porzione di testo in un certo senso la marchiamo Due punti fondamentali Per la strutturazione di un linguaggio di Markup deve essere definito uno standard di codifica (come in HTML) per spiegare cosa è un elemento di markup Esempio : evidenziare o TAG Deve essere definita una semantica associata ad un elemento Esempio : importante o bold, header1, etc… Il linguaggio HTML Linguaggio di markup più diffuso nel web Definisce un insieme di tag finito Ad ogni TAG viene associata una regola di formattazione di porzioni di testo Esempio: <I> corsivo Esempio di file HTML <UL> … </UL> <LI>Pinco Pallino <UL> <LI>Client ID: 002 <LI>Azienda: La mia Azienda s.r.l. <LI>Email: [email protected] <LI>Telefono: 010.5553331 <LI>Indirizzo: Via B, 23/a <LI>Città : Genova <LI>C.A.P.: 16100 </UL> </UL> XML - Caratteristiche Come HTML, XML è un linguaggio di markup Permette di specificare quali sono i tag Permette di specificare la relativa semantica più potente di HTML, più flessibile X (eXstensible) il numero di TAG non è predefinito Esempio <?xml version="1.0"?> <!DOCTYPE CLIENTS [ <!ENTITY NinthFloorAddress “2345 Broadway St. Floor 9"> ... ]> <CLIENTS> <CLIENT> <NAME>Pinco Pallino</NAME> <ADDRESS>&NinthFloorAddress;</ADDRESS> <PHONE>022.12345623</PHONE> </CLIENT> <CLIENT> ... </CLIENT> TAG </CLIENTS> Più chiarezza ai contenuti In un documento XML si comprende la semantica delle porzioni di testo dai TAG associati Esempio: <UL> <EMAIL> (HTML, cosa è?) (XML, più chiaro!) La struttura del documento XML è comunque molto simile ad HTML Leggibile anche senza un parser XML - Non basta codificare Occorre definire una sintassi per marcare Occorre definire la semantica degli elementi Occorre una applicazione che processando il file possa capire cosa si intende per marcatura valida e che cosa fare se è valida Esempio: <PHONE> è un TAG? È valido? Come lo devo rappresentare? ! XML - La struttura Elementi, Attributi, TAG, … DTD Un documento XML Un file XML è un semplice file di testo con TAG XML al suo interno Esso ha una estensione .xml (nome_file.xml) Un file XML contiene tre sezioni: Una dichiarazione che si tratta di un file XML Una definizione (opzionale) circa il tipo di documento e sul nome della DTD associata Il contenuto del documento con tag XML Un altro esempio <?xml version="1.0" standalone="no"?> <!DOCTYPE booklist SYSTEM "booklist.dtd"> <BOOKLIST> Dichiarazione DTD associata <BOOK> <TITLE edition="1961">Primo Libro</TITLE> <AUTHOR>Primo Autore</AUTHOR> </BOOK> … <BOOK> <TITLE edition="1972" type=”Adventure">Secondo Libro</TITLE> <AUTHOR>Secondo Autore</AUTHOR> </BOOK> </BOOKLIST> XML - la dichiarazione Dichiarazione XML opzionale ma consigliata <? xml version=“1.0” standalone=“yes/no”?> Versione (per adesso 1.0!) Viaggia da solo? (DTD associata o no) XML - Gli elementi Gli elementi rappresentano i contenuti base di un documento XML Sono definiti come tag di apertura contenuto tag di chiusura <name> Pinco Pallino </name> XML - Gli elementi Occorre sempre un elemento ROOT tipicamente come il nome della DTD e del file XML Se devo codificare << pinco pallino disse, “non andare via!” >> <statment value=“pinco pallino disse, " non andare via! "”> Carattere speciale! XML - I Tag Un TAG è tutto quello compreso tra < e > a meno che non sia dentro CDATA o commenti... deve esserci almeno un TAG! XML è case-sensitive <ciao> diverso da <CIAO> Sempre chiudere i TAG <ciao> abc… </ciao> Elementi vuoti con segno di chiusura <image/> XML - Elementi (Annidamento) Gli elementi devono essere annidati in modo corretto (non come HTML) Esempio: <contact> <name> Pinco Pallino </name> <email> [email protected] </email> </contact> XML - Elementi (nomi validi) I nomi degli elementi possono iniziare per una lettera, _,o : Possono essere seguiti da numeri , lettere, _ , ,: NO spazi bianchi Nessun nome di elemento può contenere la stringa xml, XML, Xml... XML - Attributi I Tag XML possono possedere un qualsiasi numero di attributi Un attributo ha un nome ed un valore associato <shoe style=“elegant” coloring=“brown”> Il valore di un attributo è sempre una stringa che può contenere anche spazi bianchi o altri simboli XML - Commenti I commenti in XML possono essere inseriti esattamente come si fa in HTML <!-- questo è un semplice commento --> No “-” o “--” all’interno No commenti dentro TAG No dentro entità Mai prima di <? xml versi…etc... ?> No annidamenti! XML - Istruzioni di Processing La dichiarazione XML è già una istruzione di processing Una istruzione di processing rappresenta una porzione di testo significativa per l’applicazione che usa il documento XML non serve al parser ma all’applicazione che usa il parser <?name_of_application instructions?> <?JAVA_OBJECT JAR_FILE=“/java/.../myjar.jar” ?> XML - le Entità Le Entità rappresentano in pratica aliases che permettono di riferirsi a sezioni di testo senza doverle editare ogni volta Possono essere generali o parametriche Ogni entità ha una dichiarazione e il valore di riferimento XML - Entità (Generali) Le entità generali sono nella forma <! ENTITY nome “qualsiasi cosa”> <! ENTITY copyright “Pinco Pallino S.p.A.”> &nome_entità; (come in HTML); Sostituisco banalmente il contenuto tra virgolette... XML - Entità (Parametriche) Vengono espanse e interpretate nella DTD Possono essere interne o esterne Possono occorrere solo all’interno di una DTD Hanno dichiarazione simile a quelle generali con in più un % <! ENTITY %nome “qualsiasi cosa”> %nome_entità_parametrica; XML - DOCTYPE La dichiarazione DOCTYPE serve a utilizzare le ENTITY in un documento XML Si trovano sempre dopo la dichiarazione XML <? xml version=“...” e la dichiarazione della DTD <! DOCTYPE mydoc [ … la definizione delle entità che voglio … ]> <mydoc> … body del documento </mydoc> Documenti ben formati e validi Un documento XML è ben formato se rispetta le seguenti regole: Bilanciamento dei marcatori Ad ogni marcatore di apertura deve corrisponderne uno di chiusura (a meno di elemento vuoto) Valori degli attributi tra virgolette <img src="image.gif" width="50" height="40" border="0"/> Uso di entità dichiarate Tutti i caratteri speciali devono essere dichiarati prima di poter essere usati Un esempio SI! <?XML version="1.0"?> <!DOCTYPE ricettario [ <!ENTITY g "grammi"> ]> <ricettario> <ricetta numero="1"> <titolo>...</titolo> <ingred>200 &g; di ... </ingred> <ingred>...</ingred> <passo numero="1">...</passo> <passo numero="2">...</passo> </ricetta> </ricettario> Un esempio NO! <?XML version="1.0"?> <!DOCTYPE ricettario> TAG non chiuso Entità speciale non dichiarata <ricettario> <ricetta numero="1"> <titolo>... <ingred>200 &g; di ... </ingred> <ingred>...</ingred> <passo numero=1>...</passo> <passo numero=2>...</passo> </ricetta> </ricettario> Valori non tra virgolette Documento XML Valido Un documento XML è valido se E’ ben formato Rispetta una struttura descritta in una Document Type Definition I documenti XML devono essere validi nel caso di strutturazione di documenti di una certa importanza, ad esempio, in una azienda dove è fondamentale mantenere una stessa struttura ! Document Type Definition Sintassi di una DTD DTD - Descrizione Document Type Defintion Definisce gli elementi, gli attributi e le relazioni che intercorrono (X può contenere Y o Z ma non entrambi) Rappresenta un modo per fare un check sulla strutturazione corretta di un documento XML DTD - Descrizione Utilizzo non obbligatorio (contrariamente ad SGML) La DTD fornisce una grammatica ed il vocabolario per il linguaggio di markup La DTD specifica tutto quello che un parser deve sapere per poter comprendere un documento XML Strumento per la validazione Un documento XML viene processato e viene confrontato con la DTD associata (se ce ne è una) Il confronto è un processo detto validazione Un parser: software per il checking di documenti XML non-validating parser controlla che segua le regole di sintassi XML validating parser, controlla la sintassi ed il matching con la DTD DTD necessaria solo per documenti XML validi DTD - Well-formed e Valido Un esempio: esempio un stupido! Questo è po’ La DTD mette in ordine i termini corretti per dare un senso alle frasi del linguaggio ! Questo è un esempio un po’ stupido! Un esempio di DTD DTD ricettario.dtd Dichiarazione di elemento <!ELEMENT ricettario (ricetta)*> <!ELEMENT ricetta (titolo, ingred+, passo+)> <!ATTLIST ricetta numero ID #REQUIRED> <!ELEMENT titolo (#PCDATA)> <!ELEMENT ingred (#PCDATA)> <!ELEMENT passo (#PCDATA)> <!ATTLIST passo numero ID #REQUIRED> Dichiarazione di attributo DTD - Caratteri per la grammatica In una DTD è possibile avere dichiarazioni di: Elementi struttura degli elementi, figli e quanti Entità Attributi e valori, richiesti o no Uso di simboli precisi per definire la grammatica Character Significato + Una o più occorrenze * Zero o più occorrenze Zero o una occorrenza ? (opzionale) Un gruppo di espressioni () che facciano un match tra loro | OR (questo o quello) Strettamente ordinati , come un AND ELEMENT_A ELEMENT_B Non ordinati ELEMENT_C Dichiarare un elemento non vuoto <!ELEMENT agenda (contatto*)> <!ELEMENT contatto (nome, indirizzo+, telefono*, email*, foto?)> <!ELEMENT nome (#PCDATA)> L’elemento nome è una stringa di caratteri, Eventuali entità presenti nella stringa vengono trasformate nei caratteri corrispondenti Dichiarare un elemento vuoto <!ELEMENT foto EMPTY> l’oggetto foto potrebbe pensarsi equivalente al tag HTML <IMG> Pertanto non ha un marcatore di chiusura né tantomeno un contenuto Possiede solo degli attributi Dichiarazione di attributi <!ATTLIST foto src CDATA #REQUIRED desc CDATA #IMPLIED> src, nome del file bitmap necessario (#REQUIRED) desc, descrizione può omettersi (#IMPLIED) <!ATTLIST telefono tipo (casa | ufficio | cellulare) 'casa'> ha un attributo che ne identifica il tipo, che indica se il numero è di casa, dell'ufficio o di un cellulare il valore di default è 'casa’ Tipi degli attributi CDATA Stringhe di tipo unparsed. PCDATA Stringhe di tipo parsed. ID nome che occorre unico all'interno dello stesso documento IDREF E' un riferimento ad un elemento che ha un attributo di tipo ID con valore IDREF IDREFS E' una lista di IDREF separati da uno spazio bianco ENTITY nome di una entità dichiarata ENTITIES E' una lista di ENTITY separati da uno spazio bianco NMTOKEN E' una stringa di una parola NMTOKENS E' una lista di NKTOKEN separati da uno spazio bianco Enumerazione E' una lista di nomi come valori che l'attributo può assumere I nomi sono separati da virgola e la lista è racchiusa tra parentesi tonde Valori di default per gli attributi #REQUIRED Obbligatorio #IMPLIED Non obbligatorio e non viene assegnato un valore di default "valore" Non è obbligatorio specificare un valore per l'attributo #FIXED "valore" Non è obbligatorio specificare un valore per l'attributo ma se lo si specifica, il valore può essere solo quello prefissato Un esempio completo - la DTD DTD agenda.dtd <!ELEMENT agenda (contatto*)> <!ELEMENT contatto (nome, indirizzo+, telefono*, email*,foto?)*> <!ELEMENT nome (#PCDATA)> <!ELEMENT indirizzo (via, numero, citta, cap, provincia?)> <!ELEMENT via (#PCDATA)> <!ELEMENT numero (#PCDATA)> <!ELEMENT citta (#PCDATA)> Dati <!ELEMENT cap (#PCDATA)> Parsed <!ELEMENT provincia (#PCDATA)> <!ELEMENT telefono (#PCDATA)> Un esempio completo - la DTD … continua <!ATTLIST telefono <!ELEMENT email <!ELEMENT <!ATTLIST foto foto src <!ENTITY BO "40100"> <!ENTITY MO "41100"> <!ENTITY RE "42100"> Valore predefinito tipo (casa |ufficio | cellulare)'casa'> (#PCDATA)> Elemento vuoto EMPTY> CDATA #REQUIRED desc CDATA #IMPLIED> Entità Dichiarate Un esempio completo - XML Agenda.xml <?XML version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE agenda SYSTEM "agenda.dtd"> <agenda> Radice DTD associata <contatto> <nome>Pinco Pallino</nome> <indirizzo> <via>Via Incognita</via> <numero>10</numero> Richiamo entità <citta>Bologna</citta> <cap>&BO;</cap> della DTD </indirizzo> …continua Un esempio completo - XML … continua <telefono>051-123456</telefono> <telefono tipo="ufficio"> 051-654321</telefono> <email> [email protected] </email> <foto src="pinco.gif" desc="Una foto di Pinco Pallino"/> </contatto> </agenda> Elemento vuoto foto XML - Namespace Collezione di nomi, identificativi di URL, che possono essere usati in documenti XML come tipi di elementi e nomi di attributi. Raccomandazione W3C dal 14 gennaio 1999 Un namespace viene dichiarato usando una famiglia di attributi riservati <x xmlns:edi='http://ecommerce.org/schema'> <!-- the "edi" prefix is bound to http://ecommerce.org/schema for the "x" element and contents --> </x> Dichiarare e usare i Namespaces <document xmlns:name_sp=“fixed_URL”> <name_sp:tag_nm> content </tag_nm> Esempio negozio di vendita di pesci on-line con SOURCE vogliamo intendere da un lato da dove (posizione geografica) proviene il pesce dall’altro chi è il fornitore PAUSA??? 10 minuti?? --- 20 minuti?? ! Rappresentare i documenti XML CSS2, XSL, XSLT, XPath La rappresentazione di file XML Per documenti XML è necessario associare un foglio di stile Linguaggi candidati a rappresentare le informazioni strutturate per mezzo di XML Cascading Style Sheet Level 2 (CSS2) Document Style Semantics and Specification Language (DSSSL) Extensible Style Language (XSL) La rappresentazione di file XML CSS è una tecnologia, rilasciata dal W3C per HTML, diffusa, sperimentata e conosciuta, Limite: non riesce a modificare notevolmente il documento DSSSL: è il linguaggio di stile di SGML eredita da SGML potenza e difficoltà XSL, linguaggio "proprietario" del progetto XML. Dovrebbe raccogliere pregi di CSS e di DSSSL Cascading Style Sheets, level 2 CSS2 linguaggio di stile che permette di aggiungere font, spaziatura, … ai file HTML o ad applicazioni XML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML> <HEAD> <TITLE>Pinco's Home Page</TITLE> </HEAD> <BODY> <H1>Pinco’s home page</H1> <P>Pinco Pallino fu un bravissimo programmatore, simpatico e fantasioso. </BODY> </HTML> CSS e HTML Se vogliamo H1 blu, scriveremo CSS: H1 { color: blue } Una regola CSS consiste di due parti: un selettore una dichiarazione ’H1’ (’color: blue’) La dichiarazione ha due parti la proprietà il valore (’color’) (’blue’) CSS come file esterno E’ possibile dichiarare fogli di stile fuori dal file HTML: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML> <HEAD> <TITLE>Pinco's Home Page</TITLE> <LINK rel="stylesheet" href="pinco.css" type="text/css"> </HEAD> Locazione <BODY> Tipo di link <H1>Pinco’s home page</H1> <P>Pinco Pallino fu un bravissimo programmatore, simpatico e fantasioso. Tipo di Foglio di Stile </BODY> </HTML> I fogli di stile e i file XML Raccomandazione W3C 29 Giugno ‘99 un foglio di stile viene aggiunto usando xml-stylesheet. stesse regole del tag LINK xml-stylesheet viene processata nello stesso modo della prima dichiarazione se l’istruzione viene inserita in una DTD esterna o in una entità parametrica essa talvolta non viene processata bene da un parser Esempi <LINK href="mystyle.css" rel="style sheet" type="text/css"> <?xml-stylesheet href="mystyle.css" type="text/css"?> <LINK href="mystyle.css" title="Compact" rel="stylesheet” type="text/css"> <?xml-stylesheet href="mystyle.css" title="Compact" type="text/css"?> CSS e XML CSS2 può essere anche per applicazioni XML CSS - XML Dichiarare quali elementi inline-level ( non causano fine riga, ad esempio) block-level In un file “nome.css” INSTRUMENT { display: inline } ARTICLE, HEADLINE, AUTHOR, PARA { display: block } Inserire un CSS file Inserire un documento di stile in un file XML Al posto del TAG LINK PAUSA 10 minuti? --- 20 minuti? eXstensible Stylesheet Language XSL working draft del W3C Per aumentare la flessibilità dello standard XML Più sofisticato di CSS Contiene specifiche di CSS e DSSSL XSL consiste di tre parti: Un linguaggi o per trasformare i documenti XML (XSLT) un vocabolario per definire la formattazione (XSL) una sintassi per indirizzare parti di un documento ad una certa formattazione (XPath) XSLT – la trasformazione XSLT trasforma documenti XML in altri XML XSLT creato da XSL XSL include un vocabolario di formattazioni specifiche in più XSLT descrive come un documento deve essere trasformato in un altro che usa il vocabolario XSL Una trasformazioni XSLT La trasformazione viene attuata associando patterns con templates Un pattern deve coincidere con un elemento input tree Un template serve per formare parte dell’albero in output La struttura dell’albero risultante potrebbe essere del tutto diversa da quella dell’albero in input XSLT Namespace http://www.w3.org/1999/XSL/Transform I parser XSLT devono usare il concetto di namespaces XML per riconoscere elementi e attributi dai namespace Tali elementi sono riconosciuti solo nello stylesheet e non nel documento sorgente XSLT - xsl:stylesheet Può contenere i seguenti tipi di elementi: xsl:import , xsl:strip-space, xsl:output, xsl:decimal-format , xsl:attribute-set, xsl:param xsl:template xsl:include xsl:preserve-space xsl:key xsl:namespace-alias xsl:variable Un elemento che compare come figlio di xsl:stylesheet è detto top-level element Un esempio <xsl:stylesheet version="1.0” xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="..."/> Posizione Obbligatoria <xsl:include href="..."/> <xsl:strip-space elements="..."/> <xsl:preserve-space elements="..."/> <xsl:output method="..."/> Si possono posizionare … dove si vuole … <xsl:variable name="...">...</xsl:variable> <xsl:param name="...">...</xsl:param> <xsl:template match="...">… </xsl:template> <xsl:template name="...">...</xsl:template> </xsl:stylesheet> XSLT - Combining Stylesheets XSLT fornisce due meccanismi per combinare i fogli di stile: un meccanismo di inclusione che permette agli stylesheet di essere combinati senza cambiare la loro semantica e <!-- Category: top-level-element --> <xsl:include href = “url-reference” /> un meccanismo di importazione che permette ai fogli di stile di sovrascriversi <xsl:import href = “url-reference” /> XSLT - Esempio importazioni <xsl:stylesheet version="1.0” xmlns:xsl="http://www.w3.org/1999/ XSL/Transform"> Importo <xsl:import href="article.xsl"/> due nuovi <xsl:import href="bigfont.xsl"/> fogli di sitle <xsl:attribute-set name="note-style"> <xsl:attribute name="font-style"> italic</xsl:attribute> </xsl:attribute-set> </xsl:stylesheet> Inserire fogli di stile in XML E’ possibile inserire l’elemento xsl:stylesheet nel documento XML <?xml-stylesheet type="text/xml" href="#style1"?> <!DOCTYPE doc SYSTEM "doc.dtd"> <doc> <head> <xsl:stylesheet id="style1” version="1.0" xmlns:xsl="http://www.w3.org/1999/ XSL/Transform” xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:import href="doc.xsl"/> <xsl:template match="id('foo')"> <fo:block font-weight="bold"><xsl:apply-templates/></fo:block> </xsl:template> <xsl:template match="xsl:stylesheet"> </xsl:template> </xsl:stylesheet> </head> <body> <para id="foo"> … </para> </body> </doc> XSLT - Espressioni XSLT usa un linguaggio di espressioni definito da XPath Le espressioni sono usate per: Selezionare un nodo da processare; Specificare le condizioni per differenti modi di processare un nodo; Generare del testo da inserire nell’albero di output. Le espressioni compaiono come valori di certi attributi di elementi nel file XSLT dentro parentesi graffe XSLT - Regole di Template L’albero in output viene creato appendendo i nodi processati partendo dal nodo radice Un nodo viene processato cercando tutti le regole di template con il pattern corrispondente Un template contiene, tipicamente istruzioni di selezione di nuovi nodi da processare Il processo di matching, la creazione di nodi e la selezione continuano ricorsivamente fino a quando non esistono nuovi nodi da aggiungere XSLT - I Patterns Le regole di Template identificano i nodi I patterns sono usati anche per la numerazione e per la dichiarazione di chiavi Un pattern specifica un insieme di condizioni su un nodo Un nodo che soddisfa quelle condizioni corrisponde al pattern La sintassi di patterns è un sottoinsieme della sintassi di expressions in XPath XSLT - I Patterns - Esempi ogni elemento <para> qualsiasi elemento ogni item con una <olist> come genitore / il nodo radice text() ogni nodo text node() ogni nodo id("W11") l’elemento con ID uguale a… para[1] ogni <para> elemento primo nel contesto genitore @* ogni attributo para * olist/item XSLT - Definire una regola di template <!-- Category: top-level-element --> <xsl:template match = pattern name = qname priority = number mode = qname > <!-- Content: (xsl:param*, template) --> </xsl:template> viene specificata da un elemento xsl:template match è un pattern che identifica il nodo (nodi) sorgente a cui applicare la regole XSLT - Definire una regola di template Esempio: This is an <emph>important</emph> point. <xsl:template match="emph"> <fo:inline-sequence font-weight="bold"> <xsl:apply-templates/> </fo:inline-sequence> </xsl:template> – Occorre usare il namespace http://www.w3.org/1999/XSL/Format l’xsl:apply-templates ricorsivamente processa i figli dell’elemento sorgente XSLT - Applicare una regola Template <!-- Category: instruction --> <xsl:apply-templates select = node-set-expression mode = qname> <!-- Content:(xsl:sort | xsl:with-param)* --> </xsl:apply-templates> <xsl:template match="chapter"> <fo:block> <xsl:apply-templates/> </fo:block> </xsl:template> in assenza di select xsl:apply-templates processa tutti i figli del nodo corrente XSLT - Applicare una regola Template ESEMPIO: Processa tutti gli elementi <author> figli dell’elemento <author-group> <xsl:template match="author-group"> <fo:inline-sequence> <xsl:apply-templates select="author"/> </fo:inline-sequence> </xsl:template> Qui c’è la select XSLT - Applicare una regola Template Più xsl:apply-templates possono essere usati in un singolo template per fare ordinamenti Ad esempio per creare due tabelle HTML La prima riempita da domestic sales la seconda da foreign sales <xsl:template match="product"> <table> <xsl:apply-templates select="sales/domestic"/> </table> <table> <xsl:apply-templates select="sales/foreign"/> </table> </xsl:template> XSLT - Ripetizioni <!-- Category: instruction --> <xsl:for-each select = node-set-expression> <!-- Content: (xsl:sort*, template) --> </xsl:for-each> Quando il documento ha una struttura più o meno regolare è utili selezionare un certo template per nodi dello stesso genere l’istruzione xsl:for-each contiene un template, che viene creato per ogni nodo selezionato L’attributo select è obbligatorio XSLT - Processare seguendo una condizione Esistono due istruzioni in XSLT che supportano il processing condizionale in un template xsl:if xsl:choose L’istruzione xsl:if fornisce un semplice if-then l’istruzione xsl:choose supporta la selezione di una scelta quando esistono varie possibilità Esempio Tag articolo Tag vuoto Link ad altro file Esempio file .xsl Lo trasforma in un file HTML Risultato links XML Path Language (XPath) W3C Recommendation - 16 Novembre 1999 XPath è un linguaggio usato per indirizzare parti di un documento XML sia in XSLT che in XPointer La valutazione di una espressione XPath avviene in relazione al nodo contesto XSLT e XPointer specificano come deve essere trovato il contesto XPath - Location Paths child::para child::* child::text() attribute::* descendant::para self::para seleziona para figlio del nodo contesto seleziona tutti i figli seleziona tutti i testo figli seleziona tutti gli attributi del nodo contesto seleziona tutti i para discendenti del nodo seleziona il nodo contesto se è di tipo para Link Utili http://www.w3.org http://www.html.it http://www.mokabyte.it (Java-XML) http://wdvl.internet.com/Authoring/ http://web2.javasoft.com/xml/docs/tutorial/ http://www.stud.ifi.uio.no/~lmaiusg/download/artikler http://www.xml.it The End! (errori o problemi? Fatemelo sapere...) Grazie... Laura Papaleo Email: [email protected]