Fondamenti di Informatica
Sistemi di Elaborazione delle Informazioni
Informatica Applicata
2.5 Cenni sui namespace
Antonella Poggi
Anno Accademico 2012-2013
DIPARTIMENTO DI SCIENZE DOCUMENTARIE
LINGUISTICO FILOLOGICHE
E GEOGRAFICHE
I namespace: motivazioni
•  Supponiamo di voler usare lo stesso nome di
elemento, e.g. title, per marcare un metadato di
due oggetti diversi, e.g. un documento che contiene
un insieme di notizie ed il contenuto di una pagina
web relativa ad una notizia
•  Nel file che definisce la marcatura del documento
vorremmo includere la dichiarazione di due tipi di
elemento title, che dovrebbero avere una
semantica diversa a seconda dell’oggetto a cui si
riferiscono, i.e. l’insieme delle notizie o la pagina
web
Antonella Poggi
Pagina 2
Esempio: collisione di nomi di elementi
Supponiamo di voler usare RSS 2.0, che è un linguaggio di marcatura per distribuire notizie/
contenuti web
<?xml version="1.0"?>
<rss version="2.0”>
<channel>
<title>Grid@CLEF News</title>
<link>http://ims.dei.unipd.it/gridclef/</link>
<description>Events and updates about the Grid@CLEF track.</description>
<item>
<title>Blog post on Grid@CLEF</title>
...
<description>
<html>
<head>
<title>Information Retrieval Blog</title>
</head>
Specifica del
L’elemento
title
contenuto
ha
...
significati
</html>
</description>
diversi in RSS e in
</item>
HTML
</channel>
</rss>
Antonella Poggi
Pagina 3
I namespace XML: cosa sono?
•  XML risolve il problema della collisione di nomi di elementi definiti
in linguaggi di marcatura diversi ricorrendo a spazi di nomi
(namespace) diversi e qualificando ogni occorrenza
dell’elemento rispetto allo spazio a cui appartiene
•  Un namespace è pertanto un raggruppamento di nomi sotto un
unico identificatore
•  Dal punto di vista tecnico, un namespace è identificato
univocamente da un’URI
•  In un documento XML si fa riferimento ad uno o più namespace
associando ad un elemento un attributo speciale, xmlns
–  può essere definito un solo namespace di default: un elemento non
qualificato esplicitamente, è implicitamente qualificato con il namespace
di default
–  il riferimento ad un namespace vale per l’elemento corrente e per i suoi
sotto-elementi
•  Per facilitarne l’utilizzo, nel documento XML si associa ad ogni
namespace un prefisso che consente di riferirsi ad esso senza
dover usare l’intero URI
Antonella Poggi
Pagina 4
Esempio: con i namespace
<?xml version="1.0"?>
<rss version="2.0” xmlns="http://www.rssboard.org"
xmlns:xhtml="http://www.w3.org/TR/xhtml1”>
Namespace
<channel>
<title>Grid@CLEF News</title>
<link>http://ims.dei.unipd.it/gridclef/</link>
<description>Events and updates about the Grid@CLEF track.</description>
<item>
<title>Blog post on Grid@CLEF</title>
...
<description>
<xhtml:html>
<xhtml:head>
<xhtml:title>Information Retrieval Blog</xhtml:title>
</xhtml:head>
...
</xhtml:html>
</description>
Prefisso del
Prefisso
delnamespace
</item>
namespace
</channel>
</rss>
Antonella Poggi
di default
Pagina 5
Riuso con i namespace
•  I namespace permettono quindi di usare linguaggi di
marcatura XML esistenti, nella definizione del linguaggio
di marcatura che voglio usare per etichettare il mio
documento
•  Il riuso di linguaggi di marcatura può essere utile per lo
scambio di dati
–  permette di parlare la stessa lingua
Esempio
•  La Dublin Core Metadata Initiative raccomanda l’uso di
un insieme di namespace da loro definiti, per annotare
un documento XML secondo lo schema di metadati da
loro definito (il Dublin Core Metadata Element Set)
Antonella Poggi
Pagina 6
Esempio: Dublin Core e i namespace
<metadata xmlns:dc="http://purl.org/dc/elements/
1.1/">
<dc:title> DIAG </dc:title>
<dc:description> DIAG, former DIS, has been at
the forefront of research in control theory,
computing science and operations research since
its foundation. </dc:description>
<dc:publisher> DIAG, Sapienza Università di
Roma </dc:publisher>
<dc:identifier> http://www.dis.uniroma1.it </
dc:identifier>
</metadata>
Antonella Poggi
Pagina 7
Limiti del DTD nell’uso dei namespace
•  Affinché un documento XML in cui si fa riferimento ad un
namespace sia valido rispetto ad un DTD, bisogna che sia
l’attributo xmlns che gli elementi, comprensivi del loro prefisso,
siano stati dichiarati nel DTD
•  Se si vuole definire un linguaggio di marcatura con un DTD d
che, sfruttando il meccanismo dei namespace, ri-usi al suo
interno un linguaggio di marcatura definito in un DTD d’,
sostanzialmente è necessario riscrivere d’ (per aggiungere il
prefisso appropriato a tutti gli elementi e attributi dichiarati)
–  laborioso!
–  poco flessibile!
  Se è necessario l’uso dei namespace, allora è preferibile
usare XML Schema
Antonella Poggi
Pagina 8
Esempio: DTD e namespace(1)
<?xml version="1.0"?>
<!DOCTYPE rss SYSTEM “rss_new.dtd”>
<rss version="2.0” xmlns="http://www.rssboard.org"
xmlns:xhtml="http://www.w3.org/TR/xhtml1”>
<channel>
<title>Grid@CLEF News</title>
<link>http://ims.dei.unipd.it/gridclef/</link>
<description>Events and updates about the Grid@CLEF track.</description>
<item>
<title>Blog post on Grid@CLEF</title>
...
<description>
<xhtml:html>
<xhtml:head>
<xhtml:title>Information Retrieval Blog</xhtml:title>
</xhtml:head>
...
</xhtml:html>
</description>
</item>
</channel>
</rss>
Antonella Poggi
Pagina 9
Esempio: DTD e namespace (2)
<!ELEMENT rss (channel)>
<!ATTLIST rss version CDATA #FIXED “2.0”
xmlns CDATA #FIXED “http://www.rssboard.org”
xmlns:html CDATA #FIXED “http://www.w3.org/TR/
xhtml1”>
<!ELEMENT channel (title, link, description, item+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT link (#PCDATA)>
<!ELEMENT description (free_text | xhtml:html)>
<!ELEMENT free_text (#PCDATA)>
<!ELEMENT xhtml:html (xhtml:head, xhtml:body)>
...
Antonella Poggi
Pagina 10
Scarica

2.5 Cenni sui namespace