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,
&quot; non andare via! &quot;”>
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 &nbsp; 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]
Scarica

Un nuovo modo di strutturare i dati nel Web: XML