Un nuovo modo di strutturare i dati nel Web: XML
Download
Report
Transcript Un nuovo modo di strutturare i dati nel Web: XML
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]