Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parEvonne Mahe Modifié depuis plus de 11 années
1
Formation aux technologies du Web sémantique CCSD, Lyon, 8-10 septembre 2010
2
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éorique et Web de données Jour 2 Aspect pratique et Ontologie Jour 3 PHP et Web sémantique
3
3 Plan de la journée Sélection et traitement des triplets Préparer lenvironnement Gestion des triplets
4
4 Préparer lenvironnement Télécharger ARC sur le site http://arc.semsol.orghttp://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 »
5
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', ); ?>
6
6 Principes de fonctionnement de ARC Simulation dun triple store avec BD Mysql Toutes les interactions avec la base de données MySQL se font en SPARQL Depuis lextérieur via un sparql endpoint Ou directement via des méthodes PHP Convertisseur SPARQL To SQL SPARQL
7
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(); ?>
8
Plan de la journée Sélection et traitement des triplets Préparer lenvironnement Gestion des triplets
9
9 Le principe des graphes nommés 1 2 3 4 5 6 7 8 Chaque triplet étant indépendant, comment rassembler un ensemble cohérent de triplets ? Principe du graphe nommé Le graphe nommé Ressource pour relier différents graphes Quadruplet Gérer un ensemble de triplets (suppression, ajout, modification) Indiquer la provenance dun 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 lexprimer
10
10 SPARQL Update LOAD INSERT INTO { ?s foaf:knows ?o.} WHERE { ?s xfn:contact ?o.} INSERT INTO { "baz". } Charger un flux RDF (quelque soit sa syntaxe) accessible à lURI indiqué. Sil sagit dune page HTML, ARC détecte les microformats, microdatas et RDFa et en extrait les triplets RDF. Syntaxe Dans ce cas, lURI chargé est aussi lURI du graphe nommé INSERT Insérer un ensemble de triplets dans un graphe nommé Syntaxe Il est aussi possible dajouter 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 INTO Dans ce cas, les triplets sont associés au graphe nommé précisé
11
11 SPARQL Update DELETE Supprimer des triplets RDF Syntaxe DELETE { "baz". } Dans ce cas, les triplets exprimés seront supprimés DELETE FROM Dans ce cas, tous les triplets associés au graphe nommé seront supprimés DELETE FROM { ?s rel:wouldLikeToKnow ?o.} WHERE { ?s kiss:kissed ?o.} Il est aussi possible de supprimer des triplets à partir de s contraintes exprimées via dautres 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.
12
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 "; if ($rows = $store->query($load)) { $added_triples = $rows['result']['t_count']; echo $added_triples." triplets ont été ajoutés "; } else { print "Vous n'avez pas saisi d'URL à charger"; } ?> Renvoie un tableau Exploitation du tableau
13
13 Plan de la journée Sélection et traitement des triplets Préparer lenvironnement Gestion des triplets
14
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: SELECT DISTINCT ?s ?nom WHERE { ?s skos:subject ; 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); } ?>
15
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 )
16
16 Exploiter le tableau de réponses <?php /* [SNIP] */ $query="PREFIX skos: SELECT DISTINCT ?s ?nom WHERE { ?s skos:subject ; rdfs:label ?nom. FILTER (lang(?nom)='fr') }"; $res=$store->query($query); if($store->getErrors()) { print_r($store->errors); echo "***\nQuery = $query"; } else { print " "; foreach ($res['result']['rows'] as $result) { print " ".$result['nom']." "; } print " "; } ?>
17
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: PREFIX dbowl: $res = $this->store->query($prefix." ".$query); if($debug && $this->store->getErrors()) { print_r($this->store->errors); echo "***\nQuery = $query"; die(); } return $res; }
18
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 { 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']; }
19
19 Créer de nouvelles pages en exploitant les classes <?php include ('./class.php'); $uri=$_GET['uri']; $personnage=new personnage ($uri,'fr'); ?> nom ?> Encyclopédie Star Wars nom ?> Description : description ?> wikipedia ?>">En savoir plus sur Wikipedia Affiliation : affiliation ?> Accueil | Semantic Web Labs | Les Petites cases
20
20 Remote store : interroger un sparql endpoint distant Il est tout à fait possible dinterroger 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 { planet."> rdfs:label ?label FILTER (lang(?label)='fr')}"; $result = $remotestore->query($query, 'row'); print $result['label']; ?>
21
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 dappliquer des règles dinfé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. ?resource dc:title ?label ?resource rdfs:label ?label CONSTRUCT { } WHERE { }
22
Merci pour votre attention Gautier Poupeau Antidot | GSM: +33 (0)6 45 49 59 77 F-75 Paris | mailto: gpoupeau@antidot.net Blog : Les petites cases | Twitter : @lespetitescasesLes petites cases
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.