Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Visualizzare i metadati RDF Dublin core con le trasformazioni XSL

Mettere insieme XSL, XPATH e le definizioni Dublin core per rappresentare i metadati RDF
Mettere insieme XSL, XPATH e le definizioni Dublin core per rappresentare i metadati RDF
Link copiato negli appunti

Un problema molto sentito negli ultimi anni è l'estrazione automatica di metadati da un documento HTML o XHTML. La creazione automatica o semi-automatica della descrizione di un sito sarebbe un grande aiuto alla diffusione del cosiddetto Web Semantico. Questo perché sarebbe possibile descrivere tramite metadati i siti all'interno del world wide web, dando la possibilità di fare ricerche semantiche (cioè legate al significato del contenuto dei siti) e non solo testuali sull'intera (ed immensa) mole di dati presenti.

Il problema, però è di difficile soluzione pratica, in quanto chiunque conosca un po' di Web design sa come, per molti motivi, sia difficile seguire degli standard definiti per la creazione e strutturazione delle pagine Web. Di conseguenza le pagine Web che si trovano su internet sono scritte con strutture completamente differenti le une dalle altre, rendendo quasi impossibile creare un algoritmo generico in grado di processarle e creare un file di metadati coerente.

Per introdurre all'argomento l'obiettivo di questo articolo sarà perciò affrontare il problema opposto, e decisamente più semplice, della creazione di una pagina XHTML a partire da un file di metadati RDF. Il risultato sarà una vista leggibile, "human-readable", di quest'ultimo, che invece è stato creato per essere "machine-readable".

Abbiamo già discusso su queste colonne, dell'utilità di questo formato per la descrizione di risorse sia digitali che non. Ecco alcuni rimandi:

Il file RDF

Partiamo proprio creando un semplice catalogo bibliografico della famosa serie di libri scritta da Frank Herbert sul pianeta Dune (tratto da www.arrakis.co.uk) scritto in formato RDF.

Per semplicità scegliamo l'estensione .xml, anziché .rdf, per non incorrere in noiose definizioni del MIME-Type, che non esistono nativamente in tutti i browser.

Esaminiamo ora il nostro esempio. Il catalogo è scritto utilizzando lo schema RDF Dublin Core, che è lo standard più diffuso per la scrittura di metadati in RDF, grazie alla sua estensione di termini e la sua flessibilità

Estratto del file RDF (example.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="example.xsl"?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/terms/"> 
  <rdf:Description rdf:about="http://www.bookshop.fake/Herbert/Empire Burlesque">
    <dc:title>Dune</dc:title>
    <dc:creator>Frank Herbert</dc:creator>
    <dc:created>1965</dc:created>
    <dc:publisher>Chilton Publishing</dc:publisher>
    <dc:type>Text</dc:type>
  </rdf:Description>
  ...
</rdf:RDF>

Dopo la direttiva di elaborazione necessaria per ogni XML

<?xml version="1.0"?>

il file contiene la direttiva che permette di identificare quale file di stile utilizzare per la visualizzazione, in questo caso è il file example.xsl che svilupperemo nel corso dell'articolo. È importante includere questa dichiarazione per permettere ai browser di utilizzare automaticamente questo file per la visualizzazione della descrizione RDF.

<?xml-stylesheet type="text/xsl" href="example.xsl"?>

Dopo le dichiarazioni iniziali il file di metadati si apre con l'elemento radice rdf:RDF, che dichiara la presenza di una descrizione RDF e che integra gli schemi RDF (identificato con il namespace rdf) e Dublin Core (indentificato con il namespace dc).

Un generico elemento descrittivo 柩dentificato dal tag rdf:Description e contiene i metadati relativi ai singoli libri della bibliografia identificati dai tag Dublin Core.

Metadato Tag Dublin Core
Titolo dc:title
Autore dc:creator
Anno di creazione dc:created
Editore dc:publisher
Tipo di risorsa dc:type

La trasformazione XSL

Vediamo ora può essere implementata una trasformazione XSL in grado di rendere "leggibile" il file RDF di esempio.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/terms/">
<xsl:output method="html" omit-xml-declaration="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" indent="yes"/>

<xsl:template match="/">	
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <title>The Dune Series - An XSLT Example</title>

  <style type="text/css"> ... </style>

  </head>
  <body>
  <h1>The Dune Series - An XSLT Example</h1>

  <xsl:for-each select="//rdf:Description">
    <div class="box">
      <h2><xsl:value-of select="dc:title"/></h2> 
      By:        <span><xsl:value-of select="dc:creator"/></span><br/>
      Year:      <span><xsl:value-of select="dc:created"/></span><br/>
      Publisher: <span><xsl:value-of select="dc:publisher"/></span><br/>
    </div> 
  </xsl:for-each>

  </body>		
  </html>
  </xsl:template>
</xsl:stylesheet>

Esaminiamo per primo l'elemento radice:

<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
                xmlns:dc="http://purl.org/dc/terms/">

Dove abbiamo i riferimenti al namespace xsl (ovviamente) ed ai namespaces rdf e dc in modo da poter far riferimento correttamente gli elementi presenti all'interno del file RDF di esempio.

Altro aspetto importante e spesso trascurato è l'utilizzo dell'elemento xsl:output; quest'ultimo permette di specificare tramite gli attributi doctype-public e doctype-system, ovvero il DOCTYPE del documento risultato della trasformazione. Nel nostro caso vogliamo produrre un documento XHTML quindi abbiamo:

<xsl:output method="html"
            omit-xml-declaration="yes" 
            doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
            doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
            indent="yes" />

L'attributo omit-xml-declaration, se impostato a "yes" permette di evitare l'inclusione della dichiarazione <?xml ... ?>, evitando un fastidioso bug di visualizzazione degli XHTML nelle vecchie versioni di Internet Explorer. L'attributo indent specifica che il documento trasformato dovrebbe rispettare l'indentazione secondo la struttura gerarchica degli elementi.

A questo punto può iniziare la parte relativa alla visualizzazione. Fondamentale è l'utilizzo dell'elemento

<xsl:template match="/">

per definire la visualizzazione dell'elemento radice del file RDF tramite l'utilizzo dell'espressione XPATH /, si può notare come l'utilizzo di rdf:RDF al posto di / avrebbe portato allo stesso risultato, ma la seconda soluzione è quella preferibile in quanto più generica. All'interno di questo template vengono definiti tutti i tag principali, html, head e body.

L'ultimo passaggio è definire la visualizzazione dei singoli elementi della bibliografia. Per fare questo utilizziamo l'elemento all'interno dell'elemento body

<xsl:for-each select="//rdf:Description">

che permette di leggere tutti gli elementi rdf:Description (anche in questo caso abbiamo utilizzato il percoso XPATH) e di eseguire le istruzioni in esso contenute. In particolare per recuperare i valori dei metadati relativi ad ogni libro utilizziamo l'elemento

<xsl:value-of select="..."/>

dove all'interno dell'attributo select scriviamo di volta in volta i nomi degli elementi Dublin Core corrispondenti ai vari metadati.

A questo punto finalmente possiamo visualizzare con il nostro browser il file RDF opportunamente trasformato in formato XHTML.

Ti consigliamo anche