Lenguaje de consulta RDF (SPARQL)

Simple Protocol and RDF Query Language (SPARQL) es un lenguaje similar a SQL para consultar datos RDF. Para expresar grafos RDF en la parte de coincidencia de la consulta, se utiliza la sintaxis TURTLE.

A continuación se muestra un ejemplo de una consulta SELECT.

    PREFIX foaf:   <http://xmlns.com/foaf/0.1/>
    SELECT ?name ?mbox
    WHERE { ?x foaf:name ?name .
            ?x foaf:mbox ?mbox . }

La primera línea define un prefijo de espacio de nombres; las dos últimas líneas usan ese prefijo para expresar un grafo RDF con el que se debe hacer coincidencia. Los identificadores que comienzan con signo de interrogación ? identifican variables. En esta consulta estamos buscando el recurso ?x que participa en tripletas con los predicados foaf:name y foaf:mbox y queremos los sujetos de esas tripletas. En la parte de coincidencia pueden usarse atajos sintácticos de TURTLE.

Además de especificar el grafo con el que se debe hacer coincidencia, pueden añadirse restricciones para los valores mediante el constructo FILTER. Un ejemplo de restricción de valor de cadena es FILTER regex(?mbox, "company"), que especifica una consulta con expresión regular. Un ejemplo de restricción de valor numérico es FILTER (?price < 20), que especifica que ?price debe ser menor que 20. Están definidos algunos operadores especiales para el constructo FILTER. Entre ellos están isIRI para comprobar si una variable es IRI/URI, isLiteral para comprobar si una variable es literal, bound para comprobar si una variable fue enlazada, y otros; véase la especificación.

La parte de coincidencia de la consulta puede incluir tripletas OPTIONAL. Si la tripleta con la que se debe hacer coincidencia es opcional, se evalúa cuando está presente, pero la coincidencia no falla cuando no está presente. Las secciones opcionales pueden estar anidadas. Es posible hacer una UNION de varios grafos de coincidencia: si cualquiera de los grafos coincide, la coincidencia se devolverá como resultado. La parte FROM de la consulta es opcional y puede especificar el conjunto de datos RDF sobre el que se realiza la consulta.

La secuencia de resultados puede modificarse usando las siguientes palabras clave, con un significado similar al de SQL:

  • ORDER BY - ordenación por valor de variable
  • DISTINCT - solo resultados únicos
  • OFFSET - desplazamiento a partir del cual mostrar resultados
  • LIMIT - número máximo de resultados

Existen cuatro formas de resultados de consulta. Además de la posibilidad de obtener la lista de valores encontrados, también es posible construir un grafo RDF o confirmar si se encontró o no una coincidencia.

  • SELECT - devuelve la lista de valores de las variables enlazadas en un patrón de consulta
  • CONSTRUCT - devuelve un grafo RDF construido mediante la sustitución de variables en el patrón de consulta
  • DESCRIBE - devuelve un grafo RDF que describe los recursos encontrados
  • ASK - devuelve un valor booleano que indica si el patrón de consulta coincide o no

La forma CONSTRUCT especifica un grafo que se devolverá con variables que serán sustituidas a partir del patrón de consulta, como en el siguiente ejemplo, que devolverá un grafo que dice que Alice conoce a las dos últimas personas al ordenarlas alfabéticamente desde la URI dada (el resultado en el grafo RDF no está ordenado; es un grafo y por tanto el orden de las tripletas no es importante).

    PREFIX foaf: <http://xmlns.com/foaf/0.1/>
    CONSTRUCT { <http://example.org/person#Alice> foaf:knows ?x }
    FROM <http://example.org/foaf/people>
    WHERE { ?x foaf:name ?name }
    ORDER BY desc(?name)
    LIMIT 2

La forma DESCRIBE devolverá información sobre los recursos coincidentes en forma de un grafo RDF. La forma exacta de esta información todavía no está estandarizada, pero normalmente se espera un cierre de nodos en blanco como, por ejemplo, Concise Bounded Description (CBD). En resumen, se devuelven todas las tripletas que tienen el recurso coincidente en el objeto; cuando un nodo en blanco está en el sujeto, las tripletas en las que ese nodo participa como objeto se añaden también de manera recursiva.

La forma ASK está pensada para hacer preguntas de sí/no sobre coincidencia; no se devuelve información sobre las variables coincidentes, el resultado solo indica si existe coincidencia o no.

La especificación SPARQL está en estado de borrador de trabajo (estado a finales de 2006), pero ya está implementada en algunos paquetes de software y parece que se convertirá en el principal lenguaje de consulta RDF para la web semántica. La especificación del protocolo para un servicio web SPARQL también está disponible; SPARQL sirve entonces como protocolo de acceso a datos RDF.