{"id":69,"date":"2008-04-21T14:34:31","date_gmt":"2008-04-21T13:34:31","guid":{"rendered":"http:\/\/loicmathieu.free.fr\/wordpress\/?p=69"},"modified":"2013-01-04T20:05:22","modified_gmt":"2013-01-04T18:05:22","slug":"rdf-et-la-forme-n3","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/rdf-et-la-forme-n3\/","title":{"rendered":"RDF et la forme N3"},"content":{"rendered":"<p>Bonjour, au menu ajourd&rsquo;hui: RDF et la forme N3, avec quelques exemples en JAVA avec l&rsquo;aide du framework Jena.<\/p>\n<h2>D\u00e9finition<\/h2>\n<p>Bon, je pense qu&rsquo;une petite d\u00e9finition de ces termes barbare s&rsquo;impose:<\/p>\n<ul><li>RDF: <strong>Resource Description Framework.<\/strong> Difficile d&rsquo;expliquer en quelque mots ce que veut dire RDF! C&rsquo;est une repr\u00e9sentation de donn\u00e9es d\u00e9finie pour \u00eatre utilis\u00e9 sur le web. Le format utilis\u00e9 peut \u00eatre divers (N3, XML, &#8230;) Il est bas\u00e9 sur un ensemble de triplet<strong><em> sujet, pr\u00e9dicat, object. <\/em><\/strong>(on pourrait dire <em>sujet, verbe, compl\u00e9ment<\/em>)\n<ul><li>Le sujet repr\u00e9sente la <a class=\"mw-redirect\" title=\"Ressource (Web)\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Ressource_%28Web%29\">ressource<\/a> \u00e0 d\u00e9crire.<\/li>\n\n<li>Le pr\u00e9dicat repr\u00e9sente un type de propri\u00e9t\u00e9 applicable \u00e0 cette ressource<\/li>\n\n<li>L&rsquo;objet repr\u00e9sente une donn\u00e9e ou une autre ressource<\/li>\n<\/ul>\nLe sujet, et l&rsquo;objet dans le cas o\u00f9 c&rsquo;est une ressource, peuvent \u00eatre identifi\u00e9s par une <a class=\"mw-redirect\" title=\"URI\" href=\"http:\/\/fr.wikipedia.org\/wiki\/URI\">URI<\/a> ou \u00eatre des <a class=\"mw-redirect\" title=\"N\u0153ud anonyme\" href=\"http:\/\/fr.wikipedia.org\/wiki\/N%C5%93ud_anonyme\">n\u0153uds anonymes<\/a>. Le pr\u00e9dicat est n\u00e9cessairement identifi\u00e9 par une <a class=\"mw-redirect\" title=\"URI\" href=\"http:\/\/fr.wikipedia.org\/wiki\/URI\">URI<\/a>.\nRDF n&rsquo;a pas de syntaxe pr\u00e9cise, c&rsquo;est une repr\u00e9sentation en graphe qui peut \u00eatre mis en oeuvre par diverse syntaxe (N3, XML) ce qui permet une abstraction au niveau de l&rsquo;expression et une meilleur interop\u00e9rabilit\u00e9.<\/li>\n\n<li>N3 : <strong>Notation 3.<\/strong> Une des formes d&rsquo;\u00e9criture du RDF qui utilise de simple triplets texte s\u00e9par\u00e9s par des &lsquo;.&rsquo;\nsujet predicat complement.\nsujet predicat complement.<\/li>\n\n<li>SPARQL : language de requ\u00eatage inspir\u00e9 de SQL qui permet d&rsquo;int\u00e9rroger des donn\u00e9es RDF.Tr\u00e9s proches de la Notation 3 du RDF et donc tr\u00e8s simple d&rsquo;utilisation.<\/li>\n\n<li>Jena : framework Java pour le web s\u00e9mentique int\u00e9grant entre autre les technologies RDF et SPARQL<\/li>\n<\/ul>\n<h2>Exemple de RDF-N3 en Java en utilisant Jena<!--more--><\/h2>\n<h3>Fichier RDF-N3 d&rsquo;exemple:<\/h3>\n<p><code>\n@prefix rdf: &lt;&lt;a href=&quot;http:\/\/www.w3.org\/1999\/02\/22-rdf-syntax-ns#&amp;gt&quot;&gt;http:\/\/www.w3.org\/1999\/02\/22-rdf-syntax-ns#&amp;gt&lt;\/a&gt;; .\n@prefix Ex: &lt;&lt;a href=&quot;http:\/\/www.societe.com\/Exemple#&amp;gt&quot;&gt;http:\/\/www.societe.com\/Exemple#&amp;gt&lt;\/a&gt;; .<\/code><\/p>\n<p>&lt;<a href=\"http:\/\/www.companie.com\/companie1&amp;gt\">http:\/\/www.companie.com\/companie1&amp;gt<\/a>; Ex:is \u00ab\u00a0Companie\u00a0\u00bb .\n&lt;<a href=\"http:\/\/www.companie.com\/companie2&amp;gt\">http:\/\/www.companie.com\/companie2&amp;gt<\/a>; Ex:is \u00ab\u00a0Companie\u00a0\u00bb .\n&lt;<a href=\"http:\/\/www.companie.com\/immeuble1&amp;gt\">http:\/\/www.companie.com\/immeuble1&amp;gt<\/a>; Ex:is \u00ab\u00a0Immeuble1\u00a0\u00bb .\n&lt;<a href=\"http:\/\/www.companie.com\/immeuble2&amp;gt\">http:\/\/www.companie.com\/immeuble2&amp;gt<\/a>; Ex:is \u00ab\u00a0Immeuble2\u00a0\u00bb .\n&lt;<a href=\"http:\/\/www.companie.com\/immeuble3&amp;gt\">http:\/\/www.companie.com\/immeuble3&amp;gt<\/a>; Ex:is \u00ab\u00a0Immeuble3\u00a0\u00bb .<\/p>\n<p>&lt;<a href=\"http:\/\/www.companie.com\/companie1&amp;gt\">http:\/\/www.companie.com\/companie1&amp;gt<\/a>; Ex:has &lt;<a href=\"http:\/\/www.companie.com\/immeuble1&amp;gt\">http:\/\/www.companie.com\/immeuble1&amp;gt<\/a>; .\n&lt;<a href=\"http:\/\/www.companie.com\/companie1&amp;gt\">http:\/\/www.companie.com\/companie1&amp;gt<\/a>; Ex:has &lt;<a href=\"http:\/\/www.companie.com\/immeuble2&amp;gt\">http:\/\/www.companie.com\/immeuble2&amp;gt<\/a>; .\n&lt;<a href=\"http:\/\/www.companie.com\/companie2&amp;gt\">http:\/\/www.companie.com\/companie2&amp;gt<\/a>; Ex:has &lt;<a href=\"http:\/\/www.companie.com\/immeuble3&amp;gt\">http:\/\/www.companie.com\/immeuble3&amp;gt<\/a>; .<\/p>\n<ol><li>La premi\u00e8re partie d\u00e9finie les pr\u00e9fixes utilis\u00e9 dans le RDF, ces pr\u00e9fixes permettent de d\u00e9finir des espace de nommage (namespace) pour les pr\u00e9dicats utilis\u00e9. Le premier pr\u00e9fixe obligatoire \u00e9tant celui du RDF, je d\u00e9fini ensuite un pr\u00e9fixe pour mon exemple (le pr\u00e9fixe <strong>Ex<\/strong>)<\/li>\n\n<li>La deuxi\u00e8me partie d\u00e9finie mes diff\u00e9rents objet, je d\u00e9finie ici deux companie et trois immeubles. Le pr\u00e9dicat utilis\u00e9 est Ex:is pour d\u00e9finir ce qu&rsquo;est un objet (ici, Companie ou Immeuble), cela me permet en quelque sorte de typ\u00e9 mes objet.<\/li>\n\n<li>La troisi\u00e8me partie d\u00e9finie les liens entre les objet, j&rsquo;utilise pour cela le pr\u00e9dicat &lsquo;Ex:has&rsquo; pour dire l&rsquo;appartenance d&rsquo;un immeuble \u00e0 une companie.<\/li>\n<\/ol>\n<p>On peut remarque deux choses importante, chaque objet est d\u00e9finie par une URI unique d\u00e9finie entre les charact\u00e8re , et chaque ligne est termin\u00e9e par un &lsquo;.&rsquo;<\/p>\n<h3>Chargement du fichier N3 en JAVA gr\u00e2ce \u00e0 Jena<\/h3>\n<p><code>\nModel model = ModelFactory.createDefaultModel();\nInputStream is = FileManager.get().open( &quot;ex.n3&quot; );\nmodel.read(is, &quot;&quot;, &quot;N3&quot;);\n<\/code>\nJena offre tout ce qu&rsquo;il faut pour tr\u00e8s rapidement cr\u00e9er un model bas\u00e9 sur un fichier n3 tel que celui d\u00e9finit dans la partie pr\u00e9c\u00e9dente. Le code s&rsquo;\u00e9xplique de lui-m\u00eame, on cr\u00e9er un nouveau lmodel, on charge le fichier dans un InputStream, on dit au model de lire l&rsquo;InputStream en lui pr\u00e9cisant que c&rsquo;est du type N3 (Jena acc\u00e8pte beaucoup d&rsquo;autres type de RDF : RDF-XML, OWL, &#8230;)<\/p>\n<h3>Requ\u00eatage en SPARQL gr\u00e2ce \u00e0 Jena<\/h3>\n<p><code>\nString queryString = &quot;SELECT ?x WHERE { ?x Ex:is   \\&quot;Immeuble\\&quot; . &quot;&lt;\/p&gt;\n&lt;ul&gt;\n&lt;li&gt;&quot; &lt;&lt;a href=&quot;http:\/\/www.companie.com\/companie1&amp;gt&quot;&gt;http:\/\/www.companie.com\/companie1&amp;gt&lt;\/a&gt;; Ex:has ?x}&quot;;\nQuery query = QueryFactory.create(queryString) ;\nQueryExecution qexec = QueryExecutionFactory.create(query, model) ;\ntry\n{\nResultSet results = qexec.execSelect() ;\nResultSetFormatter.out(System.err, results, query) ;\n}\nfinally { qexec.close() ; }\n<\/code>\nIci in d\u00e9finie tout d&rsquo;abord le requ\u00eate SPARQL. On fait une recherche d&rsquo;un \u00e9l\u00e9ment que nous appelons ?x, cet \u00e9l\u00e9ment est d\u00e9finie de la sorte:<\/li>\n<\/ul>\n<ul><li>il est un Immeuble : <em>?x Ex:is \u00ab\u00a0Immeuble\u00a0\u00bb<\/em><\/li>\n\n<li>il appartient \u00e0 companie1 : <em> Ex:has ?x<\/em><\/li>\n<\/ul>\n<p>Les deux crit\u00e8re sont s\u00e9par\u00e9 par des &lsquo;.&rsquo; qui forment des ET logique, la clause WHERE de la requ\u00eate SPARQL \u00e9tant directement du RDF o\u00f9 on a remplac\u00e9 ce que l&rsquo;on cherche par ?x<\/p>\n<p>Pour finir, on interroge le model puis on r\u00e9cup\u00e8re un ResultSet que l&rsquo;on pourra ensuite it\u00e9rer pour en lire tout les r\u00e9sultats. Globalement, tout ceci est tr\u00e8s proche de l&rsquo;utilisation du SQL en JDBC et donc la pluspart des d\u00e9veloppeur JAVA ne devrait avoir aucun probl\u00e8me avec ceci.<\/p>\n<h2>Resources<\/h2>\n<ul><li>RDF sur wikipedia : <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Resource_Description_Framework\" target=\"_blank\">http:\/\/fr.wikipedia.org\/wiki\/Resource_Description_Framework<\/a><\/li>\n\n<li>N3 sur le W3C : <a href=\"http:\/\/www.w3.org\/DesignIssues\/Notation3.html\" target=\"_blank\">http:\/\/www.w3.org\/DesignIssues\/Notation3.html<\/a><\/li>\n\n<li>SPARQL sur wikipedia: <a href=\"http:\/\/fr.wikipedia.org\/wiki\/SPARQL\" target=\"_blank\">http:\/\/fr.wikipedia.org\/wiki\/SPARQL<\/a><\/li>\n\n<li>Site officiel de Jena : <a href=\"http:\/\/jena.sourceforge.net\/\" target=\"_blank\">http:\/\/jena.sourceforge.net\/<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Bonjour, au menu ajourd&rsquo;hui: RDF et la forme N3, avec quelques exemples en JAVA avec l&rsquo;aide du framework Jena. D\u00e9finition Bon, je pense qu&rsquo;une petite d\u00e9finition de ces termes barbare s&rsquo;impose: RDF: Resource Description Framework. Difficile d&rsquo;expliquer en quelque mots ce que veut dire RDF! C&rsquo;est une repr\u00e9sentation de donn\u00e9es d\u00e9finie pour \u00eatre utilis\u00e9 sur le web. Le format utilis\u00e9 peut \u00eatre divers (N3, XML, &#8230;) Il est bas\u00e9 sur un ensemble de triplet sujet, pr\u00e9dicat, object. (on pourrait dire&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/rdf-et-la-forme-n3\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[151,11,39,31,14],"class_list":["post-69","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-informatique","tag-java","tag-n3","tag-rdf","tag-web"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":73,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/owl-language-rdf-d-ontologie\/","url_meta":{"origin":69,"position":0},"title":"OWL &#8211; language RDF d&rsquo;ontologie","author":"admin","date":"mercredi 28 mai 2008","format":false,"excerpt":"Introduction OWL est vraiment un gros morceau! Et la notion d'ontologie (ou ontology si on utilise le terme anglais) web aussi. Bien sur il existe de nombreux articles, la plupart r\u00e9dig\u00e9s en anglais, sur ce domaine et la plupart totalement obscure. En fait, quand j'ai commenc\u00e9 \u00e0 travailler sur OWL,\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"Cr\u00e9ation d'une ontologie OWL avec prot\u00e9g\u00e9 - \u00e9tape 1","src":"https:\/\/i0.wp.com\/loicmathieu.free.fr\/wordpress\/wp-content\/uploads\/owl-protege-1.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":92,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/rest-architecture-orientee-ressource\/","url_meta":{"origin":69,"position":1},"title":"REST &#8211; Architecture Orient\u00e9e Ressource","author":"admin","date":"mercredi 25 mars 2009","format":false,"excerpt":"Au menu aujourd'hui, un sujet tr\u00e8s tendance: REST. Abord\u00e9\u00a0 par le biais de l'Architecture Orient\u00e9 Ressource (ou ROA: Resource Oriented Architecture), autrement dit, comment cr\u00e9er une architecture de service bas\u00e9 sur REST. D\u00e9finitions Comme toujours, commen\u00e7ons par quelques d\u00e9finitions. Je vais les faire assez th\u00e9orique sinon apr\u00e8s, il ne me\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":269,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/implementer-une-architecture-de-service-web-restfull-avec-restlet-et-son-extention-spring\/","url_meta":{"origin":69,"position":2},"title":"Implementer une architecture de service web RESTfull avec Restlet et son extention Spring","author":"admin","date":"jeudi 10 septembre 2009","format":false,"excerpt":"Cet article fait suite mon article REST - Architecture Orient\u00e9e Ressource en lui donnant une impl\u00e9mentation bas\u00e9 sur le framework Restlet. Le principe de Restlet : Restlet est un framework Java 5.0 qui ob\u00e9it aux standard RESTful et permet de cr\u00e9er facilement des application RESTful. Il remplace la sp\u00e9cification J2EE\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":64,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/convention-over-configuration\/","url_meta":{"origin":69,"position":3},"title":"convention over configuration","author":"admin","date":"mercredi 19 d\u00e9cembre 2007","format":false,"excerpt":"\"Convention over Configuration\" (on trouve parfois une traduction par \"convention plut\u00f4t que configuration), ce design pattern (ou patron de conception, pour faire plaisir aux francophones intransigeant) est un des plus int\u00e9r\u00e9ssant de ceux \u00e0 la mode en ce moment. Le principe en est tr\u00e8s simple: les applications se basent sur\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":19,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/ruby-on-rails\/","url_meta":{"origin":69,"position":4},"title":"Ruby on Rails","author":"admin","date":"jeudi 15 f\u00e9vrier 2007","format":false,"excerpt":"Bonjour, d'habitude au ton bucolique des vacances ou revendicatif des coups de gueules, aujourd'hui le ton de ce post va \u00eatre technophile. En effet, je bosse dans l'informatique qui est donc un de mes centre d'int\u00e9r\u00eat, et je vous livre ici mon premier message sur les nouvelles technologies. J'ai tester\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":566,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/chti-jug-lili-et-cassandra\/","url_meta":{"origin":69,"position":5},"title":"Ch&rsquo;ti JUG : Lili et Cassandra","author":"admin","date":"jeudi 15 d\u00e9cembre 2011","format":false,"excerpt":"Le 12 d\u00e9cembre s'est tenu dans les locaux de l'IUT A de Lille une session du Ch'ti JUG sur Lili et Cassandra deux outils autour des bases de donn\u00e9es NoSql. La pr\u00e9sentation de Lili a \u00e9t\u00e9 faite par Stevens Noel et celle sur Cassandra par J\u00e9r\u00e9my Sevellec. Ayant d\u00e9j\u00e0 \u00e9crit\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/69","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=69"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/69\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=69"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=69"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=69"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}