Docencia Linked Open Data IZFE

He subido las slides y resultados de ejercicios de la docencia de dos días que he dado en IZFE sobre Linked Open Data.


SADI-Docker for Galaxy


SADI is a framework to define Semantic Web Services that consume and produce RDF. On the other hand, Docker is a container-based virtualisation environment for deploying applications very easily, without configuration or installation of dependencies. Therefore I have created SADI-Docker, a Docker image containing all the necessary programs and dependencies to invoke SADI services: Galaxy tool-files are also provided to execute such programs as regular Galaxy tools. Therefore, SADI can be used within Galaxy with a minimal installation (only the Docker image and the Galaxy XML files, see bellow). Even more, the SADI-Docker image can be used as a regular Docker image, runing it as a standalone Operating System pre-configured to invoke SADI services.


Install Docker and do the thingy for avoiding sudo access:

 $ sudo apt-get install
 $ sudo groupadd docker
 $ sudo gpasswd -a your_user docker
 $ sudo service restart

(You might need to log out and back in, and also I had to install apparmor).

Pull the SADI-Docker image to your Docker repository:

 $ docker pull mikeleganaaranguren/sadi:v6

Check that it has been succesfully pulled:

 $ docker images
 mikeleganaaranguren/sadi v6 0bb03066587d 46 hours ago 580.3 MB

Download/clone the latest Galaxy version:

 $ git clone

Download/clone this repository and copy the `tools/SADI-Docker` directory to the `tools` directory in your Galaxy installation. You can also install the Galaxy tools from within your Galaxy instance as regular Galaxy tools from the Galaxy tool shed. There are five Galaxy tools:

  • SADI-Docker-sadi_client: a SADI client for synchronous SADI services.
  • SADI-Docker-RDFSyntaxConverter: a tool to convert between different RDF syntaxes, including from RDF to TSV files.
  • SADI-Docker-mergeRDFgraphs: a tool to merge different RDF graphs into one.
  • SADI-Docker-SPARQLGalaxy: a tool to perform SPARQL queries against RDF files.
  • SADI-Docker-rapper: a tool to convert RDF files to different syntaxes.SADI-Docker-tab2rdf: a tool to produce RDF files from TSV files.

Add the following section to `config/tool_conf.xml` to add the tools to Galaxy (first copy `tool_conf.xml.sample` to `tool_conf.xml`):


Change the Galaxy configuration so that it can run Docker images as if they were regular tools installed in your system. Add a destination, `docker_local`, to your configuration, and make it the default. Copy `config/job_conf.xml.sample_basic` to `config/job_conf.xml` and add these lines to `config/job_conf.xml` (change `docker_memory` if necessary):


(look at `job_conf.xml.sample_advanced` for more options regarding how Galaxy invokes Docker containers, since there are a lot of options).

Run Galaxy and the tools should appear under `Docker SADI services`:


Use case

