Introducción a SPARQL y Wikidata
Introducción a SPARQL y Wikidata
SPARQL, no confundir con SPARK, es el lenguaje de consulta estándar de la Web Semántica. Permite a los usuarios recuperar información de bases de datos. En esta publicación de blog, veremos cómo construir consultas SPARQL simples y cómo usar este lenguaje de consulta para hacer uso de Wikidata.
Servicio de consulta de Wikidata
Wikidata es una base de datos de conocimiento gratuita y colaborativa que cualquiera puede editar. Está organizado como un repositorio de elementos. Un elemento puede ser cualquier cosa que se pueda describir. Cada elemento tiene un identificador único y algunas propiedades, como la etiqueta y la descripción. Por ejemplo, Q11081 se refiere a la enfermedad de Alzheimer.
La información de esta base se almacena en forma de declaraciones que son la triplica de un artículo, una propiedad y otro artículo/valor. A continuación, vemos algunas declaraciones para la enfermedad de Alzheimer (Q1101) y cómo se ven las declaraciones. En este ejemplo, los cuadros corresponden a los elementos y las propiedades que se muestran con flechas rojas conectan estos elementos.
Wikidata Query Service (WDQS) permite recuperar información de estos datos vinculados con consultas SPARQL.
Conceptos básicos de SPARQL
Consulta más simple
SELECT ?drug
WHERE
{
alzheimers treatedby ?drug.
}
Seleccionamos más campos
SELECT ?drug ?drugLabel ?disease ?diseaseLabel
WHERE
{
?disease wdt:P2176 ?drug.
?disease2 wdt:P2176 ?drug.
FILTER (?disease != ?disease2)
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
Una consulta SPARQL consta de cláusulas con diferentes funciones. Las consultas SPARQL básicas tienen dos cláusulas: la cláusula SELECT que especifica las variables que se devolverán y la cláusula WHERE que incluye restricciones sobre dichas variables. Las restricciones generalmente se escriben en forma de tripletes como en la estructura de las bases de conocimiento. Cuando se ejecuta una consulta, el servicio intenta completar dichas variables con los valores reales para que los tripletes resultantes coincidan con los de la base de datos. En el siguiente ejemplo, ?medicamento es la variable y el servicio de consulta intenta encontrar medicamentos que satisfagan la restricción de que la enfermedad de Alzheimer se trata con dicho medicamento. Por lo tanto, los resultados de esta consulta son los medicamentos utilizados para el tratamiento de la enfermedad de Alzheimer.
Este ejemplo es una consulta SPARQL válida; sin embargo, para ejecutarlo en WDQS, los elementos y las propiedades deben asignarse a los identificadores de Wikidata. Estos identificadores se pueden encontrar con la búsqueda de Wikidata. Para este ejemplo, ya conocemos los identificadores de estos artículos/propiedades de la figura anterior. Para convertir la consulta en el formato WDQS adecuado, primero reemplazamos alzheimers y tratados por sus identificadores. Luego, agregamos wd: prefijo a los elementos y wdt: prefijo a las propiedades ya que WDQS requiere prefijos. Ahora, podemos seguir este enlace y ejecutar esta consulta en el WDQS.
SELECT ?drug
WHERE
{
wd:Q11081 wdt:P2176 ?drug.
}
Podrás ver que el servicio de consulta devuelve solo los identificadores. Para incluir las etiquetas, debemos agregar la siguiente línea mágica a la consulta
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
y ahora agregar la etiqueta a la lista de variables agregando Etiqueta al nombre de la variable de la siguiente manera:
<code
SELECT ?drug ?drugLabel
WHERE
{
wd:Q11081 wdt:P2176 ?drug.
SERVICE wikibase:label { bd:serviceParam wikibase:language «sp». }
}
La descripción del elemento también se puede recuperar especificando la descripción del elemento en SELECTcause.
Consulta con más de una variable
Para hacer uso de los datos vinculados, podemos construir consultas SPARQL para obtener una red de interés. Digamos que estamos interesados en una red fármaco-enfermedad donde las enfermedades tienen al menos un tratamiento común. Esta red se puede recuperar mediante la siguiente consulta:
¿Vemos el código o su ejecución?
SELECT ?drug ?drugLabel ?disease ?diseaseLabel
WHERE
{
?disease wdt:P2176 ?drug.
?disease2 wdt:P2176 ?drug.
FILTER (?disease != ?disease2)
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
Como antes, el WDQS intenta hacer coincidir los patrones de la consulta con las declaraciones en Wikidata. Para esta consulta, primero encontrará enfermedades y tratamientos correspondientes para satisfacer el primer triple. Luego, el servicio encontrará las enfermedades tratadas por cada medicamento que cumpla con el primer criterio y se filtrarán las enfermedades duplicadas. Esta consulta recupera una red que contiene 56650 pares de medicamentos y enfermedades.
Conclusión
Hemos realizado una breve introducción a SPARQL y cómo usarlo para recuperar información de Wikidata con ejemplos de consultas en vivo. Más adelante profundizaremos en SPARQL y Wikidata y exploraremos los elementos/propiedades bioquímicas. Si quieres seguir aprendiendo puedes ir a la guia de referencia de WikiData.