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ètre | Valeur recommandée |
|---|---|
| Région | Canada Est ou Est US 2 |
| Taille VM | Standard_B2s (2 vCPU, 4 Go RAM) — suffisant pour débuter |
| Authentification | Clé SSH (recommandé) |
| Port entrant | 3030 (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 :
| Endpoint | URL |
|---|---|
| SPARQL Query | http://<IP>:3030/mon-graphe/query |
| SPARQL Update | http://<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> .