Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

22
Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

description

Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010. Présentation de la formation. Objectif : découvrir les technologies du Web sémantique tant du point de vue théorique que pratique. Jour 3. Jour 1. Jour 2. Aspect théorique et Web de données. PHP et - PowerPoint PPT Presentation

Transcript of Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

Page 1: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

Formation aux technologies du Web sémantiqueCCSD, Lyon, 8-10 septembre 2010

Page 2: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

2

Présentation de la formation

Objectif : découvrir les technologies du Web sémantique tant du point de vue théorique que pratique

Jour 1

Aspect théoriqueet

Web de données

Jour 2

Aspect pratiqueet

Ontologie

Jour 3

PHPet

Web sémantique

Page 3: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

3

Plan de la journée

Sélection ettraitement des triplets

Préparerl’environnement

Gestion destriplets

Page 4: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

4

Préparer l’environnement

Télécharger ARC sur le site http://arc.semsol.org

Créer une base de données MySQL et, éventuellement, un utilisateur dédié avec les droits de création des tables

Créer un nouveau répertoire dans votre espace Web et placer le répertoire « arc »

Page 5: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

5

Configurer ARC

<?php

/* Fichier de configuration pour ARC 2 */$arc_config = array(

/* Configuration de l'accès à la base de données MySQL */ 'db_host' => '', /* Domaine de la base de données ; par défaut : localhost */ 'db_name' => '', /* Nom de la base de données */ 'db_user' => '', /* Nom de l'utilisateur de la base de données */ 'db_pwd' => '', /* Mot de passe de l'utilisateur de la base de données */ /* Nom de l'entrepôt RDF Cela permet de créer plusieurs entrepôts distincts avec la même base de données */ 'store_name' => '', /* Nombre d'erreurs maximums avant l'arrêt d'un script 'max_errors' => 100, */ /* Configuration complémentaire en cas de présence d'un proxy 'proxy_host' => '192.168.1.1', 'proxy_port' => 8080, */ /* Préfixe pour les nœuds blancs 'bnode_prefix' => 'bn', */ /* Formats supportés par l'extracteur de données structurées dans les pages Web */ 'sem_html_formats' => 'rdfa microformats',);?>

Page 6: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

6

Principes de fonctionnement de ARC

Simulation d’un triple storeavec BD Mysql

Toutes les interactions avec la base de données MySQL se font en SPARQL

Depuis l’extérieur via un sparql endpoint

Ou directement via des méthodes PHP

Convertisseur SPARQL To SQL

SPARQL

SPARQL

Page 7: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

7

Configurer le SPARQL endpoint

<?php include_once('arc/ARC2.php'); include_once('config.php');

/* Compléments par rapport à la configuration initiale */ $config = $arc_config + array (

/* Type de requêtes supportés par le sparql endpoint */ 'endpoint_features' => array( 'select', 'construct', 'ask', 'describe', 'load', 'insert', 'delete', 'dump' /* dump is a special command for streaming SPOG export */ ), 'endpoint_timeout' => 60, /* Temps maximal d'exécution */ 'endpoint_read_key' => '', /* Facultatif : définition d'une clé pour effectuer une requête de lecture */ 'endpoint_write_key' => 'somekey', /* Facultatif : définition d'une clé pour effectuer une requête d'écriture */ 'endpoint_max_limit' => 250, /* Facultatif : Nombre maximal de résultat */ );

/* Instantiation d'un sparql endpoint */ $ep = ARC2::getStoreEndpoint($config);

/* Création des tables ARC dans la base si elle n'existe pas */ if (!$ep->isSetUp()) { $ep->setUp(); } /* Méthode pour déclarer le sparql endpoint */ $ep->go();?>

Page 8: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

Plan de la journée

Sélection ettraitement des triplets

Préparerl’environnement

Gestion destriplets

Page 9: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

9

Le principe des graphes nommés

1

23

45

6

7

8

Chaque triplet étant indépendant, comment rassembler un ensemble cohérent de triplets ?

Principe du graphe nommé

Le graphe nommé

<Sujet1> <Prédicat1> <Objet1> <Graphe1><Sujet2> <Prédicat2> <Objet2> <Graphe1>

Ressource pour relier différents graphes

Quadruplet

• Gérer un ensemble de triplets (suppression, ajout, modification)• Indiquer la provenance d’un ensemble de triplets• Exprimer la confiance sur un ensemble de triplets

