Mostrando entradas con la etiqueta rdf. Mostrar todas las entradas
Mostrando entradas con la etiqueta rdf. Mostrar todas las entradas

Día 3 y Día 4

El día miércoles pude dedicar poco tiempo al trabajo de tesis, principalmente revisando alguna solución para generar RDF y publicarlos.

El día jueves se dedicó a generar RDF desde los datos parseados de transparencia, el trabajo estuvo acotado a los datos de Dotación (el 80-20 de los datos). Gran parte del esfuerzo fue destinado a clasificar los datos, particionando las tablas según los siguientes criterios:
  • Tipo de dotación (planta, contrata, honorario, otra)
  • Fecha (el año al que corresponden los datos)
El principal problema encontrado fue la cantidad de esquemas distintos que se publican para cada tipo de datos, entendiendo que los headers de las tablas representan el esquema. Para muestra, y luego de normalizar las etiquetas, se encuentran los siguientes 31 esquemas:
  1. contrato|estamento|paterno|materno|nombres|grado|funcion|region|nombreregion|ingreso|ini|fin|obs|
  2. dotacion|estamento|paterno|materno|nombres|grado|funcion|region|ini|fin|obs|
  3. estamento|paterno|materno|nombres|grado|funcion|region|ini|
  4. estamento|paterno|materno|nombres|grado|funcion|region|ini|fin|obs|
  5. estamento|paterno|materno|nombres|grado|funcion|region|ini|fin|obs|estab|
  6. estamento|paterno|materno|nombres|grado|funcion|region|ini|fin|obs|ley afecto|
  7. estamento|paterno|materno|nombres|grado|funcion|region|renta|ini|fin|
  8. estamento|paterno|materno|nombres|grado horas|funcion|region|ini|fin|obs|
  9. estamento|paterno|materno|nombres|obs|grado|region|ini|fin|
  10. estamento|rut|dv|corr|paterno|materno|nombres|obs|grado|region|ini|fin|
  11. n|estamento|paterno|materno|nombres|grado|
  12. n|estamento|paterno|materno|nombres|grado|region|ini|fin|obs|
  13. n|estamento|paterno|materno|nombres|obs|funcion|calificacion|region|ini|fin|estab|
  14. n|estamento|paterno|materno|nombres|obs|grado|region|ini|fin|
  15. n|estamento|paterno|materno|nombres|obs|grado|region|ini|fin|estab|
  16. n|estamento|paterno|materno|nombres|obs|grado|region|ini|fin|n res.|
  17. n|n|estamento|paterno|materno|nombres|obs|grado|region|ini|fin|
  18. n|paterno|materno|nombres|funcion|calificacion|
  19. n|paterno|materno|nombres|funcion|calificacion|grado|region|um|honorario|ini|fin|obs|
  20. n|paterno|materno|nombres|funcion|calificacion|region|ini|fin|
  21. n|paterno|materno|nombres|funcion|calificacion|region||ini|fin|estab|obs|
  22. n|paterno|materno|nombres|obs|funcion|calificacion|region|ini|fin|
  23. n|paterno|materno|nombres|obs|grado|region|ini|fin|
  24. n|planta|estamento|corr|paterno|materno|nombres|grado|region|ini|fin|obs|
  25. n|planta|estamento|corr|paterno|materno|nombres|region|grado|ini|fin|estab|funcion|profesion|obs|
  26. n|planta|estamento|paterno|materno|nombres|region|grado|ini|fin|estab|funcion|profesion|obs|
  27. paterno|materno|nombres|funcion|calificacion|grado|region|um|honorario|ini|fin|obs|
  28. paterno|materno|nombres|funcion|calificacion|region|um|honorario|ini y fin|obs|
  29. paterno|materno|nombres|funcion|grado|region|um|remuneracion|ini|fin|obs|
  30. paterno|materno|nombres|obs|funcion|calificacion|region|ini|fin|
  31. paterno|materno|nombres|obs|funcion|profesion|region|ini|fin|
La buena noticia, es que justamente una de las características de RDF es la flexibilidad en sus esquemas, por lo que sin importar que existan entidades que difieran en cantidad o tipos de atributos, esto no es un problema.

Luego, al tener los esquemas de cada archivo procesado normalizado, la generación de RDF es directa, ver en el update del repositorio los cambios en el código con los script de generación.

Al aplicar sobre 50M de datos tabulados, se generaron 300M de datos en RDF serializados en xml.

Cada "entrada de dotación" se modeló con el siguiente esquema:


Una instancia de dotación, se describe de la siguiente forma con el vocabulario visual:
Lo que viene es dejar todos los datos en un triplestore y presentar por facetas.

Día 1

Ayer fue el primer día de trabajo full time en la universidad. Lo mejor de todo fue trabajar desconectado de la red, realmente fue provechoso. El avance estuvo por el lado del editor rdf, el que permitirá integra las figuras del Vocabulario Visual, con lo que se podrá anotar vocabularios owl con rdf. Ayer quedaron listos las figuras para cada componente, y además se puede agregar propiedades a una clase. Falta administrar el rango-dominio de una propiedad, crear los conectores de tipo herencia y el de individual.

Ver en el update del repositorio los cambios en el código. Para muestra un screenshot de como está quedando el editor.



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.

Editor RDF (I)

Durante las últimas semanas he trabajado en desarrollar un editor rdf, el objetivo principal es re-escribir el código de vocab-editor y de paso tener una herramienta que permita, gráficamente, la creación de triples RDF.

Un primer prototipo se encuentra disponible en el repositorio svn.