<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sparna Blog &#187; Triplestores</title>
	<atom:link href="https://blog.sparna.fr/tag/triplestores/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.sparna.fr</link>
	<description>Web de données &#124; Architecture de l&#039;information &#124; Accès aux connaissances</description>
	<lastBuildDate>Tue, 03 Jun 2025 10:30:27 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>Le wiki sémantique : solution de capitalisation des connaissances (structurées)</title>
		<link>https://blog.sparna.fr/2014/01/20/wiki-semantique-capitalisation-des-connaissances-structurees/</link>
		<comments>https://blog.sparna.fr/2014/01/20/wiki-semantique-capitalisation-des-connaissances-structurees/#comments</comments>
		<pubDate>Mon, 20 Jan 2014 14:44:08 +0000</pubDate>
		<dc:creator><![CDATA[Thomas Francart]]></dc:creator>
				<category><![CDATA[Editeurs]]></category>
		<category><![CDATA[Recherche d'informations]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[Semantic MediaWiki]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://blog.sparna.fr/?p=532</guid>
		<description><![CDATA[<p>Points forts, points faibles Les wiki sont de bons moyens d&#8217;amener les membres d&#8217;une communauté à contribuer collectivement à une base de connaissance partagée. C&#8217;est sur ce principe que repose Wikipedia, mais la même idée peut s&#8217;appliquer à une entreprise, une association ou une administration. Un wiki, c&#8217;est l&#8217;anarchie, et c&#8217;est son point fort. L&#8217;approche&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2014/01/20/wiki-semantique-capitalisation-des-connaissances-structurees/">Le wiki sémantique : solution de capitalisation des connaissances (structurées)</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<h2>Points forts, points faibles</h2>
<p style="text-align: justify;">Les <a href="http://fr.wikipedia.org/wiki/Wiki" target="_blank">wiki</a> sont de bons moyens d&rsquo;amener les membres d&rsquo;une communauté à contribuer collectivement à une base de connaissance partagée. C&rsquo;est sur ce principe que repose <a href="http://fr.wikipedia.org" target="_blank">Wikipedia</a>, mais la même idée peut s&rsquo;appliquer à une entreprise, une association ou une administration.</p>
<p style="text-align: justify;"><strong>Un wiki, c&rsquo;est l&rsquo;anarchie</strong>, et c&rsquo;est son point fort. L&rsquo;approche &laquo;&nbsp;contribuer d&rsquo;abord, structurer (un peu) ensuite&nbsp;&raquo; assure que la barrière d&rsquo;<a class="zem_slink" title="salad recipes" href="http://www.kraftrecipes.com/recipes/dinner/entree-salads.aspx" target="_blank" rel="kraftrecipes">entrée</a> pour un contributeur est très faible, qu&rsquo;il n&rsquo;est pas obligé de respecter une quelconque structure, et peut même s&rsquo;approprier ou modifier les structures existantes (en modifiant l&rsquo;organisation d&rsquo;un article ou en modifiant des catégories dans le wiki). Cela assure la contribution du plus grand nombre de personnes possibles.</p>
<p style="text-align: justify;">Un wiki, c&rsquo;est l&rsquo;anarchie, et c&rsquo;est son point faible. C&rsquo;est son point faible si l&rsquo;exhaustivité ou la qualité des données sont un de ses objectifs, ou si l&rsquo;on veut pouvoir réutiliser la connaissance contenue dans le wiki dans d&rsquo;autres applications informatiques. <strong>Qualité, exhaustivité, structuration des données pour la machine peuvent difficilement être atteintes par le mode d&rsquo;organisation classique du wiki </strong>[1. Un exemple sur wikipedia/dbpedia ? <a href="http://fr.dbpedia.org/sparql?default-graph-uri=&amp;query=SELECT+%3Flabel+%3Fslogan%0D%0AWHERE+{%0D%0A++%3Fx+a+dbpedia-owl%3ACompany+.%0D%0A++%3Fx+rdfs%3Alabel+%3Flabel+.%0D%0A++FILTER+%28lang%28%3Flabel%29+%3D+%27fr%27%29+.%0D%0A++OPTIONAL+{+%3Fx+prop-fr%3Aslogan+%3Fslogan+}%0D%0A}&amp;format=text%2Fhtml&amp;timeout=0&amp;debug=on">cette requête SPARQL</a> sur <a href="http://fr.dbpedia.org/sparql">DBPedia francophone</a> ramène toutes les sociétés avec leur slogan. 1/ qualité : certains slogans contiennent des chiffres 2/ exhaustivité : le slogan n&rsquo;est parfois pas renseigné 3/ structuration : cette requête est possible sur DBpedia qui a structuré les données, mais pas sur wikipedia.]
<p style="text-align: justify;">Les technologies du web sémantique sont un bon moyen pour structurer les informations et les partager sur le web. En miroir des wiki, on peut dire que cette structuration est à la fois leur point faible et leur point fort : point fort car c&rsquo;est cette structuration des données qui les rend partageables et réutilisables par des machines (mais <a href="http://plexus-logos-calx.blogspot.fr/2009/11/a0047-le-meilleur-format-standard.html" target="_blank">certains en doutent</a>), point faible car arriver à ce niveau de structuration peut augmenter significativement la barrière d&rsquo;entrée pour publier et partager des données, en particulier dans des projets de capitalisation de connaissances. Par ailleurs des solutions simples, paramétrables et gratuites de formulaires de saisie pour des données <a href="http://www.w3.org/RDF/" target="_blank">RDF</a> ne courent pas les rues.</p>
<p style="text-align: justify;">Vous me voyez venir.<strong> Les <a href="http://fr.wikipedia.org/wiki/Wiki_s%C3%A9mantique" target="_blank">wikis sémantiques</a> sont la solution de synthèse du meilleur des deux mondes : le wiki pour son côté &laquo;&nbsp;faible barrière d&rsquo;entrée à la contribution&nbsp;&raquo; et la sémantique pour son côté &laquo;&nbsp;structuration et partage des données&nbsp;&raquo; </strong>[2. D&rsquo;autres dans la sphère francophone l&rsquo;avaient mentionné bien avant, <a href="http://www.lespetitescases.net/et-le-wiki-devint-semantique">ici</a> et <a href="http://mondeca.wordpress.com/2006/11/10/wiki-et-semantique-marions-les-marions-les/">là</a>.].</p>
<h2>Semantic Media Wiki = Media Wiki + Structuration</h2>
<p style="text-align: justify;"><a href="http://semantic-mediawiki.org/" target="_blank"><strong>Semantic Media Wiki</strong></a> (SMW) est une extension du logiciel de wiki <a href="http://www.mediawiki.org/wiki/MediaWiki/fr" target="_blank">Media Wiki</a>, celui qui est utilisé par Wikipedia. Cette extension propose de pouvoir gérer des données structurées dans le wiki, et de publier de ces données dans les formats du web sémantique, dans une base RDF.</p>
<p style="text-align: justify;">Je résume les fonctionnalités indiquées dans <a href="http://semantic-mediawiki.org/wiki/Help:Introduction_to_Semantic_MediaWiki#Where_SMW_can_help" target="_blank">la page d&rsquo;introduction de SMW</a> :</p>
<ul style="text-align: justify;">
<li>générer automatiquement des listes d&rsquo;objets dans le wiki, plutôt que de les saisir à la main</li>
<li>présenter les données visuellement dans des graphes, des cartes, des calendriers</li>
<li>améliorer la structure du wiki en évitant les catégories ad-hoc du type &laquo;&nbsp;films des années 50&Prime;</li>
<li>rechercher des informations de façon structurée (et plus uniquement plein-texte)</li>
<li>mettre à disposition les données du wiki pour d&rsquo;autres applications et intégrer les données d&rsquo;autres applications dans le wiki via SPARQL</li>
</ul>
<p style="text-align: justify;">Voilà ce qu&rsquo;il ressort de mes premières impression après avoir testé SMW :</p>
<ol>
<li style="text-align: justify;">L&rsquo;installation de Media Wiki est facile (<a href="http://www.mediawiki.org/wiki/Manual:Running_MediaWiki_on_Debian_GNU/Linux" target="_blank">package &laquo;&nbsp;mediawiki&nbsp;&raquo; sur Debian</a>), et de Semantic Media Wiki assez simple avec <a href="http://www.mediawiki.org/wiki/Semantic_Bundle" target="_blank">Semantic Bundle</a>, un ensemble d&rsquo;extensions regroupées dans un même paquet;</li>
<li style="text-align: justify;">Le paramétrage est un peu alambiqué mais est bien documenté; il faut notamment suivre les pages qui expliquent comment importer un vocabulaire existant (type <a href="http://www.foaf-project.org/" target="_blank">FOAF</a>, <a href="http://dublincore.org/documents/dcmi-terms/" target="_blank">DC</a>, <a href="http://www.w3.org/TR/vocab-org/" target="_blank">ORG</a> ou autre), comment paramétrer les propriétés et les classes, et comment paramétrer un formulaire; une fois le paramétrage bien compris, on a à notre dispostion une vraie solution de création de formulaires de saisie pour des données RDF.</li>
<li style="text-align: justify;">La synchronisation avec un triplestore Sesame fonctionne bien, et on arrive à récupérer les données structurées du wiki en RDF, et à les interroger en SPARQL.</li>
</ol>
<h2>Paramétrer Semantic Media Wiki pour saisir des données RDF</h2>
<h3></h3>
<h3>D&rsquo;abord, synchroniser SMW avec Sesame</h3>
<p>La doc est <a href="https://semantic-mediawiki.org/wiki/Help:Using_SPARQL_and_RDF_stores" target="_blank">ici</a>.</p>
<ol>
<li>Installez Sesame en suivant <a title="Tutoriel : comment installer un serveur RDF Sesame ?" href="http://blog.sparna.fr/tutoriel-comment-installer-un-serveur-rdf-sesame/" target="_blank">cette procédure</a></li>
<li>Utilisez les valeurs suivantes dans le fichier de config (attention de bien mettre &laquo;&nbsp;/statements&nbsp;&raquo; à la fin de l&rsquo;URL de service d&rsquo;update)</li>
</ol>
<pre>$smwgDefaultStore = 'SMWSparqlStore';
# location of query service
$smwgSparqlQueryEndpoint = 'http://localhost:8080/openrdf-sesame/repositories/nomDuRepository';
# location of update service
$smwgSparqlUpdateEndpoint = 'http://localhost:8080/openrdf-sesame/repositories/nomDuRepository/statements';
# location of SPARQL over HTTP service, set it to ''; in case of problems
$smwgSparqlDataEndpoint = '';
# optional name of default graph
$smwgSparqlDefaultGraph = 'http://example.org/mydefaultgraphname';</pre>
<h3>Ensuite, si vous voulez, paramétrer SMW pour utiliser un vocabulaire externe</h3>
<p>La doc est <a href="https://semantic-mediawiki.org/wiki/Help:Import_vocabulary" target="_blank">ici</a>.</p>
<ol>
<li>Assurez-vous d&rsquo;être connecté en tant qu&rsquo;admin du wiki</li>
<li>Créez une page MediaWiki:smw_import_PREFIXE_DU_VOCABULAIRE, par exemple MediaWiki:smw_import_org pour importer l&rsquo;ontologie des organisations</li>
<li>Déclarez dans cette page les types et les propriétés du vocabulaire que vous voulez réutilisez, de cette façon :
<pre>http://www.w3.org/ns/org#|[http://www.w3.org/TR/vocab-org/ The Organization Ontology]
 Role|Category
 Post|Category
 hasMember|Type:Page
 memberOf|Type:Page
 holds|Type:Page</pre>
</li>
<li>Déclarez des propriétés et des catégories dans le wiki;</li>
<li>Déclarez la correspondances de ces propriétés et ces catégories avec les éléments du vocabulaire externe, en utilisant les marqueurs</li>
</ol>
<pre>[[imported from::org:Organization]] (pour une catégorie)
[[imported from::org:hasMember]] (pour une propriété)</pre>
<h3>Puis, paramétrer des formulaires de saisie</h3>
<p>La doc est <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Forms/Quick_start_guide#Creating_data_structures_-_the_more_comprehensive_way">ici</a> et <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Forms/Defining_forms">là</a>.</p>
<p>Je ne suis pas certain de comprendre tout l&rsquo;enchainement du paramétrage, notamment les différences entre une &laquo;&nbsp;catégorie&nbsp;&raquo;, un &laquo;&nbsp;template&nbsp;&raquo; ou &laquo;&nbsp;modèle&nbsp;&raquo;, et le &laquo;&nbsp;formulaire&nbsp;&raquo;. Mais l&rsquo;exemple de la doc fonctionne bien et peut ensuite être adaptée facilement avec la doc de paramétrage du formulaire sous les yeux. Pour paramétrer un formulaire qui a du sens pour des données structurées, on va surtout s&rsquo;intéresser aux options suivantes :</p>
<ul>
<li><code>values from category=</code> qui permet de restreindre la saisie d&rsquo;un champ à une catégorie, c&rsquo;est-à-dire en termes RDF à une classe &#8211; c&rsquo;est l&rsquo;équivalent d&rsquo;un paramétrage de range RDFS;</li>
<li><code>existing values only</code> si vous ne voulez pas qu&rsquo;un utilisateur qui remplisse le formulaire puisse choisir une valeur qui n&rsquo;existe pas;</li>
</ul>
<p>On va ensuite vouloir bloquer l&rsquo;édition classique d&rsquo;une page, pour ne permettre l&rsquo;édition qu&rsquo;à travers le formulaire. Pour cela il faut changer 2 paramètres dans SMW comme décrit dans la doc <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Forms/The_%22edit_with_form%22_tab" target="_blank">ici</a>.</p>
<h3>Finalement&#8230;</h3>
<p>Tout projet d&rsquo;outil de saisie va de pair avec une reprise de données, il faudrait étudier ce que les <a href="http://www.mediawiki.org/wiki/Extension:Data_Transfer" target="_blank">fonctions d&rsquo;import/export de données de Media Wiki</a> permettent, en tous cas l&rsquo;utilisation de cette brique comme outil de contribution collaborative à une base de connaissances structurée est tentante !</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/pixy.gif?x-id=dedaa245-9390-4eee-99c3-25e6acf9341e" alt="" /></div>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2014/01/20/wiki-semantique-capitalisation-des-connaissances-structurees/">Le wiki sémantique : solution de capitalisation des connaissances (structurées)</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sparna.fr/2014/01/20/wiki-semantique-capitalisation-des-connaissances-structurees/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Tutoriel : exemple de query SPARQL avec l&#8217;API Sesame</title>
		<link>https://blog.sparna.fr/2012/05/23/tutoriel-exemple-de-query-sparql-avec-lapi-sesame/</link>
		<comments>https://blog.sparna.fr/2012/05/23/tutoriel-exemple-de-query-sparql-avec-lapi-sesame/#comments</comments>
		<pubDate>Wed, 23 May 2012 11:23:45 +0000</pubDate>
		<dc:creator><![CDATA[Thomas Francart]]></dc:creator>
				<category><![CDATA[RDF]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[construct]]></category>
		<category><![CDATA[Resource Description Framework]]></category>
		<category><![CDATA[Triplestore]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.sparna.fr/?p=125</guid>
		<description><![CDATA[<p>On a vu précédemment comment utiliser l&#8217;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&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2012/05/23/tutoriel-exemple-de-query-sparql-avec-lapi-sesame/">Tutoriel : exemple de query SPARQL avec l&rsquo;API Sesame</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>On a vu précédemment <a title="Tutoriel : exemple avec l’API Sesame RDF" href="http://blog.sparna.fr/tutoriel-demarrage-avec-lapi-sesame-rdf/" target="_blank">comment utiliser l&rsquo;API Sesame</a> 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.</p>
<p>Voilà maintenant comment effectuer des query <a class="zem_slink" title="SPARQL" href="http://en.wikipedia.org/wiki/SPARQL" target="_blank" rel="wikipedia">SPARQL</a> SELECT et CONSTRUCT sur un Repository, et traiter les résultats. Les deux types de query utilisent des objets différents : <a href="http://www.openrdf.org/doc/sesame2/api/org/openrdf/query/TupleQuery.html" target="_blank">TupleQuery</a> et <a href="http://www.openrdf.org/doc/sesame2/api/org/openrdf/query/TupleQueryResult.html" target="_blank">TupleQueryResult</a> pour les SELECT, <a href="http://www.openrdf.org/doc/sesame2/api/org/openrdf/query/GraphQuery.html" target="_blank">GraphQuery</a> et <a href="http://www.openrdf.org/doc/sesame2/api/org/openrdf/query/GraphQueryResult.html" target="_blank">GraphQueryResult</a> pour les CONSTRUCT. Les commentaires dans le code ci-dessous parlent d&rsquo;eux-même, et n&rsquo;hésitez-pas à vous reporter à la <a href="http://www.openrdf.org/doc/sesame2/users/ch08.html#d0e879" target="_blank">documentation des API Sesame</a> pour d&rsquo;autres exemples.</p>
<p><span id="more-125"></span><br />
[java]		// création du Repository en mémoire.<br />
		Repository repository = new SailRepository(new MemoryStore());<br />
		// initialisation du Repository : cet appel est obligatoire une fois et une seule<br />
		repository.initialize();</p>
<p>		// on ouvre une connection au repository<br />
		// comme en JDBC, c&rsquo;est à travers cette connexion que sont envoyées toute les querys<br />
		RepositoryConnection connection = repository.getConnection();</p>
<p>		// I. exemple de Query SELECT</p>
<p>		// on initialise la query.<br />
		TupleQuery selectQuery = connection.prepareTupleQuery(<br />
				QueryLanguage.SPARQL,<br />
				&quot;SELECT ?x ?foafName WHERE { ?x &amp;lt;http://xmlns.com/foaf/0.1/name&amp;gt; ?foafName }&quot;<br />
		);</p>
<p>		// on l&rsquo;execute<br />
		TupleQueryResult selectQueryResult = selectQuery.evaluate();</p>
<p>		// on itère sur les résultats<br />
		while(selectQueryResult.hasNext()) {<br />
			// chaque ligne du résultat est un BindingSet<br />
			BindingSet aBinding = selectQueryResult.next();</p>
<p>			// on print les valeurs de cette ligne<br />
			System.out.println(&quot;Personne &quot;+aBinding.getValue(&quot;x&quot;)+&quot; a pour nom &quot;+aBinding.getValue(&quot;foafName&quot;));</p>
<p>			// si on ne connait pas les noms de variables de la query, on peut les récupérer dynamiquement<br />
			for (String aBindingName : selectQueryResult.getBindingNames()) {<br />
				System.out.println(&quot;La valeur de &quot;+aBindingName+&quot; est &quot;+aBinding.getValue(aBindingName));<br />
			}<br />
		}</p>
<p>		// II. Exemple de Query CONSTRUCT</p>
<p>		// on initialise la query<br />
		GraphQuery constructQuery = connection.prepareGraphQuery(<br />
				QueryLanguage.SPARQL,<br />
				&quot;PREFIX foaf: &amp;lt;http://xmlns.com/foaf/0.1/&amp;gt; &quot; +<br />
				&quot;PREFIX vcard: &amp;lt;http://www.w3.org/2006/vcard/ns#&amp;gt;&quot; +<br />
				&quot;CONSTRUCT {?x vcard:n _:n . _:n vcard:given-name ?name .} WHERE { ?x foaf:name ?name }&quot;<br />
		);</p>
<p>		// on l&rsquo;execute<br />
		GraphQueryResult constructQueryResult = constructQuery.evaluate();</p>
<p>		// on itère sur les résultats, qui sont des Statement RDF, pas des binding<br />
		while(constructQueryResult.hasNext()) {<br />
			Statement anRDFStatement = constructQueryResult.next();<br />
			// ici on se contente d&rsquo;afficher le Statement<br />
			// typiquement on devrait en faire quelque chose : écrire dans un fichier, ou<br />
			// l&rsquo;insérer dans un autre Repository, etc.<br />
			System.out.println(anRDFStatement);<br />
		}</p>
<p>		// quand on n&rsquo;a plus besoin de la connexion, on la ferme<br />
		connection.close();[/java]
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="float: right;" alt="" src="http://img.zemanta.com/pixy.gif?x-id=5dce1730-f9fa-45c9-9b5a-c5c26b36ade2" /></div>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2012/05/23/tutoriel-exemple-de-query-sparql-avec-lapi-sesame/">Tutoriel : exemple de query SPARQL avec l&rsquo;API Sesame</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sparna.fr/2012/05/23/tutoriel-exemple-de-query-sparql-avec-lapi-sesame/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutoriel : exemple avec l&#8217;API Sesame RDF</title>
		<link>https://blog.sparna.fr/2012/05/20/tutoriel-demarrage-avec-lapi-sesame-rdf/</link>
		<comments>https://blog.sparna.fr/2012/05/20/tutoriel-demarrage-avec-lapi-sesame-rdf/#comments</comments>
		<pubDate>Sun, 20 May 2012 19:35:38 +0000</pubDate>
		<dc:creator><![CDATA[Thomas Francart]]></dc:creator>
				<category><![CDATA[RDF]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[exemple]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://blog.sparna.fr/?p=65</guid>
		<description><![CDATA[<p>Sesame dispose d&#8217;une API Java permettant de manipuler du RDF en mémoire, d&#8217;interroger un serveur Sesame (voir la procédure d&#8217;installation d&#8217;un serveur Sesame), ou d&#8217;interroger un endpoint SPARQL distant. Voici un &#171;&#160;quickstart&#160;&#187; permettant de commencer à travailler avec l&#8217;API en quelques minutes, en ajoutant les dépendances adéquates et avec un exemple de code complet. Vous&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2012/05/20/tutoriel-demarrage-avec-lapi-sesame-rdf/">Tutoriel : exemple avec l&rsquo;API Sesame RDF</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Sesame dispose d&rsquo;une API Java permettant de manipuler du RDF en mémoire, d&rsquo;interroger un serveur Sesame (voir la <a title="Tutoriel : comment installer un serveur RDF Sesame ?" href="http://blog.sparna.fr/2012/05/tutoriel-comment-installer-un-serveur-rdf-sesame/">procédure d&rsquo;installation d&rsquo;un serveur Sesame</a>), ou d&rsquo;interroger un endpoint SPARQL distant. Voici un &laquo;&nbsp;quickstart&nbsp;&raquo; permettant de commencer à travailler avec l&rsquo;API en quelques minutes, en ajoutant les dépendances adéquates et avec un exemple de code complet. Vous pouvez également vous référer à la <a href="http://www.openrdf.org/doc/sesame2/users/ch08.html" target="_blank">documentation de l&rsquo;API Sesame</a>.</p>
<p><span id="more-65"></span></p>
<h2>Jars nécessaires</h2>
<p>Pour utiliser l&rsquo;API Sesame de manipulation de RDF dans votre programme Java, récupérer les jars suivants :</p>
<ul>
<li>Depuis <a href="http://openrdf.org" target="_blank">openrdf.org</a>, suivez « Download &gt; Sesame 2.x releases &gt; here &gt; <em>[numéro de version de Sesame] »</em> et téléchargez le fichier openrdf-sesame-x.y.z-onejar.jar. Attention de bien prendre le « onejar », <span style="text-decoration: underline;">pas</span> le sdk ;</li>
<li>Téléchargez <a href="http://www.slf4j.org" target="_blank">SLF4J</a>, dézippez-le, et extrayez slf4j-api-a.b.c.jar et slf4j-jdk14-a.b.c.jar ;</li>
<li>Ajoutez à votre classpath openrdf-sesame-x.y.z-onejar.jar, slf4j-api-a.b.c.jar et slf4j-jdk14-a.b.c.jar ;</li>
</ul>
<p>Optionnellement, seulement si vous voulez vous connecter à un serveur Sesame distant, ou un endpoint SPARQL (en utilisant la classe HTTPRepository), ajoutez les étapes suivantes :</p>
<ul>
<li>Téléchargez <a href="http://archive.apache.org/dist/httpcomponents/commons-httpclient/3.0/binary/" target="_blank">httpclient</a>, en prenant le fichier commons-httpclient-3.0.zip. (Attention de ne pas confondre avec httpcomponents-client), et dézippez commons-httpclient-3.0.jar ;</li>
<li>Téléchargez <a href="http://commons.apache.org/logging/download_logging.cgi" target="_blank">commons-logging</a> et dézippez commons-logging-1.1.1.jar</li>
<li>Téléchargez <a href="http://commons.apache.org/codec/download_codec.cgi" target="_blank">commons-codec</a> et dézippez commons-codec-1.6.jar ;</li>
<li>ajoutez à votre classpath commons-httpclient-3.0.jar, commons-logging-1.1.1.jar et commons-codec-1.6.jar ;</li>
</ul>
<h2>Démarrage rapide</h2>
<p>L&rsquo;exemple de code Java ci-dessous illustre l&rsquo;initialisation d&rsquo;un Repository, le chargement de données RDF, l&rsquo;écriture de RDF dans un fichier, et l&rsquo;interrogation d&rsquo;un serveur Sesame distant ou d&rsquo;un endpoint SPARQL public. Les commentaires dans le code parlent d&rsquo;eux-mêmes.</p>
<pre>
<span style="font-size: 8pt;">// I : création du Repository
// création du Repository en mémoire.</span>
<span style="font-size: 8pt;">Repository repository = new SailRepository(new MemoryStore());</span>
<span style="font-size: 8pt;">// initialisation du Repository : cet appel est obligatoire une fois et une seule</span>
<span style="font-size: 8pt;">repository.initialize();</span></pre>
<pre><span style="font-size: 8pt;">// II : chargement de fichier RDF
// le fichier RDF contenant les données à charger</span>
<span style="font-size: 8pt;">File fileToAdd = new File("/fichier/à/charger.rdf");</span>
<span style="font-size: 8pt;">// charger les données dans le Repository</span>
<span style="font-size: 8pt;">repository.getConnection().add(</span>
 <span style="font-size: 8pt;">// référence au fichier à charger</span>
 <span style="font-size: 8pt;">fileToAdd,</span>
<span style="font-size: 8pt;"> // namespace par défaut à utiliser pour les URIs relatives contenues dans le RDF</span>
<span style="font-size: 8pt;"> RDF.NAMESPACE,</span>
<span style="font-size: 8pt;"> // format du fichier RDF à charger (RDF/XML, N3, TRIG, etc.)</span>
<span style="font-size: 8pt;"> // le format est déterminé dynamiquement à partir de l'extension du fichier</span>
<span style="font-size: 8pt;"> // (.rdf, .n3, .trig, etc.)</span>
<span style="font-size: 8pt;"> RDFFormat.forFileName(fileToAdd.getName())</span>
<span style="font-size: 8pt;">);</span></pre>
<pre><span style="font-size: 8pt;">// III : écriture de fichier RDF
// on utilise RDFXMLWriter qui génère du RDF/XML</span>
<span style="font-size: 8pt;">repository.getConnection().export(new RDFXMLWriter(new FileOutputStream("/fichier.rdf")));
// on peut remplacer par N3Writer pour sortir du N3</span>
<span style="font-size: 8pt;">// dans ce cas, bien mettre l'extension du fichier à .n3</span>
<span style="font-size: 8pt;">// repository.getConnection().export(new N3Writer(new FileOutputStream("/fichier.n3")));</span></pre>
<pre><span style="font-size: 8pt;">// IV. connection à un serveur Sesame ou un endpoint SPARQL distant
// pour se connecter à un serveur Sesame : utiliser le constructeur avec 2 String</span>
<span style="font-size: 8pt;">// en donnant l'adresse du serveur et le nom du repository</span>
<span style="font-size: 8pt;">Repository sesameServer = new HTTPRepository("http://localhost:8080/openrdf-sesame","Test");</span>
<span style="font-size: 8pt;">sesameServer.initialize();
// pour se connecter à un endpoint SPARQL public : utiliser le constructeur avec 1 String</span>
<span style="font-size: 8pt;">// en donnant l'adresse du endpoint</span>
<span style="font-size: 8pt;">Repository dbpedia = new HTTPRepository("http://dbpedia.org/sparql");</span>
<span style="font-size: 8pt;">dbpedia.initialize();</span></pre>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2012/05/20/tutoriel-demarrage-avec-lapi-sesame-rdf/">Tutoriel : exemple avec l&rsquo;API Sesame RDF</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sparna.fr/2012/05/20/tutoriel-demarrage-avec-lapi-sesame-rdf/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