Le principe des graphes nommées est présent dans SPARQL, mais pas encore officiellement dans RDF la syntaxe RDF/XML ne permet pas de l’exprimer

Page 10: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

10

SPARQL Update

LOAD

LOAD <http://example.com/>

INSERT INTO <http://example.com/inferred> { ?s foaf:knows ?o .} WHERE { ?s xfn:contact ?o .}

INSERT INTO <http://example.com/> { <#foo> <bar> "baz" . }

Charger un flux RDF (quelque soit sa syntaxe) accessible à l’URI indiqué. S’il s’agit d’une page HTML, ARC détecte les microformats, microdatas et RDFa et en extrait les triplets RDF.

Syntaxe

Dans ce cas, l’URI chargé est aussi l’URI du graphe nommé

INSERTInsérer un ensemble de triplets dans un graphe nommé

Syntaxe

Il est aussi possible d’ajouter des triplets construits à partir de triplets existants.

Dans ce cas, les triplets exprimés sont insérés dans le graphe nommé précisé

LOAD <http://example.com/> INTO <http://example.com/archive>

Dans ce cas, les triplets sont associés au graphe nommé précisé

Page 11: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

11

SPARQL Update

DELETESupprimer des triplets RDF

Syntaxe

DELETE { <#foo> <bar> "baz" . }

Dans ce cas, les triplets exprimés seront supprimés

DELETE FROM <http://example.com/archive>

Dans ce cas, tous les triplets associés au graphe nommé seront supprimés

DELETE FROM <http://example.com/inferred> { ?s rel:wouldLikeToKnow ?o .} WHERE { ?s kiss:kissed ?o .}Il est aussi possible de supprimer des triplets à partir de s contraintes exprimées via d’autres triplets

Ces opérations sont en cours de normalisation dans le cadre de SPARQL 1.1. La syntaxe peut donc encore légèrement variée.

Page 12: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

12

LOAD : Charger des triplets

<?php$url=$_GET['url'];include_once('arc/ARC2.php');include_once('config.php');

/*Instantiation*/$store = ARC2::getStore($arc_config);

/*Si les tables ne sont pas crées, création des tables */if (!$store->isSetUp()) { $store->setUp();}

/* Chargement du flux distant */if (isset($url)) { $load="LOAD <".$url.">"; if ($rows = $store->query($load)) { $added_triples = $rows['result']['t_count']; echo $added_triples." triplets ont &eacute;t&eacute; ajout&eacute;s<br/>"; }}else { print "Vous n'avez pas saisi d'URL &agrave; charger";}?>

Renvoie un tableau

Exploitation du tableau

Page 13: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

13

Plan de la journée

Sélection ettraitement des triplets

Préparerl’environnement

Gestion destriplets

Page 14: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

14

SELECT : effectuer une requête

<?php include_once('arc/ARC2.php'); include_once('config.php');

/* Instantiation de l'entrepôt à partir de la configuration */ $store=ARC2::getStore($arc_config); /*Si les tables ne sont pas crées, création des tables */ if (!$store->isSetUp()) { $store->setUp(); }

$query="PREFIX skos: <http://www.w3.org/2004/02/skos/core#> SELECT DISTINCT ?s ?nom WHERE { ?s skos:subject <http://dbpedia.org/resource/Category:Star_Wars_characters>; rdfs:label ?nom. FILTER (lang(?nom)='fr') }";

$res=$store->query($query); if($store->getErrors()) { print_r($store->errors); echo "***\nQuery = $query"; } else { print_r($res); }?>

Page 15: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

15

Le tableau de réponse

Array( [query_type] => select [result] => Array ( [variables] => Array ( [0] => s [1] => nom )

[rows] => Array ( [0] => Array ( [s] => http://dbpedia.org/resource/Anakin_Skywalker [s type] => uri [nom] => Anakin Skywalker [nom type] => literal [nom lang] => fr ) [1] => Array ( [s] => http://dbpedia.org/resource/Luke_Skywalker [s type] => uri [nom] => Luke Skywalker [nom type] => literal [nom lang] => fr ) ) ) [query_time] => 0.17298412322998)

Page 16: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

16

Exploiter le tableau de réponses

<?php

/* [SNIP] */

$query="PREFIX skos: <http://www.w3.org/2004/02/skos/core#> SELECT DISTINCT ?s ?nom WHERE { ?s skos:subject <http://dbpedia.org/resource/Category:Star_Wars_characters>; rdfs:label ?nom. FILTER (lang(?nom)='fr') }";

$res=$store->query($query); if($store->getErrors()) { print_r($store->errors); echo "***\nQuery = $query"; } else { print "<ul>"; foreach ($res['result']['rows'] as $result) {

print "<li><a href=\"".$result['s']."\">".$result['nom']."</a></li>"; } print "</ul>"; }

?>

Page 17: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

17

Utiliser des classes (1)

class store { public $store; public function __construct() {

$this->init(); } private function init() {

global $arc_config; $this->store = ARC2::getStore($arc_config); /*Si les tables ne sont pas crées, création des tables */ if (!$this->store->isSetUp()) { $this->store->setUp(); }

} public function do_query($query) {

global $debug; $prefix=" PREFIX dbpprop: <http://dbpedia.org/property/> PREFIX dbowl: <http://dbpedia.org/ontology/> $res = $this->store->query($prefix." ".$query); if($debug && $this->store->getErrors()) { print_r($this->store->errors); echo "***\nQuery = $query"; die(); } return $res;

}

}

Page 18: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

18

Utiliser des classes (2)

class personnage { public $uri; public function __construct($uri, $lang='en') {

$this->store=new store; $this->uri=$uri; $this->lang=$lang; $infos="SELECT ?label ?abstract ?affiliation ?page

WHERE { <".$this->uri."> dbowl:abstract ?abstract;

rdfs:label ?label; dbpprop:affiliation ?affiliation; foaf:page ?page. FILTER (lang(?abstract)='".$lang."') FILTER (lang(?label)='".$lang."')

}"; $infosquery=$this->store->do_query_row($infos); $this->query=$infos;

$this->result=$infoquery; $this->description=$infosquery['abstract']; $this->nom=$infosquery['label']; $this->affiliation=$infosquery['affiliation']; $this->wikipedia=$infosquery['page'];

} }

Page 19: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

19

Créer de nouvelles pages en exploitant les classes

<?phpinclude ('./class.php');$uri=$_GET['uri'];$personnage=new personnage ($uri,'fr');?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"><html xmlns="http://www.w3.org/1999/xhtml">

<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /><title><?php echo $personnage->nom ?></title>

</head><body>

<div id="logo"><h1><a href="./">Encyclopédie Star Wars</a></h1>

<h1 id="persName"><?php echo $personnage->nom ?>

</h1><div id="content">

<p><strong>Description</strong> : <?php echo $personnage->description ?><a href="<?php echo $personnage->wikipedia ?>">En savoir plus sur Wikipedia</a></p><p><strong>Affiliation</strong> : <?php echo $personnage->affiliation ?></p>

</div><div id="footer">

<a href="./">Accueil</a> |<a href="http://www.lespetitescases.net/semweblabs/">Semantic Web Labs</a> |<a href="http://www.lespetitescases.net">Les Petites cases</a>

</div></body>

</html>

Page 20: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

20

Remote store : interroger un sparql endpoint distant

Il est tout à fait possible d’interroger un sparql endpoint distant ce qui permet de mixer différentes sources de données

Arc ne dispose pas de système de cache. Attention donc à la perte de connexion !!

<?php /* configuration */ $remoteconfig = array(

/* remote endpoint */ 'remote_store_endpoint' => 'http://dbpedia.org/sparql', );

/* instantiation */ $remotestore = ARC2::getRemoteStore($remoteconfig); $query="SELECT ?label WHERE {<".$personnage->planet."> rdfs:label ?label FILTER (lang(?label)='fr')}";

$result = $remotestore->query($query, 'row'); print $result['label'];?>

Page 21: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

21

CONSTRUCT : récupérer ou créer des triplets

Ce type de requêtes permet de récupérer un ensemble de triplets stockés dans le triple store pour les manipuler localement, de « re-modéliser » des nouveaux triplets à partir des triplets existants voire d’appliquer des règles d’inférence.

Deux parties

Construction des triplets cible

Une ressource a pour titre une étiquette

Recherche dans les triplets existants

Une ressource a pour étiquette une étiquette.

CONSTRUCT {

}

WHERE {

}

Page 22: Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010

Merci pour votre attention

Gautier PoupeauAntidot | GSM: +33 (0)6 45 49 59 77F-75 Paris | mailto: [email protected] : Les petites cases | Twitter : @lespetitescases