DBPedia y Sparql.

April 7, 2010
Dbpedia, SPARQL, SNORQL triple store – breve introducción.
*traducción del artículo original por Peter Murray:
http://wwmm.ch.cam.ac.uk/blogs/murrayrust/?p=332

Antes que nada, dbpedia es un dump de casi toda la información organizada en Wikipedia (infoboxes y categorías).
En dbpedia crearon una versión RDF (Triple Stores) de todo eso. Hasta hace poco, los triple stores tenian problemas de escalabilidad, pero en el WWW2007 muchas personas y organizaciones aseguraron que podrían tratar con varios miles de millones de triples.

En este articulo, accederemos a dbpedia desde la interfaz web de SNORQL. Se sugiere seguir los pasos mientras se lee, nótese que la sintaxis puede volverse algo confusa por momentos, pero si les interesa, se acostumbrarán. [...]

* Nota del traductor: En el artículo original se utiliza Uppsala como ejemplo, en ésta traducción, usaremos Buenos Aires.

Un triple es algo así:

Sujeto – Predicado – Objeto

y alguno o todos los componentes pueden ser URIs absolutos, aquí un ejemplo (en notación N3)

SELECT * WHERE {
:Jorge_Luis_Borges ?predicado :Buenos_Aires .
}

Aquí estamos consultando, que relación tiene Borges con Buenos Aires.
(Nótese que la sintáxis no es exactamente SQL, y no debe omitirse el ‘.’ al final).
El resultado de la consulta anterior es, por ejemplo:

dbpedia2:birthPlace

En términos simples, esto dice que en DBpedia, resource/Jorge_Luis_Borges es el sujeto, birthPlace (Lugar de nacimiento) es el predicado y resource/Buenos_Aires es el objeto.
Esos son simbolos para los nodos en el triple store de dbpedia (graph) y hasta ahora no tiene forma lexica ni semantica.
De todas formas, no sorprende que los humanos podamos interpretar ésto como:

El “Lugar de Nacimiento” de “Jorge Luis Borges” es “Buenos Aires”. dbpedia (y Wikipedia) agregan anotaciones legibles por humanos a éstos componentes para que podamos efectivamente afirmar que “Jorge Luis Borges nació en Buenos Aires”.

Ahora, vamos a ver en qué otras situaciones aparece Buenos Aires como Sujeto y Objeto en dbpedia (Es poco probable que sea un predicado), para comodidad y fácil lectura, se usan prefijos (Prefixes)

PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>

Así, <http://dbpedia.org/resource/Buenos_Aires> pasa a ser :Buenos_Aires
y <http://dbpedia.org/propoerty/birthplace> sería dbpedia2:birthplace

dbpedia tiene varios URIs de nomenclaciones bien reconocidos y SNORQL preconfigura varios como prefijos:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>

Entonces, practiquemos una consulta sencilla – “listar todos los triples donde :Buenos_Aires sea el sujeto”

SELECT * WHERE {
:Buenos_Aires ?predicado ?objeto .
}

Esto devuelve gran cantidad de triples, de los cuales Buenos Aires es el sujeto, algunos ejemplos:

Predicado			Objeto
dbpedia2:populationTotal 	3050728
rdf:type 			dbpedia:ontology/Place
rdf:type			dbpedia:class/yago/CapitalsInSouthAmerica
rdfs:label			"ブエノスアイレス"@ja
rdfs:label			"Буэнос-Айрес"@ru
rdfs:label			"Buenos Aires"@es
owl:sameAs			<http://data.nytimes.com/53816717781055122081>

Los predicados son tipos de información en Wikipedia, generalmente Categorías.
Esto se está formalizando de forma rapida y creciente y representará una forma común de etiquetar objetos bien descriptos.
Entonces Buenos Aires tiene una Población Total de 3050728 habitantes, es un Lugar, es una Capital de Sudamérica, en Japonés se escribe ブエノスアイレス, en ruso Буэнос-Айрес, el sujeto es el mismo descrito en y un largo etcétera.

El objeto puede ser un URI o una cadena de texto, valor numérico, etc.

Ahora probaremos :Buenos_Aires como objeto – “Algo que tenga como objeto del predicado a Buenos Aires”.

SELECT * WHERE { ?sujeto ?predicado :Buenos_Aires . }

Aquí una pequeña e ilustrativa selección de los resultados:

Sujeto					Predicado
:Luciana_Salazar			dbpedia:ontology/Person/birthPlace
:Julio_Argentino_Roca 			dbpedia:ontology/Person/deathPlace
:Manuel_Belgrano			dbpedia:ontology/Person/deathPlace
:Popego 				dbpedia:ontology/foundationPlace
:Los_Natas 				dbpedia:ontology/homeTown
:Argentinos_Juniors 			dbpedia:ontology/SoccerClub/ground
:Colegio_Nacional_de_Buenos_Aires	dbpedia:ontology/EducationalInstitution/city
:Avenida_General_Paz			dbpedia:ontology/Road/beltwayCity

Podrán ver lo poderoso que resulta ésto hasta ahora: “decime todo sobre de X” y en formato entedible por una máquina.
Pero cuando enlacemos éstos resultados, podemos obtener mucho más: “Encontrar todas las personas que nacieron y murieron en Buenos Aires y decirme todo sobre ellos” (Bueno, todos los que estén cargados en Wikipedia):

SELECT ?sujeto ?predicado ?objeto
WHERE {
?sujeto dbpedia:deathplace :Buenos_Aires .
?sujeto dbpedia:birthplace :Buenos_Aires .
?sujeto ?predicado ?objeto .
}

Y ésto recién empieza!

Quien pruebe y consiga resultados interesantes, cuénteme!

2 Respuestas a “DBPedia y Sparql.”

  1. rafa dice:

    hola!!

    qué tal.Bueno te quería preguntar ,fernando y sé que estás harto de éste tema,de un script sencillo para una web sencilla que no es de “piratería” estilo linksharing.

    algo como:

    http://web.archive.org/web/20060409201020/http://www.taringa.net/

    saludos y perdon,pero me gustaría algo así.

  2. Leuh4n dice:

    Buena cypher!!! aguante tu web!

    Comu WTF was here!