Upload
domenico-briganti
View
288
Download
1
Embed Size (px)
DESCRIPTION
L’eXtensible Markup Language, fin dalla sua nascita, ha avuto un gran consenso da parte di tutti gli attori che operano nel mondo informatico, diventando di fatto la base di molte applicazioni, in particolar modo di quelle che fondano la loro attività sullo scambio di informazioni, per la sua semplicità ed interoperabilità.
Citation preview
XMLannessi e connessi
Domenico Briganti
Francesco Angelillo
Eidon School 2
L’eXtensible Markup Language, fin dalla sua nascita, ha avuto un gran consenso da parte di tutti gli attori che operano nel mondo informatico, diventando di fatto la base di molte applicazioni, in particolar modo di quelle che fondano la loro attività sullo scambio di informazioni, per la sua semplicità ed interoperabilità.
Eidon School 3
Agenda
XML e Namespace Accenni di
XMLSchema XSL XPath XSL-Fo
Eidon School 4
XML
Eidon School 5
Le origini di XML 1/2L’XML è un metalinguaggio, derivato da SGML (Standard Generalized Markup Language standard internazionale ISO 8879 del 1986) che ha il compito di rappresentare informazioni strutturate più rigidamente rispetto al suo predecessore. L’SGML deriva dal GML, creato da IBM nel ’69, che aveva come obiettivo quello di rendere i documenti elettronici più comprensibili e versatili, indipendenti dal mezzo di consultazione e di sollevare l’autore dal compito di impaginazione (per qualunque output, carta, pagina web, presentazione, ecc.)...e per durare per tempo!
Eidon School 6
Le origini di XML 2/2L’SGML non ha avuto notorietà essendo complicato da implementare.
L’HTML, un altro derivato di SGML, ha avuto invece un successo enorme per la sua semplicità e per il boom dei web browser.
L’XML è un metalinguaggio che mira a migliorare sia l’SGML perché complesso, sia l’HTML (perché mischia nel testo informazioni di impaginazione e formattazione).
È stato formalizzato dal W3C nel febbraio ’98, attualmente (2009) la versione 1.1 è W3C recommendation.
Eidon School 7
Ma cos’è XML? È una raccomandazione del W3C
http://www.w3.org/XML Consiste in un insieme di tag (marcatori di testo che
sono racchiusi da “<“ e “>”) e attributi definiti dall’utente che permettono di rappresentare un’informazione in maniera gerarchica.
È uno standard aperto libero da royalty, brevetti, copyright o segreti industriali.
Auto esplicativo. Creabile ed editabile con un semplice editor di testo.
Eidon School 8
..e cosa non è! Un linguaggio di programmazione. Un sostituto di HTML. Un protocollo di comunicazione. Uno standard binario.
Eidon School 9
Vediamo un esempio di XML<?xml version="1.1" encoding=”UTF-8”?><computer>
<!—questo è un commento--><memoria tipo=”DDR” unit=”Mb”>512</memoria><CPU>1.2 GHz</CPU><tastiera>400 tasti</tastiera><HD>
<HardDisk>7200 rpm 5Gb</HardDisk><HardDisk>7200 rpm 224Tb</HardDisk>
</HD><descrizione><![CDATA[ questo è
un ottimo <<PC>>!]]></descrizione><lettore/>
</computer>
Eidon School 10
Esaminiamolo!Questa è una fantomatica descrizione di un computer.
Un documento XML è formato da due parti: Un prologo facoltativo (ma raccomandato per
indicare la versione del documento xml e la codifica) che vedremo tra pochissimo
Il corpo del documento
Eidon School 11
Processing Instructions Sono delle direttive che forniscono informazioni su
come leggere/parserizzare i file xml. Sono racchiusi tra “<?” e “?>”. Come per i commenti, possono trovarsi in
qualunque punto del documento ma non dentro un tag es. <tag NO-QUI>.
<?robots index="yes" follow="no"?>
<?xml-stylesheet href="person.css" type="text/css"?>
<?php mysql_connect("database.unc.edu", "debra", "secret"); ?>
Eidon School 12
Il prologo (XML Declaration) È una process instruction riservata Se c’è, deve trovarsi in testa al documento
Nell’esempio che abbiamo visto era:
<?xml version="1.1" encoding=”UTF-8”?>
Il primo indica la versione di XML utilizzata, la più recente è la 1.1. Il secondo l’encoding del documento (in questo caso UTF-8, che è anche il charterset di default per XML).
È possibile indicare anche standalone="yes" Xml, XML, xml ecc. in qualunque combinazione di case sono
riservati.
Eidon School 13
Il corpoDopo il possibile prologo, segue una radice da cui si origina l’albero del documento. Come l’esempio dimostra, la radice dell’elemento contiene i dati (le informazioni vere e proprie) tra i marcatori mentre quest’ultimi si occupano di definire la struttura gerarchica del documento.
Eidon School 14
Strutturare al meglio!Vediamo che le informazioni, i dati veri e propri, del documento sono contenuti dentro dei tag all’interno dei quali è possibile inserire anche altri tag figli.
Benché sia ammissibile avere tag figli e testo dentro lo stesso marcatore (“tag a contenuto misto”), ad esempio:
<HD>Haqdrdisk<HardQ>5</ HardQ>
</HD>
è sconsigliato, in quanto si complica la creazione di documenti che controllano la correttezza del nostro XML
Eidon School 15
AttributiI nostri elementi possono contenere anche attributi come questi:
<memoria tipo=”DDR” unit=”Mb”>512</memoria>
possiamo anche scrivere le stesse informazioni così:
<memoria tipo=”DDR” unit=”Mb” qta=”512”/>
oppure cosi:<memoria>
<tipo>DDR</tipo>
<unit>Mb</unit>
<qta>512</qta>
</memoria>
oppure cosi ancora:
<memoria>512Mb DDR</memoria>
Qual è secondo voi la rappresentazione migliore?
BENE!! OVVIAMENTE LA PRIMA FORMA!!è più utilizzata perché si tende a inserire negli
attributi delle proprietà che riguardano il valore contenuto nel tag, evitando cosi di andare a
modificare il valore di un attributo, meno flessibile di un testo contenuto in un tag, o di
dover analizzare la stringa “512Mb DDR” come nell’ultimo caso.
Eidon School 16
Sezioni CDATAPossiamo notare una sezione CDATA (Character Data):
<descrizione><![CDATA[ questo è
un ottimo <<PC>>!]]>
</descrizione>
Questa è utilizzata per inserire del testo in cui sono presenti anche caratteri particolari come “&”, “<”, “>” senza che siano interpretati come riferimenti a markup.
Deve iniziare con “<![CDATA[”. E terminare con “]]>”. Non può contenere al suo interno la stringa “]]>”.
Eidon School 17
Dove lo abbiamo già visto?
Entità 1/2
Per poter usare caratteri significativi per XML si usano le entità: Cinque sono le predefinite <(<) >(>) &(&) "(“)
'(‘) Il DTD viene usato per dichiarare entità:
<!ENTITY fnof "ƒ">
<!ENTITY coordinate "((x, y) | (y, x) | (q, r) | (r, q))“ >
Cosa succede se scrivo <alert>Il totale è < 0</alert> ?server.dtd:<!ENTITY jvmRoute "rcstom01cinematv"><!ENTITY SHUTDOWNport "8419"><!ENTITY HTTPport "8097"><!ENTITY AJPport "8031">
conf/server.xml:<!DOCTYPE Server SYSTEM "../server.dtd"><Server port="&SHUTDOWNport;“
shutdown="SHUTDOWN">
Eidon School 18
DEMORisolvi entità
Eidon School 19
Entità 2/2
È possibile inserire come entità anche un intero documento, anche esterno:
<!ENTITY footer SYSTEM "http://www.oreilly.com/boilerplate/footer.xml">
Eidon School 20
I tipi di documento XMLI documenti XML possono essere di due tipi:
Ben Formati: è il documento che rispetta le regole di XML (non può altrimenti essere un documento xml!).
Validi: oltre a essere ben formati deve anche rispondere correttamente ad un controllo semantico che permette di sapere se il documento ha un significato rispetto a quello che vogliamo. Un programma di elaborazione matematica gestisce l’importazione di documenti XML contenenti determinati tag, diversi per un programma bancario. Questo controllo è opzionale.
Eidon School 21
Le regole di XML per documenti well-format
L’intero documento deve essere racchiuso in un unico tag radice.
I tag devono essere annidati in maniera corretta, ogni tag di apertura deve essere seguito dal suo di chiusura dentro i quali possono esserci altri tag sempre annidati in maniera corretta.
Gli attributi possono essere solo inseriti nei tag di apertura. Lo stesso attributo non può comparire più di una volta
all’interno dello stesso tag. Ogni attributo inserito deve avere un valore e deve essere
racchiuso tra doppi o singoli apici. I nomi dei marcatori e degli attributi sono Case Sensitive.
Eidon School 22
DOC TYPE Un documento valido deve avere un DTD (o,
come vedremo più avanti, un XML Schema) con cui può essere validato
Il DOCTYPE deve essere inserito tra l’xml declaration e il root element
Subito dopo “<!DOCTYPE” è presente in nome del tag di root del documento
SYSTEM o PUBLIC?
Eidon School 23
DOCTYPE: esempi XHTML 1.0 Strict
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML 1.0 Transitional
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTML 1.1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Eidon School 24
DOCTYPE: esempi<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>XHTML 1.0 Example</title>
….
Eidon School 25
DOCTYPE: esempi<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>CommunityAtCasa</display-name>
…
Eidon School 26
NAMESPACE
Eidon School 27
Il problemaIn un unico documento XML possiamo rappresentare informazioni di natura diversa:
<autovettura>
<modello type="I">Honda CRW</modello>
<pneumatici>
<modello>Pirelli P9999</modello>
</pneumatici>
</autovettura>
Come distinguere i vari tag in base al loro significato?
Eidon School 28
La soluzionePer dare un significato differente ai vari tag si usano dei prefissi, identificatori posti prima del nome del marcatore e separati dai “:” da quest’ultimo:
<?xml:namespace ns="http://some/uri1" prefix="au"?> <?xml:namespace ns="http://some/url2" prefix="pn"?>
<au:autovettura>
<au:modello type="I">Honda CRW</au:modello>
<pn:pneumatici>
<pn:modello>Pirelli P9999</pn:modello>
</pn:pneumatici>
</au:autovettura>
Eidon School 29
Namespace È una recommendation di W3C dal 1999. La direttiva “xml:namespace” indica a quale URI
(Uniform Resource Identifier) si riferisce un determinato prefisso. Si usa un URI perché unico in Internet.
Un marcatore che usa un prefisso di dice che ha un “nome qualificato”.
Si può specificare anche al suo primo utilizzo e/o dentro un tag (e ha validità solo nei nodi figli):
<au:autovettura xmlns:au="http://some/uri">
Eidon School 30
Namespace di default Tutti i tag che non hanno un prefisso appartengono
al namespace di default. Il namespace di default può anche essere dichiarato
attraverso la parola chiave riservata xmlns NON seguita da prefisso:
<autovettura xmlns="http://some/uri"> Il namespace di default non dichiarato ha l’URI ""
Eidon School 31
Namespace e attributi I namespace si possono applicare anche agli
attributi:
<au:modello au:type="I">Honda CRW</au:modello> Il namespace di default non si applica agli attributi
privi di prefisso. Se relativi a namespace diversi, e che puntano a URI
diversi, gli attributi possono avere nome locale uguale.
Eidon School 32
Un esempio<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>msite</display-name>
<description>
MSITE - sito mobile della gazzetta dello sport
</description>
…
Eidon School 33
Facciamo un altro esempio!<!-- http://www.w3.org is bound to n1 and n2 and is the
default -->
<x xmlns:n1="http://www.w3.org"
xmlns:n2="http://www.w3.org"
xmlns="http://www.w3.org" >
<alex a="1" b="2" />
<frantz a="1" n1:a="2" />
<ficarra a="1" a="2" />
<picone n1:a="1" n2:a="2" />
</x>
Eidon School 34
DEMOTest Namespace
Eidon School 35
DEMOMathML e SVG in Mozilla
Eidon School 36
ENCODING
Eidon School 37
Mai visto qualcosa del genere? Simbolo dell'euro � € anche questo è il simbolo dell’euro!! Vari “?” <?xml version='1.0' encoding='UTF-8'?>
Quante volte vi hanno detto che su una pagina html/xml le accentate non si vedono?
…€…
Eidon School 38
Character-Set Quasi tutti i caratteri di ogni lingua sono codificati
nello standard UNICODE che associa un numero ad un simbolo
L’encoding dice come quel numero è scritto fisicamente nel file
I parser XML possono applicare un meccanismo di auto-detection dell’encoding (anche grazie al Byte Order Mark di UTF)
MIME Type text/xml -> US-ASCII, applicazion/xml -> Il client tenta di capire l’econding come nel punto precedente
Eidon School 39
Encoding declaration<?xml version="1.0" encoding="ISO-8859-1"?>
È caldamente consigliato dichiarare l’encoding Se non viene fatto, il default è UTF-8 o UTF-16 Un XML scritto con caratteri ASCII puri non ha
problemi a non dichiarare l’encoding…ma è,à,ù,€ non fanno parte di ASCII 7 bit!
ASCII: <città>Mondovì più Como</città>
Letto da UTF-8: <città >Mondovì più Como</città >
Letto da Latin1: <citt?>Mondov? pi? Como</citt?>
Eidon School 40
Character References 1/2 Da la possibilità di inserire un carattere usando il
codice UNICODE: њ decimale њ esadecimale
Non può essere usato nei nomi di tag e attributi Può essere usato nelle Entità:
<!ENTITY sigma "σ"> (σ)
Eidon School 41
Character References 2/2 Esempio (proverbio greco):
<maxim>σοφός έαυτόν γιγνώσκει</maxim>
“The wise man knows himself”
Eidon School 42
DEMOEncoding
Eidon School 43
Accenni ai contenuti del corso
Eidon School 44
CSS e XSLL’importanza che il W3C ha dato alla separazione delle informazioni in dati e presentazione ha portato la necessita di sviluppare nuove tecnologie capaci di supportare tale divisione. Nasce cosi CSS per HTML, seguito da XSL per XML, due tecnologie chiave per il futuro del web, il web semantico, in cui le macchine sono capaci di comprendere e trattare le informazioni senza la fatica di dover riconoscerle tra le parti di formattazione.
Eidon School 45
XSLÈ una famiglia di linguaggi per la trasformazione e presentazione di documenti XML, si compone di: XPath: recupera determinati elementi di un XML XSLT: Trasforma i file XML in altri formati XSL-Fo: Formattazione
Non sostituisce il CSS, l’XSL è molto utile per
trasformare nella forma i contenuti, mentre il
CSS resta per assegnare gli stili di formattazione ai
tag HTML.
Eidon School 46
XPath Sintassi per localizzare elementi o attributi in
documenti XML Namespaces aware String-based (non XML) Riesce a manipolare stringhe, valutare espressioni
booleane o far calcoli sui nodi o sui loro contenuti. Usato anche da altre tecnologie come XSLT e
XPointer È considerato l’SQL di XML
Eidon School 47
XSLT Raccomandazione del W3C (1.0) del novembre 1999 . W3C: “Linguaggio per trasformate un documento
XML in un altro documento sempre XML”, ma fa molto altro! (unire due documenti XML, ordinare elementi, filtrarli, crearne di nuovi, cambiare strutturalmente il documento).
Namespace: “http://www.w3.org/1999/XSL/Transform”. È spesso utilizzato per trasformare un XML in
XHTML per la visualizzazione sul web. La trasformazione di un XML attraverso un XSLT
viene effettuata dal parser XML.
Eidon School 48
XSL-Fo Raccomandazione del W3C dell’ottobre 2001. Namespace: xmlns:fo=“http://www.w3.org/1999/XSL/Format”
Trasforma un documento XML in uno Formattato secondo un determinato XSL-Fo.
Formati di output: PostScript PDF Testo PCL RTF …
Eidon School 49
XMLSchema Linguaggio per definire delle regole di validità per documenti
XML W3C Raccommendation dal 2001 Più potente del DTD (datatypes…) È XML quindi manipolabile come qualunque altro documento
XML Supporta i namespaces Estensibile Uno schema può validare anche solo una porzione di
documenti in cui è definito un namespace, viceversa, uno documento XML può avere molti XSD per i diversi namespace che ingloba.
Eidon School 50
Java & XML Parser DOM, SAX, StAX, TrAX
Eidon School 51
Parser: DOM vs. SAX Quando usare DOM:
Per percorrere l’albero avanti e indietro Manipolare il documento in molte parti Si ha a disposizione molta memoria perché
l’albero XML viene ricostruito in essa Creare un nuovo documento
Quando usare SAX: Percorrere l’albero solo “forward only” Leggere solo poche informazioni Si ha poca memoria a disposizione
Eidon School 52
Ci vediamo al corso!!Ci vediamo al corso!!
Eidon School 53
Riferimenti XML in a Nutshell, 3rd Edition (ISBN: 0-596-00764-7) http://en.wikipedia.org/wiki/
Standard_Generalized_Markup_Language http://www.sgmlsource.com/history/roots.htm
Eidon School 54