3.1. OpenLink Virtuoso
3.1.2. Sparql Endpoint
Para la extracción de la información almacenada en el Store dentro del Servidor Virtuoso, se utiliza la interfaz conocida como EndPoint a donde se pueden enviar peticiones HTTP del tipo SPARQL que serán respondidas apropiadamente por el servidor, este servicio es levantado por defecto en el puerto 8890.
Este tipo de peticiones involucran tanto la consulta de datos como las operaciones de manipulación del Store mediante el uso de Sparql 1.1 (sparul), gracias al soporte de Virtuoso. Siendo este un punto fuerte para la publicación y mantenimiento del store RDF.
Al momento de la instalación Virtuoso se genera un ENDPOINT automático que puede ser ubicado en la dirección web:
http://servidor.com:8890/sparql.
El mismo presenta una interfaz gráfica desde donde se puede realizar extracción de datos utilizando el lenguaje de consulta SPARQL.
Cúmar Ramiro Cueva Tacuri 46 Figura 18: EndPoint generado por Virtuoso
El lenguaje utilizado para la recuperación de la información desde el EndPoint se realiza mediante SPARQL, cuya sintaxis es similar al lenguaje SQL utilizado por las bases de datos relacionales. Para profundizar sobre la sintaxis y sus beneficios se puede remitir a [7].
3.1.2.1. Formatos de Respuesta
Las operaciones realizadas de extracción de datos, desde la interfaz del EndPoint del servidor pueden ser visualizadas en diversos formatos, de tal forma que la manipulación y visualización de los resultados se acoplan a la integración con aplicaciones existentes (clientes). Un resumen de los formatos permitidos puede ser encontrado en la Tabla 8.
Valor Mimetype HTML text/html json application/sparql-results+json json application/rdf+json js application/javascript table text/html XML text/html TURTLE text/html
Cúmar Ramiro Cueva Tacuri 47 Tabla 8: Formatos de Respuesta61
Para la interacción planeada con el EndPoint, tanto la recuperación de datos como las operaciones de manipulación de datos (sparul) serán manejadas mediante el formato JSON, esto debido a que es un formato ligero para el intercambio de datos y permitiendo una manipulación más versátil en comparación con respuestas del tipo XML u otros.
3.1.2.2. SPARQL basado en REST
REST, cuya representación se interpreta como Transferencia de Estado Representacional, originado a partir de la tesis doctoral de Roy Fielding[29], establece la creación e interacción de servicios en la red utilizando un protocolo cliente/servidor sin estado, conteniendo en una sola petición HTTP toda la información suficiente para procesarla.
El servidor Virtuoso, basa el funcionamiento de los EndPoint bajo esta tendencia, permitiendo de esta forma que la información almacenada en el store pueda ser consumida desde un cliente REST. En este caso, la dirección indicada es la misma del EndPoint visualizado desde la web:
http://servidor.com:8890/sparql.
Para el consumo de este servicio se deben considerar un conjunto de parámetros a ser enviados al servidor, en la Tabla 9 se muestra un resumen de los más importantes:
Parámetro Descripción Requerido?
query Consulta Sparql Yes
dflt_graph URI del gráfico por defecto (string o NULL) No
maxrows Límite de filas mostradas No
timeout Tiempo máximo de duración de la consulta No
Tabla 9: Lista de parámetros62
Mediante la utilización de estos parámetros, la extracción (interacción) con el Store es realizada de forma sencilla mediante peticiones GET hechas a dicho servicio.
61 http://docs.openlinksw.com/virtuoso/rdfsparql.html
Cúmar Ramiro Cueva Tacuri 48
Al ser los datos almacenados en el Store considerados públicos (según los principios de LOD) y por la cantidad de datos que se almacenan dentro, es conveniente el acceso (recuperación – modificación) mediante peticiones
di e tas, las is as ue o de e á pe iti ea sesio es o al a e a
alguna información temporal sobre la petición (cookies).
De esta forma REST permite la interacción perfecta con el STORE convirtiendo cada consulta de sparql en una petición GET directa al Store.
3.1.2.3. Pruebas
Una de las ventajas presentes en el uso de REST es la sencillez de los clientes, pudiendo ser construidos en básicamente cualquier lenguaje. Para la comprobación del servicio REST presente en Virtuoso se utilizará un cliente desarrollado bajo el lenguaje PHP.
Se extraerán 3 elementos del tipo PARADA, donde los resultados serán mostrados en formato JSON.
$query = “PREFIX pois:< select *
http://localhost:9090/pois/vcblr/#> where { ?Parada a pois:PARADA } LIMIT 3”; $baseURL = “http://localhost:9090/pois/vcblr/#”; $format="application/json" $params=array( "default-graph" => "http://localhost:8890/poisV5", "query" => $query, "timeout" => "", "format" => $format, "save" => "display" ); $querypart="?";
foreach($params as $name => $value) { $querypart=$querypart . $name . '=' . urlencode($value) . "&"; } $sparqlURL=$baseURL . $querypart; file_get_contents($sparqlURL)
Cúmar Ramiro Cueva Tacuri 49
{ "head": { "link": [], "vars": ["Parada"] }, "results": { "distinct": false, "ordered": true, "bindings": [
{ "Parada": { "type": "uri", "value": "http://localhost:9090/pois/vcblr/#prd1" }}, { "Parada": { "type": "uri", "value": "http://localhost:9090/pois/vcblr/#prd2" }}, { "Parada": { "type": "uri", "value":
"http://localhost:9090/pois/vcblr/#prd3" }} ] } }
Como se puede apreciar, la interacción con el Store desde su interfaz REST es sencilla, donde es importante notar la importancia de los parámetros correctos, así como indicar que los valores de los parámetros deberán ir codificados mediante la función urlencode()63, que realiza un reemplazo
de los caracteres no alfanuméricos por símbolos equivalentes. De tal forma que estos no interfieran con la sintaxis y caracteres propios de la URL a la cual se hace la petición HTTP.
Texto : a ser enviado % encode Texto%20%3A%20a%20ser%20enviado%20%25
Figura 19: Caracteres codificados