Ejemplo de parseo programático de RDF

En este capítulo veremos como realizar un parseo (transformar un texto de entrada en una estructura de datos apropiada para ser procesada) de un archivo RDF usando el lenguaje de programación Python, que es uno de los más sencillos de usar y aprender. Para ello, usaremos la librería RDFlib.

1. Instalación de RDFlib

1.1 setuptools

Primero necesitaremos instalar este paquete. Para ello descargaremos el archivo ez_setup.py y lo ejecutaremos como script de Python. Para ello, escribiremos en una consola:

Python ruta_del_archivo/ez_setup.py

1.2 RDFlib

Para la instalación de esta librería, tendremos ahora únicamente que escribir lo siguiente en una consola:

easy_install rdflib

Hay que tener en cuenta que para alguno de los dos comandos pueden ser necesarios privilegios de administrador. Con esto ya tendremos todo instalado.

2. Parseo de un fichero

Utilizaremos en este caso el mismo archivo que en ejemplos anteriores, Peliculas-y-directores.ttl. Esta vez haremos un script en Python que sea capaz de leer el fichero utilizando RDFlib. A continuación tenemos el código comentado que utilizaremos:

from rdflib import Graph

g = Graph()
g.parse("Peliculas-y-directores.ttl", format="turtle")

print(len(g))

import pprint
for stmt in g:
    pprint.pprint(stmt)

En la primera línea importamos la clase que almacena los grafos RDF. En la segunda línea declaramos uno nuevo y en la tercera parseamos el fichero para almacenarlo en ese grafo. Tendremos que indicarle el nombre (o ruta) y el formato en el que se encuentra. Podremos parsear con RDFlib los siguientes formatos de fichero:

Nombre Clase
html StructuredDataParser
hturtle HTurtleParser
mdata MicrodataParser
microdata MicrodataParser
n3 N3Parser
nquads NQuadsParser
nt NTParser
rdfa RDFaParser
rdfa1.0 RDFa10Parser
rdfa1.1 RDFaParser
trix TriXParser
turtle TurtleParser
xml RDFXMLParser

Nosotros hemos utilizado "turtle", que es el formato del que partía nuestro fichero. Con "print(len(g))" imprimirá por pantalla el número de sentencias turtle que tiene el fichero (que ahora es un grafo de Python). Y en el bucle del final, imprimimos cada una de ellas. El resultado por pantalla será el siguiente:

59
(rdflib.term.URIRef(u'http://ejemplo.org/director/1'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/MovieDirector'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/4'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Juan_Antonio_Bayona'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/10'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/Film'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/8'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/Film'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/3'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'La voz dormida'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/2'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/Film'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/1'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Alex_de_la_Iglesia'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/2'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/director'),
 rdflib.term.URIRef(u'http://ejemplo.org/film/3'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/3'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/MovieDirector'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/2'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/director'),
 rdflib.term.URIRef(u'http://ejemplo.org/film/10'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/3'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/La_voz_dormida'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/3'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Emilio_Martinez-Lazaro'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/4'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/director'),
 rdflib.term.URIRef(u'http://ejemplo.org/film/9'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/2'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'Mientras duermes'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/5'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/Film'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/7'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/Film'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/3'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/Person'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/4'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'El d\xeda de la bestia'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/8'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Balada_triste_de_trompeta'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/4'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'Juan Antonio Bayona'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/4'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/El_dia_de_la_Bestia'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/3'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/Film'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/2'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Mientras_duermes'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/10'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Solas_(pelicula)'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/2'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'Benito Zambrano'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/5'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Lo_imposible'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/1'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/Person'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/7'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Ocho_apellidos_vascos'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/2'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/Person'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/5'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'Lo imposible'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/5'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/Person'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/3'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'Emilio Mart\xednez-L\xe1zaro'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/5'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'Jaume Balaguer\xf3'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/4'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/Person'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/1'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/Film'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/1'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/El_otro_lado_de_la_cama'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/5'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Jaume_Balaguero'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/10'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'Solas'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/1'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'El otro lado de la cama'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/8'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'Balada triste de trompeta'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/5'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/director'),
 rdflib.term.URIRef(u'http://ejemplo.org/film/6'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/7'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'Ocho apellidos vascos'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/1'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/director'),
 rdflib.term.URIRef(u'http://ejemplo.org/film/4'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/6'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'Fr\xe1giles'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/9'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/Film'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/3'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/director'),
 rdflib.term.URIRef(u'http://ejemplo.org/film/7'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/1'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/director'),
 rdflib.term.URIRef(u'http://ejemplo.org/film/8'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/5'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/director'),
 rdflib.term.URIRef(u'http://ejemplo.org/film/2'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/9'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'El orfanato'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/9'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/El_orfanato'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/4'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/MovieDirector'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/4'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/Film'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/6'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/Film'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/2'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Benito_Zambrano'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/1'),
 rdflib.term.URIRef(u'http://xmlns.com/foaf/0.1/name'),
 rdflib.term.Literal(u'\xc1lex de la Iglesia'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/5'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/MovieDirector'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/4'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/director'),
 rdflib.term.URIRef(u'http://ejemplo.org/film/5'))
(rdflib.term.URIRef(u'http://ejemplo.org/film/6'),
 rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#sameAs'),
 rdflib.term.URIRef(u'http://es.dbpedia.org/resource/Fragiles_(pelicula)'))
(rdflib.term.URIRef(u'http://ejemplo.org/director/2'),
 rdflib.term.URIRef(u'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
 rdflib.term.URIRef(u'http://dbpedia.org/ontology/MovieDirector'))

También podemos realizar un parseo de un fichero que esté colgado en internet. Sería tan sencillo como escribir:

g.parse("http://bigasterisk.com/foaf.rdf")

Por lo tanto, sólo tenemos que poner la URL. En este caso no hemos especificado el formato, por defecto lo toma como "xml", que es el formato típico en el que están los archivos .rdf.

results matching ""

    No results matching ""