Tutoriel : exemple de query SPARQL avec l’API Sesame

Tutoriel : exemple de query SPARQL avec l’API Sesame

On a vu précédemment comment utiliser l’API Sesame depuis un programme Java, quelles dépendances étaient nécessaires, et comment faire les opérations de base avec un Repository : initialiser, charger des données, écrire des données.

Voilà maintenant comment effectuer des query SPARQL SELECT et CONSTRUCT sur un Repository, et traiter les résultats. Les deux types de query utilisent des objets différents : TupleQuery et TupleQueryResult pour les SELECT, GraphQuery et GraphQueryResult pour les CONSTRUCT. Les commentaires dans le code ci-dessous parlent d’eux-même, et n’hésitez-pas à vous reporter à la documentation des API Sesame pour d’autres exemples.


[java] // création du Repository en mémoire.
Repository repository = new SailRepository(new MemoryStore());
// initialisation du Repository : cet appel est obligatoire une fois et une seule
repository.initialize();

// on ouvre une connection au repository
// comme en JDBC, c’est à travers cette connexion que sont envoyées toute les querys
RepositoryConnection connection = repository.getConnection();

// I. exemple de Query SELECT

// on initialise la query.
TupleQuery selectQuery = connection.prepareTupleQuery(
QueryLanguage.SPARQL,
"SELECT ?x ?foafName WHERE { ?x <http://xmlns.com/foaf/0.1/name> ?foafName }"
);

// on l’execute
TupleQueryResult selectQueryResult = selectQuery.evaluate();

// on itère sur les résultats
while(selectQueryResult.hasNext()) {
// chaque ligne du résultat est un BindingSet
BindingSet aBinding = selectQueryResult.next();

// on print les valeurs de cette ligne
System.out.println("Personne "+aBinding.getValue("x")+" a pour nom "+aBinding.getValue("foafName"));

// si on ne connait pas les noms de variables de la query, on peut les récupérer dynamiquement
for (String aBindingName : selectQueryResult.getBindingNames()) {
System.out.println("La valeur de "+aBindingName+" est "+aBinding.getValue(aBindingName));
}
}

// II. Exemple de Query CONSTRUCT

// on initialise la query
GraphQuery constructQuery = connection.prepareGraphQuery(
QueryLanguage.SPARQL,
"PREFIX foaf: <http://xmlns.com/foaf/0.1/> " +
"PREFIX vcard: <http://www.w3.org/2006/vcard/ns#>" +
"CONSTRUCT {?x vcard:n _:n . _:n vcard:given-name ?name .} WHERE { ?x foaf:name ?name }"
);

// on l’execute
GraphQueryResult constructQueryResult = constructQuery.evaluate();

// on itère sur les résultats, qui sont des Statement RDF, pas des binding
while(constructQueryResult.hasNext()) {
Statement anRDFStatement = constructQueryResult.next();
// ici on se contente d’afficher le Statement
// typiquement on devrait en faire quelque chose : écrire dans un fichier, ou
// l’insérer dans un autre Repository, etc.
System.out.println(anRDFStatement);
}

// quand on n’a plus besoin de la connexion, on la ferme
connection.close();[/java]

Next Post:
Previous Post:

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>