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 variableDISTINCT- solo resultados únicosOFFSET- desplazamiento a partir del cual mostrar resultadosLIMIT- 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 consultaCONSTRUCT- devuelve un grafo RDF construido mediante la sustitución de variables en el patrón de consultaDESCRIBE- devuelve un grafo RDF que describe los recursos encontradosASK- 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.