SeRQL
Index:
Introducción
SeRQL ("Sesame RDF Query Language") es un nuevo lenguaje RDF/RDFS que ha sido desarrollado por Aduna como parte del proyecto Sesame. Combina lo mejor de otros lenguajes de consulta (RQL, RDQL, N-Triples, N3) y añade algunas características propias. Este texto trata de mostrar algunas de las caraterísticas de este lenguaje de consulta de forma que se puedan al menos entender las SeRQL queries.
Algunas de las características más importantentes de SeRQL son:
- Transformación gráfica.
- Soporte del esquema RDF.
- Soporte de los tipos de esquema XML.
- Sintasix para expresar las rutas.
- Comparación opcional de las rutas.
URIs, literales y variables
Las URIs y los literales son bloques básicos de construcción de sentencias en RDF. Para un lenguaje de consulta como SeRQL, además habrá que tener en cuenta las variables. En esta sección se describen los elementos implicados en SeRQL.
Variables
Las variables se definen mediante sustantivos. Estos nombres deben de comenzar con una letra o el símbolo '_' y pueden ir seguidos de 0 o más letras, numeros, o los símbolos '_', '-' ó '.'. Ejemplos de variables válidas son:
Var1
_var2
unwise.var-name_isnt-it
SeRQL define algunas palabras reservadas que no pueden utilizarse como variables : select, construct, from, where, using, namespace, true, false, not, and, or, like, label, lang, datatype, null, isresource, isliteral, sort, in, union, intersect, minus, exists, forall, distinct, limit, offset.
Mientras que las palabras reservadas de SeRQL no son sensibles a las mayúsculas (OR es igual que or), las variables si son sensibles (var1 es diferente a Var1).
URIs
Hay dos formas de escribir las URIs in SeRQL: mediante una URI completa o una abreviada. Las URIs completas deben de comenzar y terminar con los símbolos "<" y ">". Por ejemplo:
<http://www.openrdf.org/index.html>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<mailto:sesame@openrdf.org>
<file:///C:\rdffiles\test.rdf>
SeRQL permite también escribir URIs abreviadas (también conocidas como QNames).
sesame:index.html
rdf:type
foaf:Person
Literals
Los literales constan de tres partes: una etiqueta, el identificador del idioma y el identificador de tipo de dato. La notación de los literales en SeRQL ha sido diseñada siguiendo la de N-Triples. Ejemplos de literales son:
"foo"
"foo"@en
"<foo/>"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral>
La notación de SeRQL para las URIs abreviadas pueden ser usadas también. Si por ejemplo el prefijo rdf coincide con el espacio de nombres http://www.w3.org/1999/02/22-rdf-syntax-ns#, puede simplificarse in escribirese como:
"<foo/>"^^rdf:XMLLiteral
Expresiones de Ruta
Una de las características más relevantes de SeRQL son las expresiones de ruta. Las expresiones de ruta son expresiones que coinciden con una ruta descrita por medio de un gráfico RDF.
Exprsiones de rutas básicas
Imagine que queremos consultar a un gráfico RDF por una persona que trabaja para una alguna compañía de telecomunicaciones. Consultar esta información se podría hacer analizando el gráfico RDF que se muestra a continuación (los nodos grises son las variables):
Figura 1. A basic path expression
![]()
En la notación SeRQL se puede construir el gráfico por medio de la siguiente expresión:
{Person} ex:worksFor {Company} rdf:type {ex:ITCompany}
Los elementos rodeados por las llaves representan los nodos en el gráfico RDF, el resto representan los enlaces en el gráfico. La dirección de los vértics se expresa siembre de izquierda de derecha.
En las consultas SeRQL, se pueden expresar múltiples caminos por medio de la separación de las expresiones por medio de comas. Por ejemplo el gráfico anterior, podría ser expresado también de la siguiente forma.:
{Person} ex:worksFor {Company},
{Company} rdf:type {ex:ITCompany}
Consultas Select y construct
Una consulta SeRQL normalmente consta de 1 a 6 instrucciones. Para una consulta SELECT, las instrucciones serían: SELECT, FROM, WHERE, LIMIT, OFFSET and USING NAMESPACE. Viendo esto un podría pensar que tiene un gran parentesco con SQL, pero en realizada su uso es ligeramente diferente.
Consultas Select
Devuelve tablas de valores, o un conjunto de pares variable/valor. Las variables devueltas se definen en la sentencia Select. Sólamente puede espresarse variables o valores in esta sentencia, separándolas por medio de comas. El ejemplo siguiente devolvería todas las URIs de classes:
SELECT C
FROM {C} rdf:type {rdfs:Class}
Consultas Construct
Las consultas Construct devuelven gráfos RDF como conjuntos triples. Estos conjuntos devueltos pueden especificarse mediante la sentencia CONSTRUCT, por medio de las sentencias explicadas anteriormente para definir caminos. A continuación se muestra un ejemplode una consulta construct:
CONSTRUCT {Parent} ex:hasChild {Child}
FROM {Child} ex:hasParent {Parent}
USING NAMESPACE
ex = <http://example.org/things#>
Ejemplos de consultas SeRQL
Consulta 1
Descipción: Encuentra todos los documentos que traten sobre "RDF" y sobre "Querying", y los autores de estos documentos:
SELECT
Author, Paper
FROM
{Paper} rdf:type {foo:Paper};
ex:keyword {"RDF", "Querying"};
dc:author {Author}
USING NAMESPACE
dc = <http://purl.org/dc/elements/1.0/>,
ex = <http://example.org/things#>
El modelo anterior se muestra en la figura siguiente, esta consulta busca en un gráfico RDF, en todos los subgrafos que coincidan con la plantilla:
Figura 2. Camino definido por la expresión de la consulta 1

Consulta 2
Descripción: Encauentra todos los objetos cuyo título en inglés contenga la palabra "night" y el museo en que esté expuesto. Los objetos deben haber sido creados por alguien cuyo nombre coincida con "Rembrandt". Los objetos y museos deberán mostrarse con sus títulos.
SELECT DISTINCT
label(ArtefactTitle), MuseumName
FROM
{Artefact} arts:created_by {} arts:first_name {"Rembrandt"},
{Artefact} arts:exhibited {} dc:title {MuseumName},
{Artefact} dc:title {ArtefactTitle}
WHERE
isLiteral(ArtefactTitle) AND
lang(ArtefactTitle) = "en" AND
label(ArtefactTitle) LIKE "*night*"
USING NAMESPACE
dc = <http://purl.org/dc/elements/1.0/>,
arts = <http://example.org/arts/>
De nuevo, a continuación se muestra ilustrada la plantilla del subgrafo de búsqueda:
Figura 3. Camio de búsqueda de la consulta 2

Dese cuenta de que la ilustración sólo muestra el camino generado desde la instrucción FROM. La instrucción WHERE plantea restricciones adicionales en los valores devueltos, y esto no puede expresarse tan fácilmente en el gráfico.
Fuente del artículo
El documento ha sido extraído parcialmente de www.openrdf.org.
Referencias
- RQL
- RQL tutorial
- RDQL
- RDF/XML syntax (W3C Recommandation)
- Revised RDF/XML syntax (W3C Technical Report)
- RDF Semantics (W3C Recommandation)
- N-Triples
- Turtle
- N3
- URI (RFC 2396)
- Namespace in XML (W3C Recommandation)


