Suelo etiquetar mis fotos de manera un tanto obsesiva, pero entre otras cosas, noté que de alguna manera siempre indico quién y qué se encuentra en la misma. Es por esta razón que me pregunté: por qué no busco una manera de indicar lo mismo, pero en RDF, y asi mis fotos estaran en la web semántica y podre sacar mayor provecho de ellas?. En este documento pretendo responder a mi pregunta.
Hace tiempo ya que soy un usuario registrado en Flickr y, desde el año 2000, estoy muy interesado en la Web Semántica y en el proyecto FOAF para la descripción de personas.
Una de las cosas que mas me gustaría hacer es poder buscar mis fotos almacenadas en Flickr de un modo sencillo, y sin tener que recordar que título le puse, o que etiquetas, etc. O una foto donde esten varias personas, en un determinado lugar, a una determinada hora. Flickr no tiene una interfaz de búsqueda como la que necesito, pero si proveé la información con la cual puedo desarrollarla.
Los ejemplos se encuentran todos en Turtle, otra sintaxis de RDF mucho mas comoda.
Dado que principalmente mis fotos son acerca de personas, lo primero que debo hacer es representarlos a todos ellos en un formato adecuado para este proposito. Por suerte no hay que creerlo, dado que ya existe FOAF. Para ello identificaré a las personas por medio de su e-mail, pero como los spamers estarian muy contentos de poner la dirección publicamente disponible, vamos a complicarles las cosas y las codificaremos. Para mayor información al respecto, los remito a mi tutorial sobre FOAF donde cuento algo al respecto.
_:p1 a foaf:Person;
foaf:mbox_sha1sum "7a9ac80b951378d4a82ed9eab2bb8fffd449b315"
foaf:nick "inkel"
.
_:p2 a foaf:Person;
foaf:mbox_sha1sum "8702b4fa06455608159a8ada349f7924b9208386"
foaf:nick "Peque"
.
_:p3 a foaf:Person;
foaf:mbox_sha1sum "556066e2c00f75e0703686b16949e150d710da14"
foaf:nick "Mer"
.
FOAF también nos brinda la clase Image que nos permite indicar que un recurso es una imagén (una foto en este caso). Flickr almacena las fotos a varios tamaños. Esto nos permite, con los datos de la foto, construir la URL de la imagen original y su thumbnail. Tambien puedo saber que tag tiene cada imagén, que constituyen la base de mi respuesta.
<http://photos23.flickr.com/31214810_b9ab6ae39d_o.jpg> a foaf:Image ;
foaf:thumbnail <http://photos23.flickr.com/31214810_b9ab6ae39d_t.jpg> ;
flickr:tagged <http://flickr.com/photos/51722096@N00/tags/inkel/> ;
flickr:tagged <http://flickr.com/photos/51722096@N00/tags/petos/> ;
flickr:tagged <http://flickr.com/photos/51722096@N00/tags/2005/>
.
<http://flickr.com/photos/51722096@N00/tags/inkel/> a flickr:Tag ;
rdfs:comment "inkel" ;
rdfs:label "inkel"
.
<http://flickr.com/photos/51722096@N00/tags/2005/> a flickr:Tag ;
rdfs:comment "Foto tomada en el año 2005" ;
rdfs:label "2005"
.
<http://flickr.com/photos/51722096@N00/tags/petos/> a flickr:Tag ;
rdfs:comment "Foto tomada en la casa de Peto y Guada" ;
rdfs:label "Peto's"
.
Con esto ya tengo mas que suficiente para relacionar fotos con sus etiquetas. Ahora llega una de las partes mas criticas, que es indicar la correspondencia entre tags y personas:
_:p1 a foaf:Person;
flickr:tag <http://flickr.com/photos/51722096@N00/tags/inkel/> ;
foaf:nick "inkel" ;
foaf:mbox_sha1sum "7a9ac80b951378d4a82ed9eab2bb8fffd449b315"
.
Por supuesto que no necesariamente tienen que ser personas, puede ser casi cualquier tipo de cosas. De hecho, los predicados que realizan la unión entre foto y objeto retratado, foaf:depicts y foaf:depiction, tienen como rango y dominio a owl:Thing respectivamente, por lo tanto cualquier cosa puede ser descripta.
Ahora agregamos más metadatos a la imagén, como el título, la descripción, la fecha en que fué tomadá y publicada la foto, y los tags como keywords:
<http://photos23.flickr.com/31214810_b9ab6ae39d_o.jpg> a foaf:Image ;
foaf:thumbnail <http://photos23.flickr.com/31214810_b9ab6ae39d_t.jpg> ;
flickr:tagged <http://flickr.com/photos/51722096@N00/tags/inkel/> ;
flickr:tagged <http://flickr.com/photos/51722096@N00/tags/petos/> ;
flickr:tagged <http://flickr.com/photos/51722096@N00/tags/2005/> ;
dc:title "Tadaaaaaaa" ;
dc:description "Con ustedes........ yo" ;
dc:keyword "2005" ;
dc:keyword "petos" ;
dc:keyword "inkel" ;
dcterms:issued "2004-08-22T00:12:57" ;
dc:date "2004-42-23T21:09:25"
.
Una vez ejecutados los scripts el sistema agrega algunos datos mas, que en ejemplo estan marcados en negrita:
<http://photos23.flickr.com/31214810_b9ab6ae39d_o.jpg> a foaf:Image ;
foaf:thumbnail <http://photos23.flickr.com/31214810_b9ab6ae39d_t.jpg> ;
flickr:tagged <http://flickr.com/photos/51722096@N00/tags/inkel/> ;
flickr:tagged <http://flickr.com/photos/51722096@N00/tags/petos/> ;
flickr:tagged <http://flickr.com/photos/51722096@N00/tags/2005/> ;
dc:title "Tadaaaaaaa" ;
dc:description "Con ustedes........ yo" ;
dc:keyword "2005" ;
dc:keyword "petos" ;
dc:keyword "inkel" ;
foaf:depicts _:p1
.
_:p1 a foaf:Person;
flickr:tag <http://flickr.com/photos/51722096@N00/tags/inkel/> ;
foaf:nick "inkel" ;
foaf:mbox_sha1sum "7a9ac80b951378d4a82ed9eab2bb8fffd449b315" ;
foaf:depiction <http://photos23.flickr.com/31214810_b9ab6ae39d_o.jpg>
.
Y ahora si, solo me queda realizar consultas sobre mi repositorio RDF. Eso será motivo de otro documento!
Mi lenguaje favorito desde hace unos años es Python, el cual tiene una excelente libreria para procesar RDF: RDFLib, desarrollada por Daniel "eikeon" Krech. La versión utilizada es la 2.2.2.
Para la conexión a Flickr utilicé la libreria flickr.py de James Clarke, la cual tuve que emparchar. Para poder utilizarla deberán conseguir un API KEY.
Los siguientes son los archivos que deben bajarse, además de las librerias:
.rdf que se encuentren en la carpeta y agrega las 3-uplas RDF necesarias.Esta sencilla herramienta muestra algunas de las posibilidades de la web semántica, y como nos beneficiaremos de ella. Se pueden agregar aún mas datos, todo depende de la creatividad de cada uno. Por favor enviar sus comentarios a inkel-rdf@f14web.com.ar, indicando en el asunto [flickr2foaf.es]