In order to test the installation, you can run a pre-defined workflow. Upload the file workflow/UniProt_IDs.txt, to your current Galaxy history. Then you can import the workflow in Galaxy (Workflows; Import or Upload Workflow; choose file workflow/ You can also find the workflow at the tool shed. Then run the workflow, choosing the UniProt_IDs.txt dataset as input for the first step.

The workflow answers the following question: Given a set of UniProt proteins, which ones are related to PubMed abstracts containing the term “brain”, and what are they KEGG entries? The workflow starts from a simple list of UniProt identifiers, and retrieves different datasets from a regular SADI service (to obtain KEGG entries) and a set of 3 OpenLifeData2SADI services (to obtain PubMed abstracts). The results are then merged and queried to obtain the KEGG entries of proteins that are related to PubMed abstracts that contain the term.


The SADI services used in the workflow are:

And the SPARQL query to obtain the result:

 PREFIX rdf: <>
 PREFIX rdfs: <>
 PREFIX sadi: <>
 PREFIX lsrn: <>
SELECT ?protein ?label ?KEGG
 ?protein rdf:type lsrn:UniProt_Record .
 ?protein sadi:isEncodedBy ?KEGG .
 ?protein ?prot2hgnc ?hgnc .
 ?hgnc ?hgnc2omim ?omim .
 ?omim ?omim2pubmed ?pubmed .
 ?pubmed rdfs:label ?label .
 FILTER (regex (?label, 'brain'))


This project is a continuation of SADI-Galaxy-Docker, with the inverse approach, hence the name: SADI-Galaxy-Docker was a complete Galaxy server, configured with SADI tools, within a Docker image; SADI-Docker is a Docker image with only SADI tools, and any Galaxy instance can invoke the image.

Tab2rdf is a “fork” of the tool tab2rdf. This version adds option for the user to define no base URI, i.e. all the entities of the tab file have their own URI.

When using the SADI client on its own, the input dataset’s datatypes must be edited, stating that the input is an RDF file.

The docker image can also be built without pulling it, using the Dockerfile:

 FROM ubuntu:14.04
 MAINTAINER Mikel Egaña Aranguren <>
# Install the necessary stuff with apt-get
RUN apt-get update && apt-get install -y wget python python-setuptools raptor2-utils libraptor2-0
# apt-get install python-rdflib is not working so use easy_install instead
RUN easy_install rdflib
# SADI does not like OpenJDK so install Java from
RUN wget
 RUN sh update-sun-jre.bin
RUN mkdir /sadi
 COPY sadi_client.jar /sadi/
 COPY RDFSyntaxConverter.jar /sadi/
 COPY /sadi/
 COPY /sadi/
 COPY /sadi/
 COPY /sadi/
 RUN chmod a+x /sadi/*

Crítica a Linked Data en Open Data Euskadi (III) Actualización

Desde la primera crítica constructiva que hice sobre la versión “Linked Data” de Open Data Euskadi algunas URIs han cambiado, pero los problemas descritos persisten (En el Open Data Day 2014 propusimos una solución). Añado aquí las URIs nuevas:

  1. Web de datasets:
  2. En el dataset en turtle, URI del consulado de Suiza:
  3. Negociación contenido simulando ser navegador web: curl Resultado: HTML (OK)
  4. Negociación contenido simulando ser agente automático que quiere RDF/XML: curl –header “Accept: application/rdf+xml” Resultado: HTML (not OK).

El problema es que la URI principal solo lleva a la página web, y dentro de la página web, hay una URL con un archivo RDF ( Eso viola el principio básico (Linked Data e incluso REST en general) de que las URIs denotan entidades, no sus representaciones. Tampoco hay enlaces (predicados) a, por ejemplo, Suiza en DBPedia.

Probamos con otro dataset, esta vez sacado de la bola Open Data Euskadi de la nube Linked Open Data. El primer dataset de la lista es Farmacias de euskadi: Pero el dataset no es sobre farmacias, es sobre metadatos de datos de farmacias, y el único enlace que parece significativo (es decir, tendría datos reales de farmacias) es y no funciona (ni para humanos ni para agentes). El resto son triples sobre Dublin Core etc., más que predicados a otros datos. El resto de lo datasets siguen el mismo patrón: más que datos son metadatos, y los enlaces no funcionan.

Argitaletxe digitala

Berria fundazioak antolatutako leihaketa batera aurkeztutako proiektua, argitaletxe digital bat sortzeko ideiekin, “Publications” orrialdean, “Etc.”, “Euskara” atalean:

Ez nuen irabazi baina proiektuak badauka ideia dexenteren bat edo beste.

Docker image for SADI-Galaxy


SADI is a framework to define Semantic Web Services that consume and output RDF, and SADI-Galaxy makes SADI services available in the popular Galaxy platform. Thus, SADI-Galaxy is a nice SADI client to invoke SADI services in an environment that Biologists use often.

On the other hand, Docker is a sort of “virtualisation” environment for deploying applications very easily, without configuration. Therefore I have created a Docker image for deploying a Galaxy instance already containing SADI-Galaxy, so anyone interested in SADI-Galaxy can try it out easily within having to configure Galaxy and SADI-Galaxy.

Deploying the container

Install Docker and do the thingy for avoiding sudo access:

$ sudo apt-get install
$ sudo groupadd docker
$ sudo gpasswd -a your_user docker
$ sudo service restart

(You might need to log out and back in).

Pull the SADI-Galaxy Docker image:

$ docker pull mikeleganaaranguren/sadi-galaxy

Check that it has been succesfully pulled:

$  docker images

REPOSITORY                        TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mikeleganaaranguren/sadi-galaxy   latest              xxxxxxxxxxx        3 days ago          895.8 MB

Run the container (Make sure that the port 8080 is listening and free in the host machine, or use a different one and map it to the container, e.g. 8389:8080):

$ docker run -d -p 8080:8080 mikeleganaaranguren/sadi-galaxy

If you go with your web browser to (or the IP of the host machine) there should be a Galaxy server runing. The SADI tools are under SADI services, on the left pane.

Galaxy main

Login (in the User menu on the top;, password:useruser) and a history should appear on the right pane.

Galaxy history

In the Workflow menu, there is only one workflow, OpenLifeData2SADI SADI. You can have a look by clicking on the workflow name and then clicking edit:

Galaxy workflow

Run the workflow.

Galaxy workflow

Use dataset 1 from the history as input for the workflow (UniProt_IDs.txt).

Galaxy run workflow

When the worfklow has finished new steps will appear in the history (20-37).

Galaxy workflow done

You can use the workflow, by inspecting the steps, to become familiar with SADI-Galaxy.

Publicar datos RDF con Amazon EC2 + Virtuoso


Para publicar datos en Linked Data necesitamos un servidor web potente con un Triple Store como Virtuoso. A veces nos puede salir mejor utilizar un servicio tipo cloud como Amazon EC2 (por ejemplo meneame lo usa) que tener nuestro propio servidor (de hecho, muchas veces!). En este mini tutorial vamos a publicar un dataset RDF implementando un triple store Virtuoso en una instancia Amazon EC2. Amazon tiene una oferta “free tier” que supongo que será para todo el mundo (puede ser que la tenga por ser usuario premium?); en cualquier caso la instancia que vamos a usar es la que menos prestaciones tiene asi que sera baratísima si no tienes “free tier”. La idea es que con este primer paso luego ya puedes implementar algo más potente, con auto-scale, balanceadores de carga y todo eso.

Crear instancia Amazon EC2

Nos hacemos una cuenta en Amazon Web Services y entramos. Vamos a Services y EC2. Ahi Launch Instance (debajo de create instance). En el menú podriamos elegir una imagen que ya contiene Virtuoso, pero viene con CentOS que es un poco lo peor asi que elegimos Ubuntu Server 64 bits (deberia ser free tier). En el siguiente paso elegimos la instancia t1.micro y le damos a configurar: aquí solo asegurarse de que la instancia tendra una IP publica, “Automatically assign a public IP address to your instances”. En el paso add storage los valores por defecto valen, pero se pueden añadir hasta 30 GB con el free tier, asi que los añadimos (también podemos elegir SSD en vez de magnetico, pero en realidad para lo que vamos hacer aquí da un poco igual todo esto del rendimiento I/O). En tag instance ponemos lo que sea. En security groups hay que añadir las siquientes reglas:

– Una regla para acceder mediante SSH (Yo aqui puse “My computer” por que tengo una IP fija).

– Otra regla “Custom TCP rule”, “port range=8890”, “anywhere” (para que usuarios externos accedan a virtuoso y podamos testear el sistema con consultas SPARQL).

– Otra regla “HTTP anywhere”, por si queremos añadir un servidor Pubby, por ejemplo, para implementar Linked Data mediante negociacion de contenido.

Creamos la instancia y generamos una clave .pem para poder acceder mediante SSH.

Instalar y configurar Virtuoso

Hacemos SSH a nuestra instancia activa y:

– Instalar Virtuoso: sudo apt-get install virtuoso-opensource

– Editar /etc/virtuoso-opensource-6.1 y añadir el path del directorio donde estara el RDF que queremos cargar (nuestra home en la instancia EC2): DirsAllowed = ., /usr/share/virtuoso-opensource-6.1/vad, /home/ubuntu.

– Reiniciar virtuoso: sudo service virtuoso-opensource-6.1 restart.

Cargar RDF en virtuoso

– Como dataset ejemplo, usamos una proteina de UniProt: wget

– Ejecutamos isql con el usuario por defecto dba:isql-vt -U dba

– Añadimos todos los archivos que se encuentren en /home/ubuntu, que terminen en “.rdf”, al grafo SQL> ld_dir('/home/ubuntu','*.rdf','');

– Ejecutar el trabajo propiamente dicho (este proceso es el que tarda si el dataset es grande): SQL> rdf_loader_run ();.

Consultas contra el RDF dataset almacenado en Virtuoso

Si vamos a la IP publica, al SPARQL endpoint (ej., deberia aparacer un formulario para ejecutar consultas SPARQL. Probamos con:

Pantaila-argazkia 2014-06-20 16:44:06

Deberia dar una larga lista de triples. Happy hacking!

Tagged , , ,

Crítica a Linked Data en Open Data Euskadi (II): Solución

Como parte del Open Data Hack Day Bilbao 2014 (ODD14) solucionamos los problemas que se describen en el post anterior (Crítica a Linked Data en Open Data Euskadi). Los solucionamos creando un dataset a mano usando como ejemplo el dataset de Open Data Euskadi, y usando un “pack” de publicación Linked Data para implementarlo como si fuese un servidor web real de Linked Data. Esta todo en el repositorio creado para el evento: Forks and pull requests are wellcome 😉