Laboratorio di Programmazione Distribuita Dott. Marco Bianchi Università degli Studi di L'Aquila bianchi@di.univaq.it http://di.univaq.it/~bianchi
Cos'è XML? XML = extensible Markup Language E' un meta-linguaggio di markup Raccomandazione W3C: 1998 XML 1.0 2000 XML 1.0 (second edition) 2004 XML 1.1 Homepage XML: http://www.w3c.org/xml/ Derivato da, e compatibile con, l'sgml (Standard Generalized Markup Language)
La famiglia XML SGML HTML XML GML Geography MathML Mathematical WML Wireless... CML Chemical
XML in 10 punti 1) XML serve a strutturare i dati 2) XML assomiglia un po' a HTML 3) XML è testo ma non da leggere 4) XML è prolisso per design 5)XML è una famiglia di tecnologie 6) XML è nuovo, ma non così nuovo 7) XML porta da HTML a XHTML 8) XML è modulare 9) XML è la base di RDF e il Web Semantico 10) XML è gratis, indipendente dalla piattaforma e ben supportato
A cosa serve XML E' uno strumento indipendente dall' hardware e dal software utile per Memorizzare Scambiare informazioni.
Esempio di utilizzo di XML (1) AcPharm39156 Nome: Acme Pharmaceuticals Co. Indirizzo in USA : Via: 7301 Smokey Boulevard Città: Smallville Stato: Indiana CAP: 94571
Esempio di utilizzo di XML (1) AcPharm39156 DB2 AcPharm39156 DB1... Diverse tabelle Diverse codifiche
Esempio di utilizzo di XML (1) AcPharm39156?!? DB2 DB1 I sistemi non possono comunicare direttamente DB3 Necessario un convertitore per ogni combinazione possibile
Esempio di utilizzo di XML (1) <customer-details id= AcPharm39156 > <name>acme Pharmaceuticals Co.</name> <address country= US > <street>7301 SmokeyBoulevard</street> <city>smallville</city> <state>indiana</state> <postal>94571</postal> </address> </customer-details>
Esempio di utilizzo di XML (1) XML!!! 2 DB1 DB2 Ok AcPharm39156 XML XML AcPharm39156 1 3
Esempio di utilizzo di XML (2) HTML WML Server Web
Esempio di utilizzo di XML (2) Livello contenuti XML Livello presentazione HTML WML Server Web
HTML vs XML Linguaggio di markup per la presentazione Linguaggio di markup per i contenuti Progettato e guidato dalla visualizzazione Progettato per lo scambio di dati fra applicazioni software e guidato dai dati Elementi predefiniti Consente elementi definiti da utente
HTML vs XML Blandamente definito e interpretato Strettamente definito e interpretato Elementi vuoti non necessitano chiusura: Es. <BR> Tutti gli elementi devono essere chiusi Es. <BR/>
Da HTML...... <p><b>mrs. Mary McGoon</b> <br> 1401 Main Street <br> Anytown, NC 34829</p>...
... a XML <address> <name> <title>mrs.</title> <first-name>mary</first-name> <last-name>mcgoon</last-name> </name> <street>1401 Main Street</street> <city>anytown</city> <state>nc</state> <postal-code>34829</postal-code> </address>
Esempio di utilizzo di XML (3) Web
Esempio di utilizzo di XML (3) Web A+O^N #S12_C OEaWq jal)nw2 1M,w?-H Jjw29(çà 32n$nwM hfn1baz9òm mp[2~nwqnb wem27cnm kn20,c_wù+ &9jc'làa,fèfj?
Esempio di utilizzo di XML (4) Semantic Web RDF A+O^N + #S12_C OWL RDF OEaWq + jal)nw2 OWL 1M,w?-H RDF Jjw29(çà + OWL 32n$nwM RDF hfn1baz9òm + mp[2~nwqnb OWL wem27cnm RDF kn20,c_wù+ + OWL &9jc'làa,fèfj!
Esempio di utilizzo di XML (4) Semantic Web: The Semantic Web is an extension of the current web in which information is given well-defined meaning, better enabling computers and people to work in cooperation. Tim Berners-Lee, James Hendler, Ora Lassila, The Semantic Web, Scientific American, May 2001
Esempio di utilizzo di XML (4) Semantic Web Esempio: RDF A+O^N Vacanza di + due settimane #S12_C OWL con destinazione Maldive, pernottamento in hotel 4 stelle con vista mare e spiaggia privata. Viaggio in aereo con posto per non RDF fumatori. OEaWq Costo massimo di + 2000 Euro jal)nw2 a persona. Utente OWL 1 3 1M,w?-H RDF Jjw29(çà + OWL 32n$nwM 2 RDF hfn1baz9òm + mp[2~nwqnb OWL wem27cnm RDF kn20,c_wù+ + OWL &9jc'làa,fèfj Agente Software
Basi di XML
Tags <address> <name> <title>mrs.</title> <first-name>mary</first-name> <last-name>mcgoon</last-name> </name> <street>1401 Main Street</street> <city state="nc">anytown</city> <postal-code>34829</postal-code> </address> Un tag è il testo tra la parentesi angolare sinistra (<) e la destra (>). Ci sono tag di apertura e tag di chiusura
Elementi <address> <name> <title>mrs.</title> <first-name>mary</first-name> <last-name>mcgoon</last-name> </name> <street>1401 Main Street</street> <city state="nc">anytown</city> <postal-code>34829</postal-code> </address> Un elemento è composto da un tag di apertura, un tag di chiusura e tutto ciò che c'è in mezzo.
Sintassi degli elementi li tag di apertura di un elemento: <nome [attributi]> nome è il nome dell elemento. attributi è una lista opzionale di attributi per l elemento. Il tag di chiusura corrispondente: </nome> nome è lo stesso identificatore usato nell apertura. Elementi privi di contenuto (empty tag): <nome [attributi] />
Elemento radice Un documento XML deve essere contenuto in un singolo elemento (root element) <!-- A well-formed document --> <greeting> Hello, World! </greeting> <!-- An invalid document --> <greeting> Hello, World! </greeting> <greeting> Hola, el Mundo! </greeting>
Gerarchia di elementi Gli elementi nidificati creano una struttura ad albero tipica dei documenti XML. All interno di questa struttura si definiscono alcuni rapporti di parentela utili per individuare gli elementi: <a> <b> Testo </b> <c> <d/> </c> </a>? a è il nodo radice? b e c sono figli di a, il testo è figlio di b, d è figlio di c? c è il padre di d, b è il padre del Testo, a è il padre di b e c? b e c sono fratelli? b, c, d e il testo sono discendenti di a, d è un discendente di c, il testo è un discendente di b? a è un predecessore di b, c, d e del testo, b è un predecessore del testo, c è un predecessore di d.
Elementi non sovrapponibili <!-- NOT legal XML markup --> <p> <b>i <i>really love </b> XML. </i> </p> <!-- legal XML markup --> <p> <b>i <i>really love </i> </b> <i>xml.</i> </p>
Elementi di chiusura necessari <!-- NOT legal XML markup --> <p>yada yada yada... <p>yada yada yada... <p>... <!-- Two equivalent break elements --> <br></br> <br/> <!-- Two equivalent image elements --> <img src="../img/c.gif"></img> <img src="../img/c.gif" />
Elementi case-sensitive <!-- NOT legal XML markup --> <h1> Elements are case sensitive </H1> <!-- legal XML markup --> <h1> Elements are case sensitive </h1>
Attributi <address> <name> <title>mrs.</title> <first-name>mary</first-name> <last-name>mcgoon</last-name> </name> <street>1401 Main Street</street> <city state="nc">anytown</city> <postal-code>34829</postal-code> </address> Un attributo è una coppia nome-valore all'interno di un tag di apertura.
Sintassi degli attributi Gli attributi permettono di specificare proprietà degli elementi Sintassi di base: <nome attributo1= val1,..., attributon= valn > Sono utilizzati per definire proprietà che non possono o non si vogliono definire nel contenuto dell'elemento
Regole per gli attributi Gli attributi XML devono rispettare due regole: Devono avere valori I valori devono essere racchiusi tra doppi apici <!-- NOT legal XML markup --> <ol compact /> <!-- NOT legal XML markup --> <ol compact= yes />
Commenti Possono apparire in qualsiasi punto del documento Il loro contenuto viene ignorato dal parser Possono contenere qualsiasi carattere tranne: -- <!-- Here's a PI for Cocoon: --> <?cocoon-process type="sql"?>
Entità <!-- Here's an entity: --> <!ENTITY dw "developerworks"> E' possibile definire entità con il tag ENTITY Rispetto all'esempio, il processore XML sostuisce tutte le occorrenze di &dt; con la stringa developerworks Entità carattere predefinite: < rappresenta < > rappresenta > " rappresenta & rappresenta & ' rappresenta '
Sezioni PCData Il testo inseribile nei documenti XML comprende tutti i caratteri definiti in UNICODE. È possibile inserire caratteri speciali o riservati tramite entità carattere. È possibile inserire stringhe predefinite tramite entità generali. Non è possibile usare esplicitamente i caratteri >, < e &, per i quali è sempre necessario usare le corrispondenti entità carattere.
Sezioni CDATA CDATA = dati carattere All'interno di sezioni CDATA si può utilizzare qualsiasi sequenza di carattere Le sequenze sono ignorare dal parser e visualizzate Sintassi: <![CDATA[char_seq]]> <!-- Here's a CDATA section: --> <![CDATA[<HTML><HEAD></HEAD> <BODY>Ciao Mondo</BODY></HTML>]]>
Processing Instruction <?target data?> Sono usate per passare informazioni extramarkup ai programmi che manipoleranno il file XML. target identifica il destinatario della PI. data è una stringa di dati per la PI. <!-- Here's a PI for Cocoon: --> <?cocoon-process type="sql"?>
Dichiarazione XML <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?> La dichiarazione XML è obbligatoria e deve essere posta all immediato inizio del documento Gli attributi sono: version: (obbligatorio) la versione di XML usata. encoding: (opzionale) nome della codifica dei caratteri usata nel documento. (default: UTF-8 o 16) standalone: (opzionale) se vale yes indica che il file non fa riferimento ad altri file esterni. (default: no)
Specificare le regole sintattiche Document Type Definition XML-Schema <address> <name> <title>mrs.</title> <first-name>mary</first-name> <last-name>mcgoon</last-name> </name> <street>1401 Main Street</street> <city state="nc">anytown</city> <postal-code>34829</postal-code> </address>
Documenti invalidi, validi e well-formed Documenti invalidi Non conformi alle regole sintattiche XML o all'associato DTD o schema Documenti validi Conformi sia alle regole sintattiche XML che a quelle definite nell'associato DTD o schema Documenti well-formed Conformi alle regole sintattiche XML, ma che non hanno un DTD o schema associato
Molteplici interpretazioni di un tag Il tag <TITLE> può essere interpretato, come: Il titolo di una pagina web Il titolo di un libro Il titolo di una casa nobiliare Il titolo di un film Il titolo di una slide ecc. Problema: Come associare un significato unico ai tag?
Namespaces I namespaces servono a dichiarare l appartenenza degli elementi a particolari linguaggi XML. Sono particolarmente utili se più linguaggi vengono mescolati nello stesso documento, con possibili di collisioni tra nomi.
Riferimento a un namespace <slide> <title xmlns= http://www.example.com/slideshow > Overview </title> </slide> L'attributo xmlns permette di specificare il significato da dare all'elemento La validità di xmlns è estesa a tutto il contenuto dell elemento stesso.
Definire un prefisso namespace Quando si deve far spesso riferimento a un namespace è conveniente definire un prefisso <SL:slideshow xmlns:sl= http://www.example.com/slideshow >... <slide> <SL:title>Overview</SL:title> </slide>... </SL:slideshow>
Sintassi definizione namespace <name xmlns="uri"> Dichiarazione riferimento namespace: indica il namespace per l'elemento e tutti gli elementi contenuti non prefissati. <name xmlns:prfx="uri"> Dichiarazione prefisso namespace: indica che tutti gli elementi contenuti il cui nome è prefissato da prfx: andranno considerati appartenenti al namespace puntato da uri. <name xmlns="uri1" xmlns:prfx1="uri2" xmlns:prfx2="uri3"> Ci possono essere più namespaces attivi per lo stesso elemento, ma solo uno di tipo riferimento.
Esercizi & Laboratorio XML
Strumenti XML Editor Convertitori non XML -> XML XML --> XML XML -> non XML Parser o processori Memorizzazione e gestione Distribuzione Software lato client Software lato server
Esercitazione: obiettivo Costruire un primo documento xml L'esempio è tratto da: Web Services Tutorial Cap. 5 - Understanding XML
Passo 1: il file Creare un file chiamato slidesample01.xml Attenzione: per editare il file utilizzare un editor ASCII
Passo 2: la dichiarazione <?xml version='1.0' encoding='utf-8'?>
Passo 3: un commento <?xml version='1.0' encoding='utf-8'?> <!-- A SAMPLE set of slides -->
Passo 4: l'elemento radice <?xml version='1.0' encoding='utf-8'?> <!-- A SAMPLE set of slides --> <slideshow> </slideshow>
Passo 5: attributi a un elemento <?xml version='1.0' encoding='utf-8'?> <!-- A SAMPLE set of slides --> <slideshow title= Sample Slide Show date= Date of publication author= Yours Truly > </slideshow>
Passo 6: elementi annidati <slideshow... > <!-- TITLE SLIDE --> <slide type= all > <title>wake up to WonderWidgets!</title> </slide> </slideshow>
Passo 7: testo in stile HTML... <!-- TITLE SLIDE --> <slide type= all > <title>wake up to WonderWidgets!</title> </slide> <!-- OVERVIEW --> <slide type= all > <title>overview</title> <item>why <em>ww</em> are great</item> <item>who <em>buys</em> WW</item> </slide> </slideshow>
Passo 8: un elemento vuoto... <!-- OVERVIEW --> <slide type= all > <title>overview</title> <item>why <em>ww</em> are great</item> <item/> <item>who <em>buys</em> WW</item> </slide> </slideshow>
slidesample01.xml <!-- A SAMPLE set of slides --> <slideshow title="sample Slide Show" date="date of publication" author="yours Truly" > <!-- TITLE SLIDE --> <slide type="all"> <title>wake up to WonderWidgets!</title> </slide> <!-- OVERVIEW --> <slide type="all"> <title>overview</title> <item>why <em>wonderwidgets</em> are great</item> <item/> <item>who <em>buys</em> WonderWidgets</item> </slide> </slideshow>
XML & Browser
Introdurre un errore... <!-- OVERVIEW --> <slide type= all > <title>overview</title> <item>why <em>ww</em> are great</item> <item/> <item>who <em>buys</em> WW</item> </slide> </slideshow>
Errore nel parsing
Altri esercizi Su The Java Web Services Tutorial : Utilizzare processing instruction (p.122) Utilizzare entità (p.125) Inserire sezioni CDATA (p.127)
Risorse On-Line Sito corso: Articolo: XML in 10 punti Articolo: The Semantic Web Documento: Introduction to XML Ebook: The Java Web Services Tutorial Link: Sito W3C: www.w3.org
Domande?