Lenguaje de consulta SPARQL - Ejemplos
SPARQL es un lenguaje de consulta para RDF basado en comparación de patrones de triplas, donde un patrón de triplas es similar a una tripleta RDF, excepto que cada sujeto, predicado y objeto puede ser una variable.
Sintaxis y cláusulas SPARQL
- Nombre con Prefijo: permiten usar URIs de forma abreviada. Se definen al inicio mediante el uso de la palabra PREFIX seguido de una etiqueta que representa al prefijo finalizada con dos puntos ":" seguido de la URI que asocia.
Ejemplos:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#> - Variables: el nombre de una variable es precedido por el signo de interrogación "?". Identifica a la misma variable en cualquier lugar de una consulta.
Ejemplos:
?codigo, ?recurso.
- Patrón de triplas: es similar a una tripleta RDF, excepto que cada sujeto, predicado y objeto puede ser una variable.
Ejemplos:
?book rdf:type rncti:Book . ?book rncti:title ?title . ?book rncti:description ?desc .Los ejemplos de patrones de triplas buscan en el conjunto de datos la descripción de un recurso geográfico así como su latitud y longitud.
- Formas de consulta: SPARQL tiene cuatro formas de consulta.
- ASK: Devuelve una variable booleana indicando si el patrón de triplas existe en el conjunto de datos RDF consultado. Ejemplo 1.
- DESCRIBE: Devuelve un grafo RDF que describe los recursos especificados. Ejemplo 2.
- CONSTRUCT: Devuelve un grafo RDF construido mediante la sustitución de variables en un conjunto de patrones de triplas. Ejemplo 3.
- SELECT: Devuelve todo, o un subconjunto de las variables vinculadas en una concordancia con un patrón de triplas. La sintaxis SELECT * es una abreviación que selecciona todas las variables de una consulta. Ejemplo 4,5,6 y listado de datos.
- Cláusulas:
- WHERE: dentro del "where" se definen los patrones de triplas encerradas entre { }. Todos los ejemplos.
- DISTINCT: asegura la unicidad de los resultados. Ejemplo 4, 4b, 4d.
- FILTER: permite imponer restricciones adicionales al patrón de búsqueda definido por los patrones de triplas. Ejemplo 4a, 5, 6.
- ORDER BY: permite ordenar los resultados obtenidos de acuerdo a parámetros específicos. Ejemplo 4a, 4c y listado de datos.
- LIMIT n: permite limitar los resultados obtenidos a n triplas. Ejemplo 4c y listado de datos.
- OFFSET m: permite retornar resultados a partir del registro m. Ejemplo 4c y listado de datos ejemplo 1.
Ejemplos de consultas en SPARQL
Nombres con Prefijo disponibles:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
Consultas
-
Propósito: ¿Existen recursos geográficos que pertenecen a una determinada capa en un determinado código postal?
Datos de entrada: Capa "CONACULTA - Museos", código postal: "03020".
Dato de salida: booleano (true o false).
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
ASK WHERE {
?recurso map:cp "03020".
?recurso map:capa ?capa.
?capa map:titulo "CONACULTA - Museos".
}
Propósito: mostrar todas las propiedades que describen a un determinado recurso geográfico.
Datos de entrada: descripción del recurso "Museo Ferrocarrilero de Aguascalientes".
Dato de salida: valores de las propiedades que describen al "Museo Ferrocarrilero de Aguascalientes".
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
DESCRIBE ?recurso WHERE {
?recurso map:descripcionRecursoGeografico "Museo Ferrocarrilero de Aguascalientes".
}
Propósito: construir un grafo que contiene recursos geográficos y su descripción, donde cada recurso pertenece a la capa que lleva como título "Directorio de escuelas privadas de nivel doctorado".
Datos de entrada: título de la capa "Directorio de escuelas privadas de nivel doctorado".
Dato de salida: grafo con todos los recursos que pertenecen a la capa "Directorio de escuelas privadas de nivel doctorado".
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
CONSTRUCT {
?recurso map:descripcionRecursoGeografico ?descripcion.
}
WHERE {
?recurso map:capa ?capa.
?recurso map:descripcionRecursoGeografico ?descripcion.
?capa map:titulo "Directorio de escuelas privadas de nivel doctorado".
}
Propósito: seleccionar recursos geográficos e información de los recursos (latitud, longitud, dirección, etc.) que pertenecen a una determinada capa en un determinado código postal.
Datos de entrada: Capa "CONACULTA - Museos", código postal: "03020".
Dato de salida: descripción del recurso, latitud, longitud, estado.
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
SELECT DISTINCT ?descripcion ?latitud ?longitud ?estado WHERE {
?recurso map:cp "03020".
?recurso map:descripcionRecursoGeografico ?descripcion.
?recurso map:latitud ?latitud.
?recurso map:longitud ?longitud.
?recurso map:estado ?estado .
?recurso map:capa ?capa.
?capa map:titulo "CONACULTA - Museos".
}
NOTA: Los datos de entrada pueden cambiarse por estado, municipio, colonia, localidad, latitud, longitud, capa o cualquiera de las propiedades definidas para recursos geográficos. Además, es posible obtener como resultado recursos geográficos de dos o más estados, municipios, colonias, localidades, etc.
-
Propósito: seleccionar recursos geográficos que pertenecen a dos o más áreas geográficas de una determinada capa. Resultados ordenados por estado.
Datos de entrada: estados "Aguascalientes" y "Chihuahua", capa "CONACULTA - Museos".
Dato de salida: recursos geográficos y el estado al que pertenecen.
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
SELECT ?descripcion ?estado WHERE {
?recurso map:estado ?estado.
?recurso map:descripcionRecursoGeografico ?descripcion.
?recurso map:capa ?capa.
?capa map:titulo "CONACULTA - Museos".
FILTER (?estado = "Aguascalientes" || ?estado = "Chihuahua")
}
ORDER BY (?estado)
Consulta equivalente (retorna todas las variables definidas en la consulta, URI, estado, descripción y capa del recurso):
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
SELECT * WHERE {
?recurso map:estado ?estado.
?recurso map:descripcionRecursoGeografico ?descripcion.
?recurso map:capa ?capa.
?capa map:titulo "CONACULTA - Museos".
FILTER (?estado IN ("Aguascalientes", "Chihuahua"))
}
ORDER BY (?estado)
Propósito: seleccionar recursos geográficos que se encuentran en una determinada longitud.
Datos de entrada: longitud = "-103.362546"^^xsd:double.
Dato de salida: URI, descripción y latitud del recurso.
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT * WHERE {
?recurso rdf:type map:RecursoGeografico.
?recurso map:descripcionRecursoGeografico ?descripcion.
?recurso map:latitud ?latitud.
?recurso map:longitud "-103.362546"^^xsd:double.
}
Propósito: seleccionar recursos geográficos que se encuentran en un determinado estado y capa. Resultados ordenados por descripción del recurso geografico. Retorna resultados a partir del registro 10. Resultados limitado a 100 registros.
Datos de entrada: estado "Zacatecas".
Dato de salida: URI, descripción, latitud, longitud del recurso, URI y título de la capa.
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT * WHERE {
?recurso rdf:type map:RecursoGeografico.
?recurso map:descripcionRecursoGeografico ?descripcion.
?recurso map:estado "Zacatecas".
?recurso map:latitud ?latitud.
?recurso map:longitud ?longitud.
?recurso map:capa ?capa.
?capa map:titulo "CONACULTA - Museos".
}
ORDER BY ?descripcion
OFFSET 10
LIMIT 100
Propósito: seleccionar recursos geográficos que se encuentran en una determinada capa y un determinado código postal.
Datos de entrada: URI de la capa de gasolineras <http://datosabiertos.gob.mx/data/map_Capa:1779>, código postal del recurso buscado "14050".
Dato de salida: URI, descripción, estado, colonia, calle, latitud y longitud del recurso.
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT * WHERE {
?recurso rdf:type map:RecursoGeografico.
?recurso map:descripcionRecursoGeografico ?descripcion.
?recurso map:estado ?estado.
?recurso map:colonia ?colonia.
?recurso map:calle ?calle.
?recurso map:cp "14050".
?recurso map:latitud ?latitud.
?recurso map:longitud ?longitud.
?recurso map:capa <http://datosabiertos.gob.mx/data/map_Capa:1779>.
}
Propósito: seleccionar las capas cuyo título inicia con una determinada letra y contiene una determinada palabra.
Datos de entrada: letra inicial "E" y la palabra a contener "PEMEX".
Dato de salida: URI y título de la capa.
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT * WHERE {
?capa rdf:type map:Capa.
?capa map:titulo ?titulo.
filter(strStarts(?titulo, "E") && contains(?titulo, "PEMEX")).
}
Propósito: seleccionar recursos geográficos que se encuentran cercanos a un determinado recurso geográfico considerando LATITUD y LONGITUD y tipo de recurso que se busca (de determinada capa).
Datos de entrada: recurso geográfico "Escuela Normal de Atizapan de Zaragoza", capa de recursos cercanos "CONACULTA - Museos". Diferencia de latitud y longitud .01 grados.
Dato de salida: descripción, latitud y longitud de museos cercanos a la "Escuela Normal de Atizapan de Zaragoza".
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
SELECT ?descripcion ?blatitud ?blongitud WHERE {
?recursoa map:descripcionRecursoGeografico "Escuela Normal de Atizapan de Zaragoza".
?recursoa map:latitud ?alatitud.
?recursoa map:longitud ?alongitud.
?recursob map:descripcionRecursoGeografico ?descripcion.
?recursob map:latitud ?blatitud.
?recursob map:longitud ?blongitud.
?recursob map:capa ?capa.
?capa map:titulo "CONACULTA - Museos".
FILTER (abs(?alatitud - ?blatitud) < .01 && abs(?alongitud - ?blongitud) < .01)
}
Listado de datos
Datos de entrada: -
Dato de salida: nombre de la colección, nombre de la capa.
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?coleccionTitulo ?capaTitulo WHERE {
?coleccion rdf:type map:Coleccion.
?coleccion map:titulo ?coleccionTitulo.
?coleccion map:coleccionCapa ?capa.
?capa map:titulo ?capaTitulo.
}
ORDER BY ?capaTitulo
OFFSET 50 LIMIT 5
Propósito: listar los recursos digitales, la ruta de acceso al archivo y la colección a la que pertenecen. Filtrados por una determinada Capa. Resultados ordenados por nombre del recurso digital. Resultados limitados a 1000 triplas.
Datos de entrada: -
Dato de salida: nombre y descripción del recurso digital, la ruta de acceso al archivo y la descripción de la colección a la que pertenecen.
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
SELECT * WHERE {
?recursoDigital a map:RecursoDigital.
?recursoDigital map:titulo ?recursoDigitalTitulo.
?recursoDigital map:descripcion ?descripcionRD .
?recursoDigital map:pathFileSystem ?pathFileSystem.
?recursoDigital map:colleccion ?coleccion.
?colleccion map:descripcion ?colecciondescripcion.
?colleccion map:coleccionCapa
}
ORDER BY ?recursoDigitalTitulo
LIMIT 1000
Propósito: listar las capas y el tema al que pertenecen. Resultados ordenados por nombre de la capa. Resultados limitados a 1000 triplas.
Datos de entrada: -
Dato de salida: nombre de la capa, nombre del tema al que pertenece la capa.
PREFIX rncti: <http://sparql.repositorionacionalcti.mx/ontology.owl#>
SELECT ?capaTitulo ?tematitulo WHERE {
?capa a map:Capa.
?capa map:titulo ?capaTitulo.
?capa map:hasTema ?tema.
?tema map:titulo ?tematitulo.
}
ORDER BY ?capaTitulo
LIMIT 1000