Parser rdf en javascript

Para implementar la funcionalidad de "importar triples", en el Editor RDF, es necesario utilizar un parser de documentos rdf. La primera problemática asociada al parser, es la inmensidad de serializaciones existentes para los modelos RDF, sólo para nombrar algunos: xml, xml-abbrev, n3, ntriple, json, trix, trig, turtle. Tomando sólo el caso de xml, que por ser el primero debiera estar mas desarrollado, se encuentra que existen, al menos, los siguientes parser disponibles:
En todos estos parser falla, al menos, el siguiente ejemplo:

Desde: http://openlibrary.org/b/OL10208782M.rdf
<rdf:RDF
  xmlns:bibo='http://purl.org/ontology/bibo/'
  xmlns:rdfs='http://www.w3.org/2000/01/rdf-schema#'
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
  xmlns:dcterms='http://purl.org/dc/terms/'
  xmlns:dc='http://purl.org/dc/elements/1.1/'
>
    <rdf:Description rdf:about="http://openlibrary.org/b/OL10208782M">
          <bibo:authorList rdf:parseType="Collection">
            <rdf:Description rdf:about="http://openlibrary.org/a/OL2668863A">
               <rdf:value>Michael C. Rea</rdf:value>
            </rdf:Description>

          </bibo:authorList>
        <dcterms:title>Arguing About Metaphysics</dcterms:title>
        <dcterms:publisher>Routledge</dcterms:publisher>   
        <dcterms:issued>July 1, 2008</dcterms:issued>
        <dcterms:extent>559</dcterms:extent>
        <bibo:edition>1 edition</bibo:edition>
        <dc:subject>Metaphysics</dc:subject>
    </rdf:Description>
</rdf:RDF>

El error se presenta en la sección de Collection (en azul) y ninguno de los parser logra generar los triples asociados de forma correcta.

Una primera opción, para sobrepasar esta dificultad, es implementar un parche que soporte el ejemplo anterior, sobre alguno de los parser rdf/xml en javascript. Además, se puede validar contra los casos de prueba de rdf. Todo lo anterior requiere un esfuerzo no menor, el que puede ser inútil si no se mantiene en el tiempo. Otra opción es implementar el parser por el lado del servidor, utilizando un parser maduro como Raptor, pero es una complicación ya que el Editor RDF es una aplicación javascript sin componente de servidor.

Investigando en la línea de Raptor, encontré el servicio llamado triplr que permite generar triples rdf desde una url, este servicio es obra de Dave Beckett el mismo autor de Raptor. La forma de utilizar el servicio es simple y consiste en llamar una dirección de la forma siguiente:

    http://triplr.org/<formato de salida>/<url del documento rdf, con http:// opcional>

Las opciones de formato de salida son:

(copiado desde http://triplr.org/how)
HTML - use html
JSON - use json
N-Triples - use ntriples
RDF/XML - use rdf (this is also the default)
RSS 1.0 - use rss: removed since people abused this to proxy other RSS feeds.
Turtle - use turtle (n3 also works)

Para el ejemplo que tiene problemas con los parser javascript y con una salida en html la forma de invocar el servicio es: http://triplr.org/html/openlibrary.org/b/OL10208782M.rdf. Como vemos, la colección es identificada de forma correcta. Para utilizar este servicio en el Editor RDF se puede invocar con la salida de tipo json, y gracias al uso de yahoo pipe se puede utilizar como jsonp para sobrepasar la política del mismo origen.

Una vez resuelto el problema del parser, aún queda el problema de la multiplicidad de serializaciones, la solución está en el mismo triplr que soporta los siguientes tipos de documentos rdf: atom, grddl, n3, ntriples, rdf, rdfa, rss, trig, turtle. Como una prueba de concepto, ver el siguiente ejemplo de implementación con la llamada del pipe que invoca triplr.

No hay comentarios: