SPARQL

Lenguaje de consulta RDF

SPARQL
ParadigmaLenguaje de consulta
ReveladorW3C
Apareció por primera vez15 de enero de 2008 ; hace 16 años ( 15 de enero de 2008 )
Versión estable
1.1 / 21 de marzo de 2013 ; hace 11 años ( 21-03-2013 )
Sitio webwww.w3.org/TR/sparql11-query/
Implementaciones principales
Apache Jena , [1] OpenLink Virtuoso [1]

SPARQL (pronunciado "sparkle", un acrónimo recursivo [2] de SPARQL Protocol and RDF Query Language ) es un lenguaje de consulta RDF —es decir, un lenguaje de consulta semántico para bases de datos— capaz de recuperar y manipular datos almacenados en formato Resource Description Framework (RDF) . [3] [4] Fue convertido en estándar por el RDF Data Access Working Group (DAWG) del World Wide Web Consortium , y es reconocido como una de las tecnologías clave de la web semántica . El 15 de enero de 2008, SPARQL 1.0 fue reconocido por el W3C como una recomendación oficial, [5] [6] y SPARQL 1.1 en marzo de 2013. [7]

SPARQL permite que una consulta conste de patrones triples , conjunciones , disyunciones y patrones opcionales . [8]

Existen implementaciones para múltiples lenguajes de programación . [9] Existen herramientas que permiten conectar y construir de forma semiautomática una consulta SPARQL para un punto final SPARQL, por ejemplo ViziQuer. [10] Además, existen herramientas para traducir consultas SPARQL a otros lenguajes de consulta, por ejemplo a SQL [11] y a XQuery . [12]

Ventajas

SPARQL permite a los usuarios escribir consultas que siguen la especificación RDF del W3C . De esta forma, todo el conjunto de datos está formado por tripletas "sujeto-predicado-objeto". Los sujetos y predicados son siempre identificadores URI, pero los objetos pueden ser URI o valores literales. Este esquema físico único de 3 "columnas" está hiperdesnormalizado, ya que lo que sería un registro relacional con 4 campos ahora son 4 tripletas en las que el sujeto se repite una y otra vez, el predicado es esencialmente el nombre de la columna y el objeto es el valor del campo. Aunque esto parece complicado de manejar, la sintaxis SPARQL ofrece estas características:

1. Los sujetos y objetos se pueden utilizar para encontrar al otro, incluso de forma recursiva.

A continuación se muestra un conjunto de triples. Debe quedar claro que ex:sw001y ex:sw002enlaza a ex:sw003, que a su vez tiene enlaces:

ex : sw001  ex : linksWith  ex : sw003  . ex : sw002  ex : linksWith  ex : sw003  . ex : sw003  ex : linksWith  ex : sw004  ,  ex : sw006  . ex : sw004  ex : linksWith  ex : sw005  .

En SPARQL, la primera vez que se encuentra una variable en la secuencia de expresiones, se llena con result. La segunda vez y las subsiguientes, se utiliza como entrada. Si asignamos ("vinculamos") el URI ex:sw003a la ?targetsvariable, entonces se envía un result a ?src; esto nos indica todas las cosas que se vinculan a ex:sw003 (dependencia ascendente):

SELECCIONAR  * DONDE  {  VINCULAR ( ej .: sw003  AS  ?objetivos )  ?src  ej .: linksWith  ?objetivos  . }

Pero con un simple cambio de la variable de enlace, el comportamiento se invierte. Esto producirá todas las cosas de las que ex:sw003depende (dependencia descendente):

SELECT  * WHERE  {  BIND ( ej .: sw003  AS  ?src )  ?src  ej .: linksWith  ?targets  .  # ¡AVISO! ¡Sin cambios de sintaxis! }

Aún más atractivo es que podemos indicar fácilmente a SPARQL que siga la ruta recursivamente:

SELECT  * WHERE  {  BIND ( ex : sw003  AS  ?src )  ?src  ex : linksWith +  ?targets  .  # Tenga en cuenta el +; ahora SPARQL encontrará ex:sw005 a través de ex:sw004 }

Por lo tanto, las variables enlazadas también pueden ser listas y se puede operar con ellas sin necesidad de una sintaxis complicada. El efecto de esto es similar al siguiente:

Si  ?S  está  ligado  a  ( ej .: A ,  ej .: B )  entonces  ?S  ex : linksWith  ?O se comporta  así  : para cada s en ? S : obtener s ex : linksWith  , capturar o agregar o a ?O             Si  ?O  está  ligado  a  ( ej : A ,  ej : B )  entonces  ? S  ex : linksWith  ?O se comporta  así  : para cada o en ?O : fetch  ex : linksWith o , captura s y añade s a ?S             


2. Las expresiones SPARQL son una canalización

A diferencia de SQL, que tiene subconsultas y CTE, SPARQL se parece mucho más a MongoDB o SPARK. Las expresiones se evalúan exactamente en el orden en que se declaran, incluido el filtrado y la unión de datos. El modelo de programación se convierte en lo que sería una declaración SQL con múltiples cláusulas WHERE. La combinación de sujetos y objetos que reconocen listas más un enfoque de canalización puede generar consultas extremadamente expresivas que abarcan muchos dominios de datos diferentes.


A diferencia de las bases de datos relacionales, la columna de objeto es heterogénea: el tipo de datos del objeto, si no es un URI, suele estar implícito (o especificado en la ontología ) en el valor del predicado . Los nodos literales llevan información de tipo coherente con el espacio de nombres XSD subyacente, incluidos enteros cortos y largos con y sin signo, flotantes de precisión simple y doble, fecha y hora, decimales con precisión de centavo, booleanos y cadenas. Las implementaciones de almacenamiento triple en bases de datos relacionales tradicionales normalmente almacenarán el valor como una cadena y una cuarta columna identificará el tipo real. Las bases de datos polimórficas como MongoDB y SQLite pueden almacenar el valor nativo directamente en el campo de objeto.

Por lo tanto, SPARQL proporciona un conjunto completo de operaciones de consulta analítica como JOIN, SORT, AGGREGATEpara datos cuyo esquema es intrínsecamente parte de los datos en lugar de requerir una definición de esquema separada. Sin embargo, la información del esquema (la ontología) a menudo se proporciona externamente, para permitir la unión de diferentes conjuntos de datos de manera inequívoca. Además, SPARQL proporciona una sintaxis de recorrido de grafos específica para datos que pueden considerarse como un grafo.

El siguiente ejemplo demuestra una consulta simple que aprovecha la definición de ontologíafoaf ("amigo de un amigo").

Específicamente, la siguiente consulta devuelve los nombres y correos electrónicos de cada persona en el conjunto de datos :

PREFIJO  foaf :  <http://xmlns.com/foaf/0.1/> SELECCIONAR  ?nombre  ?correo electrónico DONDE  {  ?persona  a  foaf : Persona  .  ?persona  foaf : nombre  ?nombre  .  ?persona  foaf : mbox  ?correo electrónico  .  }

Esta consulta une todos los triples con un sujeto coincidente, donde el predicado de tipo, " a", es una persona ( foaf:Person), y la persona tiene uno o más nombres ( foaf:name) y buzones de correo ( foaf:mbox).

Para facilitar la lectura, el autor de esta consulta eligió hacer referencia al sujeto utilizando el nombre de variable " ?person". Dado que el primer elemento del triple siempre es el sujeto, el autor podría haber utilizado fácilmente cualquier nombre de variable, como " ?subj" o " ?x". Cualquiera sea el nombre elegido, debe ser el mismo en cada línea de la consulta para indicar que el motor de consultas debe unir los triples con el mismo sujeto.

El resultado de la unión es un conjunto de filas: ?person, ?name, ?email. Esta consulta devuelve ?namey ?emailporque ?personsuele ser una URL compleja en lugar de una cadena de texto fácil de entender. Tenga en cuenta que cualquier ?personpuede tener varios buzones de correo, por lo que en el conjunto devuelto, una ?namefila puede aparecer varias veces, una por cada buzón de correo.

Esta consulta se puede distribuir a múltiples puntos finales SPARQL (servicios que aceptan consultas SPARQL y devuelven resultados), calcular y recopilar resultados, un procedimiento conocido como consulta federada .

Ya sea de manera federada o local, definiciones triples adicionales en la consulta podrían permitir uniones a diferentes tipos de temas, como automóviles, para permitir consultas simples, por ejemplo, para devolver una lista de nombres y correos electrónicos de personas que conducen automóviles con una alta eficiencia de combustible.

Formularios de consulta

En el caso de consultas que leen datos de la base de datos, el lenguaje SPARQL especifica cuatro variaciones de consulta diferentes para diferentes propósitos.

SELECTconsulta
Se utiliza para extraer valores sin procesar de un punto final SPARQL, los resultados se devuelven en formato de tabla.
CONSTRUCTconsulta
Se utiliza para extraer información del punto final SPARQL y transformar los resultados en RDF válido.
ASKconsulta
Se utiliza para proporcionar un resultado simple Verdadero/Falso para una consulta en un punto final SPARQL.
DESCRIBEconsulta
Se utiliza para extraer un gráfico RDF del punto final SPARQL, cuyo contenido se deja al punto final para que lo decida, en función de lo que el mantenedor considere información útil.

Cada una de estas formas de consulta toma un WHEREbloque para restringir la consulta, aunque, en el caso de la DESCRIBEconsulta, el WHEREes opcional.

SPARQL 1.1 especifica un lenguaje para actualizar la base de datos con varias formas de consulta nuevas. [13]

Ejemplo

Otro ejemplo de consulta SPARQL que modela la pregunta "¿Cuáles son todas las capitales de los países de África?":

PREFIJO  ej :  <http://example.com/exampleOntology#> SELECCIONAR  ?capital  ?país DONDE  {  ?x  ej : nombredeciudad  ?capital  ;  ej : isCapitalOf  ?y  .  ?y  ej : nombredepaís  ?país  ;  ej : isInContinent  ej : África  .  }

Las variables se indican con un prefijo ?o . Se devolverán los enlaces para y . Cuando un triple termina con un punto y coma, el sujeto de este triple completará implícitamente el siguiente par para formar un triple completo. Por ejemplo, es la abreviatura de .$?capital?countryex:isCapitalOf ?y?x ex:isCapitalOf ?y

El procesador de consultas SPARQL buscará conjuntos de triples que coincidan con estos cuatro patrones de triples, vinculando las variables en la consulta a las partes correspondientes de cada triple. Es importante tener en cuenta aquí la "orientación de la propiedad" (las coincidencias de clases se pueden realizar únicamente a través de atributos de clase o propiedades; consulte Tipado Duck ).

Para que las consultas sean concisas, SPARQL permite la definición de prefijos y URI base de manera similar a Turtle . En esta consulta, el prefijo " ex" representa “ http://example.com/exampleOntology#”.

Extensiones

GeoSPARQL define funciones de filtro para consultas de sistemas de información geográfica (SIG) utilizando estándares OGC bien entendidos ( GML , WKT , etc.).

SPARUL es otra extensión de SPARQL. Permite actualizar el almacén RDF con este lenguaje de consulta declarativo, agregando métodos INSERTy DELETE.

XSPARQL es un lenguaje de consulta integrado que combina XQuery con SPARQL para consultar fuentes de datos XML y RDF a la vez. [14]

Implementaciones

Implementaciones SPARQL de referencia y de código abierto

Consulte la Lista de implementaciones de SPARQL para obtener una cobertura más completa, incluidos triplestore , API y otros almacenamientos que han implementado el estándar SPARQL.

Véase también

Referencias

  1. ^ abcd Hebeler, John; Fisher, Matthew; Blace, Ryan; Perez-Lopez, Andrew (2009). Programación de la Web Semántica . Indianápolis : John Wiley & Sons, Inc. p. 406. ISBN 978-0-470-41801-7.
  2. ^ Beckett, Dave (6 de octubre de 2011). "¿Qué significa SPARQL?". [email protected] .
  3. ^ Jim Rapoza (2 de mayo de 2006). "SPARQL Will Make the Web Shine" (SPARQL hará brillar a la Web). eWeek . Consultado el 17 de enero de 2007 .
  4. ^ Segaran, Toby; Evans, Colin; Taylor, Jamie (2009). Programación de la Web semántica . O'Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. pág. 84. ISBN 978-0-596-15381-6.
  5. ^ "Noticias sobre la actividad de la Web semántica del W3C: SPARQL es una recomendación". W3.org. 15 de enero de 2008. Archivado desde el original el 20 de enero de 2008. Consultado el 1 de octubre de 2009 .
  6. ^ "Cronología de los estándares XML y Web semántica del W3C" (PDF) . 4 de febrero de 2012. Consultado el 27 de noviembre de 2013 .
  7. ^ "Once especificaciones SPARQL 1.1 son recomendaciones del W3C". w3.org. 21 de marzo de 2013. Consultado el 25 de abril de 2013 .
  8. ^ "XML y servicios web en las noticias". xml.org . 6 de octubre de 2006 . Consultado el 17 de enero de 2007 .
  9. ^ "Implementaciones de Sparql – Wiki de ESW". Esw.w3.org . Consultado el 1 de octubre de 2009 .
  10. ^ "ViziQuer, una herramienta para construir consultas SPARQL automáticamente". lumii.lv . Consultado el 25 de febrero de 2011 .
  11. ^ "Servidor D2R" . Consultado el 4 de febrero de 2012 .
  12. ^ "SPARQL2XQuery Framework" . Consultado el 4 de febrero de 2012 .
  13. ^ Yu, Liyang (2014). Guía para desarrolladores de la Web semántica . Springer. pág. 308. ISBN. 9783662437964.
  14. ^ "XSPARQL publicado como una presentación del W3C". W3.org. 23 de junio de 2009. Consultado el 22 de mayo de 2022 .
  • Servicio de consultas Wikidata; ejemplos de consultas SPARQL aquí
  • Tutorial del servicio de consultas de Wikidata
  • DBpedia
  • Blog de actividades de datos del W3C
  • Grupo de trabajo SPARQL 1.1 del W3C - cerrado - listas de correo y archivos, era Grupo de trabajo de acceso a datos RDF
  • Recomendación SPARQL 1.1
  • Lenguaje de consulta SPARQL 1.0 (heredado)
  • Protocolo SPARQL 1.0 (heredado)
  • Formato de resultados XML de consultas SPARQL 1.0 (antiguo)
  • Mapeos de consultas SPARQL2X entre esquemas OWL-RDF/S y XML, y transformación de esquemas XML a OWL.
  • Expresiones de sintaxis SPARQL en el motor de consultas ARQ
  • James (8 de septiembre de 2011). «DAWG Test Suite for SPOCQ». Dydra . Archivado desde el original el 7 de junio de 2015. Consultado el 2 de diciembre de 2014 .
  • James (8 de septiembre de 2011). «Ejemplos de código RSpec / Resultados: 425 ejemplos, 1 error / Finalizado en 287.385157145 segundos». Dydra . Archivado desde el original el 11 de diciembre de 2011 . Consultado el 2 de diciembre de 2014 .
Obtenido de "https://es.wikipedia.org/w/index.php?title=SPARQL&oldid=1258793107"