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