<?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/category/outils/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>The Genesis of Sparnatural in the context of the OpenArchaeo platform</title>
		<link>https://blog.sparna.fr/2025/03/28/the-genesis-of-sparnatural-in-the-context-of-the-openarchaeo-platform/</link>
		<comments>https://blog.sparna.fr/2025/03/28/the-genesis-of-sparnatural-in-the-context-of-the-openarchaeo-platform/#comments</comments>
		<pubDate>Fri, 28 Mar 2025 14:54:53 +0000</pubDate>
		<dc:creator><![CDATA[Marie Muller]]></dc:creator>
				<category><![CDATA[FAIR]]></category>
		<category><![CDATA[Linked Data]]></category>
		<category><![CDATA[Ontologies]]></category>
		<category><![CDATA[Open Data]]></category>
		<category><![CDATA[Recherche d'informations]]></category>
		<category><![CDATA[Sparnatural]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[CIDOC-CRM]]></category>
		<category><![CDATA[Huma-Num]]></category>
		<category><![CDATA[ResearchSpace]]></category>
		<category><![CDATA[thesaurus]]></category>
		<category><![CDATA[Triplestore]]></category>

		<guid isPermaLink="false">https://blog.sparna.fr/?p=1949</guid>
		<description><![CDATA[<p>The OpenArchaeo platform, developed by French consortium Huma-Num MASAplus (Mémoire des Archéologues et des Sites Archéologiques) together with SPARNA, is a platform dedicated to archaeological data interoperability. This semantic interoperability objective relies on the strong conceptual foundations offered by the CIDOC-CRM data model. Paired with the CIDOC-CRM in a federated way, OpenArchaeo aims at :&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2025/03/28/the-genesis-of-sparnatural-in-the-context-of-the-openarchaeo-platform/">The Genesis of Sparnatural in the context of the OpenArchaeo platform</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>The <a href="http://openarchaeo.huma-num.fr">OpenArchaeo</a> platform, developed by French <a href="https://www.huma-num.fr/les-consortiums-hn/#MASAplus">consortium Huma-Num MASAplus</a> (Mémoire des Archéologues et des Sites Archéologiques) together with SPARNA, is a platform dedicated to archaeological data interoperability. This semantic interoperability objective relies on the strong conceptual foundations offered by the <a href="https://blog.sparna.fr/2019/03/26/le-cidoc-crm-ne-nous-arrachons-plus-les-cheveux/">CIDOC-CRM</a> data model.</p>
<p>Paired with the CIDOC-CRM in a federated way, OpenArchaeo aims at :</p>
<ul>
<li>making available the archaeological datasets produced by the MASAplus consortium’s partners on the semantic web, in the form of a triplestore with data aligned with the ontology and its extensions dedicated to archaeology ;</li>
<li>providing an intuitive query interface for archaeological data.</li>
</ul>
<p>The latter query interface integrates the Sparnatural knowledge graph exploration component. The UI of this component was heavily inspired by the British Museum&rsquo;s ResearchSpace semantic search feature, as the system proposes the user to build his own queries based on the CIDOC-CRM model underlying the data.</p>
<h2>About ResearchSpace platform</h2>
<p>Initiated in 2009 by a cross-disciplinary team at the British Museum, ResearchSpace is « A full CIDOC-CRM authoring and search system, based on an exhaustive collection of forms that reflects all applicable relationships from the CIDOC CRM ontology. »</p>
<p>Among a wide range of semantic tools to create, manipulate, analyse and visualise data, the platform provides a s<a href="https://documentation.researchspace.org/resource/Help:SemanticSearch">emantic structured search component</a> based on categories and relations.</p>
<p>While open source, ResearchSpace’s code didn’t fit our architecture : we just chose to follow the simple visual elements of ResearchSpace’s query interface to develop our own Sparnatural query builder for OpenArchaeo, and set up a system of icons to identify the main components of the archaeological data.</p>
<p>ResearchSpace has recently (december 2024) released a brand new <a href="https://github.com/researchspace/researchspace/blob/master/release-notes.md">4.0.0 version</a>. This latest can be installed easily and now comes with a default setup of forms based on the CIDOC-CRM. It enables image annotations, knowledge maps creations, semantic narratives writing, timeline productions, and more <a href="https://researchspace.org/semantic-tools/">semantic tools</a>.</p>
<h2>Sparnatural’s first use-case was OpenArchaeo’s CIDOC-CRM model !</h2>
<p><a href="http://openarchaeo.huma-num.fr/explorateur/home">The structure of the knowledge graph of OpenArchaeo</a> relies on the CIDOC-CRM and some of its extension (CRMarchaeo, CRMsci and CRMba). It is a generic model that covers the basic concepts found in most archaeological corpuses (site, operation, structure, feature, wall, burial, stratigraphic unit and artifact).</p>
<p>Here a focus on Class S19 :</p>
<p><a href="https://blog.sparna.fr/wp-content/uploads/2025/03/modeleOpenArchaeoEn_base.png"><img class="aligncenter size-full wp-image-1950" src="https://blog.sparna.fr/wp-content/uploads/2025/03/modeleOpenArchaeoEn_base.png" alt="modeleOpenArchaeoEn_base" width="898" height="416" /></a><br />
Several external thesauri were added too for querying the datasets : <a href="https://pactols.frantiq.fr/">PACTOLS thesaurus for archaelogy</a>, but also <a href="https://www.geonames.org/ontology/documentation.html">Geonames</a> and <a href="https://perio.do/technical-overview/">Periodo</a> for spatial and temporal searches.</p>
<p>This way, when users wish to connect two elements (artifact and site for example), the interface automatically suggests the available relationships between these entities, enabling users to formulate their request in a simple way without having to know either the entities and properties of CIDOC CRM, or the structure of the system : the SPARQL queries that correspond to the sentences visually built by users will be automatically computed. In addition, the usage of thesauri allows the users to cross-reference easily multiple datasets through the different widgets proposed in Sparnatural.</p>
<h2><a href="https://github.com/sparna-git/Sparnatural/releases">Get the latest release of Sparnatural !</a></h2>
<p>Since it was created for OpenArchaeo in 2019, Sparnatural UI has been fully redesigned. It now offers a large panel of features, from different <a href="https://docs.sparnatural.eu/widgets.html">widgets for value selection</a> (dropdown lists, ordered by occurrence count or alphabetically, autocomplete search fields, date pickers, tree widgets&#8230;) to brand new <a href="https://docs.sparnatural.eu/result-display.html">result display plugins</a> : the default visualisation is a table of results, but if the results are geolocalized they can be shown in a map. Also grid, stats, pie or bar charts, and a timeline plugin have been made available and documented.</p>
<h2>To go further on OpenArchaeo’s platform &#8230;</h2>
<p><a href="https://www.youtube.com/watch?v=8GW5sirwHJs">See a presentation of the project on the CIDOC Museum Documentation Channel</a><br />
(« Semantic modelling of archaeological data online workshop series »)</p>
<p>The platform : <a href="http://openarchaeo.huma-num.fr/">http://openarchaeo.huma-num.fr/</a></p>
<p>The project : <a href="https://masa.hypotheses.org/openarchaeo">https://masa.hypotheses.org/openarchaeo</a></p>
<p>Read full research paper about the project : <a href="https://ceur-ws.org/Vol-2375/paper1.pdf">https://ceur-ws.org/Vol-2375/paper1.pdf</a></p>
<p><em>Image : Vestiges of a large villa in Courbehaye &laquo;&nbsp;les Deux Muids / le Moulin de Mongé&nbsp;&raquo;, photo Alain Lelong (2003), <a href="https://aerba.huma-num.fr/fiche.html?id=2811401">Atlas des Établissements Ruraux de Beauce Antique</a>, licence </em><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA</a></p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2025/03/28/the-genesis-of-sparnatural-in-the-context-of-the-openarchaeo-platform/">The Genesis of Sparnatural in the context of the OpenArchaeo platform</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/2025/03/28/the-genesis-of-sparnatural-in-the-context-of-the-openarchaeo-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CORDIS : a SPARQL endpoint is born !</title>
		<link>https://blog.sparna.fr/2024/01/15/cordis-a-sparql-endpoint-is-born/</link>
		<comments>https://blog.sparna.fr/2024/01/15/cordis-a-sparql-endpoint-is-born/#comments</comments>
		<pubDate>Mon, 15 Jan 2024 08:55:41 +0000</pubDate>
		<dc:creator><![CDATA[Marie Muller]]></dc:creator>
				<category><![CDATA[Linked Data]]></category>
		<category><![CDATA[Ontologies]]></category>
		<category><![CDATA[Open Data]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Thesaurus]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[Visualisation de données]]></category>
		<category><![CDATA[endpoint]]></category>
		<category><![CDATA[Europe]]></category>
		<category><![CDATA[Linked Open Data]]></category>
		<category><![CDATA[ontologie]]></category>
		<category><![CDATA[ontologies]]></category>
		<category><![CDATA[thesaurus]]></category>

		<guid isPermaLink="false">http://blog.sparna.fr/?p=1615</guid>
		<description><![CDATA[<p>Another star to light on EU&#8217;s linked open data maturity flag ! 🌟 Not talking about 2024 exceptional Northern Lights to come, but this one&#8217;s also good news for science ! ➡️ Late 2023, the Publications Office of the European Union announced on social media the public release of the new CORDIS SPARQL endpoint. CORDIS, aka « the Community&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2024/01/15/cordis-a-sparql-endpoint-is-born/">CORDIS : a SPARQL endpoint is born !</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400;">Another star to light on EU&rsquo;s linked open data maturity flag ! <img src="https://s.w.org/images/core/emoji/72x72/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span></p>
<p><span style="font-weight: 400;">Not talking about 2024 exceptional <a href="https://www.nationalgeographic.com/science/article/auroras-solar-maximum-2024">Northern Lights to come,</a> </span><span style="font-weight: 400;">but this one&rsquo;s also good news for science !</span></p>
<p><span style="font-weight: 400;">➡️ Late 2023, </span><span style="font-weight: 400;">the Publications Office of the European Union</span><span style="font-weight: 400;"> <a href="https://twitter.com/CORDIS_EU/status/1726865540143276079">announced on social media</a> </span><span style="font-weight: 400;">the public release of </span><strong><a href="https://cordis.europa.eu/datalab/sparql-endpoint">the new CORDIS SPARQL endpoint</a></strong><span style="font-weight: 400;">.</span></p>
<p><span style="font-weight: 400;">CORDIS, aka « </span><span style="font-weight: 400;">t</span><span style="font-weight: 400;">he Community Research and Development Information Service </span><span style="font-weight: 400;">of</span><span style="font-weight: 400;"> the European Commission</span><span style="font-weight: 400;"> », is « </span><em><a href="https://cordis.europa.eu/about"><span style="font-weight: 400;">the [&#8230;] primary source of results from the projects funded by the EU&rsquo;s framework programmes for research and innovation, from FP1 to Horizon Europe</span></a></em><span style="font-weight: 400;"> ». Described as a « <em>rich and structured public repository with all project information held by the European Commission such as project factsheets, participants, reports, deliverables and links to open-access publications</em> », the CORDIS catalog has also been made available in 6 European languages by Publications Office&rsquo;s editorial team.</span></p>
<p><span style="font-weight: 400;">Cherry on top <img src="https://s.w.org/images/core/emoji/72x72/1f352.png" alt="🍒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> of a whole process, the CORDIS SPARQL endpoint release comes to crown a long-term linked open data project. The aim identifying, acquiring, preserving and providing access to knowledge in a common will to share with the widest public possible a trust-worthy, qualified and structured information (see </span><a href="https://op.europa.eu/webpub/op/annual-management-report-2021/en/"><span style="font-weight: 400;">Publications Office 2021 Annual Management Report</span></a><span style="font-weight: 400;">).</span></p>
<p><span style="font-weight: 400;">In the context of the pandemic (and recent opening of <a href="https://data.europa.eu/en">data.europa.eu</a>, the official portal for European data, as defined in 2017–2025 European Open Data Space strategy), </span><a href="https://data.europa.eu/data/datasets/euroscivoc-the-european-science-vocabulary?locale=en"><span style="font-weight: 400;">the EuroSciVoc taxonomy of fields of science</span></a><span style="font-weight: 400;"> was released April 2020, followed December 2021 by the publishing of </span><a href="https://data.europa.eu/data/datasets/european-research-information-ontology?locale=en"><span style="font-weight: 400;">European research information ontology (EURIO)</span></a><span style="font-weight: 400;"> on the EU Vocabularies website <img src="https://s.w.org/images/core/emoji/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" />.</span></p>
<p><span style="font-weight: 400;">As presented at </span><a href="https://op.europa.eu/en/web/endorse-2021/conference"><span style="font-weight: 400;">ENDORSE conference March 2021</span></a><span style="font-weight: 400;">, the redesign of CORDIS data-model in accordance with Semantic Web standards contributed to bring the platform « <strong><em>from acting as a data repository to finally playing an active role as data provider</em></strong> », where EuroSciVoc taxonomy &amp; EURIO ontology both played key roles in the creation of future CORDIS knowledge graph and SPARQL endpoint :</span></p>
<p><span style="font-weight: 400;"><img src="https://s.w.org/images/core/emoji/72x72/1f538.png" alt="🔸" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><em><span style="font-weight: 400;"> <a href="https://data.europa.eu/data/datasets/euroscivoc-the-european-science-vocabulary?locale=en">EuroSciVoc</a> [&#8230;] is a multilingual, SKOS-XL based taxonomy that represents all the main fields of science that were discovered from the CORDIS content, e.g., project abstracts. It was built starting from the hierarchy of the OECD&rsquo;s Fields of R&amp;D classification (FoRD) as root and extended through a semi-automatic process based on NLP techniques. It contains almost 1 000 categories in 6 languages (English, French, German, Italian, Polish and Spanish) and each category is enriched with relevant keywords extracted from the textual description of CORDIS projects. It is constantly evolving and is available on EU Vocabularies website [&#8230;].</span></em></p>
<p><span style="font-weight: 400;"><img src="https://s.w.org/images/core/emoji/72x72/1f538.png" alt="🔸" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><em><span style="font-weight: 400;"> In order to transform CORDIS data into Linked Open Data, thus aligning with Semantic Web standards, best practices and tools in industry and public organizations, the need for an ontology emerged. CORDIS created the <a href="https://data.europa.eu/data/datasets/european-research-information-ontology?locale=en">EURIO</a> (European Research Information Ontology) based on data about research projects funded by the EU&rsquo;s framework programmes for research and innovation. EURIO is aligned with EU ontologies such as <a href="https://dcodings.github.io/DINGO/">DINGO</a> and <a href="https://github.com/SPAROntologies/frapo">FRAPO</a> and de facto standard ontologies such as schema.org and the Organization Ontology from W3C. It models projects, their results and actors such as people and organizations, and includes administrative information like funding schemes and grants.</span></em></p>
<p><span style="font-weight: 400;"><img src="https://s.w.org/images/core/emoji/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span><em> EURIO, which is available on EU Vocabularies website, was <strong>the starting point to develop a Knowledge Graph of CORDIS data that will be publicly available via a dedicated SPARQL endpoint</strong>.</em> <em>»</em></p>
<p>(Enrico Bignotti &amp; Baya Remaoun, &laquo;&nbsp;<a href="https://op.europa.eu/en/web/endorse-2021/programme">EuroSciVoc taxonomy and EURIO ontology: CORDIS as (semantic) data provider</a> &nbsp;&raquo; , ENDORSE March 16, 2021. <a href="https://op.europa.eu/documents/10120270/10133951/BIGNOTTI_REMAOUN_presentation_EuroSciVoc+taxonomy+and+EURIO+ontology+CORDIS+as+%28semantic%29+data+provider.pdf/3303e7b9-967d-65f2-23a3-96b3e2bd2856?t=1616568751644"><span style="font-weight: 400;">PDF</span></a><span style="font-weight: 400;"> </span><a href="https://www.youtube.com/watch?v=vIBC_PO5aoM&amp;t=3689s"><span style="font-weight: 400;">VIDEO</span></a>)</p>
<p><span style="font-weight: 400;">&#8230; A Knowledge graph <a href="https://upcommons.upc.edu/bitstream/handle/2117/378291/2022-ISWC.pdf?sequence=1&amp;isAllowed=y">that was soon released in 2022-2023</a></span><span style="font-weight: 400;"> (see INDUSTRY TRACK 1 on Tuesday, 25 October of <a href="http://iswc2022.semanticweb.org/index.php/conference/">ISWC 2022 Conference</a> for more detail), until final opening of a </span><a href="https://cordis.europa.eu/datalab"><span style="font-weight: 400;">CORDIS SPARQL endpoint</span></a><span style="font-weight: 400;"> late november 2023.</span></p>
<p><span style="font-weight: 400;">Now fancy a few SPARQL queries in there ?</span></p>
<p><strong>Follow the SPARQL <img src="https://s.w.org/images/core/emoji/72x72/1f4ab.png" alt="💫" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></p>
<p><span style="font-weight: 400;">CORDIS SPARQL endpoint is </span><a href="https://cordis.europa.eu/datalab"><span style="font-weight: 400;">actually made available on CORDIS Datalab</span></a><span style="font-weight: 400;"> (and already referenced in <a href="https://linkedopendata.eu/wiki/The_EU_Knowledge_Graph">EU Knowledge Graph</a> among other European SPARQL endpoints ! <a href="http://tinyurl.com/yn5fsylk">see the query</a> / <a href="http://tinyurl.com/2e8z6y5e">see the results</a>)</span></p>
<p><span style="font-weight: 400;">Here you can access a quick documentation guide to CORDIS Linked Open Data : </span><a href="https://cordis.europa.eu/about/sparql"><span style="font-weight: 400;">https://cordis.europa.eu/about/sparql</span></a><span style="font-weight: 400;">.</span></p>
<p><span style="font-weight: 400;">Let’s have a look at EURIO ontology first : we need to understand it to query CORDIS knowledge graph.</span></p>
<p><span style="font-weight: 400;">As we are told in the guide, the latest version can be downloaded </span><a href="https://op.europa.eu/en/web/eu-vocabularies/dataset/-/resource?uri=http://publications.europa.eu/resource/dataset/eurio"><span style="font-weight: 400;">on EU Vocabularies website</span></a><span style="font-weight: 400;">. When we unzip</span><span style="font-weight: 400;"> the archive we access the whole documentation about EURIO Classes &amp; properties that we need to write our SPARQL queries – and a diagram of </span><span style="font-weight: 400;">main classes and properties</span><span style="font-weight: 400;"> of CORDIS data model : </span></p>
<p><a href="http://blog.sparna.fr/wp-content/uploads/2024/01/EURIO_v2.4.png"><img class="aligncenter size-large wp-image-1669" src="http://blog.sparna.fr/wp-content/uploads/2024/01/EURIO_v2.4-1024x812.png" alt="EURIO_v2.4" width="650" height="515" /></a></p>
<p><span style="font-weight: 400;">At first sight we can observe on the schema 3 main groups of entities :</span></p>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">On the top right, the projects &amp; publications associated, key ressources of CORDIS ;</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">On the top left, the fundings &amp; grants materials, on « monetary » side of the project ;</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">On the bottom, the organisations &amp; persons implied, with references &amp; coordinates.</span></li>
</ul>
<p><span style="font-weight: 400;">Let’s open </span><a href="https://cordis.europa.eu/datalab/sparql-endpoint"><span style="font-weight: 400;">CORDIS SPARQL endpoint</span></a><span style="font-weight: 400;"> – some easy queries can be run to begin exploring CORDIS knowledge graph.</span></p>
<p><span style="font-weight: 400;">Nb : the data on SPARQL endpoint is a snapshot, but freshest dumps can be found </span><a href="https://data.europa.eu/data/datasets/named-graphs-from-eurio-knowledge-graph?locale=en"><span style="font-weight: 400;">on European data portal</span></a><span style="font-weight: 400;"> !</span></p>
<p><span style="font-weight: 400;">Here a simple one to </span><b>find a list of FundingSchemes with their titles and IDs corresponding to « Horizon 2020 » programme</b><span style="font-weight: 400;"> :</span></p>
<table>
<tbody>
<tr>
<td><strong>FundingSchemes with their titles and IDs corresponding to « Horizon 2020 » programme</strong></p>
<p>PREFIX xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt;<br />
PREFIX eurio: &lt;http://data.europa.eu/s66#&gt;<br />
PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;<br />
PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;<br />
SELECT ?fs ?title ?id<br />
WHERE {<br />
# select all funding schemes …<br />
?fs a eurio:FundingScheme.<br />
# … with their title …<br />
?fs eurio:title ?title.<br />
# … and identifier …<br />
?fs eurio:identifier ?id.<br />
# where the identifier contains the regular expression “H2020”<br />
FILTER (REGEX (?id, &lsquo;H2020&prime;))<br />
} LIMIT 100</td>
</tr>
</tbody>
</table>
<p>▶️ <a href="https://cordis.europa.eu/datalab/sparql-endpoint#query=%23%20FundingSchemes%20with%20their%20titles%20and%20IDs%20corresponding%20to%20%C2%AB%20Horizon%202020%20%C2%BB%20programme%0A%0APREFIX%20xsd%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%23%3E%0APREFIX%20eurio%3A%20%3Chttp%3A%2F%2Fdata.europa.eu%2Fs66%23%3E%0APREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0ASELECT%20%3Ffs%20%3Ftitle%20%3Fid%0AWHERE%20%7B%0A%23%20select%20all%20funding%20schemes%20%E2%80%A6%0A%3Ffs%20a%20eurio%3AFundingScheme.%0A%23%20%E2%80%A6%20with%20their%20title%20%E2%80%A6%0A%3Ffs%20eurio%3Atitle%20%3Ftitle.%0A%23%20%E2%80%A6%20and%20identifier%20%E2%80%A6%0A%3Ffs%20eurio%3Aidentifier%20%3Fid.%0A%23%20where%20the%20identifier%20contains%20the%20regular%20expression%20%E2%80%9CH2020%E2%80%9D%0AFILTER%20(REGEX%20(%3Fid%2C%20'H2020'))%0A%7D%20LIMIT%20100&amp;endpoint=https%3A%2F%2Fcordis.europa.eu%2Fdatalab%2Fsparql&amp;requestMethod=POST&amp;tabTitle=Query&amp;headers=%7B%7D&amp;contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq&amp;contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq&amp;outputFormat=table">See the results</a></p>
<p><span style="font-weight: 400;">The FILTER REGEX enables us to display the IDs corresponding to H2020 Funding Schemes.</span></p>
<p><span style="font-weight: 400;">We can make another query to get the projects with the Funding Scheme Programme they are related to (note that, in EURIO a eurio:</span><span style="font-weight: 400;">hasFundingSchemeProgramme</span><span style="font-weight: 400;"> is a sub-property of eurio:fundingScheme) :</span></p>
<table>
<tbody>
<tr>
<td><strong>Projects with the Funding Scheme Programme they are related to</strong></p>
<p><span style="font-weight: 400;">PREFIX eurio: &lt;http://data.europa.eu/s66#&gt;</span><br />
<span style="font-weight: 400;">PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;</span><br />
<span style="font-weight: 400;">PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;</span><br />
<span style="font-weight: 400;">SELECT ?project ?acronym ?fundingscheme</span><br />
<span style="font-weight: 400;">WHERE {</span><br />
# select the projects &#8230;<br />
<span style="font-weight: 400;">?project a eurio:Project.</span><br />
# … with acronyms &#8230;<br />
<span style="font-weight: 400;">?project eurio:hasAcronym/eurio:shortForm ?acronym.</span><br />
# … and corresponding funding scheme programmes<br />
<span style="font-weight: 400;">?project eurio:isFundedBy/eurio:hasFundingSchemeProgramme/eurio:code ?fundingscheme.</span><br />
<span style="font-weight: 400;">} LIMIT 100</span></td>
</tr>
</tbody>
</table>
<p>▶️ <a href="https://cordis.europa.eu/datalab/sparql-endpoint#query=%23%20Projects%20with%20the%20Funding%20Scheme%20Programme%20they%20are%20related%20to%0A%0APREFIX%20eurio%3A%20%3Chttp%3A%2F%2Fdata.europa.eu%2Fs66%23%3E%0APREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0ASELECT%20%3Fproject%20%3Facronym%20%3Ffundingscheme%0AWHERE%20%7B%0A%23%20select%20the%20projects%20...%0A%3Fproject%20a%20eurio%3AProject.%0A%23%20%E2%80%A6%20with%20acronyms%20...%0A%3Fproject%20eurio%3AhasAcronym%2Feurio%3AshortForm%20%3Facronym.%0A%23%20%E2%80%A6%20and%20corresponding%20funding%20scheme%20programmes%0A%3Fproject%20eurio%3AisFundedBy%2Feurio%3AhasFundingSchemeProgramme%2Feurio%3Acode%20%3Ffundingscheme.%0A%7D%20LIMIT%20100&amp;endpoint=https%3A%2F%2Fcordis.europa.eu%2Fdatalab%2Fsparql&amp;requestMethod=POST&amp;tabTitle=Query%201&amp;headers=%7B%7D&amp;contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq&amp;contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq&amp;outputFormat=table">See the results</a></p>
<p><span style="font-weight: 400;">(Here we used a property path with a « / » to shorten the query to get the acronyms of projects &amp; Funding Scheme Programmes codes).</span></p>
<p><span style="font-weight: 400;">&#8230; and combining with the first query we can find the projects depending on H2020 Funding Scheme Programme in particular :</span></p>
<table>
<tbody>
<tr>
<td><strong>Projects depending on H2020 Funding Scheme Programme in particular</strong></p>
<p><span style="font-weight: 400;">PREFIX eurio: &lt;http://data.europa.eu/s66#&gt;</span><br />
<span style="font-weight: 400;">PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;</span><br />
<span style="font-weight: 400;">PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;</span><br />
<span style="font-weight: 400;">SELECT ?project ?acronym ?fundingscheme</span><br />
<span style="font-weight: 400;">WHERE {</span><br />
# select the projects &#8230;<br />
<span style="font-weight: 400;">?project a eurio:Project.</span><br />
# … with acronyms &#8230;<br />
<span style="font-weight: 400;">?project eurio:hasAcronym/eurio:shortForm ?acronym.</span><br />
# … and corresponding funding scheme programmes codes &#8230;<br />
<span style="font-weight: 400;">?project eurio:isFundedBy/eurio:hasFundingSchemeProgramme/eurio:code ?fundingscheme.</span><br />
# … with a filter on funding scheme codes &lsquo;H2020&prime;<br />
<span style="font-weight: 400;">FILTER REGEX (?fundingscheme, &lsquo;H2020&prime;)</span><br />
<span style="font-weight: 400;">} LIMIT 100</span></td>
</tr>
</tbody>
</table>
<p>▶️ <a href="https://cordis.europa.eu/datalab/sparql-endpoint#query=%23%20Projects%20depending%20on%20H2020%20Funding%20Scheme%20Programme%20in%20particular%0A%0APREFIX%20eurio%3A%20%3Chttp%3A%2F%2Fdata.europa.eu%2Fs66%23%3E%0APREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0ASELECT%20%3Fproject%20%3Facronym%20%3Ffundingscheme%0AWHERE%20%7B%0A%23%20select%20the%20projects%20...%0A%3Fproject%20a%20eurio%3AProject.%0A%23%20%E2%80%A6%20with%20acronyms%20...%0A%3Fproject%20eurio%3AhasAcronym%2Feurio%3AshortForm%20%3Facronym.%0A%23%20%E2%80%A6%20and%20corresponding%20funding%20scheme%20programmes%20codes%20...%0A%3Fproject%20eurio%3AisFundedBy%2Feurio%3AhasFundingSchemeProgramme%2Feurio%3Acode%20%3Ffundingscheme.%0A%23%20%E2%80%A6%20with%20a%20filter%20on%20funding%20scheme%20codes%20'H2020'%0AFILTER%20REGEX%20(%3Ffundingscheme%2C%20'H2020')%0A%7D%20LIMIT%20100&amp;endpoint=https%3A%2F%2Fcordis.europa.eu%2Fdatalab%2Fsparql&amp;requestMethod=POST&amp;tabTitle=Query&amp;headers=%7B%7D&amp;contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq&amp;contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq&amp;outputFormat=table">See the results</a></p>
<p><span style="font-weight: 400;">It is also possible to get the list of all existing Funding Scheme Programmes CORDIS projects have been funded by – we observe 27 of them here (from the SPARQL endpoint) – while adding a count function to know how many projects per FundingSchemeProgramme :</span></p>
<table>
<tbody>
<tr>
<td><strong>All existing Funding Scheme Programmes CORDIS projects have been funded by</strong></p>
<p><span style="font-weight: 400;">PREFIX eurio: &lt;http://data.europa.eu/s66#&gt;</span><br />
<span style="font-weight: 400;">PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;</span><br />
<span style="font-weight: 400;">PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;</span><br />
# count the number of projects by funding scheme programme &#8230;<br />
<span style="font-weight: 400;">SELECT (COUNT (?project) as ?count) ?fundingscheme</span><br />
<span style="font-weight: 400;">WHERE {</span><br />
# select the projects with corresponding funding scheme programmes codes &#8230;<br />
<span style="font-weight: 400;">?project eurio:isFundedBy/eurio:hasFundingSchemeProgramme/eurio:code ?fundingscheme.</span><br />
# &#8230; counting projects per funding scheme programme<br />
<span style="font-weight: 400;">} GROUP BY ?fundingscheme</span><br />
<span style="font-weight: 400;">LIMIT 100</span></td>
</tr>
</tbody>
</table>
<p>▶️ <a href="https://cordis.europa.eu/datalab/sparql-endpoint#query=%23%20All%20existing%20Funding%20Scheme%20Programmes%20CORDIS%20projects%20have%20been%20funded%20by%0A%0APREFIX%20eurio%3A%20%3Chttp%3A%2F%2Fdata.europa.eu%2Fs66%23%3E%0APREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0A%23%20count%20the%20number%20of%20projects%20by%20funding%20scheme%20programme%20...%0ASELECT%20(COUNT%20(%3Fproject)%20as%20%3Fcount)%20%3Ffundingscheme%0AWHERE%20%7B%0A%23%20select%20the%20projects%20with%20corresponding%20funding%20scheme%20programmes%20codes%20...%0A%3Fproject%20eurio%3AisFundedBy%2Feurio%3AhasFundingSchemeProgramme%2Feurio%3Acode%20%3Ffundingscheme.%0A%23%20...%20counting%20projects%20per%20funding%20scheme%20programme%0A%7D%20GROUP%20BY%20%3Ffundingscheme%0ALIMIT%20100&amp;endpoint=https%3A%2F%2Fcordis.europa.eu%2Fdatalab%2Fsparql&amp;requestMethod=POST&amp;tabTitle=Query%201&amp;headers=%7B%7D&amp;contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq&amp;contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq&amp;outputFormat=table">See the results</a></p>
<p>Querying the organisations properties will return other kind of useful informations about geographical location of the projects stakeholders. Let’s figure out we want to find the projects whose coordinating organisations have sites located in France :</p>
<table>
<tbody>
<tr>
<td><strong>Projects whose coordinating organisations have sites located in France <img src="https://s.w.org/images/core/emoji/72x72/1f413.png" alt="🐓" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></p>
<p>PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
PREFIX eurio: &lt;http://data.europa.eu/s66#&gt;<br />
PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;<br />
PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;<br />
SELECT ?project ?acronym ?role ?organisation ?country<br />
WHERE {<br />
# select the projects with their acronyms &#8230;<br />
?project a eurio:Project.<br />
?project eurio:hasAcronym/eurio:shortForm ?acronym.<br />
# &#8230; and organisations with &lsquo;coordinator&rsquo; role and name &#8230;<br />
?project eurio:hasInvolvedParty ?organisationrole.<br />
?organisationrole eurio:roleLabel ?role.<br />
?organisationrole eurio:roleLabel &laquo;&nbsp;coordinator&nbsp;&raquo;.<br />
?organisationrole eurio:isRoleOf/eurio:legalName ?organisation.<br />
# &#8230; with address country for the sites defined at &lsquo;FR&rsquo;<br />
?organisationrole eurio:isRoleOf/eurio:hasSite/eurio:hasAddress/eurio:addressCountry ?country.<br />
VALUES ?country { &lsquo;FR&rsquo; }<br />
} LIMIT 100</td>
</tr>
</tbody>
</table>
<p>▶️ <a href="https://cordis.europa.eu/datalab/sparql-endpoint#query=%23%20Projects%20whose%20coordinating%20organisations%20have%20sites%20located%20in%20France%20%F0%9F%90%93%0A%0APREFIX%20skos%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2004%2F02%2Fskos%2Fcore%23%3E%0APREFIX%20eurio%3A%20%3Chttp%3A%2F%2Fdata.europa.eu%2Fs66%23%3E%0APREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0ASELECT%20%3Fproject%20%3Facronym%20%3Frole%20%3Forganisation%20%3Fcountry%0AWHERE%20%7B%0A%23%20select%20the%20projects%20with%20their%20acronyms%20...%0A%3Fproject%20a%20eurio%3AProject.%0A%3Fproject%20eurio%3AhasAcronym%2Feurio%3AshortForm%20%3Facronym.%0A%23%20...%20and%20organisations%20with%20'coordinator'%20role%20and%20name%20...%0A%3Fproject%20eurio%3AhasInvolvedParty%20%3Forganisationrole.%0A%3Forganisationrole%20eurio%3AroleLabel%20%3Frole.%0A%3Forganisationrole%20eurio%3AroleLabel%20%22coordinator%22.%0A%3Forganisationrole%20eurio%3AisRoleOf%2Feurio%3AlegalName%20%3Forganisation.%0A%23%20...%20with%20address%20country%20for%20the%20sites%20defined%20at%20'FR'%0A%3Forganisationrole%20eurio%3AisRoleOf%2Feurio%3AhasSite%2Feurio%3AhasAddress%2Feurio%3AaddressCountry%20%3Fcountry.%0AVALUES%20%3Fcountry%20%7B%20'FR'%20%7D%0A%7D%20LIMIT%20100&amp;endpoint=https%3A%2F%2Fcordis.europa.eu%2Fdatalab%2Fsparql&amp;requestMethod=POST&amp;tabTitle=Query&amp;headers=%7B%7D&amp;contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq&amp;contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq&amp;outputFormat=table">See the results</a></p>
<p>Depending on available data, you can either query via PostalAddress info (eurio:addressCountry &lsquo;FR&rsquo;) or AdministrativeArea (eurio:hasGeographicalLocation) &#8230; Here we&rsquo;re lucky as both fields are mandatory ones.</p>
<p>Last but not least, we can also play with CORDIS vocabularies : here you&rsquo;ll have the choice to investigate via plain keywords of Projects or Publications items, querying titles, abstracts or other types of literals&#8230;</p>
<p>An example of projects with abstracts containing string ❄ &lsquo;winter&rsquo; ❄ &#8211; the URL giving the exact link to the project online :</p>
<table>
<tbody>
<tr>
<td><strong>Looking for ❄ &lsquo;winter&rsquo; ❄ in CORDIS projects abstracts (with nice URL to go)</strong></p>
<p>PREFIX eurio: &lt;http://data.europa.eu/s66#&gt;<br />
PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;<br />
PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;<br />
SELECT?project ?acronym ?abstract ?url<br />
WHERE {<br />
# select the projects with their acronyms and abstracts &#8230;<br />
?project rdf:type eurio:Project.<br />
?project eurio:hasAcronym/eurio:shortForm ?acronym.<br />
?project eurio:abstract ?abstract.<br />
# &#8230; with a filter on abstracts containing string &lsquo;winter&rsquo; case insensitive &#8230;<br />
FILTER (regex(str(?abstract), &lsquo;winter&rsquo;, &lsquo;i&rsquo;))<br />
# &#8230; generating proper CORDIS website URLs based on RCN project code<br />
?project eurio:rcn ?rcn.<br />
BIND(IRI(CONCAT(&lsquo;https://cordis.europa.eu/project/rcn/&rsquo;, ?rcn)) AS ?url)<br />
} LIMIT 100</td>
</tr>
</tbody>
</table>
<p>▶️ <a href="https://cordis.europa.eu/datalab/sparql-endpoint#query=%23%20Looking%20for%20%E2%9D%84%20'winter'%20%E2%9D%84%20in%20CORDIS%20projects%20abstracts%20(with%20nice%20URL%20to%20go)%0A%0APREFIX%20eurio%3A%20%3Chttp%3A%2F%2Fdata.europa.eu%2Fs66%23%3E%0APREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0ASELECT%3Fproject%20%3Facronym%20%3Fabstract%20%3Furl%0AWHERE%20%7B%0A%23%20select%20the%20projects%20with%20their%20acronyms%20and%20abstracts%20...%0A%3Fproject%20rdf%3Atype%20eurio%3AProject.%0A%3Fproject%20eurio%3AhasAcronym%2Feurio%3AshortForm%20%3Facronym.%0A%3Fproject%20eurio%3Aabstract%20%3Fabstract.%0A%23%20...%20with%20a%20filter%20on%20abstracts%20containing%20string%20'winter'%20case%20insensitive%20...%0AFILTER%20(regex(str(%3Fabstract)%2C%20'winter'%2C%20'i'))%0A%23%20...%20generating%20proper%20CORDIS%20website%20URLs%20based%20on%20RCN%20project%20code%0A%3Fproject%20eurio%3Arcn%20%3Frcn.%0ABIND(IRI(CONCAT('https%3A%2F%2Fcordis.europa.eu%2Fproject%2Frcn%2F'%2C%20%3Frcn))%20AS%20%3Furl)%0A%7D%20LIMIT%20100&amp;endpoint=https%3A%2F%2Fcordis.europa.eu%2Fdatalab%2Fsparql&amp;requestMethod=POST&amp;tabTitle=Query%201&amp;headers=%7B%7D&amp;contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq&amp;contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq&amp;outputFormat=table">See the results</a></p>
<p>But funniest way will be using EuroSciVoc taxonomy (and navigating through thesaurus hierarchy) : to do so we need to navigate through property &laquo;&nbsp;eurio:hasEuroSciVocClassification&nbsp;&raquo; to get the Concepts skosxl:prefLabel property &#8230; to finally obtain the thesaurus labels (don&rsquo;t forget to choose a prefered language with a FILTER (lang parameter) :</p>
<table>
<tbody>
<tr>
<td><strong>Projects with their associated EuroSciVoc keywords (English prefLabels <img src="https://s.w.org/images/core/emoji/72x72/1f482.png" alt="💂" class="wp-smiley" style="height: 1em; max-height: 1em;" />)</strong></p>
<p>PREFIX skosxl: &lt;http://www.w3.org/2008/05/skos-xl#&gt;<br />
PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
PREFIX eurio: &lt;http://data.europa.eu/s66#&gt;<br />
PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;<br />
PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;<br />
SELECT ?project ?acronym ?ESV<br />
WHERE {<br />
# select the projects with their acronyms &#8230;<br />
?project eurio:hasAcronym/eurio:shortForm ?acronym.<br />
# &#8230; with EuroSciVoc Classification prefLabels &#8230;<br />
?project eurio:hasEuroSciVocClassification/skosxl:prefLabel/skosxl:literalForm ?ESV.<br />
# &#8230; only returning &lsquo;English&rsquo; prefLabels<br />
FILTER (lang(?ESV) = &lsquo;en&rsquo;)<br />
} LIMIT 100</td>
</tr>
</tbody>
</table>
<p>▶️ <a href="https://cordis.europa.eu/datalab/sparql-endpoint#query=%23%20Projects%20with%20their%20associated%20EuroSciVoc%20keywords%20(English%20prefLabels%20%F0%9F%92%82)%0A%0APREFIX%20skosxl%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2008%2F05%2Fskos-xl%23%3E%0APREFIX%20skos%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2004%2F02%2Fskos%2Fcore%23%3E%0APREFIX%20eurio%3A%20%3Chttp%3A%2F%2Fdata.europa.eu%2Fs66%23%3E%0APREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0ASELECT%20%3Fproject%20%3Facronym%20%3FESV%0AWHERE%20%7B%0A%23%20select%20the%20projects%20with%20their%20acronyms%20...%0A%3Fproject%20eurio%3AhasAcronym%2Feurio%3AshortForm%20%3Facronym.%0A%23%20...%20with%20EuroSciVoc%20Classification%20prefLabels%20...%0A%3Fproject%20eurio%3AhasEuroSciVocClassification%2Fskosxl%3AprefLabel%2Fskosxl%3AliteralForm%20%3FESV.%0A%23%20...%20only%20returning%20'English'%20prefLabels%0AFILTER%20(lang(%3FESV)%20%3D%20'en')%0A%7D%20LIMIT%20100%0A&amp;endpoint=https%3A%2F%2Fcordis.europa.eu%2Fdatalab%2Fsparql&amp;requestMethod=POST&amp;tabTitle=Query%203&amp;headers=%7B%7D&amp;contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq&amp;contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq&amp;outputFormat=table">See the results</a></p>
<p><span style="font-weight: 400;">A bit more complex one using first level of hierarchy of the taxonomy : here we are searching for all skos:broader concepts &laquo;&nbsp;with no other broader concept&nbsp;&raquo; (the FILTER NOT EXISTS formula), aka the top concepts or root concepts of the vocabulary used to describe the projects. Then counting the projects by each category :</span></p>
<table>
<tbody>
<tr>
<td><strong>All root categories of EuroSciVoc used to describe the projects</strong></p>
<p>PREFIX skosxl: &lt;http://www.w3.org/2008/05/skos-xl#&gt;<br />
PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
PREFIX eurio: &lt;http://data.europa.eu/s66#&gt;<br />
PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;<br />
PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;<br />
# count the number of projects by EuroSciVoc top categories &#8230;<br />
SELECT (COUNT(?project) AS ?nbProject) ?ESV_root_label<br />
WHERE {<br />
# &#8230; the top categories are Concepts &#8230;<br />
?ESV_root a skos:Concept .<br />
# &#8230; with no broader Concept &#8230;<br />
FILTER NOT EXISTS { ?ESV_root skos:broader ?anything }<br />
# &#8230; list with corresponding projects &#8230;<br />
?ESV_root ^skos:broader*/^eurio:hasEuroSciVocClassification ?project .<br />
# &#8230; and EuroSciVoc corresponding skos-xl prefLabels &#8230;<br />
?ESV_root skosxl:prefLabel/skosxl:literalForm ?ESV_root_label.<br />
# &#8230; sorting by EuroSciVoc category, with English prefLabels<br />
FILTER (lang(?ESV_root_label) = &lsquo;en&rsquo;)<br />
} GROUP BY ?ESV_root_label<br />
LIMIT 100</td>
</tr>
</tbody>
</table>
<p>▶️ <a href="https://cordis.europa.eu/datalab/sparql-endpoint#query=%23%20All%20root%20categories%20of%20EuroSciVoc%20used%20to%20describe%20the%20projects%0A%0APREFIX%20skosxl%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2008%2F05%2Fskos-xl%23%3E%0APREFIX%20skos%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2004%2F02%2Fskos%2Fcore%23%3E%0APREFIX%20eurio%3A%20%3Chttp%3A%2F%2Fdata.europa.eu%2Fs66%23%3E%0APREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0A%23%20count%20the%20number%20of%20projects%20by%20EuroSciVoc%20top%20categories%20...%0ASELECT%20(COUNT(%3Fproject)%20AS%20%3FnbProject)%20%3FESV_root_label%0AWHERE%20%7B%0A%23%20...%20the%20top%20categories%20are%20Concepts%20...%0A%3FESV_root%20a%20skos%3AConcept%20.%0A%23%20...%20with%20no%20broader%20Concept%20...%0AFILTER%20NOT%20EXISTS%20%7B%20%3FESV_root%20skos%3Abroader%20%3Fanything%20%7D%0A%23%20...%20list%20with%20corresponding%20projects%20...%0A%3FESV_root%20%5Eskos%3Abroader*%2F%5Eeurio%3AhasEuroSciVocClassification%20%3Fproject%20.%0A%23%20...%20and%20EuroSciVoc%20corresponding%20skos-xl%20prefLabels%20...%0A%3FESV_root%20skosxl%3AprefLabel%2Fskosxl%3AliteralForm%20%3FESV_root_label.%0A%23%20...%20sorting%20by%20EuroSciVoc%20category%2C%20with%20English%20prefLabels%0AFILTER%20(lang(%3FESV_root_label)%20%3D%20'en')%0A%7D%20GROUP%20BY%20%3FESV_root_label%0ALIMIT%20100&amp;endpoint=https%3A%2F%2Fcordis.europa.eu%2Fdatalab%2Fsparql&amp;requestMethod=POST&amp;tabTitle=Query%201&amp;headers=%7B%7D&amp;contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq&amp;contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq&amp;outputFormat=table">See the results</a></p>
<p>&#8230; and maybe again more explicit results if refined to level 2 of hierarchy <img src="https://s.w.org/images/core/emoji/72x72/1f440.png" alt="👀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> :</p>
<table>
<tbody>
<tr>
<td><strong>All &lsquo;level 2&prime; root categories of EuroSciVoc used to describe the projects</strong></p>
<p>PREFIX skosxl: &lt;http://www.w3.org/2008/05/skos-xl#&gt;<br />
PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
PREFIX eurio: &lt;http://data.europa.eu/s66#&gt;<br />
PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;<br />
PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;<br />
# count the number of projects by EuroSciVoc level 2 top categories &#8230;<br />
SELECT (COUNT(?project) AS ?nbProject) ?ESV_root_label ?ESV_level2_label<br />
WHERE {<br />
# &#8230; the top categories are Concepts &#8230;<br />
?ESV_root a skos:Concept .<br />
# &#8230; with no broader Concept &#8230;<br />
FILTER NOT EXISTS { ?ESV_root skos:broader ?anything }<br />
# &#8230; list level 2 category below level 1 with corresponding projects &#8230;<br />
?ESV_root ^skos:broader ?ESV_level2 .<br />
?ESV_level2 ^skos:broader*/^eurio:hasEuroSciVocClassification ?project .<br />
# &#8230; and EuroSciVoc corresponding skos-xl prefLabels &#8230;<br />
?ESV_root skosxl:prefLabel/skosxl:literalForm ?ESV_root_label.<br />
?ESV_level2 skosxl:prefLabel/skosxl:literalForm ?ESV_level2_label.<br />
# &#8230; sorting by EuroSciVoc category, with English prefLabels<br />
FILTER (lang(?ESV_root_label) = &lsquo;en&rsquo;)<br />
FILTER (lang(?ESV_level2_label) = &lsquo;en&rsquo;)<br />
} GROUP BY ?ESV_root_label ?ESV_level2_label<br />
ORDER BY ?ESV_root_label<br />
LIMIT 100</td>
</tr>
</tbody>
</table>
<p>▶️ <a href="https://cordis.europa.eu/datalab/sparql-endpoint#query=%23%20All%20'level%202'%20root%20categories%20of%20EuroSciVoc%20used%20to%20describe%20the%20projects%0A%0APREFIX%20skosxl%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2008%2F05%2Fskos-xl%23%3E%0APREFIX%20skos%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2004%2F02%2Fskos%2Fcore%23%3E%0APREFIX%20eurio%3A%20%3Chttp%3A%2F%2Fdata.europa.eu%2Fs66%23%3E%0APREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0A%23%20count%20the%20number%20of%20projects%20by%20EuroSciVoc%20level%202%20top%20categories%20...%0ASELECT%20(COUNT(%3Fproject)%20AS%20%3FnbProject)%20%3FESV_root_label%20%3FESV_level2_label%0AWHERE%20%7B%0A%23%20...%20the%20top%20categories%20are%20Concepts%20...%0A%3FESV_root%20a%20skos%3AConcept%20.%0A%23%20...%20with%20no%20broader%20Concept%20...%0AFILTER%20NOT%20EXISTS%20%7B%20%3FESV_root%20skos%3Abroader%20%3Fanything%20%7D%0A%23%20...%20list%20level%202%20category%20below%20level%201%20with%20corresponding%20projects%20...%0A%3FESV_root%20%5Eskos%3Abroader%20%3FESV_level2%20.%0A%3FESV_level2%20%5Eskos%3Abroader*%2F%5Eeurio%3AhasEuroSciVocClassification%20%3Fproject%20.%0A%23%20...%20and%20EuroSciVoc%20corresponding%20skos-xl%20prefLabels%20...%0A%3FESV_root%20skosxl%3AprefLabel%2Fskosxl%3AliteralForm%20%3FESV_root_label.%0A%3FESV_level2%20skosxl%3AprefLabel%2Fskosxl%3AliteralForm%20%3FESV_level2_label.%0A%23%20...%20sorting%20by%20EuroSciVoc%20category%2C%20with%20English%20prefLabels%0AFILTER%20(lang(%3FESV_root_label)%20%3D%20'en')%0AFILTER%20(lang(%3FESV_level2_label)%20%3D%20'en')%0A%7D%20GROUP%20BY%20%3FESV_root_label%20%3FESV_level2_label%0AORDER%20BY%20%3FESV_root_label%0ALIMIT%20100&amp;endpoint=https%3A%2F%2Fcordis.europa.eu%2Fdatalab%2Fsparql&amp;requestMethod=POST&amp;tabTitle=Query&amp;headers=%7B%7D&amp;contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq&amp;contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq&amp;outputFormat=table">See the results</a></p>
<p>And a little last one with a count, to enumerate most used EuroSciVoc Concepts for indexing projects :</p>
<table>
<tbody>
<tr>
<td><strong>Most used EuroSciVoc Concepts for indexing projects</strong></p>
<p>PREFIX skosxl: &lt;http://www.w3.org/2008/05/skos-xl#&gt;<br />
PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
PREFIX eurio: &lt;http://data.europa.eu/s66#&gt;<br />
PREFIX rdf: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;<br />
PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;<br />
# count the number of projects by EuroSciVoc Concept &#8230;<br />
SELECT (COUNT (?project) as ?count) ?ESV<br />
WHERE {<br />
#  &#8230; select the projects with their acronyms &#8230;<br />
?project eurio:hasAcronym/eurio:shortForm ?acronym.<br />
# &#8230; with EuroSciVoc Classification prefLabels &#8230;<br />
?project eurio:hasEuroSciVocClassification/skosxl:prefLabel/skosxl:literalForm ?ESV.<br />
# &#8230; sorting by EuroSciVoc Concept, with English prefLabels<br />
FILTER (lang(?ESV) = &lsquo;en&rsquo;)<br />
} GROUP BY ?ESV<br />
ORDER BY DESC(?count)<br />
LIMIT 3000</td>
</tr>
</tbody>
</table>
<p>▶️ <a href="https://cordis.europa.eu/datalab/sparql-endpoint#query=%23%20Most%20used%20EuroSciVoc%20Concepts%20for%20indexing%20projects%0A%0APREFIX%20skosxl%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2008%2F05%2Fskos-xl%23%3E%0APREFIX%20skos%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2004%2F02%2Fskos%2Fcore%23%3E%0APREFIX%20eurio%3A%20%3Chttp%3A%2F%2Fdata.europa.eu%2Fs66%23%3E%0APREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0A%23%20count%20the%20number%20of%20projects%20by%20EuroSciVoc%20Concept%20...%0ASELECT%20(COUNT%20(%3Fproject)%20as%20%3Fcount)%20%3FESV%0AWHERE%20%7B%0A%23%20%20...%20select%20the%20projects%20with%20their%20acronyms%20...%0A%3Fproject%20eurio%3AhasAcronym%2Feurio%3AshortForm%20%3Facronym.%0A%23%20...%20with%20EuroSciVoc%20Classification%20prefLabels%20...%0A%3Fproject%20eurio%3AhasEuroSciVocClassification%2Fskosxl%3AprefLabel%2Fskosxl%3AliteralForm%20%3FESV.%0A%23%20...%20sorting%20by%20EuroSciVoc%20Concept%2C%20with%20English%20prefLabels%0AFILTER%20(lang(%3FESV)%20%3D%20'en')%0A%7D%20GROUP%20BY%20%3FESV%0AORDER%20BY%20DESC(%3Fcount)%0ALIMIT%203000&amp;endpoint=https%3A%2F%2Fcordis.europa.eu%2Fdatalab%2Fsparql&amp;requestMethod=POST&amp;tabTitle=Query%201&amp;headers=%7B%7D&amp;contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq&amp;contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq&amp;outputFormat=table">See the results</a></p>
<p><img src="https://s.w.org/images/core/emoji/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" />This one an ideal one to generate a word cloud maybe ?</p>
<p>What if we send the CSV data to <a href="https://wordart.com/create">some nice online word cloud generator</a> then ?</p>
<p><a href="https://wordart.com/r8zsokkk7ghu/untitled"><img class="aligncenter size-full wp-image-1710" src="http://blog.sparna.fr/wp-content/uploads/2024/01/Cordis-Taxo-Cloud.png" alt="Cordis Taxo Cloud" width="660" height="757" /></a></p>
<p>(OMG <a href="https://wordart.com/create">they also have a shooting star shape</a> <img src="https://s.w.org/images/core/emoji/72x72/1f320.png" alt="🌠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> in there 🤩)</p>
<p><strong>As a conclusion&#8230;</strong></p>
<p><span style="font-weight: 400;">According to Science (CORDIS saying !), <a href="https://europa.eu/!vYVHXD">New Year’s resolutions appear difficult to be held</a></span><span style="font-weight: 400;">&#8230; because most of time too ambitious, restrictive or unprecisely formulated : indeed, « </span><span style="font-weight: 400;">the </span><a href="https://cordis.europa.eu/article/id/428767-trending-science-do-this-one-thing-to-keep-your-new-year-s-resolutions-research-says"><span style="font-weight: 400;">effectiveness of resolutions depends on how they are </span><b>framed</b></a><span style="font-weight: 400;">.</span><span style="font-weight: 400;"> »</span></p>
<p><span style="font-weight: 400;">Horizon 2024, let’s suggest a(n RDF ?) well-framed one : may CORDIS SPARQL endpoint initiative be an example for other structures who want to share Linked Open Data !</span></p>
<p><span style="font-weight: 400;"><strong>Wishing you Best Interoperability and a Very Merry ✨ Sparqling New Year !</strong> ✨</span></p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2024/01/15/cordis-a-sparql-endpoint-is-born/">CORDIS : a SPARQL endpoint is born !</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/2024/01/15/cordis-a-sparql-endpoint-is-born/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gephi pour visualiser des graphes RDF</title>
		<link>https://blog.sparna.fr/2015/04/22/gephi-visualiser-des-graphes-rdf/</link>
		<comments>https://blog.sparna.fr/2015/04/22/gephi-visualiser-des-graphes-rdf/#comments</comments>
		<pubDate>Wed, 22 Apr 2015 15:24:22 +0000</pubDate>
		<dc:creator><![CDATA[Thomas Francart]]></dc:creator>
				<category><![CDATA[Open Data]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[Visualisation de données]]></category>
		<category><![CDATA[dataviz]]></category>
		<category><![CDATA[gephi]]></category>
		<category><![CDATA[semantic media wiki]]></category>
		<category><![CDATA[tourstech]]></category>

		<guid isPermaLink="false">http://blog.sparna.fr/?p=940</guid>
		<description><![CDATA[<p>RDF est un modèle de données en triplets (sujet; prédicat; objet) qui, pris ensemble, forment un graphe. Et les triplestores RDF sont les bases de données qui permettent de stocker, manipuler et requêter ces graphes. RDF un modèle de données &#171;&#160;bas niveau&#160;&#187;, l&#8217;équivalent du modèle relationnel pour les bases de données relationnelles &#171;&#160;classiques&#160;&#187;; c&#8217;est pourquoi&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2015/04/22/gephi-visualiser-des-graphes-rdf/">Gephi pour visualiser des graphes RDF</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="https://fr.wikipedia.org/wiki/Resource_Description_Framework" target="_blank">RDF</a> est un modèle de données en triplets (sujet; prédicat; objet) qui, pris ensemble, forment un graphe. Et les <a href="https://fr.wikipedia.org/wiki/Triplestore" target="_blank">triplestores RDF</a> sont les bases de données qui permettent de stocker, manipuler et requêter ces graphes. RDF un modèle de données &laquo;&nbsp;bas niveau&nbsp;&raquo;, l&rsquo;équivalent du <a href="https://fr.wikipedia.org/wiki/Mod%C3%A8le_relationnel" target="_blank">modèle relationnel</a> pour les bases de données relationnelles &laquo;&nbsp;classiques&nbsp;&raquo;; c&rsquo;est pourquoi j&rsquo;ai toujours pensé que <strong>pour un utilisateur final, visualiser le contenu d&rsquo;un graphe RDF &laquo;&nbsp;brut&nbsp;&raquo; a autant de sens que de visualiser le contenu des tables d&rsquo;une base relationnelle &#8211; à savoir pas beaucoup</strong>; il y a souvent plein de colonnes ou de tables dans les données qui n&rsquo;ont aucun sens pour l&rsquo;utilisateur final, qui attend une représentation de ses informations &laquo;&nbsp;actionnable&nbsp;&raquo; et compréhensible pour son besoin.</p>
<p style="text-align: justify;"><span id="more-940"></span></p>
<p style="text-align: justify;">On trouve pourtant tout un tas de projets ou de logiciels pour visualiser des graphes RDF natifs : <a href="http://semweb.salzburgresearch.at/apps/rdf-gravity/" target="_blank">RDF gravity</a>, <a href="http://graves.cl/visualRDF/?url=http://graves.cl/visualRDF/" target="_blank">Visual RDF</a>, <a href="http://simile.mit.edu/welkin/" target="_blank">Welkin</a>, ou d&rsquo;autres qui sont listés <a href="https://semanticscience.wordpress.com/2010/02/17/visualisation-of-ontologies-and-large-scale-graphs/" target="_blank">ici</a>, <a href="http://answers.semanticweb.com/questions/1071/visualisation-toolkits-for-rdf" target="_blank">là</a>, ou bien encore <a href="http://answers.semanticweb.com/questions/13760/web-based-rdf-graph-visualization-tool" target="_blank">là</a> (voir également <a href="http://vowl.visualdataweb.org/webvowl.html" target="_blank">WebVOWL</a> pour la visualisation d&rsquo;ontologies OWL, donc sur un sujet un peu différent).</p>
<h2 style="text-align: justify;">Une cartographie des acteurs du numérique pour #ToursTech</h2>
<p style="text-align: justify;">Et pourtant je suis tombé sur une problématique où la visualisation des données natives d&rsquo;un graphe RDF avait vraiment du sens : représenter la <strong>cartographie des acteurs d&rsquo;un territoire</strong> ou d&rsquo;une communauté. En l&rsquo;occurrence la <strong>cartographie des acteurs du numérique en Touraine</strong>, dans le cadre de la <strong><a href="http://tourstech.co/" target="_blank">candidature de Tours au label #FrenchTech (#ToursTech)</a></strong>. On peut donner plusieurs représentations possibles de cet ensemble d&rsquo;acteurs :</p>
<ul style="text-align: justify;">
<li><strong>en graphe </strong>type<strong> réseau social</strong> (l&rsquo;approche que j&rsquo;explore ici, donc);</li>
<li><strong>en zones </strong>type<strong> TreeMap</strong> pour montrer les grandes masses (par exemple la <a href="/wp-content/uploads/2015/04/screenshot-treemap.png" target="_blank">répartition des entreprises par code APE en utilisant d3.js</a>);</li>
<li><strong>en courbes temporelles </strong>pour montrer des évolutions d&rsquo;indicateurs;</li>
<li><strong>en cartes géographiques</strong> pour visualiser les zones et les lieux dans l&rsquo;agglomération</li>
<li><strong>en arbres</strong> pour mettre en évidences des catégories d&rsquo;acteurs;</li>
<li>etc.</li>
</ul>
<p style="text-align: justify;">Dans notre cas les triplets RDF correspondent exactement aux liens entre les acteurs, et sont des relations du type &laquo;&nbsp;est adhérent de (une association professionnelle)&nbsp;&raquo;, &laquo;&nbsp;est fournisseur de&nbsp;&raquo;, &laquo;&nbsp;a un partenariat avec&nbsp;&raquo;, etc. Le besoin d&rsquo;avoir une représentation du réseau social des acteurs devient donc le même que celui de représenter le graphe RDF natif.</p>
<h2 style="text-align: justify;">Le résultat et quelques explications</h2>
<p style="text-align: justify;">Voici le résultat de cette cartographie (cliquez pour agrandir) (et jouer à &laquo;&nbsp;où est Charlie ?&nbsp;&raquo; en cherchant <a href="http://sparna.fr" target="_blank">Sparna</a> dans l&rsquo;image !) :</p>
<p><a href="http://blog.sparna.fr/wp-content/uploads/2015/04/carto-sans-noms-personnes-small.jpg"><img class="aligncenter size-medium wp-image-942" src="http://blog.sparna.fr/wp-content/uploads/2015/04/carto-sans-noms-personnes-small-300x260.jpg" alt="carto-sans-noms-personnes-small" width="300" height="260" /></a></p>
<p style="text-align: justify;"><em>(je précise que cette représentation est partielle, exploratoire, et ne se veut pas représentative de la réalité du territoire)</em></p>
<p style="text-align: justify;">Qu&rsquo;est-ce qu&rsquo;on y voit ?</p>
<ul style="text-align: justify;">
<li>des <strong>noeuds</strong> : organisations, personnes, lieux ou projets;</li>
<li>des <strong>liens</strong> : relations de type réseau social entre ces noeuds (&laquo;&nbsp;travaille dans ce lieu&nbsp;&raquo;, &laquo;&nbsp;participe à ce projet&nbsp;&raquo;, etc.); ces liens ne sont pas distingués par un label ou une couleur dans la cartographie, mais ils sont bien typés dans les données;</li>
<li>La <strong>taille d&rsquo;un noeud</strong> est fonction de son nombre de lien<strong>s</strong>;</li>
<li>La <strong>couleur d&rsquo;un noeud </strong>est fonction de sa &laquo;&nbsp;<a href="http://en.wikipedia.org/wiki/Centrality" target="_blank">centralité</a>&nbsp;&raquo; dans le graphe, c&rsquo;est-à-dire de sa proximité avec un maximum d&rsquo;autres noeuds dans le graphe (enfin c&rsquo;est ce que j&rsquo;en ai compris !);</li>
<li>Les <strong>noms des personnes ne sont pas affichés</strong> pour des raisons de confidentialité;</li>
</ul>
<p style="text-align: justify;">On met ainsi rapidement en évidence :</p>
<ul>
<li style="text-align: justify;">les <strong>acteurs majeurs de la communauté</strong>, soit en terme de &laquo;&nbsp;taille&nbsp;&raquo; soit en terme de positionnement dans le réseau (<a href="http://paloaltours.org/" target="_blank">PaloAltours</a>, la cantine numérique bêta de Tours, <a href="http://blog.coopaxis.fr/" target="_blank">CoopAxis</a> le PTCE qui marie numérique et innovation sociale, <a href="http://www.centre-tic.fr/" target="_blank">Centre &amp; TIC</a> association professionnelle au service du numérique, etc.) ;</li>
<li style="text-align: justify;">les <strong>liens qui les unissen</strong>t (&laquo;&nbsp;comment puis-je rentrer en contact avec telle personne ou telle organisation ?&nbsp;&raquo;);</li>
<li style="text-align: justify;">les <strong>communautés</strong>, qui sont plus apparentes si on partitionne le graphe et qu&rsquo;on colorie les communautés :</li>
</ul>
<p><a href="http://blog.sparna.fr/wp-content/uploads/2015/04/carto-sans-noms-personnes-partition-small.jpg"><img class="aligncenter size-medium wp-image-949" src="http://blog.sparna.fr/wp-content/uploads/2015/04/carto-sans-noms-personnes-partition-small-300x265.jpg" alt="carto-sans-noms-personnes-partition-small" width="300" height="265" /></a></p>
<p style="text-align: justify;">D&rsquo;autres projets ont utilisé une approche et des outils similaires pour cartographier les acteurs d&rsquo;une communauté : l&rsquo;<a href="http://www.capdigital.com/ecosysteme/" target="_blank">écosystème du cluster CapDigital en île-de-france</a>, ou bien cette <a href="http://www.intelligence-economique-paca.fr/Actualites/Actualites/Le-Miste-sort-sa-cartographie-des-acteurs-de-l-intelligence-economique" target="_blank">cartographie des acteurs de l&rsquo;Intelligence Economique en PACA</a>.</p>
<h2 style="text-align: justify;">Le dispositif : Wiki sémantique + triplestore + Gephi / sigma.js</h2>
<p style="text-align: justify;">Le dispositif que nous avons exploré pour réaliser cette cartographie est en 3 parties :</p>
<h3 style="text-align: justify;">Le beurre : un wiki sémantique</h3>
<p style="text-align: justify;"><a href="https://semantic-mediawiki.org" target="_blank">Semantic Media Wiki</a> (que j&rsquo;avais <a title="Le wiki sémantique : solution de capitalisation des connaissances (structurées)" href="http://blog.sparna.fr/wiki-semantique-capitalisation-des-connaissances-structurees/" target="_blank">exploré précédemment ici</a>) nous donne une solution de centralisation des connaissances :</p>
<ol>
<li style="text-align: justify;"><strong>collaborative</strong>, avec toute la machinerie wiki (versionning des pages, pages de discussion, etc.)<strong><br />
</strong></li>
<li style="text-align: justify;"><strong>structurée</strong>,  puisque la solution Semantic Media Wiki et ses divers plugins permet d&rsquo;avoir des fiches à plusieurs champs, avec choix multiples, autocompletion, dates, etc.</li>
<li style="text-align: justify;"><strong>flexible</strong>, puisque le modèle de données et les formulaires de saisie peuvent évoluer au fil des besoins, et l&rsquo;outil est facile à prendre en main pour des utilisateurs non-experts, jugez plutôt  les formulaires de saisie avec assistance à la saisie :<a href="http://blog.sparna.fr/wp-content/uploads/2015/04/screenshot-formulaire-semantic-media-wiki.jpg"><img class="aligncenter size-medium wp-image-957" src="http://blog.sparna.fr/wp-content/uploads/2015/04/screenshot-formulaire-semantic-media-wiki-300x227.jpg" alt="screenshot-formulaire-semantic-media-wiki" width="300" height="227" /></a></li>
<li style="text-align: justify;"><strong>ouverte</strong> pour partager les données avec d&rsquo;autres territoires (important sur l&rsquo;aspect &laquo;&nbsp;mise en réseau des archipels territoriaux&nbsp;&raquo;);</li>
</ol>
<p style="text-align: justify;">C&rsquo;est cet outil qui est utilisé pour renseigner les fiches des acteurs du territoire et leurs liens. Ces liens sont de types :</p>
<ul style="text-align: justify;">
<li>liens formels ou contractuels : fournisseur de, client de, travaille pour ;</li>
<li>liens de collaboration : a un partenariat avec, adhère à telle association, participe ou porte tel projet;</li>
<li>liens géographiques : se situe dans tel lieu;</li>
<li>liens capitalistiques : a du capital dans;</li>
</ul>
<h3 style="text-align: justify;">L&rsquo;argent du beurre : une diffusion des données en RDF</h3>
<p style="text-align: justify;">Semantic Media Wiki c&rsquo;est bien, mais nativement on ne peut pas réutiliser les données en dehors du wiki. On le synchronise donc (via sa fonction d&rsquo;<a href="https://semantic-mediawiki.org/wiki/Help:RDF_export" target="_blank">export RDF</a>) avec un <a href="http://rdf4j.org/" target="_blank">triplestore RDF Sesame</a>, qui rend les données accessibles sur le web (via <a href="http://www.w3.org/TR/sparql11-query/" target="_blank">SPARQL</a>), permettant ainsi à d&rsquo;autres applications de tirer parti des données.</p>
<p style="text-align: justify;">On a donc une <strong>solution de capitalisation des connaissances PAR le territoire</strong> (wiki sémantique collaboratif) et <strong>POUR le territoire</strong> (diffusion des données pour leur réutilisation).</p>
<h3 style="text-align: justify;">Le sourire du crémier : Gephi pour exploiter les données</h3>
<p style="text-align: justify;">Le sourire du crémier : <a href="http://gephi.github.io/" target="_blank">Gephi</a> (et d&rsquo;autres applications) qui peuvent réexploiter les données saisies dans le wiki. En particulier Gephi dispose d&rsquo;un <a href="https://marketplace.gephi.org/plugin/semanticwebimport/" target="_blank">plugin d&rsquo;intégration à partir de SPARQL</a> (&laquo;&nbsp;Gephi Semantic Web Import Plugin&nbsp;&raquo; &#8211; Attention à la date de rédaction de ce billet le lien vers la <a href="https://wiki.gephi.org/index.php/SemanticWebImport" target="_blank">page de documentation de ce plugin</a> est cassé). Il devient donc possible de générer un visuel de notre réseau social à partir des données ainsi exposées.</p>
<p style="text-align: justify;">On peut même automatiser la génération du visuel (ce qu&rsquo;on a fait ici) avec un bout de Java grâce à l&rsquo;<a href="http://gephi.github.io/toolkit/" target="_blank">API Gephi (Gephi Toolkit).</a></p>
<p style="text-align: justify;"><strong>Mon retour d&rsquo;expérience sur Gephi est très positif</strong> : facile à prendre en main, intégration SPARQL aisée et sans bug, on peut générer assez facilement des rendus intéressants. Inconvénient : cela reste des images statiques, ca ne bouge pas et ce n&rsquo;est pas cliquable. Pour avoir quelque chose de plus interactif il faut se tourner vers <a href="http://sigmajs.org/" target="_blank">SigmaJS</a>. C&rsquo;est ce que l&rsquo;<a href="http://mwebius.com/" target="_blank">agence de communication Mwebius</a> a expérimenté :</p>
<p style="text-align: justify;"><a href="http://blog.sparna.fr/wp-content/uploads/2015/04/screenshot-sigmajs.png"><img class="aligncenter size-medium wp-image-964" src="http://blog.sparna.fr/wp-content/uploads/2015/04/screenshot-sigmajs-300x173.png" alt="screenshot-sigmajs" width="300" height="173" /></a></p>
<p style="text-align: justify;">Notez les options de sélection de ce que l&rsquo;on veut afficher sur la gauche. Tout cela est branché en direct sur les données exportées du wiki.</p>
<h2 style="text-align: justify;">Vous voulez utiliser les données ? pas encore&#8230;</h2>
<p style="text-align: justify;">La question de la licence des données récoltées pour ce travail de cartographie n&rsquo;étant pas encore tranchée (ouvertes ou pas ? dans quel périmètre), je ne peux malheureusement pas mettre ici les liens ni vers le wiki sémantique, ni vers le service SPARQL de diffusion des données &#8211; je le fais dès que l&rsquo;initiative #ToursTech a statué là-dessus, mais ce serait en tout cas <strong>un bel exemple de système d&rsquo;intelligence économique territorial collaboratif diffusant ses données en open data</strong>. Rien que ça ! En attendant si vous voulez en savoir plus laissez un message ici et suivez la <a href="http://tourstech.co/" target="_blank">candidature #ToursTech</a> !</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2015/04/22/gephi-visualiser-des-graphes-rdf/">Gephi pour visualiser des graphes 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/2015/04/22/gephi-visualiser-des-graphes-rdf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>data.bnf.fr pour enrichir un portail de recherche documentaire : le cas de Canopé Académie de Poitiers</title>
		<link>https://blog.sparna.fr/2014/12/12/data-bnf-fr-enrichir-portail-documentaire-crdp-canope-poitou-charentes/</link>
		<comments>https://blog.sparna.fr/2014/12/12/data-bnf-fr-enrichir-portail-documentaire-crdp-canope-poitou-charentes/#comments</comments>
		<pubDate>Fri, 12 Dec 2014 14:17:08 +0000</pubDate>
		<dc:creator><![CDATA[Thomas Francart]]></dc:creator>
				<category><![CDATA[Open Data]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[Recherche d'informations]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[bnf]]></category>
		<category><![CDATA[canopé]]></category>
		<category><![CDATA[crdp]]></category>
		<category><![CDATA[data.bnf.fr]]></category>
		<category><![CDATA[e-sidoc]]></category>
		<category><![CDATA[Jena]]></category>

		<guid isPermaLink="false">http://blog.sparna.fr/?p=824</guid>
		<description><![CDATA[<p>Je teste actuellement avec le Canopé Académie de Poitiers (Anciennement le CRDP Poitou-Charentes &#8211; Centre Régional de Documentation Pédagogique) l&#8217;utilisation des données mises à disposition par la BNF dans le portail data.bnf.fr pour enrichir des portails documentaires. Je donne ici un premier retour d&#8217;expérience sur ce travail, avec leur accord. Pourquoi réutiliser ces données ?&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2014/12/12/data-bnf-fr-enrichir-portail-documentaire-crdp-canope-poitou-charentes/">data.bnf.fr pour enrichir un portail de recherche documentaire : le cas de Canopé Académie de Poitiers</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Je teste actuellement avec le <a href="http://web.crdp-poitiers.org/crdp/" target="_blank">Canopé Académie de Poitiers</a> (Anciennement le CRDP Poitou-Charentes &#8211; Centre Régional de Documentation Pédagogique) l&rsquo;utilisation des données mises à disposition par la <a href="http://www.bnf.fr" target="_blank">BNF</a> dans le portail <a href="http://data.bnf.fr" target="_blank">data.bnf.fr</a> pour enrichir des portails documentaires. Je donne ici un premier retour d&rsquo;expérience sur ce travail, avec leur accord. Pourquoi réutiliser ces données ? comment ? quels sont les premiers résultats obtenus ?</p>
<p><span id="more-824"></span></p>
<h2 class="symple-heading symple-heading- text-align-left "style="color: undefined;margin-bottom: 30px;margin-top: 30px;"><span>Contexte</span></h2>
<p style="text-align: justify;">Le réseau Canopé a pour <a href="http://www.reseau-canope.fr/qui-sommes-nous.html" target="_blank">objectif</a> de &laquo;&nbsp;renforcer l’action de la communauté éducative en faveur de la réussite des élèves&nbsp;&raquo;, en particulier en fournissant des ressources documentaires et pédagogiques pour les enseignants, mais aussi en proposant des espaces de formation et d&rsquo;animation. Canopé Poitiers a ceci de particulier que, tout en étant une émanation régionale du réseau Canopé, il a une activité d&rsquo;éditeur logiciel d&rsquo;envergure nationale en proposant et en hébergeant les portails de recherche documentaire des CDI de plus de <strong>7000 collèges et lycées</strong>, dans sa solution <a href="http://www.crdp2-poitiers.org/soldoc/v3/secondaire_esidoc.php?actif=C&amp;menu2=A" target="_blank">e-sidoc</a> (7013 portails exactement au moment de la rédaction de cet article, vous pouvez regarder la <a href="http://www.crdp2-poitiers.org/soldoc/e-sidoc/questionreponse/cartedyn.htm" target="_blank">carte des déploiements d&rsquo;e-sidoc</a> pour voir si le collège ou le lycée du coin est équipé avec cette solution. Voici <a href="http://0370038r.esidoc.fr/" target="_blank">le portail d&rsquo;un lycée à Tours</a> pour vous faire une idée).</p>
<h2 class="symple-heading symple-heading- text-align-left "style="color: undefined;margin-bottom: 30px;margin-top: 30px;"><span>Objectifs</span></h2>
<p style="text-align: justify;">L&rsquo;objectif de Canopé Poitiers est d&rsquo;évaluer la faisabilité et l&rsquo;intérêt d&rsquo;enrichir les portails e-sidoc avec les données de <a href="http://data.bnf.fr" target="_blank">data.bnf.fr.</a> Les possibilités d&rsquo;enrichissement sont ouvertes mais peuvent schématiquement se subdiviser en trois :</p>
<ol style="text-align: justify;">
<li>L&rsquo;<span style="text-decoration: underline;"><strong>amélioration de la recherche</strong></span> et des modes d&rsquo;accès aux catalogues ; cette partie recouvre elle-même deux parties :
<ol>
<li>l&rsquo;amélioration des fonctions de recherche (nouvelles facettes ou de nouveaux critères de recherche) ;</li>
<li>l&rsquo;amélioration de la présentation des résultats de recherche;</li>
</ol>
</li>
<li>L&rsquo;<span style="text-decoration: underline;"><strong>ajout de nouvelles notices</strong></span>, tirées de <a href="http://data.bnf.fr" target="_blank">data.bnf.fr</a>, au catalogue &laquo;&nbsp;local&nbsp;&raquo; du CDI; c&rsquo;est ce qui est déjà fait par Canopé Poitiers qui propose au CDI des &laquo;&nbsp;<a href="http://www.crdp2-poitiers.org/soldoc/v3/secondaire_soldoc.php?actif=D&amp;menu2=A" target="_blank">réservoirs de notices</a>&laquo;&nbsp;, comme le dépouillement des titres de la presse, ou une sélection de sites internet pour les collèges et les lycées. Cela pourrait avoir du sens pour inclure dans ces portail des œuvres numériques de <a href="http://gallica.bnf.fr/" target="_blank">Gallica</a>, ou des <a href="http://expositions.bnf.fr/" target="_blank">liens vers les expositions virtuelles de la BNF</a>, etc. Cela permettrait ensuite au collégien/lycéen d&rsquo;accéder à ces ressources via le portail de recherche;</li>
<li>L&rsquo;<span style="text-decoration: underline;"><strong>enrichissement des notices</strong></span> documentaires (comme <a href="http://0370038r.esidoc.fr/search.php?pid=&amp;action=Record&amp;id=0370038r_80656&amp;num=2&amp;total=263" target="_blank">celle-ci</a>) avec des informations tirées des données de data.bnf.fr;</li>
</ol>
<p style="text-align: justify;">Par ailleurs, Canopé Poitiers a de fortes contraintes de production, la réindexation de <strong>7000 bases documentaires</strong> chaque nuit, et l&rsquo;hébergement de tous ces portails pour avoir de bons temps de réponse posant un certain nombre de challenges techniques dont je ne soupçonne pas le quart&#8230;</p>
<p style="text-align: justify;">Pour ces raisons de contraintes de production, nous expérimentons d&rsquo;abord la piste de l&rsquo;<strong>enrichissement des notices documentaires</strong> qui n&rsquo;impacte ni sur la structure des index de recherche (ou de façon mineure), ni sur leur taille.</p>
<h2 class="symple-heading symple-heading- text-align-left "style="color: undefined;margin-bottom: 30px;margin-top: 30px;"><span>Quels enrichissements et comment ?</span></h2>
<p style="text-align: justify;"><img class="alignright wp-image-846 size-full" src="http://blog.sparna.fr/wp-content/uploads/2014/12/4d5655df171e8e2a5c9880416faeb0ce.png" alt="4d5655df171e8e2a5c9880416faeb0ce" width="198" height="68" /> Le premier enrichissement envisagé est l&rsquo;<strong>ajout d&rsquo;un lien vers une version numérisée dans Gallica de l’œuvre présentée dans la notice</strong>. (voir par exemple <a href="http://gallica.bnf.fr/ark:/12148/bpt6k1045580k" target="_blank">Alice au pays des merveilles dans Gallica</a>) La récupération de ces liens est possible car :</p>
<ol style="text-align: justify;">
<li>Les notices du portail documentaire portent (pour la plupart) un <strong>ISBN</strong> ou un EAN;</li>
<li>Les éditions d&rsquo;ouvrages publiées dans data.bnf.fr portent également (pour la plupart) un ISBN ou un EAN, ce qui permet de faire un rapprochement avec nos notices;</li>
<li>Les éditions d&rsquo;ouvrage de data.bnf.fr sont regroupées ensemble sous des entrées correspondant à l&rsquo;œuvre abstraite par une organisation <strong><a href="http://www.bnf.fr/fr/professionnels/modelisation_ontologies/a.modele_FRBR.html" target="_blank">FRBR</a></strong>, ce qui permet, même s&rsquo;il n&rsquo;existe pas de version numérisée pour l&rsquo;ISBN exact de départ (ce qui est toujours le cas, car les versions numériques dans Gallica sont celles d&rsquo;éditions anciennes), de voir si une <strong>autre édition de la même oeuvre</strong> a son équivalent numérisée;</li>
</ol>
<p style="text-align: justify;">Pour ce qui nous intéresse ici, <span style="text-decoration: underline;"><strong>la structuration FRBR des oeuvres est donc la principale valeur ajoutée des données data.bnf.fr</strong></span>, par rapport aux <a href="http://www.bnf.fr/fr/professionnels/protocoles_echange_donnees/a.proto_oai.html" target="_blank">flux OAI</a> ou <a href="http://www.bnf.fr/fr/professionnels/protocoles_echange_donnees/a.proto_z3950.html" target="_blank">Z3950</a> de la BNF, qui ne structurent pas les données de cette façon.</p>
<p style="text-align: justify;">Donc, en résumé :</p>
<ul>
<li style="text-align: justify;">on cherche l&rsquo;édition de l&rsquo;oeuvre dans data.bnf.fr via l&rsquo;ISBN ou l&rsquo;EAN;</li>
<li style="text-align: justify;">et si on l&rsquo;a trouvée, on cherche une autre édition de la même oeuvre ayant une version numérique (on prend l&rsquo;édition la plus récente);</li>
</ul>
<h2 class="symple-heading symple-heading- text-align-left "style="color: undefined;margin-bottom: 30px;margin-top: 30px;"><span>Retour d'expérience technique</span></h2>
<p style="text-align: justify;">Pour faire ce travail de récupération des liens :</p>
<ul style="text-align: justify;">
<li>On télécharge les <a href="http://data.bnf.fr/semanticweb#Ancre2" target="_blank">données de dump de data.bnf.fr</a>;</li>
<li>On les stocke dans un triplestore <a href="http://jena.apache.org/documentation/serving_data/" target="_blank">Jena Fuseki</a> avec un stockage <a href="http://jena.apache.org/documentation/tdb/" target="_blank">TDB</a>;</li>
<li>On fait un prétraitement sur les ISBNs (voir ci-dessous), et on fait nos requêtes de rapprochement en <a href="http://fr.wikipedia.org/wiki/SPARQL" target="_blank">SPARQL</a>;</li>
</ul>
<p style="text-align: justify;">On s&rsquo;aperçoit que :</p>
<ul>
<li style="text-align: justify;"><span style="text-decoration: underline;"><strong>Les données ont quelques petits soucis de format</strong></span>. (ne dérogeant donc pas à la règle d&rsquo;or du traitement des données sur le web : &laquo;&nbsp;<a href="http://fr.slideshare.net/thomasfrancart/partager-et-rutiliser-des-donnes-sur-le-web" target="_blank">les données sont pourries</a>&nbsp;&raquo; <img src="https://s.w.org/images/core/emoji/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ) en effet quelques fichiers RDF des dumps de la BNF (ceux des manifestations, le 11971, le 11975 et quelques autres) contiennent des erreurs de syntaxe qui empêchent de les charger dans une base RDF. Avant de lancer un chargement, il est préférable de vérifier les fichiers avec le <a href="https://jena.apache.org/documentation/tdb/commands.html" target="_blank">script Jena ntriples</a> et son option &laquo;&nbsp;validate&nbsp;&raquo; :
<ul>
<li>ntriples &#8211;validate /chemin/databnf_editions_nt/databnf_editions__manif_* &gt; /chemin/temp.txt</li>
<li>le plus simple a été de supprimer tout simplement ces fichiers pour ne pas faire échouer le chargement, mais si vous voulez avoir 100% des données il faudra les corriger, ce qui n&rsquo;est pas tout à fait trivial;</li>
</ul>
</li>
<li style="text-align: justify;"><span style="text-decoration: underline;"><strong>Le chargement des données est plutôt rapide</strong></span>.  105 millions de triplets, sur un portable classique, en 1h40. Pour ce chargement, j&rsquo;ai utilisé le <a href="https://jena.apache.org/documentation/tdb/commands.html#tdbloader2" target="_blank">script tdbloader2 de Jena</a>;</li>
<li style="text-align: justify;"><span style="text-decoration: underline;"><strong>Le format des ISBN est variable</strong></span> (aussi bien dans les données BNF que dans les notices de départ). Parfois en format ISBN-10, parfois en format ISBN-13, parfois avec tirets, parfois sans (978-2-7116-2455-3, 1-4051-3618-9, 3832202560, etc.) Je me suis donc ramené à une version sans tirets pour tous les ISBN pour limiter le problème, mais il reste la différence entre les ISBN-10 et les ISBN-13 qui n&rsquo;a pas été traitée;</li>
</ul>
<h2 class="symple-heading symple-heading- text-align-left "style="color: undefined;margin-bottom: 30px;margin-top: 30px;"><span>Quels résultats ?</span></h2>
<p style="text-align: justify;">Nous avons voulu valider la <em>couverture des données</em> de data.bnf.fr en terme de liens vers les versions numériques des œuvres : est-ce que le jeu en vaut la chandelle ? pourra-t-on sortir suffisamment de liens vers des œuvres numériques pour justifier le travail ? Pour cela, on a d&rsquo;abord testé sur 4 auteurs classiques : Jules Verne, Victor Hugo, Emile Zola, Molière, en extrayant des notices la liste des ISBN/EAN des éditions de leurs œuvres.</p>
<p style="text-align: justify;">Voici ce qu&rsquo;on obtient en terme de couverture du rapprochement des données pour ces ISBNs :</p>
<table width="638" cellspacing="0" cellpadding="7">
<colgroup>
<col width="351" />
<col width="109" />
<col width="134" /> </colgroup>
<tbody>
<tr valign="top">
<td bgcolor="#d6e3bc" width="351">
<p align="center"><span lang="fr-FR"><b>Valeur</b></span></p>
</td>
<td bgcolor="#d6e3bc" width="109">
<p align="center"><span lang="fr-FR"><b>Chiffre</b></span></p>
</td>
<td bgcolor="#d6e3bc" width="134">
<p align="center"><span lang="fr-FR"><b>Pourcentage</b></span></p>
</td>
</tr>
<tr valign="top">
<td width="351"><span lang="fr-FR">Nombre total d’ISBN distincts</span></td>
<td width="109"><span lang="fr-FR">1623</span></td>
<td width="134"><span lang="fr-FR">100%</span></td>
</tr>
<tr valign="top">
<td width="351"><span lang="fr-FR">Nombre d’ISBN trouvés dans data.bnf.fr</span></td>
<td width="109"><span lang="fr-FR">823</span></td>
<td width="134"><span lang="fr-FR">50%</span></td>
</tr>
<tr valign="top">
<td width="351"><span lang="fr-FR">Nombre d’ISBN pour lesquels on trouve une version électronique dans Gallica de la même œuvre (mais pas de la même édition)</span></td>
<td width="109"><span lang="fr-FR">429</span></td>
<td width="134"><strong><span lang="fr-FR">26%</span></strong></td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><strong>On trouve une version électronique de l&rsquo;oeuvre pour un ISBN sur quatre</strong>. Mais certaines œuvres ont plus d&rsquo;exemplaires (d&rsquo;items au sens FRBR) que d&rsquo;autres (on trouvera plus d&rsquo;exemplaires de &laquo;&nbsp;Au bonheur des dames&nbsp;&raquo; que de &laquo;&nbsp;Comment on meurt&nbsp;&raquo; de Zola), c&rsquo;est pourquoi il était aussi intéressant de donner la couverture en nombres d&rsquo;exemplaires :</p>
<table width="638" cellspacing="0" cellpadding="7">
<colgroup>
<col width="351" />
<col width="109" />
<col width="134" /> </colgroup>
<tbody>
<tr valign="top">
<td bgcolor="#d6e3bc" width="351">
<p align="center"><span lang="fr-FR"><b>Valeur</b></span></p>
</td>
<td bgcolor="#d6e3bc" width="109">
<p align="center"><span lang="fr-FR"><b>Chiffre</b></span></p>
</td>
<td bgcolor="#d6e3bc" width="134">
<p align="center"><span lang="fr-FR"><b>Pourcentage</b></span></p>
</td>
</tr>
<tr valign="top">
<td width="351"><span lang="fr-FR">Nombre total d’items (au sens FRBR) ayant une valeur d’ISBN</span></td>
<td width="109"><span lang="fr-FR">36606</span></td>
<td width="134"><span lang="fr-FR">100%</span></td>
</tr>
<tr valign="top">
<td width="351"><span lang="fr-FR">Nombre d’items (au sens FRBR) pour lesquels l’ISBN est trouvé dans data.bnf.fr</span></td>
<td width="109"><span lang="fr-FR">26366</span></td>
<td width="134"><span lang="fr-FR">72%</span></td>
</tr>
<tr valign="top">
<td width="351"><span lang="fr-FR">Nombre d’items (au sens FRBR) pour lesquels on trouve une version électronique dans Gallica de la même œuvre (mais pas de la même édition)</span></td>
<td width="109"><span lang="fr-FR">19446</span></td>
<td width="134"><strong><span lang="fr-FR">53%</span></strong></td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Pour exprimer autrement le dernier chiffre de 53% : <strong> il y a une chance sur deux de trouver une version numérique dans Gallica de l&rsquo;oeuvre d&rsquo;un livre d&rsquo;un de ces 4 auteurs pris au hasard dans les rayonnages d&rsquo;un CDI.</strong></p>
<p style="text-align: justify;"><span style="text-decoration: underline;"><strong>Globalement cela encourage à continuer la démarche</strong></span> et montre que ce travail sera visible dans les portails e-sidoc. La récupération des versions numériques des oeuvres est un premier prétexte à ce travail de rapprochement qui permettrait ensuite de récupérer de nombreuses autres données.</p>
<hr />
<p style="text-align: justify;"><span style="text-decoration: underline;"><strong>Update du 16/12/2014</strong></span> : les dernières versions des données de data.bnf qui seront mises en ligne fin 2014 devraient 1/ corriger le petit souci de format mentionné plus haut (si ce n&rsquo;est déjà fait) et 2/ contenir plus de données (entre 1 et 2 millions d&rsquo;éditions supplémentaires, et 400 000 auteurs supplémentaires), ce qui devrait améliorer le ratio de rapprochement des notices sur les ISBNs.  Cela amènera data.bnf.fr à être de plus en plus incontournable par sa couverture (l&rsquo;intégralité des éditions de la BNF devraient être publiées d&rsquo;ici fin 2015).</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2014/12/12/data-bnf-fr-enrichir-portail-documentaire-crdp-canope-poitou-charentes/">data.bnf.fr pour enrichir un portail de recherche documentaire : le cas de Canopé Académie de Poitiers</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/12/12/data-bnf-fr-enrichir-portail-documentaire-crdp-canope-poitou-charentes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installation du triplestore OpenLink Virtuoso sous Linux</title>
		<link>https://blog.sparna.fr/2013/09/06/installation-du-triplestore-openlink-virtuoso-sous-linux/</link>
		<comments>https://blog.sparna.fr/2013/09/06/installation-du-triplestore-openlink-virtuoso-sous-linux/#comments</comments>
		<pubDate>Fri, 06 Sep 2013 15:01:16 +0000</pubDate>
		<dc:creator><![CDATA[Thomas Francart]]></dc:creator>
				<category><![CDATA[RDF]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Openlink Virtuoso]]></category>
		<category><![CDATA[Triplestore]]></category>
		<category><![CDATA[Virtuoso Universal Server]]></category>

		<guid isPermaLink="false">http://blog.sparna.fr/?p=455</guid>
		<description><![CDATA[<p>Openlink Virtuoso est le triplestore utilisé dans le projet DBPedia et de nombreux autres projets de mise en ligne de endpoints SPARQL. Cet outil est disponible dans une version open-source et une version commerciale. S&#8217;il offre d&#8217;excellentes performances (a priori les meilleures dans les benchmarks de triplestore), son installation est&#8230; comment dire&#8230; plus compliquée que&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2013/09/06/installation-du-triplestore-openlink-virtuoso-sous-linux/">Installation du triplestore OpenLink Virtuoso sous Linux</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/">Openlink Virtuoso</a> est le triplestore utilisé dans le projet <a href="http://dbpedia.org">DBPedia</a> et de nombreux autres projets de mise en ligne de endpoints SPARQL. Cet outil est disponible dans une version open-source et une version commerciale. S&rsquo;il offre d&rsquo;excellentes performances (a priori les meilleures dans les <a href="http://wifo5-03.informatik.uni-mannheim.de/bizer/berlinsparqlbenchmark/results/V6/#comparison">benchmarks de triplestore</a>), son installation est&#8230; comment dire&#8230; plus compliquée que <a title="Tutoriel : comment installer un serveur RDF Sesame ?" href="http://blog.sparna.fr/tutoriel-comment-installer-un-serveur-rdf-sesame/">celle de Sesame</a>. Je consigne ici un retour d&rsquo;expérience et la procédure d&rsquo;installation que j&rsquo;ai suivi pour l&rsquo;installer dans une machine virtuelle Linux CentOS.</p>
<p><span id="more-455"></span></p>
<p>La documentation de référence de cette installation est disponible <a href="http://virtuoso.openlinksw.com/dataspace/doc/dav/wiki/Main/VOSCentosNotes">ici</a>. Virtuoso est disponible dans les dépôts Linux, cependant cette version date quelque peu, et compte-tenu des dernières évolutions sur le produit il est de bon ton d&rsquo;essayer de se bien se tenir à jour. La procédure d&rsquo;installation ci-dessous est donc celle qui compile Virtuoso à partir des sources.</p>
<pre># Télécharger les sources depuis <a href="http://sourceforge.net/projects/virtuoso">http://sourceforge.net/projects/virtuoso</a>
# Télécharger le fichier virtuoso-opensource-6.1.7.tar.gz

# D'abord installer toutes les dépendances requises
su -
yum install gcc gmake autoconf automake libtool flex bison gperf gawk m4 make
yum install openssl-devel readline-devel wget

# Créer un répertoire dans lequel on va dézipper les sources
mkdir virtuoso
cd virtuoso
cp ../Downloads/virtuoso-opensource-6.1.7.tar.gz .

# untar
tar xvpfz virtuoso-opensource-6.1.7.tar.gz

# configure
# c'est ici que l'on peut changer le prefixe racine de l'installation avec le parametre --prefix
cd virtuoso-opensource-6.1.7
./configure --prefix=/usr/local/ --with-readline

# Voilà ce qu'on obtient :

Virtuoso Open Source Edition (Row Store) 6.1.7 configuration summary
====================================================================

Installation variables
  layout                  default
  prefix                  /usr/local
  exec_prefix             ${prefix}

Installation paths
  programs                ${exec_prefix}/bin
  include files           ${prefix}/include
  libraries               ${exec_prefix}/lib
  manual pages            ${datarootdir}/man
  vad packages            ${datarootdir}/virtuoso/vad
  database                ${prefix}/var/lib/virtuoso/db
  hosting                 ${exec_prefix}/lib/virtuoso/hosting

Options
  BUILD_OPTS               xml ssl imsg pldebug pthreads readline

# compiler (prend plusieurs dizaines de minutes à plusieurs heures en fonction de la puissance de la machine)
nice make

# installer
su -
cd /home/thomas/virtuoso/virtuoso-opensource-6.1.7
make install

# vérifier que virtuoso.ini est au bon endroit
cd /usr/local/var/lib/virtuoso/db/
ls
# virtuoso.ini

# démarrer le serveur
virtuoso-t -df
# cette commande demarre le serveur dans le terminal, si on ferme la fenêtre le process s'arrete.
# pour demarrer dans le background :
virtuoso-t -f &amp;
# et pour arreter le serveur :
ps -edf | grep virtuoso-t
kill -9 &lt;numero du process&gt;
# accéder à http://localhost:8890/conductor/

# se logguer avec le super-admin : dba/dba

# changer tout de suite le mot de passe du super-admin
isql
set password dba new_password

# accéder au endpoint public à http://localhost:8890/sparql
# et voilà :-)
# avertissement : cette procédure ne convient pas pour un déploiement en production</pre>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img zwzrqlmaowcoxhhnfjey rurilkjvxyrgpzelrpvq" style="border: none; float: right;" src="http://img.zemanta.com/pixy.gif?x-id=4484d2ab-c5fd-4763-b273-7d80e62154ec" alt="" /></div>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2013/09/06/installation-du-triplestore-openlink-virtuoso-sous-linux/">Installation du triplestore OpenLink Virtuoso sous Linux</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/2013/09/06/installation-du-triplestore-openlink-virtuoso-sous-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exemples de requêtes SPARQL sur le modèle SKOS</title>
		<link>https://blog.sparna.fr/2013/07/15/exemples-requetes-sparql-skos/</link>
		<comments>https://blog.sparna.fr/2013/07/15/exemples-requetes-sparql-skos/#comments</comments>
		<pubDate>Mon, 15 Jul 2013 19:41:49 +0000</pubDate>
		<dc:creator><![CDATA[Thomas Francart]]></dc:creator>
				<category><![CDATA[SKOS]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[thesaurus]]></category>

		<guid isPermaLink="false">http://blog.sparna.fr/?p=400</guid>
		<description><![CDATA[<p>SKOS Play utilise du SPARQL pour lire les fichiers de thesaurus qu&#8217;on lui envoie, en voici quelque-unes pour illustrer son fonctionnement et peut-être vous servir de point de départ dans l&#8217;écriture de vos propres requêtes ou dans la découverte des possibilités de ce langage d&#8217;interrogation. SKOS, le modèle de systèmes d&#8217;organisation de connaissances et de&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2013/07/15/exemples-requetes-sparql-skos/">Exemples de requêtes SPARQL sur le modèle SKOS</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="http://labs.sparna.fr/skos-play/" target="_blank">SKOS Play</a> utilise du <a href="http://www.w3.org/TR/sparql11-query/" target="_blank">SPARQL</a> pour lire les fichiers de thesaurus qu&rsquo;on lui envoie, en voici quelque-unes pour illustrer son fonctionnement et peut-être vous servir de point de départ dans l&rsquo;écriture de vos propres requêtes ou dans la découverte des possibilités de ce langage d&rsquo;interrogation. <a href="http://www.w3.org/TR/2009/REC-skos-reference-20090818/" target="_blank">SKOS</a>, le modèle de systèmes d&rsquo;organisation de connaissances et de terminologies du web sémantique, a l&rsquo;avantage d&rsquo;être assez simple, cependant les requêtes pour l&rsquo;exploiter correctement sont plus compliquées que ce qu&rsquo;on pourrait croire au premier abord. Toutes les requêtes ci-dessous exploitent les opérateurs SPARQL 1.1.</p>
<p><span id="more-400"></span></p>
<h2>Concept Schemes et Concepts de premier niveau</h2>
<p>L&rsquo;interface de SKOS Play commence par lister les concepts schemes triés par langue :</p>
[sql gutter=&nbsp;&raquo;false&nbsp;&raquo;]PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
SELECT ?conceptScheme<br />
WHERE {<br />
?conceptScheme a skos:ConceptScheme .<br />
OPTIONAL {<br />
?conceptScheme skos:prefLabel ?prefLabel .<br />
FILTER(lang(?prefLabel) = &lsquo;fr&rsquo;)<br />
}<br />
}<br />
ORDER BY ?prefLabel[/sql]
<p>On utilise un OPTIONAL pour le cas où le libellé du concept scheme ne serait pas connu, et on tri par langue. Notez par ailleurs que la requête s&rsquo;attend à un skos:prefLabel. SKOS ne dit rien sur le nommage des concept schemes, on peut trouver aussi bien du skos:prefLabel que du rdfs:label que du dcterms:title, aucune de ces 3 propriétés ne définissant un domaine.</p>
<p>Ensuite, on essaie de trouver les langues utilisées. Pour cela on regarde les langues utilisées sur les prefLabel, altLabels et hiddenLabels :</p>
[sql gutter=&nbsp;&raquo;false&nbsp;&raquo;]PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
SELECT DISTINCT (lang(?label) AS ?lang)<br />
WHERE {<br />
?concept a skos:Concept .<br />
?concept skos:prefLabel|skos:altLabel|skos:hiddenLabel ?label .<br />
}[/sql]
<p>On utilise l&rsquo;opérateur &lsquo;|&rsquo; (alternative) des <a href="http://www.w3.org/TR/sparql11-query/#propertypaths" target="_blank">property path SPARQL 1.1</a> pour sélectionner les prefLabel ou les altLabels ou hiddenLabels, et on sélectionne la liste dédoublonnée de leurs langues. A noter que les valeurs sans langues (ce qui ne devrait pas arriver en SKOS en principe), ne sont pas traitées par la query.</p>
<p>Une fois un concept scheme sélectionné, on a souvent besoin de trouver les concepts de premier niveau de ce scheme. 2 solutions : première solution, interroger la propriété hasTopConcept ou isTopConceptOf du scheme :</p>
[sql gutter=&nbsp;&raquo;false&nbsp;&raquo;]PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
SELECT DISTINCT ?scheme ?top<br />
WHERE {<br />
?scheme skos:hasTopConcept|^skos:isTopConceptOf ?top .<br />
}[/sql]
<p>Ici on combine l&rsquo;opérateur d&rsquo;alternative &lsquo;|&rsquo; avec celui d&rsquo;inverse &lsquo;^&rsquo; pour sélectionner soit les skos:hasTopConcept du scheme vers le concept soit les isTopConceptOf du concept vers le scheme; comme SKOS Play ne connait pas a priori la &laquo;&nbsp;tête&nbsp;&raquo; des thesaurus à traiter, il faut mieux être prudent et essayer de lire tout ce qu&rsquo;on peut. La variable ?scheme est &laquo;&nbsp;bindée&nbsp;&raquo; avec le <a href="http://openrdf.callimachus.net/sesame/2.7/apidocs/org/openrdf/query/Operation.html#setBinding%28java.lang.String,%20org.openrdf.model.Value%29" target="_blank">mécanisme de binding de variables Sesame</a> à la valeur du scheme sélectionnée.</p>
<p>Deuxième solution, si le vocabulaire contrôlé n&rsquo;indique aucun concept de premier niveau explicitement, et si donc la première requête ne ramène rien, c&rsquo;est de récupérer les concepts sans parent dans la hiérarchie broader/narrower :</p>
[sql gutter=&nbsp;&raquo;false&nbsp;&raquo;]PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
SELECT DISTINCT ?concept<br />
WHERE {<br />
?concept a skos:Concept .<br />
?concept skos:inScheme ?scheme .<br />
FILTER NOT EXISTS { ?concept skos:broader|^skos:narrower ?parent }<br />
}[/sql]
<p>On utilise la construction SPARQL 1.1 &laquo;&nbsp;FILTER NOT EXISTS&nbsp;&raquo; pour vérifier la non-existence d&rsquo;un lien broader du concept vers un parent, ou bien d&rsquo;un lien narrower d&rsquo;un parent vers le concept (là encore, on est prudent et on teste toutes les possibilités). La variable scheme est bindée à la bonne valeur avec le mécanisme de binding de variables Sesame.</p>
<h2>Quelques requêtes sur les concepts</h2>
<p>Une fois trouvé un concept scheme et les concepts de premier niveau, c&rsquo;est parti pour le traitement des concepts ! on va essentiellement avoir besoin de faire deux choses : premièrement, lire les libellés d&rsquo;un concept :</p>
[sql gutter=&nbsp;&raquo;false&nbsp;&raquo;]PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
SELECT ?label<br />
WHERE {<br />
?concept a skos:Concept .<br />
?concept skos:prefLabel ?label .<br />
FILTER(lang(?label) = &lsquo;fr&rsquo;) .<br />
}[/sql]
<p>On sélectionne les prefLabels dans la langue voulue. Dans l&rsquo;application, on gère un cache de ces libellés pour éviter de les requêter plusieurs fois. On pourrait aussi utiliser l&rsquo;opérateur <a href="http://www.w3.org/TR/sparql11-query/#aggregates" target="_blank">GROUP_CONCAT</a> pour concaténer plusieurs valeurs entre elles (ce qui ne devrait jamais arriver en SKOS pour le prefLabel, tous les concepts devrait avoir au maximum un prefLabel par langue).</p>
<p>Deuxième opération essentielle, naviguer dans la hiérarchie des concepts. Pour cela on exploite les liens skos:broader et skos:narrower :</p>
[sql gutter=&nbsp;&raquo;false&nbsp;&raquo;]PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
SELECT ?narrower<br />
WHERE {<br />
?concept skos:narrower|^skos:broader ?narrower .<br />
?narrower skos:inScheme &lt;http://uri.du.concept.scheme&gt; .<br />
}[/sql]
<p>On retrouve la même combinaison de l&rsquo;opérateur d&rsquo;alternative &lsquo;|&rsquo; et de celui d&rsquo;inverse &lsquo;^&rsquo; pour interroger d&rsquo;un seul coup les broaders et les narrowers. On filtre sur l&rsquo;URI du concept scheme pour s&rsquo;assurer qu&rsquo;on ne sélectionne que les enfants qui restent dans le même ensemble de concepts.</p>
<h2>Un peu plus compliqué !</h2>
<p>L&rsquo;affichage alphabétique du thesaurus dans SKOS Play demande de sélectionner tous les prefLabels et les altLabels, en gardant la correspondance entre un altLabel et le prefLabel pour pouvoir faire un lien, et en prenant en compte les cas où le concept n&rsquo;a pas de libellé dans la langue demandé. Voici cette belle requête :</p>
[sql]PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
SELECT ?label ?prefLabel ?concept<br />
WHERE {<br />
?concept a skos:Concept .<br />
{<br />
{<br />
# les prefLabels des concepts<br />
?concept skos:prefLabel ?label<br />
FILTER(lang(?label) = &lsquo;fr&rsquo;)<br />
} UNION {<br />
# les altLabels et leur pref<br />
?concept skos:altLabel ?label .<br />
?concept skos:prefLabel ?prefLabel .<br />
FILTER(lang(?label) = &lsquo;fr&rsquo; &amp;&amp; lang(?prefLabel) = &lsquo;fr&rsquo;)<br />
} UNION {<br />
# pas de prefLabel dans la langue ! on prend l&rsquo;URI<br />
?concept a skos:Concept .<br />
FILTER NOT EXISTS {<br />
?concept skos:prefLabel ?nopref<br />
FILTER(lang(?nopref) = &lsquo;fr&rsquo;)<br />
BIND(str(?concept) as ?label)<br />
}<br />
}</p>
<p>}<br />
}[/sql]
<p>3 clauses se combinent ici avec UNION pour sélectionner plusieurs cas : lignes 7 à 9, pour sélectionner le prefLabel, sans histoire de &laquo;&nbsp;correspondance&nbsp;&raquo; avec un prefLabel; ligne 11 à 14, pour sélectionner tous les altLabels et leur correspondance avec le prefLabel; ligne 15 à 21, pour traiter le cas où le prefLabel n&rsquo;existe pas dans la langue demandée. On utilise un BIND pour ramener l&rsquo;URI du concept comme un label dans ce cas. Pas mal, non ?</p>
<p>Enfin, je reproduis ici une requête dont SKOS Play ne se sert pas (encore ?) pour faire de l&rsquo;<a href="http://benchadwick.edublogs.org/2012/07/30/a-sparqling-new-autocomplete-algorithm/" target="_blank">autocompletion sur des libellés SKOS</a>, publiée de l&rsquo;autre côté de la terre, quelque part en Australie, par Ben Chadwick qui travaille sur le thesaurus SCOT :</p>
[sql gutter=&nbsp;&raquo;false&nbsp;&raquo;]PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;<br />
SELECT DISTINCT ?uri ?label<br />
WHERE {<br />
?uri a skos:Concept.<br />
?uri skos:prefLabel ?label.<br />
FILTER (lang(?label) = “en”).<br />
?uri skos:prefLabel|skos:altLabel|skos:hiddenLabel ?lab.<br />
FILTER regex (str($lab), “ach”, ‘i’)<br />
FILTER (lang (?lab) = “en”).<br />
BIND (STRLEN(STRBEFORE (str(?lab), “ach”)) AS ?place).<br />
BIND (STRLEN(STR(?lab)) AS ?len)<br />
}<br />
ORDER BY ?place ?len ?lab<br />
LIMIT 10[/sql]
<p>Pratique pour implémenter un composant d&rsquo;autocompletion sur les libellés d&rsquo;un thesaurus.</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2013/07/15/exemples-requetes-sparql-skos/">Exemples de requêtes SPARQL sur le modèle SKOS</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/2013/07/15/exemples-requetes-sparql-skos/feed/</wfw:commentRss>
		<slash:comments>2</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>
		<item>
		<title>Tutoriel : comment installer un serveur RDF Sesame ?</title>
		<link>https://blog.sparna.fr/2012/05/13/tutoriel-comment-installer-un-serveur-rdf-sesame/</link>
		<comments>https://blog.sparna.fr/2012/05/13/tutoriel-comment-installer-un-serveur-rdf-sesame/#comments</comments>
		<pubDate>Sun, 13 May 2012 21:44:13 +0000</pubDate>
		<dc:creator><![CDATA[Thomas Francart]]></dc:creator>
				<category><![CDATA[RDF]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[openrdf sesame tutorial]]></category>

		<guid isPermaLink="false">http://blog.sparna.fr/?p=23</guid>
		<description><![CDATA[<p>On a vu précédemment quelles étaient les différences entre Sesame et Jena. Voyons comment installer un serveur Sesame pour manipuler facilement des données RDF. Pas de fichiers configuration compliqués à éditer, c&#8217;est du facile, et une fois dans l&#8217;interface web d&#8217;administration, vous trouverez tout ce dont vous avez besoin : ajouter des fichiers RDF, faire&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2012/05/13/tutoriel-comment-installer-un-serveur-rdf-sesame/">Tutoriel : comment installer un serveur RDF Sesame ?</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-28" title="sesame" alt="sesame" src="http://blog.sparna.fr/wp-content/uploads/2012/05/index.jpeg" width="77" height="77" /></p>
<p>On a vu précédemment quelles étaient les <a href="http://blog.sparna.fr/rdf-sesame-jena-comparaison-des-fonctionnalites/">différences entre Sesame et Jena</a>. Voyons comment installer un serveur Sesame pour manipuler facilement des données RDF. Pas de fichiers configuration compliqués à éditer, c&rsquo;est du facile, et une fois dans l&rsquo;interface web d&rsquo;administration, vous trouverez tout ce dont vous avez besoin : ajouter des fichiers RDF, faire une query SPARQL, naviguer dans les données, etc.</p>
<p><span id="more-23"></span></p>
<p><strong>Première partie : Installer le serveur</strong></p>
<ol>
<li>Prérequis : Java doit être installé sur votre machine.</li>
<li>Téléchargez Sesame en suivant les liens de téléchargement depuis <a title="openrdf.org" href="http://www.openrdf.org" target="_blank">http://www.openrdf.org</a> (version 2.6.5 au moment de l&rsquo;écriture de ces lignes) et en prenant le fichier nommé openrdf-sesame-x.y.z-sdk.zip</li>
<li>Téléchargez Tomcat en suivant les liens de téléchargement depuis <a href="http://tomcat.apache.org/" target="_blank">http://tomcat.apache.org/</a> (version 7.0.27 au moment de l&rsquo;écriture de ces lignes). Sous « Binary Distribution &gt; Core », choisissez le format zip.</li>
<li>Dézippez le fichier apache-tomcat-a.b.c.zip dans le répertoire de votre choix.</li>
<li>Dézippez le fichier openrdf-sesame-x.y.z-sdk.zip dans le répertoire de votre choix.</li>
<li>Copiez les fichiers openrdf-sesame-x.y.z/war/openrdf-sesame.war et openrdf-sesame-x.y.z/war/openrdf-workbench.war dans le répertoire apache-tomcat-a.b.c/webapps</li>
<li>Démarrez Tomcat à l&rsquo;aide des commandes apache-tomcat-a.b.c/bin/startup.bat (ou .sh)</li>
<li>Accédez dans votre navigateur à l&rsquo;adresse <a href="http://localhost:8080/openrdf-workbench">http://localhost:8080/openrdf-workbench</a> : c&rsquo;est la console web d&rsquo;administration de Sesame.</li>
</ol>
<p><strong>Deuxième partie : Paramétrer un entrepôt RDF</strong></p>
<ol>
<li>Dans la console d&rsquo;administration, cliquez sur « New Repository » en haut à gauche ;</li>
<li>Dans le menu qui s&rsquo;affiche, sélectionnez « In Memory Store », et donnez un ID et un titre à votre repository, par exemple « Test » et « Mon repository de test » ; c&rsquo;est dans cet écran que vous pouvez choisir le mode de stockage du repository, dans une base, dans des fichiers, etc. Si vous avez besoin de stocker le RDF dans une base de données, c&rsquo;est ici que ça doit se faire. Pour le moment, on va garder le RDF en mémoire, avec une synchronisation dans un fichier pour ne pas perdre les données en cas d&rsquo;arrêt du serveur. Cliquez sur Next ;</li>
<li>Le formulaire affiche maintenant les champs « Persist Yes/No » et « Sync Delay » ; Laissez « Persist » à « Yes », et rentrez la valeur « 100 » pour « Sync Delay » ; cliquez sur Create ;</li>
<li>Le repository est créé et vous avez maintenant accès aux fonctions d&rsquo;admin sur la gauche, notamment « Add » pour uploader des données RDF; allez-y, vous pouvez uploader un fichier de données RDF !</li>
</ol>
<p><span style="text-decoration: underline;">Important </span>: il faut bien comprendre que le repository Sesame est maintenant accessible comme un endpoint SPARQL. Le serveur sesame donne <span style="text-decoration: underline;">de base</span> accès aux données des repository comme des endpoints. L&rsquo;URL du repository/endpoint est indiquée dans l&rsquo;interface d&rsquo;administration et est http://localhost:8080/openrdf-sesame/repositories/&lt;ID_du_repository&gt; (<a href="http://localhost:8080/openrdf-sesame/repositories/Test">http://localhost:8080/openrdf-sesame/repositories/Test</a> si vous l&rsquo;avez appelé Test). On se servira de cette URL pour accéder au repository via les API Sesame.</p>
<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=a6c263cb-2b9f-4341-87f5-92488d770ca8" /></div>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2012/05/13/tutoriel-comment-installer-un-serveur-rdf-sesame/">Tutoriel : comment installer un serveur RDF 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/13/tutoriel-comment-installer-un-serveur-rdf-sesame/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>RDF : Sesame, Jena, comparaison des fonctionnalités</title>
		<link>https://blog.sparna.fr/2012/05/08/rdf-sesame-jena-comparaison-des-fonctionnalites/</link>
		<comments>https://blog.sparna.fr/2012/05/08/rdf-sesame-jena-comparaison-des-fonctionnalites/#comments</comments>
		<pubDate>Tue, 08 May 2012 22:02:27 +0000</pubDate>
		<dc:creator><![CDATA[Thomas Francart]]></dc:creator>
				<category><![CDATA[OWL]]></category>
		<category><![CDATA[RDF]]></category>
		<category><![CDATA[SPARQL]]></category>
		<category><![CDATA[Triplestores]]></category>
		<category><![CDATA[sesame jena comparison]]></category>

		<guid isPermaLink="false">http://blog.sparna.fr/?p=14</guid>
		<description><![CDATA[<p>&#160; Dans le monde des développeurs d&#8217;applications basées sur le web sémantique, il y a 2 grandes écoles en ce qui concerne les triplestores : les adeptes de Jena, et ceux de Sesame. Personnellement j&#8217;ai un faible pour Sesame. Sesame propose des fonctionnalités proches de Jena, moins complètes, mais sans doute un peu plus facile&#8230;</p>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2012/05/08/rdf-sesame-jena-comparaison-des-fonctionnalites/">RDF : Sesame, Jena, comparaison des fonctionnalités</a> est apparu en premier sur <a rel="nofollow" href="https://blog.sparna.fr">Sparna Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Dans le monde des développeurs d&rsquo;applications basées sur le web sémantique, il y a 2 grandes écoles en ce qui concerne les triplestores : les adeptes de <a href="http://incubator.apache.org/jena" target="_blank">Jena</a>, et ceux de <a href="http://www.openrdf.org/" target="_blank">Sesame</a>.</p>
<p>Personnellement j&rsquo;ai un faible pour Sesame. Sesame propose des fonctionnalités proches de Jena, moins complètes, mais sans doute un peu plus facile à intégrer ; la philosophie de son API est différente, et, s&rsquo;il s&rsquo;agit de faire simplement de la manipulation de données RDF (sans inférence compliquée, sans gestion d&rsquo;ontologie OWL), le choix entre les deux est essentiellement une question de goût ! Son interface web d&rsquo;administration vous facilitera par contre énormément le travail s&rsquo;il s&rsquo;agit de configurer rapidement un triplestore et de charger des données RDF dedans.</p>
<p>On donne ci-dessous un tableau comparatif des fonctionnalités entre Jena et Sesame, au 1er mai 2012 ; il faut noter que, là où Jena propose d&rsquo;emblée un certain nombre de modules avec beaucoup de fonctionnalités, pour Sesame ces fonctionnalités peuvent être présentes dans l&rsquo; &laquo;&nbsp;écosystème&nbsp;&raquo; autour de Sesame : <a href="http://www.ontotext.com/owlim" target="_blank">OWLIM</a> ou <a href="http://www.openrdf.org/alibaba.jsp" target="_blank">Ali Baba.</a></p>
<p><span id="more-14"></span></p>
<table cellspacing="0" cellpadding="4">
<tbody>
<tr valign="TOP">
<td style="width: 33%;">
<p align="CENTER"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;"><strong>Fonctionnalité</strong></span></span></p>
</td>
<td style="width: 33%;">
<p align="CENTER"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;"><strong>Sesame 2.6.5</strong></span></span></p>
</td>
<td width="206">
<p align="CENTER"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;"><strong>Jena (core 2.7.0-incubating, IRI 0.9.0-incubating, ARQ 2.9.0-incubating, TDB 2.9.0-incubating)</strong></span></span></p>
</td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Existe depuis</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">2004</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">2000</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Licence</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">BSD-style (http://www.opensource.org/licenses/BSD-3-Clause)</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Apache (http://www.apache.org/licenses/LICENSE-2.0)</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Mis à jour régulièrement</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr style="background-color: #d2b48c;">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;"><em><strong>Entrées/Sorties</strong></em></span></span></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Entrées/Sorties aux formats RDF/XML, N3, Turtle, N-Triples</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Entrées/Sorties en TriG, TriX</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Sortie en RDF/XML-ABBREV</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr style="background-color: #d2b48c;">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;"><em><strong>SPARQL</strong></em></span></span></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Query en SPARQL 1.0</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Query en SPARQL 1.1</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">SPARQL Update</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Autres langages de requêtes supportés ?</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">SeRQL</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Création de requêtes SPARQL programmatiquement</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (package org.openrdf.query.parser.sparql.ast)</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (module ARQ)</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Serveur SPARQL</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (de base à travers le serveur Sesame)</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (module Fuseki)</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Utilitaire en ligne de commande pour executer une requête SPARQL</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui, via la commande « console »</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Indexation plein texte des données du graphe RDF par Lucene</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non, mais possible en utilisant Ali-Baba ou l&rsquo;extension « LuceneSail » : <a href="http://dev.nepomuk.semanticdesktop.org/wiki/LuceneSail">http://dev.nepomuk.semanticdesktop.org/wiki/LuceneSail</a></span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui, module LARQ</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr style="background-color: #d2b48c;">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;"><em><strong>Gestion du RDF</strong></em></span></span></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Gestion du RDF en mémoire</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Stockage RDF dans une base relationnelle</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (module SDB)</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Stockage RDF dans des fichiers binaires</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (Native RDF repository)</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (module TDB)</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Support des graphes nommés</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Support des transactions (commit, rollback)</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Paramétrage de graphes RDF via un fichier de configuration</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (module Assembler)</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr style="background-color: #d2b48c;">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;"><em><strong>Inférence</strong></em></span></span></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Inférence RDFS native</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Inférence OWL-Lite native</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non, mais possible en utilisant OWLIM</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Inférence OWL-DL</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non, mais possible en utilisant OWLIM</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non, mais possible en connectant le moteur Pellet</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Inférence à base de règles</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non, mais possible en utilisant OWLIM</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr style="background-color: #d2b48c;">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;"><em><strong>OWL</strong></em></span></span></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">API de manipulation OWL et RDFS : manipulation des classes, propriétés, domain, ranges, restrictions, etc.</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui, natif</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr style="background-color: #d2b48c;">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;"><em><strong>Administration</strong></em></span></span></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Interface utilisateur d&rsquo;administration : créer un stockage RDF, ajouter des données, naviguer, etc.</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (sesame-workbench)</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr style="background-color: #d2b48c;">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;"><em><strong>Divers</strong></em></span></span></td>
<td width="206"></td>
<td width="206"></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Mécanisme de listeners pour monitorer les événements sur le RDF</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Génération de fichiers de constantes Java à partir d&rsquo;une ontologie</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non, mais possible en utilisant Ali-Baba</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (module schemagen)</span></span></td>
</tr>
<tr valign="TOP">
<td style="width: 33%;"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Utilitaire de vérification de données RDF</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Non</span></span></td>
<td width="206"><span style="font-family: Liberation Serif,serif;"><span style="font-size: small;">Oui (module eyeball)</span></span></td>
</tr>
</tbody>
</table>
<div></div>
<div></div>
<div>Et vous, quelle fonctionnalité de manipulation de RDF utilisez-vous le plus ?</div>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="float: right;" src="http://img.zemanta.com/pixy.gif?x-id=d0ef5d77-c00c-44cb-8472-1a583b146175" alt="" /></div>
<p>Cet article <a rel="nofollow" href="https://blog.sparna.fr/2012/05/08/rdf-sesame-jena-comparaison-des-fonctionnalites/">RDF : Sesame, Jena, comparaison des fonctionnalités</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/08/rdf-sesame-jena-comparaison-des-fonctionnalites/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
