SeRQL y SPARQL


Recuperación y organización de la información

Ejemplos de SeRQL

Para ejecutar las queries, necesitamos un conjunto de datos sobre el que recuperar la información. Para ello, tomemos por ejemplos el documento en RDF, que describe a una persona trabajando para una compañía:

<?xml version=?1.0??>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foo="http://www.mycompany.smthg/company#">
<rdf:Description about="http://www.mycompany.smthg/company/Person">
<foo:worksFor> rdf:resource="http://www.mycompany.smthg/company/Company" </foo:worksFor>
</rdf:Description>
<rdf:Description about=?http://www.mycompany.smthg/company/Company?>
<rdf:type>rdf:resource="http://www.mycompany.smthg/company/
CompanySchema#ITCompany"</rdf:type>
</rdf:Description>
</rdf:RDF>

Supongamos que queremos recuperar de este grafo de RDF personas que trabajan para compañías de IT. Podemos entender este proceso como encontrar el siguiente patrón en los datos:

{Person} ex:worksFor {Company} rdf:type {ex:ITCompany}

En esta línea, las partes rodeadas por llaves representan los nodos en el grafo de RDF, y los textos entre ellas representan los enlaces dentro del grafo. La dirección de los arcos (propiedades) en SeRQL es siempre de izquierda a derecha.

Expresiones de camino múltiple pueden ser especificadas separándolas con comas. Por ejemplo, la expresión anterior puede expresarse con dos expresiones menores:

{Person} ex:worksFor {Company}, {Company} rdf:type {ex:ITCompany}

Los nodos y enlaces en las expresiones de camino pueden ser variables, URIs o literales. También, un nodo puede dejarse vacío en caso de que su valor no interese al usuario. Algunos ejemplos serían:

{Person} ex:worksFor {} rdf:type {ex:ITCompany}

O en otros contextos:

{Painting} ex:painted_by {} ex:name {"Picasso"}
{comic:RoadRunner} SomeRelation {foo:WillyECoyote}

Queries

El lenguaje de recuperación SeRQL soporta dos modos de query. El primero, "select queries", se caracteriza por devolver una tabla con un conjunto de uniones variable-valor. El segundo, "construct queries", devuelve un grafo de RDF, que puede ser un subgrafo del grafo completo de datos, u otro grafo con información derivada.

Una consulta SeRQL usualmente se compone de una a seis palabras clave. Estas son:

  • SELECT o CONSTRUCT: determina qué se construye con los resultados encontrados. En SELECT, puede indicarse las variables para las que se quiere obtener en los resultados. En CONSTRUCT, pueden especificarse los tripletes a ser devueltos.
  • FROM: Opcional. Contiene expresiones de camino. Define patrones de tripletes en un grafo de RDF que son relevantes para la consulta.
  • WHERE: Opcional. Contiene restricciones booleanas para los valores obtenidos en los resultados, permitiendo establecer filtros en estos.
  • LIMIT y OFFSET: Opcionales. Pueden usarse de forma separada o conjunta para conseguir un subconjunto de los resultados. LIMIT impone un número máximo de respuestas, y OFFSET determina qué resultado se devolverá en primera posición.
  • USING NAMESPACE: Opcional. Puede contener declaraciones de namespace, y asociaciones de estos a prefijos para un uso más cómodo.

Como ejemplo, pondremos la siguiente consulta SELECT:

SELECT DISTINCT *
FROM {Country1} ex:borders {} ex:borders {Country2}
USING NAMESPACE
ex = <http://example.org/things#>

En la cual se indica que se obtengan todos los países con frontera con Country1 y Country2, sin repetir elementos (DISTINCT).

Un ejemplo de consulta CONSTRUCT:

CONSTRUCT {Parent} ex:hasChild {Child}
FROM {Child} ex:hasParent {Parent}
USING NAMESPACE
ex = <http://example.org/things#>

Esta consulta define la inversa de la propiedad foo:hasParent como foo:hasChild. De este modo, se consigue un grafo con información no contenida en los datos originales, pero derivada de ellos.

No olvides enlazarme en tu página. Gracias !!!