Cotechnoe — Donner du sens à vos données
fusekiazuresparqlmarketplacetutorial

Apache Jena Fuseki sur Azure — Déploiement en 5 minutes

· Michel Héon

Apache Jena Fuseki est le serveur SPARQL de la suite Apache Jena — la plateforme Java open source de référence pour le Web sémantique. L’offre Cotechnoe sur Azure Marketplace vous permet de déployer une instance Fuseki préconfigurée sur Ubuntu 22.04 en quelques minutes, sans compilation ni configuration manuelle.

Ce guide couvre le déploiement, la connexion à l’interface de gestion et l’exécution de vos premières requêtes SPARQL.


Ce que vous obtenez

Une VM Azure avec :

  • Apache Jena Fuseki (suite Apache Jena) — serveur SPARQL 1.1 complet
  • TDB2 — triplestore RDF natif, persistant et transactionnel
  • Apache Shiro — authentification et contrôle d’accès par dataset
  • Interface d’administration web accessible sur le port 3030
  • Support de tous les formats RDF : Turtle, N-Triples, JSON-LD, RDF/XML, TriG

Étape 1 — Déployer depuis Azure Marketplace

Depuis la page Apache Jena Fuseki sur Azure Marketplace, cliquez sur Créer. Les paramètres essentiels :

ParamètreValeur recommandée
RégionCanada Est ou Est US 2
Taille VMStandard_B2s (2 vCPU, 4 Go RAM) — suffisant pour débuter
AuthentificationClé SSH (recommandé)
Port entrant3030 (UI Fuseki) + 22 (SSH)

Azure crée un groupe de sécurité réseau (NSG) qui expose le port 3030. La VM démarrera avec Fuseki déjà lancé comme service systemd.


Étape 2 — Accéder à l’interface de gestion

Une fois la VM démarrée (environ 2–3 minutes), ouvrez votre navigateur sur :

http://<IP-publique-de-la-VM>:3030/

Vous verrez l’interface d’administration Fuseki. Par défaut, l’accès admin utilise les identifiants configurés via Apache Shiro (shiro.ini). L’offre Cotechnoe configure un mot de passe initial que vous trouverez dans les informations de déploiement Azure (onglet Sortie du déploiement ARM).

Bonne pratique : changez le mot de passe admin dès le premier accès, et envisagez de restreindre le NSG à votre adresse IP plutôt que d’exposer le port 3030 à tout Internet.


Étape 3 — Créer votre premier dataset

Dans l’interface web, cliquez sur manage datasets puis add new dataset.

  • Dataset name : mon-graphe
  • Dataset type : Persistent (TDB2) — les données survivent aux redémarrages du serveur

Fuseki crée immédiatement les endpoints suivants :

EndpointURL
SPARQL Queryhttp://<IP>:3030/mon-graphe/query
SPARQL Updatehttp://<IP>:3030/mon-graphe/update
Graph Store (lecture)http://<IP>:3030/mon-graphe/data
Graph Store (écriture)http://<IP>:3030/mon-graphe/data (POST/PUT)

Étape 4 — Charger des données RDF

Via l’interface web

Dans l’onglet upload data du dataset, glissez-déposez un fichier .ttl, .nt, .json-ld ou .rdf.

Via curl (Turtle)

curl -X POST http://<IP>:3030/mon-graphe/data \
  -H "Content-Type: text/turtle" \
  --data-binary @mon-fichier.ttl

Exemple de fichier Turtle minimal

@prefix ex: <http://exemple.org/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

ex:Alice a ex:Personne ;
    rdfs:label "Alice Tremblay" ;
    ex:connait ex:Bob .

ex:Bob a ex:Personne ;
    rdfs:label "Bob Gagnon" .

Étape 5 — Exécuter des requêtes SPARQL

Via l’interface web

L’onglet query du dataset offre un éditeur SPARQL interactif avec coloration syntaxique et bouton d’exécution.

Requête SELECT basique

PREFIX ex: <http://exemple.org/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?personne ?nom
WHERE {
  ?personne a ex:Personne ;
            rdfs:label ?nom .
}
ORDER BY ?nom

Via curl (résultats JSON)

curl -G http://<IP>:3030/mon-graphe/query \
  --data-urlencode "query=SELECT * WHERE { ?s ?p ?o } LIMIT 10" \
  -H "Accept: application/sparql-results+json"

Requête CONSTRUCT (export en Turtle)

PREFIX ex: <http://exemple.org/>

CONSTRUCT { ?s ex:connait ?o }
WHERE     { ?s ex:connait ?o }

Étape 6 — Mettre à jour les données (SPARQL Update)

SPARQL Update permet d’insérer, modifier ou supprimer des triplets sans recharger l’ensemble du dataset.

PREFIX ex: <http://exemple.org/>

INSERT DATA {
  ex:Charlie a ex:Personne ;
    ex:connait ex:Alice .
}

Via curl :

curl -X POST http://<IP>:3030/mon-graphe/update \
  -H "Content-Type: application/sparql-update" \
  --data "INSERT DATA { <http://exemple.org/Charlie> a <http://exemple.org/Personne> . }"

Aller plus loin

Sécuriser l’accès

Fuseki utilise Apache Shiro pour l’authentification. Le fichier de configuration se trouve sur la VM à :

/etc/fuseki/shiro.ini

Pour la production, placez Fuseki derrière un reverse proxy (nginx ou Azure Application Gateway) avec TLS, et restreignez le port 3030 au réseau interne.

Connecter une application Python

from SPARQLWrapper import SPARQLWrapper, JSON

sparql = SPARQLWrapper("http://<IP>:3030/mon-graphe/query")
sparql.setQuery("""
    SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 5
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()

for r in results["results"]["bindings"]:
    print(r["s"]["value"], r["p"]["value"], r["o"]["value"])

La bibliothèque SPARQLWrapper est disponible via pip install SPARQLWrapper.

Charger un catalogue DCAT-AP

Si vous publiez des données ouvertes, Fuseki est un excellent endpoint pour exposer un catalogue DCAT-AP :

@prefix dcat: <http://www.w3.org/ns/dcat#> .
@prefix dct:  <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<https://data.exemple.gouv.qc.ca/catalogue>
    a dcat:Catalog ;
    dct:title "Catalogue de données ouvertes" ;
    dct:publisher <https://exemple.gouv.qc.ca> ;
    dcat:dataset <https://data.exemple.gouv.qc.ca/jeu/population> .

Ressources