Le blog d'un Geekus biologicus juvénile

Comment charger la base de donnée BioPAX de PathwayCommons dans QLever?

De quoi parlons nous ?

QLever (prononcé “clever”) est une base de donnée graphe pour les triplets RDFs, avec un support pour les requêtes SPARQL.

PathwayCommons est une initiative visant à rassembler de multiples sources de données sur les voies métaboliques, aggrégées via le format standard BioPAX. PathwayCommons fournit un fichier OWL (web ontology language, un fichier permettant de sérialiser les ontologies et les triplets RDFs). PathwayCommons proposes diférents outils, dont une API.

Que voulons nous faire ?

L’objectif de ce tuto est de montrer une procédure permettant de charger le fichier OWL de Pathway-Commons dans une instance locale de QLever, pour faire des requêtes SPARQL sur sa machine sur la base de connaissance de PathwayCommons.

Procédure

Comment installer QLever ?

La méthode d’installation de QLever utilises un conteneur Docker, et une CLI Python pour la gestion de ce conteneur et de sa configuration.

On peut installer le wrapper python avec pip:

# On crée un environnement virtuel python
python3 -m venv .venv/
# On active l'environnement
source .venv/bin/activate
# On install le paquet python
pip install qlever

Installer podman ou Docker

qlever tourne dans un conteneur. Nous allons avoir besoin d’installer podman ou Docker pour l’utiliser. Personnellement, j’ai choisit d’utiliser podman. Si vous choisissez Docker, il faudra modifier le fichier de configuration proposé ci-dessous

Préparer l’archive OWL et configurer QLever

Il faut créer un fichier Qleverfile avec la configuration de QLever pour la base de données dans laquelle nous importerons les triplets RDFs de PathwayCommons:

# Qleverfile for PathwayCommons BioPAX, use with https://github.com/ad-freiburg/qlever-control
#
# qlever get-data  #
# qlever index     #
# qlever start     #

[data]
NAME         = pathwaycommons
PATHWAYCOMMONS_FILE  = resource/pc-biopax_v14.ttl
PATHWAYCOMMONS_VERSION = "v14"
GET_DATA_CMD = mkdir -p rdf-input && cp "${PATHWAYCOMMONS_FILE}" rdf-input/
DESCRIPTION  = BioPAX data from PathwayCommons "${PATHWAYCOMMONS_VERSION}"

[index]
INPUT_FILES     = rdf-input/*
# Before running qlever index, convert the rdf from OWL format to ttl:
# robot convert --input "INPUT.{rdf,owl}" --format ttl --output "rdf-input/OUTPUT.ttl"
# As there is multiline statements, run qlever with --parallel-indexing false:
# qlever index --parallel-indexing false
CAT_INPUT_FILES = cat rdf-input/*.ttl
SETTINGS_JSON   = { "ascii-prefixes-only": true, "num-triples-per-batch": 1000000, "prefixes-external": [""] }
WITH_TEXT_INDEX = false

[server]
PORT               = 7012
ACCESS_TOKEN       = ${data:NAME}_3xq0t73sEtbb
MEMORY_FOR_QUERIES = 10G
CACHE_MAX_SIZE     = 5G

[runtime]
SYSTEM = podman
IMAGE  = docker.io/adfreiburg/qlever:commit-305daf3

[ui]
UI_CONFIG = Qleverfile-ui.yml

Dans ce fichier est configurer la méthode d’import des triplets RDF, le runtime avec podman et le nom de la base.

Récupérer le fichier OWL de PathwayCommons

L’archive OWL de la dernière release peu être téléchargé depuis https://download.baderlab.org/PathwayCommons/. J’utilise la version 14, dernière version à l’heure où j’écris ces lignes.

wget -O resource/pc-biopax_v14.owl.gz https://download.baderlab.org/PathwayCommons/PC2/v14/pc-biopax.owl.gz

Convertir le fichier du format OWL vers le format Turtle

QLever ne supporte pas le format OWL comme format d’entrée. Il nous faut donc convertir l’archive pc-biopax.owl.gz au format Turtle (ttl). Pour ce faire, on va utiliser l’outil d’Apache Jena riot, qui permet de convertir le fichier OWL en fichier Turtle en mode streaming, c’est-à-dire sans charger complètement le fichier en mémoire, ce qui est plus efficace sur un fichier de cette taille.

Il faut donc commencer par télécharger une release de Apache Jena, depuis https://jena.apache.org/download/index.cgi. L’outil riot est dans le dossier bin de l’archive.

Pour éviter l’erreur suivante en cours de conversion, nous allons remplacer les crochets dans les champs rdf:about et les remplacer par leur équivalents en encodage URL.

15:55:16 ERROR riot            :: [line: 50708930, col: 64] <panther:_[GnRH_GnRHR]_gnas_s808_csa54_> : [Posn 10] Bad character in IRI path: '[' (U+005B)

Voici le fragment de code que j’ai utilisé pour trouver l’encodage de remplacement pour la chaîne de caractères fautive:

import urllib.parse
safe_string = urllib.parse.quote_plus("[GnRH_GnRHR]")
print(safe_string)
%5BGnRH_GnRHR%5D

On commence par dézipper l’archive

gunzip -k resource/pc-biopax_v14.owl.gz

Puis avec un petit sed on remplace la chaîne de charactère:

sed  's|panther:_\[GnRH_GnRHR\]|panther:_%5BGnRH_GnRHR%5D|g' ./resource/pc-biopax_v14.owl > ./resource/pc-biopax_v14_urlencode_brackets.owl

Enfin, on converti le fichier owl obtenu en TTL:

riot --nocheck --out=ttl ./resource/pc-biopax_v14_urlencode_brackets.owl > ./resource/pc-biopax_v14.ttl

Construire l’index de Qlever

Avant de lancer le server Qlever, on commence par construire l’index de la base de données graphe avec le wrapper Python de Qlever:

# Chargement des données
qlever get-data
# Indexation
qlever index --parallel-parsing false

Attention: Il se pourrait que vous deviez désactiver temporairement SELinux pour éviter des problèmes de permissions avec le conteneur podman de qlever.

Démarrer le serveur Qlever

qlever start

Lancer la web ui de Qlever pour écrire des requêtes SPARQL dans le navigateur

En premier lieu, on créer un fichier de configuration pour l’interface web Qleverfile-ui.yml, puis on démarre le conteneur du serveur web de l’interface utilisateur de Qlever. On peut aussi ne pas créer de fichier Qleverfile-ui.yml, commenter la ligne avec la clé UI_CONFIG du fichier Qleverfile et démarrer le conteneur avec la même commande, cela créera un fichier Qleverfile-ui.yml avec une configuration par défaut.

qlever ui --name pathwaycommons

Enfin, ouvrez l’adresse https://localhost:8176 dans votre navigateur et profitez de votre base de connaissance PathwayCommons en local !