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:

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

  1. 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".
    } 
                                        

  2. 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". 
    } 
     

  3. 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". 
    }
                                            

  4. 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>.
      }
      
      


  5. 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")).
    }
    
    


  6. 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

  1. Propósito: listar las colecciones existentes en la base de datos y la capa a la que pertenecen. Resultados ordenados por título de capa. Retorna resultados a partir del registro 50. Resultados limitados a 10 triplas.
    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
    
    


  2. 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
    	
    


  3. 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