13.07.2013 Views

Interrogation récursive du Web sémantique - CoDE - Université ...

Interrogation récursive du Web sémantique - CoDE - Université ...

Interrogation récursive du Web sémantique - CoDE - Université ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Interrogation</strong> <strong>récursive</strong><br />

<strong>du</strong> <strong>Web</strong> <strong>sémantique</strong><br />

Mémoire présenté en vue de l’obtention <strong>du</strong> diplôme de<br />

Ingénieur civil informaticien<br />

Pierre GEWELT<br />

Promoteur<br />

Professeur Esteban Zimányi<br />

Superviseur<br />

Boris Verhaegen<br />

Service<br />

<strong>CoDE</strong>-­‐WIT<br />

Année académique<br />

2011-­‐2012


Remerciements<br />

Je tiens à remercier tout particulièrement mon superviseur Boris Verhaegen, pour tout<br />

le temps qu’il m’a consacré <strong>du</strong>rant la réalisation de ce mémoire, pour son soutien, pour<br />

ses relectures, et pour les nombreux conseils et feedbacks qu’il a pu me donner tout au<br />

long de sa rédaction.<br />

Je remercie également mon promoteur Esteban Zimányi pour ses conseils, relectures<br />

et retours.<br />

Merci aussi à ma famille et à mes amis pour leur soutien, leur support et leurs en-<br />

couragements <strong>du</strong>rant la réalisation de ce travail, en particulier à Carla Colomina, Eric<br />

Gewelt et Michèle Colassin.<br />

Enfin, un second merci à Michèle Colassin pour ses multiples relectures et corrections.<br />

2


TABLE DES MATIÈRES 3<br />

Table des matières<br />

1 Intro<strong>du</strong>ction 5<br />

2 Contexte 7<br />

2.1 Évolution <strong>du</strong> <strong>Web</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

2.2 <strong>Web</strong> <strong>sémantique</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.3 Linked Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.4 Linking Open Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

3 Standards, protocoles et outils 20<br />

3.1 Ressource Description Framework (RDF) . . . . . . . . . . . . . . . . . . 20<br />

3.2 RDF Schema (RDFS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

3.3 <strong>Web</strong> Ontology Language (OWL) . . . . . . . . . . . . . . . . . . . . . . . 24<br />

3.4 Les Triple Stores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

3.5 Le langage d’interrogation SPARQL . . . . . . . . . . . . . . . . . . . . . 26<br />

3.5.1 SPARQL endpoint, une interface d’interrogation . . . . . . . . . . 28<br />

3.6 Le framework Jena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

3.7 Le moteur d’interrogation ARQ . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

4 Stockage et interrogation des données 31<br />

4.1 Les entrepôts de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

4.2 Les moteurs de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

4.3 La fédération de requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

4.4 La fédération de requêtes avec découverte active (ADQF) . . . . . . . . . 36<br />

4.5 Le Link Traversal, une approche d’interrogation <strong>récursive</strong> . . . . . . . . . 37


TABLE DES MATIÈRES 4<br />

5 Analyse de SQUIN, un outil d’interrogation 40<br />

5.1 La librairie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

5.2 Son utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

5.2.1 Version stand-alone . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

5.2.2 Version standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

5.3 Ses principes de fonctionnement et son architecture . . . . . . . . . . . . . 42<br />

5.3.1 Fonctionnement par chaîne d’itérateurs . . . . . . . . . . . . . . . 44<br />

5.3.2 Architecture de la librairie . . . . . . . . . . . . . . . . . . . . . . . 50<br />

6 Amélioration <strong>du</strong> temps de réponse 55<br />

6.1 Parallélisation des branches d’interrogation . . . . . . . . . . . . . . . . . 56<br />

6.2 Ordre d’évaluation des Triple Patterns . . . . . . . . . . . . . . . . . . . . 58<br />

6.3 <strong>Interrogation</strong> parallèle régulière <strong>du</strong> QLD . . . . . . . . . . . . . . . . . . . 58<br />

7 Résultats de l’amélioration 63<br />

7.1 Méthode d’analyse des résultats . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

7.2 Requête 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

7.3 Requête 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

7.4 Conclusions sur les résultats . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

8 Perspectives futures 71<br />

8.1 Adaptation en temps réel <strong>du</strong> plan d’exécution . . . . . . . . . . . . . . . . 71<br />

8.2 Intégration de requêtes vers des moteurs de recherche . . . . . . . . . . . 72<br />

8.3 Fusion et nettoyage des données locales . . . . . . . . . . . . . . . . . . . 73<br />

9 Conclusions 74<br />

A Résulats complets des tests effectués 79


Chapitre 1<br />

Intro<strong>du</strong>ction<br />

Le <strong>Web</strong> <strong>sémantique</strong> connaît à l’heure actuelle une forte croissance, et cette tendance<br />

est amenée à s’accentuer dans les années à venir. La grande quantité de données qui<br />

y est déjà disponible est en croissance exponentielle, c’est pourquoi il sera de plus en<br />

plus primordial de proposer des méthodes d’interrogation efficaces et rapides <strong>du</strong> <strong>Web</strong><br />

<strong>sémantique</strong>, capables de gérer convenablement cette énorme quantité de données.<br />

Le but de ce mémoire est d’analyser les méthodes d’interrogation traditionnelles et<br />

novatrices <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong>, d’analyser une librairie existante permettant de l’inter-<br />

roger de manière décentralisée et <strong>récursive</strong>, d’optimiser cette librairie afin de ré<strong>du</strong>ire le<br />

temps d’attente des résultats lors d’une requête, et de proposer des pistes d’investigation<br />

supplémentaires en vue d’améliorer davantage l’expérience <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> pour les<br />

utilisateurs dans les années à venir.<br />

Pour ce faire, nous découperons ce mémoire en plusieurs parties. Dans un premier<br />

temps, nous présenterons un état de l’art <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> et de son contexte, des<br />

standards et protocoles existants qui permettent d’en faire usage, et des méthodes de<br />

stockage et d’interrogation des données qui y sont publiées. Après cela, nous analyserons<br />

la librairie SQUIN, un outil d’interrogation <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> basé sur une approche<br />

d’interrogation <strong>récursive</strong> novatrice appelée Link Traversal, permettant d’effectuer des<br />

requêtes décentralisées sur le <strong>Web</strong> de données. Ensuite, nous présenterons les pistes de<br />

recherche investiguées dans le cadre de ce mémoire afin de ré<strong>du</strong>ire le temps d’attente des<br />

utilisateurs lors d’une requête, ainsi que les résultats obtenus grâce à ces investigations.<br />

Enfin, nous terminerons en citant quelques perspectives futures et d’autres pistes de<br />

recherche qui pourraient être approfondies par la suite.<br />

5


Le deuxième chapitre présente le contexte général dans lequel nous nous situons.<br />

Nous commencerons par une intro<strong>du</strong>ction au <strong>Web</strong> <strong>sémantique</strong> et au <strong>Web</strong> de données, au<br />

concept de Linked Data et à ses principes et objectifs, ainsi qu’au projet communautaire<br />

collectif Linking Open Data visant à créer de plus en plus de liens entre les données<br />

publiées sur ce nouveau <strong>Web</strong>.<br />

Le troisième chapitre est consacré à l’étude des standards, outils et protocoles qui<br />

existent dans ce domaine. Ceux-ci définissent notamment des schémas de données et des<br />

protocoles d’interrogation.<br />

Le quatrième chapitre offre une comparaison de cinq méthodes d’interrogation <strong>du</strong><br />

<strong>Web</strong> <strong>sémantique</strong>, tantôt traditionnelles, tantôt novatrices. La cinquième, citée plus haut<br />

et dénommée Link Traversal, y est détaillée plus particulièrement puisque cette approche<br />

est un des éléments centraux de ce mémoire.<br />

Le cinquième chapitre consiste en une analyse de la librairie SQUIN, une interface<br />

d’interrogation <strong>du</strong> <strong>Web</strong> de données pour les sources adhérant aux principes de Linked<br />

Data. Cette librairie implémente les principes <strong>du</strong> Link Traversal définis au chapitre<br />

quatre.<br />

Le sixième chapitre détaille les trois pistes investiguées dans le cadre de ce mémoire,<br />

celles-ci ayant pour but de ré<strong>du</strong>ire le temps d’attente des utilisateurs lorsqu’ils effectuent<br />

une requête grâce à SQUIN. En effet, le nombre de données disponibles sur le <strong>Web</strong><br />

<strong>sémantique</strong> étant en croissance exponentielle et amené à conserver cette tendance dans les<br />

années à venir, il sera d’autant plus nécessaire d’en optimiser les méthodes d’interrogation<br />

de cette énorme quantité de données.<br />

Les deux premières pistes de recherche décrites au chapitre six se sont avérées in-<br />

fructueuses, mais la troisième a en revanche pro<strong>du</strong>it de très bons résultats. Le septième<br />

chapitre présente les résultats obtenus grâce à l’implémentation concrète de cette troi-<br />

sième piste. Une conclusion sur les résultats présentés y est également donnée.<br />

Le huitième chapitre analyse les perspectives futures et propose des pistes d’investi-<br />

gation supplémentaires afin d’optimiser davantage l’exécution des requêtes via SQUIN.<br />

Le neuvième et dernier chapitre présente les conclusions que l’on peut tirer des ré-<br />

sultats obtenus, un point sur le développement personnel que m’a apporté ce travail, et<br />

une conclusion générale sur le sujet présenté dans ce mémoire.<br />

6


Chapitre 2<br />

Contexte<br />

Actuellement, les serveurs d’hébergement permettent le stockage et la mise à dispo-<br />

sition de l’information, le réseau Internet permet le transfert de cette information et les<br />

ordinateurs personnels permettent son affichage à destination de l’utilisateur final. Le<br />

matériel informatique (infrastructure, machines) ne sert donc actuellement que de moyen<br />

de transfert de l’information, et il est impossible pour les machines d’en comprendre le<br />

contenu. En effet, ce n’est qu’à la phase finale <strong>du</strong> procédé, lorsque l’information est affi-<br />

chée à l’écran de l’utilisateur, que ce dernier l’interprète et comprend ce qu’elle signifie.<br />

Il est donc le seul à en connaître la <strong>sémantique</strong>.<br />

Une interprétation de l’information par les ordinateurs est actuellement très difficile,<br />

car celle-ci est stockée de manière non structurée. En effet, une page <strong>Web</strong> n’est qu’un<br />

ensemble de caractères qui se suivent, formant des phrases que seuls les humains sont<br />

capables d’interpréter. Les seuls liens <strong>sémantique</strong>s sont les liens hypertextes entre docu-<br />

ments. Cette utilisation actuelle <strong>du</strong> <strong>Web</strong> est qualifiée de document-centric, car il s’agit<br />

davantage d’un stockage de documents liés entre eux, par opposition à un stockage de<br />

données liées entre elles. On l’appelle de ce fait le “<strong>Web</strong> de documents” (<strong>Web</strong> of Docu-<br />

ments).<br />

Afin de rendre l’information interprétable par les ordinateurs, il faut ajouter une sé-<br />

mantique aux données, et rendre l’information structurée (ou <strong>du</strong> moins semi-structurée).<br />

C’est l’objet <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> (aussi appelé <strong>Web</strong> 3.0), projet initié à l’époque par Tim<br />

Berners Lee en 2001 [1].<br />

7


2.1 Évolution <strong>du</strong> <strong>Web</strong> 8<br />

Nous allons d’abord brièvement citer les évolutions principales <strong>du</strong> <strong>Web</strong>, pour ensuite<br />

nous pencher sur l’étude <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong>.<br />

Contenu<br />

2.1 Évolution <strong>du</strong> <strong>Web</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

2.2 <strong>Web</strong> <strong>sémantique</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.3 Linked Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />

2.4 Linking Open Data . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

2.1 Évolution <strong>du</strong> <strong>Web</strong><br />

Lors des débuts <strong>du</strong> <strong>Web</strong>, celui-ci était principalement utilisé afin de transférer de<br />

l’information de manière unidirectionnelle, c’est-à-dire des créateurs de contenu vers les<br />

internautes. En effet, les possesseurs de sites <strong>Web</strong> étaient les principaux créateurs de<br />

contenu sur le <strong>Web</strong>, et les internautes se servaient <strong>du</strong> <strong>Web</strong> à des fins consultatives. L’in-<br />

ternaute moyen n’ayant pas de connaissances en matière de création de sites <strong>Web</strong>, il se<br />

voyait rapidement confronté à des difficultés techniques s’il désirait mettre de l’informa-<br />

tion à la disposition publique des autres internautes.<br />

Par la suite, une nouvelle tendance s’est fait jour, aidée par l’apparition de nouvelles<br />

technologies (AJAX, etc.), afin de permettre à l’utilisateur lambda non seulement d’ac-<br />

céder au contenu, mais également d’en créer. Cette tendance a été appelée le <strong>Web</strong> 2.0,<br />

ou <strong>Web</strong> social, et l’on y retrouve quelques grands concepts et acteurs connus, comme les<br />

services de blog (Skyblog 1 , etc.), d’hébergement vidéo (YouTube 2 , DailyMotion 3 , etc.),<br />

d’hébergement de photos (Picasa 4 , FlickR 5 , etc.), et surtout les réseaux sociaux (Face-<br />

book 6 , LinkedIn 7 , etc.). Cette tendance s’est donc tra<strong>du</strong>ite par une forte augmentation<br />

des interactions internaute—site web et internaute—internaute.<br />

Nous pouvons constater que le <strong>Web</strong> est en évolution permanente, et une nouvelle<br />

tendance est actuellement en train de se répandre progressivement, celle <strong>du</strong> <strong>Web</strong> séman-<br />

tique, comme expliqué précédemment.<br />

1. http://www.skyrock.com/blog/<br />

2. http://www.youtube.com/<br />

3. http://www.dailymotion.com/<br />

4. http://picasa.google.com/<br />

5. http://www.flickr.com/<br />

6. http://www.facebook.com/<br />

7. http://www.linkedin.com/


2.2 <strong>Web</strong> <strong>sémantique</strong> 9<br />

2.2 <strong>Web</strong> <strong>sémantique</strong><br />

Le <strong>Web</strong> <strong>sémantique</strong> est le <strong>Web</strong> des données (<strong>Web</strong> of Data), par opposition au <strong>Web</strong><br />

de documents (<strong>Web</strong> of Documents). Dans le <strong>Web</strong> de documents, il n’y a pas de liaisons<br />

<strong>sémantique</strong>s entre les données. Chaque application possède ses propres données et infor-<br />

mations, chaque site <strong>Web</strong> possède son information et l’affiche sous forme visuelle grâce<br />

aux pages <strong>Web</strong>, mais il n’y a aucune convention mise en place afin de représenter les<br />

données de manière standardisée, ce qui permettrait aux différentes applications et aux<br />

différents sites <strong>Web</strong> de pouvoir chacun se baser sur les informations fournies par un(e)<br />

autre. En d’autres mots, les données ne sont donc pas connectées entre elles.<br />

Certaines approches <strong>du</strong> <strong>Web</strong> de documents tendent à rajouter de la <strong>sémantique</strong> dans<br />

le <strong>Web</strong> de documents, c’est par exemple typiquement le cas des encadrés que l’on peut<br />

trouver en haut à droite des pages Wikipédia. Cependant, le <strong>Web</strong> de données offre un<br />

potentiel beaucoup plus important en termes de liaisons entre les données, grâce à ses<br />

liens <strong>sémantique</strong>s explicites.<br />

Avant d’aller plus loin, prenons un exemple de cas pratique illustrant l’utilité d’un<br />

<strong>Web</strong> où les données sont connectées entre elles. Admettons par exemple que l’on veuille<br />

planifier le prochain voyage de vacances. Nous ne connaissons pas encore la destination<br />

qui conviendrait le mieux, mais nous avons certaines exigences quant au pays :<br />

– il doit être composé de minimum 20% de surface forestière ;<br />

– il doit au minimum comprendre l’anglais comme langue véhiculaire ;<br />

– le prix moyen <strong>du</strong> pain dans la devise locale doit être inférieur ou égal à l’équivalent<br />

de 1e, afin de s’assurer que le coût de la vie n’y soit pas trop élevé.<br />

On peut rapidement se rendre compte que ce type de requête est totalement irréalisable<br />

avec la structure <strong>du</strong> <strong>Web</strong> de documents actuel. En effet, actuellement nous serions obligés<br />

de trouver les informations nous-mêmes grâce aux moteurs de recherche traditionnels,<br />

et d’ensuite en agréger les données et ne garder que celles répondant aux contraintes<br />

posées, car nous seuls connaissons la <strong>sémantique</strong> de ces informations et contraintes. Avec<br />

l’apparition d’un <strong>Web</strong> où les données sont liées entre elles par des liens <strong>sémantique</strong>s, un<br />

tel type d’interrogation devient réalisable.<br />

Le <strong>Web</strong> de données a ainsi été conçu en vue de permettre une meilleure intégration<br />

des données et d’offrir la possibilité d’interroger plusieurs sources de données. En résumé,<br />

c’est un unique espace de données mondialement distribué. Contrairement au <strong>Web</strong> de<br />

documents qui est conçu à la base pour être lisible par des humains et pas spécialement<br />

par des machines, le <strong>Web</strong> de données, quant à lui, est imaginé pour être non seulement


2.2 <strong>Web</strong> <strong>sémantique</strong> 10<br />

interprétable par des humains, mais également par les machines grâce à l’ajout de liens<br />

<strong>sémantique</strong>s.<br />

On voit là des possibilités techniques beaucoup plus vastes vis-à-vis <strong>du</strong> traitement<br />

de l’information, car dès lors que les machines sont capables de comprendre le sens, la<br />

<strong>sémantique</strong> des données, elles peuvent alors les traiter et également inférer de nouvelles<br />

informations. Les possibilités d’inférence des données seront détaillées plus loin, dans les<br />

sections 3.2 (RDFS) et 3.3 (OWL). Cela est possible grâce à la <strong>sémantique</strong> explicite de<br />

l’information publiée sur le <strong>Web</strong> de données. Sur ce dernier, les liens sont typés, là où le<br />

<strong>Web</strong> de documents possède des liens non typés.<br />

Il est bon de signaler que, les moyens de représentation brute de l’information <strong>du</strong><br />

<strong>Web</strong> <strong>sémantique</strong> n’étant pas aussi aisés à interpréter visuellement par les humains, il<br />

existe de plus en plus d’outils de visualisation et de présentation des données <strong>du</strong> <strong>Web</strong><br />

<strong>sémantique</strong> [2].<br />

Le principe de base <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> est de représenter les données sous forme<br />

de triplets (ou triples). Un triplet est un ensemble de trois informations : un sujet,<br />

un prédicat et un objet. On pourrait y voir une analogie avec la syntaxe de la langue<br />

française, où l’ensemble des informations serait représenté par une multitude de phrases<br />

simples de type sujet-verbe-complément.<br />

être :<br />

– Le sujet est la ressource au sujet de laquelle une information va être définie. Il est<br />

représenté par une URI 8 . Une ressource est, de manière simplifiée, une “chose” sur<br />

Internet, physique ou abstraite. Elle peut représenter une ville, une catégorie de<br />

plantes, une personne, un concept, ...<br />

– Le prédicat est le type d’information qui va être définie à propos <strong>du</strong> sujet. Il est<br />

également représenté par une URI.<br />

– L’objet est la valeur <strong>du</strong> prédicat <strong>du</strong> sujet. Il peut être soit une URI ou un identi-<br />

fiant local (c’est-à-dire qu’il pointe vers une autre ressource), soit un littéral (une<br />

information textuelle concrète, telle qu’une chaîne de caractères ou un nombre).<br />

Un exemple de triplet (en pseudo-code, utilisant un littéral comme objet) pourrait<br />

<br />

<br />

1989<br />

8. Uniform Resource Identifier [3], identifiant la ressource en question. Plus d’informations à ce sujet<br />

dans la section 2.3.


2.2 <strong>Web</strong> <strong>sémantique</strong> 11<br />

De même, un exemple de triplet (utilisant une URI comme objet) pourrait être :<br />

<br />

<br />

<br />

Ces triplets, liés entre eux, peuvent ensuite être représentés sous la forme d’un graphe<br />

connectant les entités entre eux. La figure 2.1 illustre le graphe représentant l’ensemble<br />

des deux triplets donnés en exemple ci-dessus. Plus d’informations sur les triplets et leur<br />

représentation seront données à la section 3.1.<br />

Figure 2.1 – Représentation graphique d’un ensemble de triplets.<br />

Cette représentation de l’information fournit donc des données semi-structurées, par<br />

opposition à des données structurées ou non structurées. Pour rappel :<br />

– Des données non structurées sont par exemple le texte libre contenu et affiché<br />

sur une page <strong>Web</strong>. C’est une information interprétable par les humains, mais une<br />

machine n’a aucune information sur cette donnée.<br />

– Des données semi-structurées sont des informations liées entre elles, interpré-<br />

tables par une machine. C’est le cas des triplets <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong>. Néanmoins,<br />

il n’est pas possible de savoir à l’avance quels seront les attributs (les prédicats) qui<br />

seront définis au sujet d’une ressource. En effet, le système des triplets permet de<br />

définir n’importe quelle information au sujet d’une ressource donnée (dans notre<br />

exemple : l’âge et la ville natale d’une personne), et il n’est donc pas possible pour<br />

une machine de connaître une liste finie des autres informations qui pourraient être<br />

données au sujet de cette même ressource.<br />

– Des données structurées sont des informations au sujet desquelles la structure<br />

est connue d’avance. C’est le cas par exemple des bases de données, dans lesquelles<br />

les tables ont une structure prédéfinie, et où l’on sait exactement quelles sont les


2.2 <strong>Web</strong> <strong>sémantique</strong> 12<br />

données qui peuvent être définies au sujet d’une entrée, puisque la structure de la<br />

table est connue.<br />

Pour exploiter tout le potentiel d’un tel <strong>Web</strong> de données, il est cependant nécessaire<br />

que toutes les sources de contenu s’accordent à parler un seul et même langage de repré-<br />

sentation des données, afin qu’une source puisse être capable d’interpréter la <strong>sémantique</strong><br />

<strong>du</strong> contenu des autres sources. Par exemple, il faut être capable d’indiquer que deux res-<br />

sources informatiques présentes sur le <strong>Web</strong> de données représentent en réalité le même<br />

concept physique, et qu’elles doivent être traitées comme une seule entité. C’est l’objet<br />

des vocabulaires et ontologies 9 , ils seront détaillés plus loin dans ce mémoire.<br />

Afin d’encourager la publication de données <strong>sémantique</strong>s sur le <strong>Web</strong>, un nouveau<br />

concept est également apparu : celui des Semantic Wikis 10 . Ceux-ci sont des wikis<br />

qui permettent d’enregistrer de l’information semi-structurée pour le <strong>Web</strong> de données,<br />

contrairement aux Wikis traditionnels qui ne permettaient que de publier de l’informa-<br />

tion non structurée. Ceux-ci ont l’avantage de combiner les forces <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong><br />

(interprétation par les machines, intégration des données, requêtes complexes) et celles<br />

des Wikis (simplicité d’utilisation et de contribution, forte interconnexion, collabora-<br />

tion). Concrètement, les créateurs de contenu y ont la possibilité de définir des concepts<br />

(ressources <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong>) ainsi que des propriétés (prédicats) liant ces concepts<br />

entre eux ou à des littéraux. Cette approche contribue donc également à alimenter le<br />

<strong>Web</strong> de données.<br />

On peut résumer comme suit les différences et l’évolution <strong>du</strong> <strong>Web</strong> de documents vers<br />

le <strong>Web</strong> de données [4] :<br />

<strong>Web</strong> de documents <strong>Web</strong> de données<br />

Analogie Système de fichiers distribué Base de données distribuée<br />

Objets principaux Documents Données<br />

Liens entre Documents Données et documents<br />

Types de liens Non typés Typés<br />

Informations Déconnectées Liées entre elles<br />

Niveau de structure Faible Élevé<br />

Sémantique Implicite Explicite<br />

Conçu pour Un traitement humain Un traitement machine<br />

9. http://semanticweb.org/wiki/Ontology<br />

10. http://km.aifb.kit.e<strong>du</strong>/ws/semwiki2006/<br />

et humain


2.3 Linked Data 13<br />

Ceci conclut les principes généraux <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong>. Afin d’implémenter concrè-<br />

tement ce système, il faut tout d’abord définir un moyen concret de publier ce type<br />

d’information sur Internet, et c’est l’objet de Linked Data, décrit au chapitre suivant.<br />

2.3 Linked Data<br />

L’objectif de Linked Data 11 est d’utiliser le <strong>Web</strong> pour faciliter la création de liens<br />

entre des données connexes qui n’étaient pas encore liées, ou qui l’étaient déjà via d’autres<br />

méthodes. On y retrouve un ensemble de pratiques recommandées pour exposer, par-<br />

tager et connecter des morceaux de données, informations et connaissances sur le <strong>Web</strong><br />

<strong>sémantique</strong> grâce à l’utilisation des URI et de RDF. Linked Data décrit donc une mé-<br />

thode de publication de données semi-structurées sur le <strong>Web</strong> de données, afin de lier les<br />

données et de les rendre plus accessibles, augmentant ainsi l’utilisation que l’on peut en<br />

faire.<br />

Le <strong>Web</strong> de données est basé sur trois technologies (<strong>sémantique</strong>s) <strong>du</strong> <strong>Web</strong> : le protocole<br />

HTTP, les URI, et le framework RDF.<br />

– Hyper Text Transfer Protocol, ou HTTP, est le protocole le plus largement utilisé<br />

pour le transfert de documents sur Internet et la consultation de sites <strong>Web</strong>. Le<br />

<strong>Web</strong> de données veut faire usage de ce protocole existant et ne nécessite pas la<br />

création d’un nouveau protocole de communication.<br />

– Une Uniform Resource Identifier, ou URI, est une chaîne de caractères permettant<br />

d’identifier une ressource sur un réseau (Internet dans le cas <strong>du</strong> <strong>Web</strong>). Une ressource<br />

identifiée par une URI doit l’être de manière permanente, même si celle-ci venait<br />

à être déplacée ou supprimée. Comme illustré à la figure 2.2, on retrouve deux<br />

ensembles quasi-disjoints au sein des URI : les URL (Uniform Resource Locator)<br />

et les URN (Uniform Resource Name).<br />

• Une URL est la forme la plus connue des URI, elle indique comment obtenir plus<br />

d’informations au sujet de la ressource. Un exemple d’URL est http://www.<br />

ulb.ac.be, et permet d’indiquer qu’il est possible d’obtenir des informations<br />

sur la ressource en utilisant le protocole HTTP pour accéder à la ressource<br />

www.ulb.ac.be.<br />

• Une URN est une forme moins connue d’URI, elle identifie une ressource au<br />

sein d’un espace de noms 12 (namespace). Un numéro ISBN peut par exemple<br />

11. http://linkeddata.org/<br />

12. Cette notion sera détaillée plus loin dans la section 3.1 (RDF).


2.3 Linked Data 14<br />

être représenté sous la forme urn:isbn:0-123-45678-9. Dans ce cas, l’espace<br />

de noms est isbn, et l’identificateur 0-123-45678-9 identifie une ressource (le<br />

livre) de manière unique au sein des numéros ISBN.<br />

– Resource Description Framework, ou RDF, est un modèle de données générique<br />

basé sur la théorie des graphes, permettant de représenter de l’information avec<br />

des triplets de la forme (sujet,prédicat,objet), comme décrit brièvement en 2.2. Un<br />

ensemble de triplets forme donc un graphe RDF. Les trois éléments d’un triplet<br />

RDF peuvent être représentés chacun par une URI. L’objet peut également être<br />

URLs, URIs, URNs, and IRIs<br />

un littéral (chaîne de caractères ou nombre). RDF sera explicité plus en détails à<br />

la section 3.1.<br />

URL URN<br />

URI<br />

Figure • A Uniform 2.2 – Resource Représentation Identifier desis ensembles either a URLURI, or a URL URN, et or both URN [5].<br />

It takes the form scheme:scheme-specific-part<br />

Afin de permettre l’utilisation de ces technologies <strong>Web</strong> pour publier et lier des données<br />

• Conventions about use of /, #, and ?<br />

sur le <strong>Web</strong>, Tim Berners-Lee, directeur <strong>du</strong> World Wide <strong>Web</strong> Consortium (W3C), a<br />

formulé les principes de Linked Data en 2006 [6], principes qui ont permis la création <strong>du</strong><br />

<strong>Web</strong> de données. Les principes, énoncés dans leur langue d’origine, sont les suivants :<br />

1. Use URIs as names for things.<br />

2. Use HTTP URIs so that people can look up those names.<br />

3. When someone looks up a URI, provide useful RDF information, using the stan-<br />

dards (RDF, SPARQL, ...).<br />

4. Include RDF statements that link to other URIs so that they can discover related<br />

things.<br />

Les premier et deuxième principes indiquent qu’une entité (ressource) doit être iden-<br />

tifiée par une unique URI basée sur le protocole HTTP. De cette manière, cette URI<br />

sert, d’une part, d’identifiant unique pour la ressource, mais elle offre également, d’autre<br />

part, un accès HTTP à une représentation de données structurées au sujet de ladite res-<br />

source. Ainsi, il est possible d’effectuer un look-up (ou déréférencement) de cette URI,<br />

c’est-à-dire qu’une requête HTTP vers cette URI recevra en réponse de l’information<br />

31 / 76


2.3 Linked Data 15<br />

concernant la ressource identifiée par l’URI. Le troisième principe veut que cette infor-<br />

mation soit représentée de manière interprétable par les machines, c’est-à-dire selon le<br />

standard RDF pour la représentation des données, et selon le standard SPARQL pour<br />

l’adressage de requêtes (détaillé à la section 3.5). De même, selon le quatrième principe,<br />

il est demandé de fournir des références (liens) vers d’autres URI dans les résultats ren-<br />

voyés, de manière à permettre aux utilisateurs et aux machines d’effectuer un processus<br />

itératif lors de leur recherche d’information.<br />

Toujours dans le but de pouvoir lier les informations entre elles, il est fort probable,<br />

dans un système en pleine évolution comme celui-ci, d’avoir deux sources de données<br />

(ou plus) possédant des informations sur des ressources représentant un même concept<br />

réel. Ces ressources se trouvant sur des espaces de noms différents, elles possèdent des<br />

URI différentes et sont donc virtuellement considérées comme des concepts différents,<br />

alors qu’en réalité elles représentent toutes un seul et même concept réel. Afin de pallier<br />

ce problème, des liens spéciaux tels que sameAs et refersTo ont été définis [7] dans le<br />

langage d’ontologies OWL, permettant d’indiquer qu’une ressource représente en réalité<br />

le même concept physique qu’une autre ressource. Ces concepts seront abordés plus loin<br />

dans ce mémoire.<br />

Figure 2.3 – Recommandation d’application des principes de Linked Data [6].<br />

À terme, l’application de ces principes en vue de faire grandir et d’alimenter le <strong>Web</strong><br />

de données devra permettre l’apparition de navigateurs Linked Data, de mashups Linked<br />

Data et de moteurs de recherche Linked Data.


2.4 Linking Open Data 16<br />

Mois et année Nombre de triplets RDF Nombre de liens RDF<br />

Mai 2007 500.000.000 120.000<br />

Avril 2008 2.000.000.000 3.000.000<br />

Septembre 2011 31.000.000.000 504.000.000<br />

Table 2.1 – Évolution des ensembles de données publiés grâce à Linking Open Data<br />

2.4 Linking Open Data<br />

Linking Open Data est un projet communautaire collectif visant à publier un maxi-<br />

mum de données libres de droits sur le <strong>Web</strong> de données selon les principes de Linked<br />

Data, en interconnectant des données de différentes sources de données [8, 9]. Une source<br />

de données centrale très populée est DBpedia, l’équivalent de Wikipédia pour le <strong>Web</strong> de<br />

données. Une fois ce réseau de sources de données créé, il est alors intéressant de dévelop-<br />

per des clients Linked Data permettant de naviguer parmi ces données interconnectées.<br />

Il existe actuellement déjà des outils de navigation interactive des données permettant<br />

cela. Les organisations participant à la publication de ce contenu sont, d’une part, des<br />

universités (principalement des États-Unis, d’Allemagne et <strong>du</strong> Royaume-Uni en 2008)<br />

et, d’autre part, des sociétés (telles que la BBC, Renault, etc) [4].<br />

Il est intéressant d’observer l’évolution des ensembles de données publiés grâce au<br />

projet au fil <strong>du</strong> temps, illustrée à la table 2.4. Des représentations graphiques de ces en-<br />

sembles de données interconnectés (linked datasets, ou LDS) ont été réalisées, comme il<br />

est possible de le voir à la figure 2.6. Chaque flèche liant deux sources de données indique<br />

que ces sources ont été liées entre elles, et ont défini un ensemble de liens sameAs, afin<br />

de signifier à l’utilisateur qu’une ressource définie par la première source est conceptuel-<br />

lement équivalente à une autre ressource définie par la deuxième source.<br />

Le projet vise à connecter un maximum de sources de données entre elles, afin d’ob-<br />

tenir “UN” grand et unique <strong>Web</strong> de données. Les sources de données peuvent cependant<br />

être regroupées par noeuds ou clusters, c’est-à-dire par thématique. Par exemple, toutes<br />

les sources contenant de l’information sur les génomes peuvent être regroupées en un<br />

cluster propre à ce thème, toutes les sources à vocation cinématographique dans un clus-<br />

ter spécifique au cinéma, etc. Si l’on observe la figure 2.6, on remarque que les cercles<br />

représentant les sources ont chacun une couleur de fond. Ces couleurs représentent les<br />

clusters cités ci-dessus.<br />

Il est fort intéressant d’observer l’évolution au cours <strong>du</strong> temps des sources de données<br />

interconnectées grâce au projet Linking Open Data. Les graphes représentant les sources


2.4 Linking Open Data 17<br />

de données connectées d’année en année de 2007 à 2011 sont représentés dans l’ordre aux<br />

figures 2.4, 2.5, 2.6, 2.7 et 2.8. Ce qui est très intéressant à remarquer, c’est la croissance<br />

exponentielle <strong>du</strong> nombre de sources de données interconnectées, et donc <strong>du</strong> nombre<br />

de données publiées sur le <strong>Web</strong> de données. Face à une telle croissance, il deviendra<br />

primordial de proposer des méthodes efficaces et rapides d’interrogation de ces données.<br />

C’est l’objet de ce mémoire comme nous le verrons par la suite à partir <strong>du</strong> chapitre 4.<br />

Figure 2.4 – Représentation des sources de données interconnectées grâce à Linking<br />

Open Data (en septembre 2007).


2.4 Linking Open Data 18<br />

Figure 2.5 – Représentation des sources de données interconnectées grâce à Linking<br />

Open Data (en septembre 2008).<br />

Figure 2.6 – Représentation des sources de données interconnectées grâce à Linking<br />

Open Data (en juillet 2009).


2.4 Linking Open Data 19<br />

Figure 2.7 – Représentation des sources de données interconnectées grâce à Linking<br />

Open Data (en septembre 2010).<br />

Figure 2.8 – Représentation des sources de données interconnectées grâce à Linking<br />

Open Data (en septembre 2011).


Chapitre 3<br />

Standards, protocoles et outils<br />

Nous avons vu au chapitre précédent les principes généraux qui régissent le <strong>Web</strong><br />

<strong>sémantique</strong>. Ceux-ci reposent sur des standards et des schémas de données bien définis,<br />

tels que RDF, RDFS et OWL. De même, afin de permettre une implémentation concrète<br />

de l’accessibilité aux données, il est nécessaire de mettre en place des serveurs de stockage<br />

des données et de définir des protocoles d’interrogation de ces serveurs. Ce chapitre définit<br />

ces différentes notions.<br />

Contenu<br />

3.1 Ressource Description Framework (RDF) . . . . . . . . . . . . 20<br />

3.2 RDF Schema (RDFS) . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

3.3 <strong>Web</strong> Ontology Language (OWL) . . . . . . . . . . . . . . . . . 24<br />

3.4 Les Triple Stores . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

3.5 Le langage d’interrogation SPARQL . . . . . . . . . . . . . . . 26<br />

3.6 Le framework Jena . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

3.7 Le moteur d’interrogation ARQ . . . . . . . . . . . . . . . . . . 30<br />

3.1 Ressource Description Framework (RDF)<br />

Comme énoncé précédemment, Resource Description Framework (RDF) est un mo-<br />

dèle de données générique basé sur la théorie des graphes, permettant de représenter de<br />

l’information avec des triplets de la forme (sujet,prédicat,objet). C’est le modèle standard<br />

pour l’échange de données sur le <strong>Web</strong> de données. Il facilite l’intégration des données de<br />

sources variées et permet une évolution des schémas de données au cours <strong>du</strong> temps sans<br />

20


3.1 Ressource Description Framework (RDF) 21<br />

que cela ne nécessite une modification au niveau des clients <strong>du</strong> <strong>Web</strong> de données [10]. Il<br />

est en certains points semblable au modèle entité-relation.<br />

Pour rappel, un triplet est un ensemble de trois informations liées (cf. section 2.2) :<br />

– Le sujet (la ressource au sujet de laquelle une information va être définie, repré-<br />

senté par une URI).<br />

– Le prédicat (le type d’information qui va être définie à propos <strong>du</strong> sujet, représenté<br />

par une URI).<br />

– L’objet (la valeur <strong>du</strong> prédicat <strong>du</strong> sujet, étant soit une URI ou un identifiant local,<br />

soit un littéral).<br />

Pour mettre cela en relation avec le modèle de graphes RDF, un sommet représente<br />

une entité (ressource identifiée par une URL ou entité locale identifiée par un identifiant<br />

local), et une arrête représente un triplet RDF, c’est-à-dire le prédicat qui lie le sujet à<br />

l’objet. Un ensemble de triplets RDF constitue donc un graphe dirigé étiqueté (directed<br />

labelled graph).<br />

2<br />

1A--64B-


3.1 Ressource Description Framework (RDF) 22<br />

– Deuxièmement les littéraux, représentés par un contour rectangulaire. Il va de soi<br />

que les objets littéraux ne se trouvent qu’en extrémité de graphe.<br />

Il existe également des quadruplets (quads), une extension des triplets rajoutant le<br />

contexte (la provenance de l’information) comme quatrième information au triplet.<br />

Sérialisation de triplets RDF<br />

RDF définit une méthode de représentation de l’information sous forme de triplets.<br />

Après avoir décrit le modèle conceptuel à la section précédente, il est utile de s’intéresser<br />

à la manière de sérialiser cette information. Pour rappel, la sérialisation est le processus<br />

d’encodage d’une information (comme un modèle ou un graphe RDF) physiquement sous<br />

forme d’octets ou de bits, permettant ainsi un stockage sur disque ou un transfert sur le<br />

réseau.<br />

Afin de procéder à la sérialisation de triplets RDF, il existe plusieurs syntaxes de<br />

sérialisation des graphes RDF : RDF/XML, N-Triple, Turtle, et Notation3 (N3). Cepen-<br />

dant, il semble que RDF/XML et Turtle soient les plus utilisés.<br />

Avant de détailler cela, il est nécessaire d’intro<strong>du</strong>ire la notion d’espace de noms<br />

(namespace). Une source A pourrait décrire une ressource dont elle choisira X comme<br />

identifiant. Une source B pourrait décrire une autre ressource, dont elle choisira égale-<br />

ment X comme identifiant. X est donc un identifiant unique d’une ressource au sein<br />

de sa source (i.e. unique au sein de A, et unique au sein de B), mais pas un identifiant<br />

unique sur le <strong>Web</strong> (puisque le X de A ne représente pas le même concept que le X de<br />

B). On dit alors que X est un identifiant au sein d’un espace de noms, en l’occurrence<br />

l’espace de noms de A ou celui de B. Lors de la sérialisation ou de l’écriture de triplets,<br />

que ce soit en RDF/XML ou en Turtle, il est en général préférable de définir à l’avance<br />

les différents espaces de noms qui vont être définis, et d’attribuer à chaque espace de<br />

noms un “nom local”, beaucoup plus court, afin d’abréger l’écriture des triplets et de les<br />

rendre plus lisibles.<br />

RDF/XML RDF/XML est une représentation d’un graphe RDF sous forme XML.<br />

Cette syntaxe est plus difficilement lisible par des humains, mais présente l’avantage<br />

d’être basée sur le standard XML, et donc facilement parsable par une machine.<br />

Un exemple de sérialisation en RDF/XML pourrait être le suivant, dont l’illustration<br />

est donnée à la figure 3.2 :


3.1 Ressource Description Framework (RDF) 23<br />

<br />

<br />

1989<br />

Bruxelles<br />

<br />

<br />

Figure 3.2 – Représentation graphique d’un ensemble de triplets.<br />

Turtle Il existe trois syntaxes fort similaires ayant pour but d’être plus facilement<br />

lisibles par les humains que RDF/XML : N-Triple, Turtle et Notation3 (N3). N-Triple<br />

est un sous-ensemble de Turtle, qui est lui-même un sous-ensemble de Notation3. Turtle<br />

étant le plus utilisé, c’est lui qui va être décrit ici.<br />

Turtle a pour but d’être une sérialisation de graphes RDF beaucoup plus facile à écrire<br />

et à interpréter par un humain. Son écriture est beaucoup plus directe et plus proche<br />

<strong>du</strong> modèle conceptuel de triplets. La même information que celle décrite ci-dessus en<br />

RDF/XML s’écrit de cette manière en Turtle :<br />

@prefix predicats: .<br />

predicats:AnneeDeNaissance "1989" .<br />

predicats:VilleNatale "Bruxelles" .


3.2 RDF Schema (RDFS) 24<br />

3.2 RDF Schema (RDFS)<br />

RDF Schema (RDFS) est un langage permettant de représenter de simples voca-<br />

bulaires RDF sur le <strong>Web</strong> de données [12]. La <strong>sémantique</strong> des prédicats et les classes<br />

d’entités peuvent être définies grâce aux vocabulaires et aux ontologies. Ceux-ci laissent<br />

notamment la possibilité de créer des règles d’inférence, via un mécanisme de classes<br />

et de propriétés, permettant ainsi de générer une grande quantité d’information et de<br />

triplets dérivés des triplets existants. Cela permet d’augmenter les capacités de raison-<br />

nement que peuvent avoir les machines et les programmes traitant les données <strong>du</strong> <strong>Web</strong><br />

<strong>sémantique</strong>.<br />

RDFS permet notamment de définir des classes et sous-classes de ressources. Ainsi,<br />

si l’on définit que B est une sous-classe de A, alors toute ressource X ayant pour triplet<br />

(X rdf:type B), c’est-à-dire étant de type B, est automatiquement également de type<br />

A.<br />

De même, il est possible de définir le type de donnée <strong>du</strong> sujet et de l’objet d’un<br />

prédicat. Par exemple, si l’on définit que le prédicat estMariéÀ a pour sujet une ressource<br />

de type Personne et a pour objet également une ressource de type Personne, alors si l’on<br />

définit le triplet (Romeo estMariéÀ Juliette), le système peut automatiquement<br />

inférer que les ressources Romeo et Juliette sont toutes deux de type Personne.<br />

Au dessus de la couche “vocabulaire RDF” qu’est RDFS, il existe des ontologies pour<br />

le <strong>Web</strong> <strong>sémantique</strong> comme expliqué précédemment, offrant encore plus de possibilités<br />

d’inférence de données. Le langage d’ontologies le plus connu est OWL et sera détaillé à<br />

la section suivante.<br />

3.3 <strong>Web</strong> Ontology Language (OWL)<br />

<strong>Web</strong> Ontology Language, dont l’acronyme est OWL, est un langage d’ontologie pour<br />

le <strong>Web</strong> <strong>sémantique</strong>, avec une <strong>sémantique</strong> formellement définie [13]. OWL permet donc<br />

d’étendre les possibilités de raisonnement déjà offertes par RDFS. Elle exprime des classes<br />

et propriétés, stockées elles-mêmes sous forme de documents au format RDF par exemple,<br />

publiées donc sur le <strong>Web</strong> de données.<br />

OWL existe lui-même en 3 sous-langages [5] : OWL Full, OWL DL 1 et OWL Lite.<br />

1. Description Logic


3.4 Les Triple Stores 25<br />

En complément de RDFS, OWL 2 permet de définir des propriétés supplémentaires,<br />

comme déclarer des classes disjointes (e.g. aucune ressource représentant une personne<br />

ne peut appartenir à la fois à la classe Homme et à la classe Femme). Il est également<br />

possible de déclarer des propriétés spécifiques sur les prédicats, comme la transitivité,<br />

l’unicité, l’inverse ou la symétrie.<br />

Par exemple, si l’on définit que le prédicat estUnAnc^etreDe est une propriété transi-<br />

tive, alors s’il existe un triplet (A estUnAnc^etreDe B) et un triplet (B estUnAnc^etreDe<br />

C), on peut automatiquement inférer le triplet (A estUnAnc^etreDe C). L’unicité ex-<br />

prime que si l’on définit que le prédicat aPourPèreBiologique est une propriété unique,<br />

alors on garantit qu’aucune ressource n’aura deux pères (biologiques) déclarés. Il est<br />

également possible d’exprimer des propriétés inverses, par exemple définir les prédicats<br />

estParentDe et estEnfantDe comme propriétés inverses l’une de l’autre. Quant à la<br />

symétrie, il est possible de déclarer un prédicat (e.g. estMariéÀ) comme symétrique,<br />

créant alors un lien à double sens entre le sujet et l’objet.<br />

Les ontologies ont un pouvoir d’expression relativement fort, car comme nous l’avons<br />

vu, elles permettent de déclarer un ensemble de règles concernant les données, d’inférer<br />

de nouvelles données sur base des données existantes, etc. Cependant, cela en augmente<br />

grandement la complexité de calculs et la décidabilité. Au vu <strong>du</strong> nombre de données<br />

disponibles sur le <strong>Web</strong> de données, et puisque ce nombre est amené à grandir expo-<br />

nentiellement dans les années à venir, l’utilisation de RDFS est privilégiée pour le <strong>Web</strong><br />

<strong>sémantique</strong>, même si cela ré<strong>du</strong>it les possibilités d’exploitation <strong>du</strong> potentiel <strong>du</strong> <strong>Web</strong> de<br />

données.<br />

3.4 Les Triple Stores<br />

Un Triple Store est une base de données conçue pour le stockage de triplets RDF. On<br />

pourrait comparer cela à une table d’une base de données relationnelle traditionnelle,<br />

contenant simplement trois colonnes (sujet — prédicat — objet), et une grande quantité<br />

d’entrées. Cependant, contrairement à une base de données traditionnelle, le Triple Store<br />

est optimisé pour un fonctionnement basé sur le stockage et la récupération des triplets<br />

RDF, avec notamment les mécanismes d’indexation qui en découlent.<br />

Son interfaçage est cependant relativement semblable à celui des bases de données<br />

traditionnelles : afin d’écrire ou de récupérer des données <strong>du</strong> Triple Store, il est nécessaire<br />

de formaliser la requête par l’utilisation d’un langage d’interrogation. Dans le cas <strong>du</strong> <strong>Web</strong>


3.5 Le langage d’interrogation SPARQL 26<br />

<strong>sémantique</strong>, le langage d’interrogation utilisé communément est SPARQL, qui sera décrit<br />

plus en détails à la section 3.5.<br />

Un triple store permet de stocker de l’information semi-structurée pour le <strong>Web</strong> sé-<br />

mantique, mais encore faut-il avoir la possibilité de l’interroger afin de récupérer cette<br />

information. Cela peut notamment se faire via un SPARQL endpoint jouant le rôle d’in-<br />

terface de requêtes. Cette notion sera détaillée plus en profondeur dans la section 3.5.1.<br />

Parmi les implémentations de Triple Stores, on peut citer entre autres Virtuoso 2<br />

(proposant une version open-source de son outil), Jena SDB 3 , AllegroGraph 4 ou encore<br />

Mulgara 5 .<br />

3.5 Le langage d’interrogation SPARQL<br />

Stocker une quantité énorme d’information de manière structurée n’aurait aucune<br />

utilité s’il était impossible d’accéder à cette information. Pour cela, il est nécessaire<br />

d’avoir un langage de requêtes, tout comme il existe des langages comme SQL et autres<br />

pour accéder aux données d’une base de données traditionnelle. Dans le cas <strong>du</strong> <strong>Web</strong><br />

<strong>sémantique</strong>, c’est SPARQL qui est le langage standard d’interrogation <strong>du</strong> <strong>Web</strong> séman-<br />

tique, plus particulièrement de graphes RDF. SPARQL est un acronyme pour Simple<br />

Protocol And RDF Query Language.<br />

Le composant de base d’une requête SPARQL est un BGP (Basic Graph Pattern),<br />

qui peut être vu comme un ensemble de morceaux de requête élémentaires, appelés TP<br />

(Triple Pattern). Un TP s’exprime sous la forme d’un triplet RDF, pouvant contenir<br />

une ou plusieurs variables en tant que sujet, prédicat ou objet [11]. Une variable est<br />

caractérisée par le fait qu’elle commence par un point d’interrogation dans le TP.<br />

Un exemple d’une requête SPARQL pourrait être le suivant :<br />

SELECT DISTINCT ?person ?name<br />

WHERE {<br />

}<br />

foaf:knows ?person .<br />

?person foaf:name ?name .<br />

2. http://virtuoso.openlinksw.com/<br />

3. http://jena.apache.org/documentation/sdb/<br />

4. http://www.franz.com/agraph/allegrograph/<br />

5. http://mulgara.org/


3.5 Le langage d’interrogation SPARQL 27<br />

!""#$%%&'("")'(*%+(,+)-.+/*0 *&(*+,'&-% !"#$%&' *&(*+'()# !'()#<br />

Fig. 2 Graph representation of a basic graph pattern (BGP) consisting of two triple patterns with query variables ?person and ?name.<br />

Figure 3.3 – Représentation visuelle d’un BGP sous forme d’un graphe RDF [11].<br />

?person ?name<br />

“Orri Erling”<br />

“Yves Raimond”<br />

“Axel Polleres”<br />

Table 1 Tabular presentation of solutions<br />

for the sample BGP (cf. Figure 2)<br />

in the sample RDF graph (cf. Figure 1).<br />

Une représentation sous forme d’un graphe RDF est donnée à la figure 3.3. Dans cet<br />

exemple, le premier TP est<br />

The predicate ( URI in an RDF triple specifies the foaf:knows tive RDF ?person) stores and wrappers over relational databases<br />

relationship between the subject and the object of the or over <strong>Web</strong> APIs. Some wrappers materialize the cre-<br />

triple. For example, the triple (, foaf:name, intro<strong>du</strong>isant “JohnScott”) une première states that variable the person ?person, aspouvant a response (à to cette URIétape-ci look-up requests. de la requête)<br />

identifiedprendre by the given la valeur subject deURI n’importe is calledquelle John Scott ressource <strong>du</strong> graphe interrogé (figure 3.1), ?person<br />

In addition to publishing a linked dataset following<br />

and (, foaf:knows, ) states that he knows<br />

another person Le second identified TP by est the (?person given object foaf:name URI. The ?name), an RDF intro<strong>du</strong>isant <strong>du</strong>mp or a SPARQL une nouvelle endpoint variable for their linked<br />

datasets. An RDF <strong>du</strong>mp is a large RDF document that<br />

semantics?name. of predicate CetteURIs nouvelle as well variable as classes est liée of enti- à la précédente : ?name doit prendre la valeur de<br />

contains the RDF graph which makes up the whole<br />

ties are defined<br />

l’objet<br />

in<br />

<strong>du</strong><br />

vocabularies.<br />

triplet liant<br />

The<br />

la ressource<br />

RDF Vocabulary<br />

représentée linked par ?person dataset. par A SPARQL le prédicat endpoint foaf:name. is an HTTP-based Fi-<br />

Definition Language (RDFS) [9] and the <strong>Web</strong> Ontology<br />

Language nalement, (OWL) on [31] obtiendra allow users comme to résultats define such de la requête query service les noms thatde executes toutes SPARQL les personnes queries (etover<br />

the<br />

vocabularies. URISince des ressources RDFS andreprésentant OWL allow toces represent personnes)<br />

linked<br />

que <br />

dataset. SPARQL [27], the query language for<br />

RDF, is based on RDF graph patterns and subgraph<br />

the definition connaît. of a vocabulary in the form of an RDF<br />

matching.<br />

graph, vocabularies can also be published as Linked<br />

Data on the <strong>Web</strong>. Les résultats The termsd’une intro<strong>du</strong>ced requête in vocabularies SPARQL peuvent The être basic exprimés buildingsous block la from formewhich d’un to enconstruct<br />

should besemble identified de résultats, with dereferencable comme présenté HTTP URIs. à la table more 3.1, complex ou sousSPARQL la formequery d’un (sous-)graphe<br />

patterns is called basic<br />

This practice enables a Linked Data aware application graph pattern (BGP). A BGP is a set of triple pat-<br />

to retrieve<br />

RDF.<br />

and<br />

Chaque<br />

utilize the<br />

solution<br />

definition<br />

est<br />

of<br />

donc<br />

terms<br />

une<br />

used<br />

correspondance<br />

in<br />

(matching) <strong>du</strong> BGP, c’est-à-dire un<br />

terns which are RDF triples that may contain query<br />

the currently ensemble processed définissant data. une valeur pour chaque variable variables de at the la requête, subject, predicate, tel que si and toutes object ces position<br />

The Linked variables Data sont principles remplacées require parto larespond valeur qui to leur (cf. est Figure donnée 2). Solutions dans la in solution, SPARQL la are solution defined in the<br />

a URI look-up request with an RDF graph that con- context of BGP matching: Each solution is a set of<br />

est un sous-graphe <strong>du</strong> graphe RDF que l’on a interrogé. Par exemple, les sous-graphes<br />

tains data about the entity identified by the URI; how- variable bindings that, basically, represents a match-<br />

de la figure 3.1 mis en surbrillance sont les sous-graphes<br />

ever, the principles do not prescribe what such an RDF ing subgraphcorrespondant in the queried RDF à la requête graph. For ex- instance,<br />

graph should primée lookci-dessus. like, what data Ces mêmes is necessary, résultats what vo- sont repris the subgraphs sous forme highlighted de tableau in Figure à la 1figure match3.1 the sample<br />

cabularies[11]. should be used, etc. Nonetheless, a common BGP in Figure 2; the solutions in Table 1 correspond<br />

practice is to provide a set of RDF triples that contain to these subgraphs. More complex query patterns are<br />

the requested URI ?person or that are closely related to them. represented by SPARQL ?name algebra expressions that pro-<br />

However, the principles require that the provided RDF cess BGP solutions to calculate<br />

“Orri Erling”<br />

the result of a SPARQL<br />

graphs should include RDF links pointing to data from query.<br />

“Yves Raimond”<br />

other data sources on the <strong>Web</strong>. An RDF link is an RDF<br />

Applications may access “AxelLinked Polleres” Data on the <strong>Web</strong> by<br />

triple where the subject is a URI in the namespace of<br />

querying the SPARQL endpoint provided for a linked<br />

one data provider andTable the object 3.1 is– another Ensemble URIde inrésultats the<br />

dataset. d’uneWhile requête such SPARQL an access[11]. may already provide the<br />

namespace of another provider. By connecting data of<br />

application with valuable data, this approach ignores<br />

different sources via RDF links the <strong>Web</strong> evolves into<br />

Des requêtes plus complexes peuvent bien évidemment the great potential être exprimées of the <strong>Web</strong> grâce of àData; SPARQL, it does not<br />

a platform where self-describing data of any type can<br />

exploit the possibilities of this huge dataspace that in-<br />

be posted, comme consumed, l’illustre and integrated par exemple in alastandardized figure 3.4. SPARQL offre également des possibilités d’extegrates<br />

a large number of interlinked datasets. These<br />

manner.<br />

possibilities can be achieved by the execution of com-<br />

Usually, the RDF graphs that can be retrieved by plex, structured queries over data spanning multiple<br />

looking up a URI on the <strong>Web</strong> of Data are part of a datasets; i.e., answers to such queries correspond to sub-<br />

linked dataset which is an RDF graph that contains graphs of the union of multiple linked datasets. In the<br />

data about multiple entities. Typical approaches to cre- remainder of this article we discuss different approaches<br />

ate a linked dataset are Linked Data interfaces over na- that enable the execution of such queries.<br />

3


3.5 Le langage d’interrogation SPARQL 28<br />

primer des contraintes (TP) requises ou optionnelles, ainsi que leurs conjonctions et<br />

disjonctions éventuelles.<br />

SELECT DISTINCT ?author ?phone<br />

WHERE {<br />

}<br />

swc:hasPart ?pub .<br />

?pub swc:hasTopic ?topic .<br />

?topic rdfs:label ?topicLabel .<br />

FILTER regex( str(?topicLabel), "ontology engineering", "i" ) .<br />

?pub swrc:author ?author .<br />

{?author owl:sameAs ?authAlt} UNION {?authAlt owl:sameAs ?author} .<br />

?authAlt foaf:phone ?phone .<br />

Figure 3.4 – Exemple de requête SPARQL [14].<br />

La requête illustrée à la figure 3.4 tra<strong>du</strong>ite en langue française donnerait ceci : Quels<br />

sont le nom et le numéro de téléphone des personnes ayant publié un article concernant<br />

l’ingénierie des ontologies lors de la European Semantic <strong>Web</strong> Conference de 2009 ?. La<br />

conférence est représentée par l’URI<br />

http://data.semanticweb.org/conference/eswc/2009/proceedings><br />

et s’ensuit un ensemble de liens définis entre les variables de la requête. De plus, cer-<br />

tains opérateurs spéciaux sont utilisés, comme l’opérateur FILTER permettant d’appliquer<br />

une contrainte d’expression régulière sur la variable ?topicLabel, ou encore l’opérateur<br />

UNION permettant d’unifier deux ensembles de résultats.<br />

Comme nous le verrons plus loin au chapitre 4, SPARQL peut être utilisé pour<br />

exprimer des requêtes auprès de plusieurs sources de données, que les données soient<br />

physiquement stockées sous forme de graphe RDF ou non [15]. En effet, il est tout à fait<br />

possible d’avoir une base de données qui ne soit pas un Triple Store, mais d’y adjoindre<br />

un convertisseur intermédiaire (wrapper) qui prend en charge la tra<strong>du</strong>ction des données<br />

physiques en un graphe RDF.<br />

3.5.1 SPARQL endpoint, une interface d’interrogation<br />

Lorsqu’une requête SPARQL est formulée, elle doit alors être adressée à une interface<br />

qui prendra en charge l’exécution de la requête, ainsi que le renvoi des résultats de<br />

celle-ci. Cette interface est appelée un point d’accès SPARQL (SPARQL endpoint) et


3.6 Le framework Jena 29<br />

est donc un service <strong>Web</strong> d’interrogation basé sur le protocole HTTP. Un Triple Store<br />

est généralement couplé à un SPARQL endpoint, afin d’offrir une interface capable de<br />

recevoir les requêtes SPARQL et de renvoyer le contenu <strong>du</strong> Triple Store correspondant.<br />

3.6 Le framework Jena<br />

Afin de pouvoir concrètement interroger les sources de données citées précédemment<br />

dans ce mémoire (points d’accès SPARQL, interfaces Linked Data, etc.), il est généra-<br />

lement utile de recourir à des frameworks conçus à cet effet. C’est le cas notamment de<br />

Jena, un élément important pour la suite de ce mémoire.<br />

Jena est un framework Java permettant la création d’applications pour le <strong>Web</strong> séman-<br />

tique et fournit un ensemble d’outils et librairies Java afin de faciliter le développement<br />

d’applications liées au <strong>Web</strong> <strong>sémantique</strong> et aux concepts de Linked Data. 6 Il en existe<br />

d’autres, tels que Redland 7 , Sesame 8 ou RDFLib 9 . Il utilise notamment les librairies de<br />

ARQ 10 , un moteur d’interrogation <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> capable de traiter des requêtes<br />

SPARQL, décrit à la section 3.7.<br />

Ce framework est la librairie sous-jacente directe de l’outil SQUIN qui sera détaillé<br />

au chapitre 5. Un exemple d’utilisation de Jena est donné à la figure 3.5. Le modèle m<br />

qui y est créé représente l’exemple donné à la section 2.2.<br />

Model m = ModelFactory.createDefaultModel();<br />

/* RESSOURCES */<br />

Resource pg = m.createResource("http://ulb.ac.be/Pierre_Gewelt");<br />

Resource bxl = m.createResource("http://villes.org/Bruxelles");<br />

/* PROPRIÉTÉS */<br />

Property an = m.createProperty("http://predicats.org/AnneeDeNaissance");<br />

Property vn = m.createProperty("http://predicats.org/VilleNatale");<br />

/* TRIPLETS RDF */<br />

pg.addLiteral(an, "1989");<br />

pg.addProperty(vn, bxl);<br />

Figure 3.5 – Exemple de création d’un modèle Jena.<br />

6. http://incubator.apache.org/jena/<br />

7. http://librdf.org/<br />

8. http://www.openrdf.org/doc/sesame2/users/<br />

9. http://www.rdflib.net<br />

10. http://incubator.apache.org/jena/documentation/query/index.html


3.7 Le moteur d’interrogation ARQ 30<br />

Le graphe RDF représentant ce modèle a été précédemment illustré à la figure 3.2.<br />

3.7 Le moteur d’interrogation ARQ<br />

ARQ 11 est un moteur d’interrogation permettant d’exécuter des requêtes SPARQL<br />

sur un modèle Jena. Il est également développé par l’Apache Foundation Software, étant<br />

donné qu’il est un élément constitutif de la librairie Jena.<br />

Son utilisation est relativement simple, un exemple en est donné à la figure 3.6 [16].<br />

Plusieurs moteurs d’interrogation dérivés de ARQ ont été développés, comme DARQ 12<br />

par exemple.<br />

import com.hp.hpl.jena.query.* ;<br />

Model model = ... ; // Notre modèle Jena<br />

String queryString = "SELECT ... WHERE { ... }" ; // Notre requ^ete SPARQL<br />

Query query = QueryFactory.create(queryString) ; // Objet de la requ^ete<br />

QueryExecution qexec = QueryExecutionFactory.create(query, model) ;<br />

// Instance d’exécution<br />

try {<br />

ResultSet results = qexec.execSelect() ; // Ensemble de résultats<br />

for ( ; results.hasNext() ; )<br />

{<br />

QuerySolution soln = results.nextSolution() ; // Solution courante<br />

RDFNode x = soln.get("maVariable") ; // Valeur de maVariable...<br />

Resource r = soln.getResource("VarR") ; // ...comme ressource<br />

Literal l = soln.getLiteral("VarL") ; // ...comme litéral<br />

}<br />

} finally { qexec.close() ; }<br />

Figure 3.6 – Exemple d’exécution d’une requête SPARQL avec ARQ [16].<br />

Nous avons vu dans ce chapitre un ensemble d’outils permettant la mise en appli-<br />

cation concrète <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> et de ses principes. Comme nous l’avons observé<br />

précédemment au point 2.4, la quantité de données publiées sur le <strong>Web</strong> de données est<br />

en croissance exponentielle, et il est donc nécessaire de mettre en place des méthodes<br />

d’interrogation efficaces. Au chapitre 4, nous allons étudier différentes méthodes d’inter-<br />

rogation <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> et comparer leurs différences.<br />

11. http://jena.apache.org/documentation/query/<br />

12. http://darq.sourceforge.net/


Chapitre 4<br />

Stockage et interrogation des<br />

données<br />

Nous avons vu au chapitre 2 les tendances et concepts généraux <strong>du</strong> <strong>Web</strong> semantique,<br />

et avons analysé plus en profondeur les standards et outils existants permettant l’uti-<br />

lisation concrète de ce <strong>Web</strong> de données. Pour que ce dernier puisse être utilisable par<br />

tout un chacun, il est bien sûr nécessaire de mettre en place des systèmes de stockage<br />

des données <strong>sémantique</strong>s et des triplets RDF. En effet, sans ces éléments centraux que<br />

sont les sources de données, l’interrogation <strong>du</strong> <strong>Web</strong> de données perdrait tout son sens.<br />

Dans ce chapitre, nous allons nous intéresser à plusieurs méthodes d’interrogation <strong>du</strong> web<br />

<strong>sémantique</strong>, dont le Link Traversal, une approche centrale dans le cadre de ce mémoire.<br />

Contenu<br />

4.1 Les entrepôts de données . . . . . . . . . . . . . . . . . . . . . . 34<br />

4.2 Les moteurs de recherche . . . . . . . . . . . . . . . . . . . . . . 35<br />

4.3 La fédération de requêtes . . . . . . . . . . . . . . . . . . . . . . 35<br />

4.4 La fédération de requêtes avec découverte active (ADQF) . . 36<br />

4.5 Le Link Traversal, une approche d’interrogation <strong>récursive</strong> . . 37<br />

Comme expliqué ci-dessus, nous allons dans ce chapitre faire une analyse compara-<br />

tive de cinq différentes méthodes d’interrogation <strong>du</strong> web <strong>sémantique</strong>. Le contenu de ce<br />

chapitre est principalement inspiré de la publication [11] d’Olaf Hartig et al.<br />

Il est possible de regrouper ces méthodes en deux catégories : les méthodes d’interro-<br />

gation traditionnelles d’une part, telles que l’interrogation d’un entrepôt de données, les<br />

moteurs de recherche ou encore la fédération de requêtes et, d’autre part, des méthodes<br />

31


! "#$%&'($)!*&!<br />

*+##,&)!<br />

"#)&9:8&!*&!<br />

*+##,&)!<br />

3#$&%%+;&2:8&)!<br />

//?)!2.@!<br />

*+##,&)!<br />

*A+%3;3#&!<br />

B$%./$.%&)!*&!<br />

*+##,&)!<br />

7&9')!*&!<br />

%,'+#)&!<br />

!"##$%&'()$*<br />

+,-).$%&'<br />

%#&%809%&'!%'<br />

!"##$%&':7;'<br />

0)13&'<br />

-+$&.%)!*&!<br />

%&/0&%/0&!<br />

/%0'!%'<br />

!"##$%&'<br />

1,*,%2$3+#!<br />

*&)!<br />

%&4.5$&)!<br />

&"1)+%&'<br />

+"##1%&'<br />

-)023)-2)%'


sur base de l’ensemble de triplets).<br />

Accès aux données d’origine Cette propriété indique si la méthode d’interroga-<br />

tion utilise directement les données publiées à leur source (typiquement dans le cas de<br />

requêtes distribuées) ou si elle passe par une mémoire cache intermédiaire (comme un<br />

entrepôt de données ou une mémoire d’indexation des données).<br />

Structures de données Cela représente les structures de données utilisées conte-<br />

nant des informations sur celles-ci (indexation, statistiques, etc.), offrant ainsi la pos-<br />

sibilité d’avoir des informations préalables sur l’exécution de la requête (ce qui permet<br />

par exemple d’optimiser la requête ou d’estimer le temps et le nombre de résultats de<br />

celle-ci).<br />

Temps de réponse Il y a deux données à cela : d’une part le temps écoulé entre<br />

le début de la requête et le premier résultat renvoyé, et d’autre part le temps écoulé<br />

jusqu’à l’exécution complète de la requête (dernier résultat). Typiquement, les requêtes<br />

distribuées présenteront un écart plus grand entre le premier et le dernier résultat que<br />

les requêtes centralisées.<br />

Exhaustivité L’exhaustivité représente la quantité de résultats renvoyés une fois la<br />

requête terminée par rapport à la quantité totale des résultats potentiellement trouvables<br />

(i.e. vis-à-vis de l’ensemble de données interrogeables). De manière générale, les méthodes<br />

ayant le <strong>Web</strong> de données tout entier comme ensemble de données interrogeables auront<br />

une exhaustivité plus petite que 100%, puisqu’une exhaustivité de 100% nécessiterait<br />

d’interroger la totalité des sources <strong>du</strong> <strong>Web</strong> de données, ce qui serait infaisable en pratique<br />

car beaucoup trop long.<br />

Données à jour Cette information détermine dans quelle mesure les données utili-<br />

sées lors <strong>du</strong> traitement de la requête sont à jour. Typiquement, les méthodes interrogeant<br />

les sources d’origine des données sont (par définition) à jour, là où une méthode utilisant<br />

une mise en cache intermédiaire de l’information le seront moins.<br />

L’explication des critères ayant été donnée, nous pouvons maintenant aborder cha-<br />

cune des cinq méthodes d’interrogation décrites à la table 4.1. Dans tous les cas, nous<br />

considérons SPARQL comme le langage utilisé pour formuler les requêtes exécutées.<br />

33


4.1 Les entrepôts de données 34<br />

4.1 Les entrepôts de données<br />

Dans cette méthode d’interrogation, les données sont collectées et stockées dans un<br />

entrepôt de données (data warehouse) central, et les requêtes sont effectuées uniquement<br />

sur l’ensemble des données contenues dans cet entrepôt de données. Ce dernier peut être<br />

utilisé comme mémoire cache, en y préchargeant une multitude d’ensembles de données<br />

interconnectés (linked datasets, ou LDS). Pour rappel, les principes de Linked Data<br />

veulent non seulement que l’on mette à disposition des ensembles de données (datasets),<br />

mais également qu’on les lie entre eux (linked) grâce à des liens de type sameAs ou<br />

refersTo, afin que le tout forme un seul ensemble de données connectées (comme illustré<br />

à la figure 2.6).<br />

Les entrepôts de données offrent donc un temps de réponse très rapide, car tout est<br />

centralisé, et des accès réseaux ne sont pas nécessaires à l’exécution de la requête (ce<br />

qui la rendrait plus longue). En terme de performance, c’est donc la méthode la plus<br />

efficace [11]. En effet, les accès réseau ré<strong>du</strong>isent considérablement le temps d’une requête ;<br />

comme nous le verrons plus loin, le temps de calculs CPU est court par rapport au temps<br />

d’accès réseau. Puisque toutes les données sont stockées localement, il est donc possible<br />

de préétablir des index et statistiques sur les données, permettant d’accélérer le temps<br />

de requête. Cependant, le nombre de données publiées sur le <strong>Web</strong> de données connaît<br />

une croissance exponentielle (comme expliqué à la section 2.4) et cela pourrait devenir<br />

problématique dans le futur pour une méthode d’interrogation de grands entrepôts de<br />

données. Afin de pallier cela, il existe d’autres approches telles que le Link Traversal,<br />

élément central de ce mémoire.<br />

Il existe plusieurs manières d’alimenter un entrepôt de données. La plus simple<br />

consiste à charger des ensembles de triplets RDF bruts (RDF <strong>du</strong>mps). Chaque LDS<br />

est identifié par une URI, ce qui permet d’obtenir un ensemble de graphes nommés<br />

(named graphs) [11, 17] et de pouvoir tracer la provenance des données contenues dans<br />

l’entrepôt de données. Il est également possible d’interroger des points d’accès SPARQL<br />

(SPARQL endpoints) pour récupérer des données, ou encore de déréférencer (look-up)<br />

les URI des ressources déjà présentes.<br />

Si le préchargement des données permet d’améliorer le temps de requête, il a comme<br />

conséquence en contrepartie que les données sont susceptibles de ne pas être à jour<br />

lors d’une requête. En effet, lorsqu’une source de données met à jour ces dernières, ces<br />

modifications ne sont pas reflétées directement dans les entrepôts de données en aval<br />

de ces sources. Il existe cependant des approches permettant de garder les données de<br />

l’entrepôt synchronisées avec celles de la source [11, 18].


4.2 Les moteurs de recherche 35<br />

Pour conclure, le renvoi de résultats est donc très rapide (aussi bien pour le premier<br />

résultat que pour le dernier), mais ceux-ci sont limités uniquement aux données sto-<br />

ckées dans l’entrepôt de données et n’offrent donc pas d’exhaustivité vis-à-vis de toute<br />

l’information publiée sur le <strong>Web</strong> de données.<br />

4.2 Les moteurs de recherche<br />

Les moteurs de recherche <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> fonctionnent de manière similaire aux<br />

moteurs de recherche traditionnels. Ils explorent le <strong>Web</strong> de données en suivant récursi-<br />

vement les liens RDF rencontrés <strong>du</strong>rant le processus, et indexent au fur et à mesure les<br />

données découvertes. Ils offrent également une interface publique, afin que tout un cha-<br />

cun puisse effectuer des recherches sur ces données indexées. On peut citer entre autres<br />

Swoogle, Sindice ou Falcons [11, 19, 20].<br />

Ils offrent cependant des fonctionnalités supplémentaires par rapport aux moteurs de<br />

recherche traditionnels :<br />

– En plus de renvoyer des résultats au format HTML pour lecture par un humain,<br />

ils possèdent de par leur nature davantage de liens entre les données et sont donc à<br />

même de renvoyer également des résultats au format RDF, permettant donc aussi<br />

à des machines et programmes d’effectuer des requêtes directement via leur API 1 .<br />

– En plus de permettre une recherche traditionnelle basée sur une simple chaîne de<br />

caractères, il est parfois possible d’effectuer des requêtes avancées par triple pattern<br />

matching.<br />

Leur ensemble de données interrogeables est le <strong>Web</strong> de données complet, puisque par<br />

définition ces moteurs explorent en permanence les LDS. Cependant, il peut exister un<br />

certain délai entre la mise à jour d’une donnée à sa source et la mise à jour de l’indexation<br />

correspondante dans le moteur de recherche. Pour cette raison, leur exhaustivité est<br />

inférieure à 100%.<br />

4.3 La fédération de requêtes<br />

La fédération de requêtes est une approche distribuée, permettant de répartir l’exé-<br />

cution de la requête sur plusieurs sources de données autonomes. Un premier serveur<br />

analyse la requête et la décompose en plusieurs sous-requêtes. Ces dernières sont en-<br />

suite envoyées chacune à une source de données autonome différente, et ces sources<br />

1. Application Programming Interface


4.4 La fédération de requêtes avec découverte active (ADQF) 36<br />

renvoient alors les résultats correspondants. Le premier serveur peut alors agréger ces<br />

sous-résultats et renvoyer les résultats finaux à l’utilisateur. C’est donc une exécution<br />

distribuée et non centralisée, comme c’était le cas pour les entrepôts de données et les<br />

moteurs de recherche.<br />

Cette méthode présente l’avantage qu’il n’est plus nécessaire de garder les données<br />

copiées synchronisées, puisque l’on accède directement à la source. De plus, cela ne<br />

nécessite pas d’espace disque supplémentaire redondant. Elle est en revanche beaucoup<br />

plus lente, puisqu’elle nécessite beaucoup d’accès réseau, ce qui ralentit considérablement<br />

le temps de la requête. De plus, l’ensemble de données interrogeables de cette méthode<br />

est limité aux sources de données connues.<br />

L’exhaustivité de la fédération de requêtes est de 100%, sauf dans le cas où l’interface<br />

d’un LDS est inaccessible sur le réseau (panne, etc.). L’interrogation de ces LDS s’exprime<br />

généralement par une requête SPARQL et se fait typiquement via leur point d’accès<br />

SPARQL.<br />

L’exécution d’une telle requête SPARQL implique souvent beaucoup de jointures (une<br />

par Triple Pattern dans le pire des cas), or ces jointures allongent drastiquement le temps<br />

de requête, puisqu’effectuées sur un accès réseau. Au vu de la croissance des données pu-<br />

bliées sur le <strong>Web</strong> de données, et vu la complexité potentielle des requêtes SPARQL,<br />

il est donc nécessaire d’établir des méthodes d’optimisation pour pallier cette lenteur.<br />

Les méthodes d’optimisation traditionnelles de bases de données ne sont pas spéciale-<br />

ment applicables dans le cas <strong>du</strong> <strong>Web</strong> de données, car elles reposent sur la connaissance<br />

préalable de la structure des données contenues dans les sources de données distantes.<br />

Mais alors que les bases de données possèdent des données structurées (les schémas<br />

sont connus d’avance), le <strong>Web</strong> de données présente des données semi-structurées, et il<br />

n’existe donc pas de tel schéma. Il est donc nécessaire d’établir de nouveaux algorithmes<br />

d’optimisation, et des recherches sont actuellement effectuées en ce sens [11, 21, 22].<br />

4.4 La fédération de requêtes avec découverte active (ADQF)<br />

Les trois approches présentées précédemment impliquent la connaissance préalable<br />

des sources de données que l’on va interroger, ce qui restreint la portée des applications<br />

développées, puisque celles-ci sont limitées à l’utilisation de ces sources connues. Afin<br />

d’utiliser tout le potentiel <strong>du</strong> <strong>Web</strong> de données, il est donc nécessaire d’implémenter des<br />

méthodes de découverte active des sources de données, permettant ainsi de découvrir de<br />

nouvelles sources <strong>du</strong>rant l’exécution de la requête elle-même.


4.5 Le Link Traversal, une approche d’interrogation <strong>récursive</strong> 37<br />

Une première approche dans ce sens est la fédération de requêtes avec découverte ac-<br />

tive (Active Discovery Query Federation, ou ADQF). Elle est basée sur le même principe<br />

que la fédération de requêtes présentées ci-dessus, mais rajoute à cela une découverte<br />

active de nouveaux LDS non connus exposés par un point d’accès SPARQL, qui seraient<br />

alors interrogeables en plus des sources de données connues d’avance.<br />

Cette méthode présente les avantages de la fédération de requêtes (distribution de la<br />

requête, non-redondance de l’information) et offre en outre des résultats plus complets<br />

grâce à la découverte active de nouvelles sources. Cette découverte de nouvelles sources<br />

peut se faire soit au moment de la requête elle-même, soit à l’avance de manière pro-<br />

active (plus proche <strong>du</strong> fonctionnement d’un moteur de recherche, sauf qu’il n’y a ici pas<br />

d’indexation ni de stockage des données, mais seulement des points d’accès SPARQL).<br />

Elle peut soit s’opérer via l’interrogation d’un dépôt central (comme l’interrogation d’un<br />

moteur de recherche par exemple), soit en suivant les liens RDF précédemment décou-<br />

verts.<br />

En contrepartie, l’ADQF présente le même problème que la fédération de requêtes,<br />

c’est-à-dire la non-connaissance préalable de la structure et de la quantité de données<br />

contenues dans les sources de données. Pour y remédier, il faudrait récupérer ces infor-<br />

mations au moment de la requête et adapter le plan d’exécution en fonction, par exemple<br />

en découpant la requête en un nombre encore plus élevé de sous-requêtes, afin de la dis-<br />

tribuer davantage. Cette nécessité est valable pour la fédération de requêtes passive et<br />

active, mais est d’autant plus vraie dans le cas de la découverte active.<br />

Selon Olaf Hartig [11], il n’existe pas encore d’implémentation complète de cette<br />

approche. Cependant, ce dernier pose déjà les bases théoriques de son fonctionnement.<br />

4.5 Le Link Traversal, une approche d’interrogation récur-<br />

sive<br />

Comme expliqué au début <strong>du</strong> point précédent, les trois premières approches présen-<br />

tées limitent les données interrogées aux sources de données connues, et il est nécessaire<br />

d’implémenter des méthodes de découverte active de sources de données pour profiter<br />

de tout le potentiel <strong>du</strong> <strong>Web</strong> de données. L’ADQF en est une et la traversée de liens<br />

(Link Traversal) en est une autre, encore plus distribuée que la précédente. Dans la<br />

suite de ce mémoire, nous appellerons cette approche par sa dénomination anglophone,<br />

Link Traversal.


4.5 Le Link Traversal, une approche d’interrogation <strong>récursive</strong> 38<br />

Le Link Traversal est une approche totalement basée sur le parcours de liens RDF<br />

et ne nécessite aucunement la connaissance préalable de sources de données <strong>sémantique</strong>s<br />

[23]. Elle est partie <strong>du</strong> concept d’une navigation manuelle des liens RDF, implémentée<br />

par le navigateur Tabulator, un projet de navigateur de données RDF [11, 24]. Le Link<br />

Traversal offre une navigation automatisée de ce concept et permet ainsi l’exécution de<br />

requêtes SPARQL sur le <strong>Web</strong> de données, sans la nécessité de points d’accès SPARQL<br />

pour autant. En effet, cela nécessite seulement que les URI identifiant les ressources<br />

soient déréférençables (i.e. par application des principes de Linked Data [6], le déréfé-<br />

rencement de l’URI d’une ressource par une requête HTTP renvoie des triplets RDF<br />

contenant de l’information sur la ressource en question). Ainsi, chaque ressource ren-<br />

voie une quantité d’informations limitée, mais très pertinente puisque ces informations<br />

concernent la ressource en question.<br />

La méthode d’interrogation <strong>du</strong> Link Traversal est la suivante [14] : lors de l’exécution<br />

d’une requête, l’algorithme alterne en permanence entre la résolution d’un Triple Pattern<br />

(TP) de la requête et le déréférencement de nouvelles URI découvertes <strong>du</strong>rant l’exécution<br />

de la requête. Cela permet d’augmenter en permanence l’ensemble de données récupérées<br />

localement le temps de la requête, en y ajoutant des données ayant une forte probabilité<br />

d’être pertinentes pour l’exécution de cette requête. Le temps d’accès réseau étant un<br />

facteur dominant pour le temps d’exécution de la requête, il ne serait pas de bon ton<br />

de déréférencer toutes les URI découvertes lors de déréférencements précédents, car bon<br />

nombre d’entre elles ne seraient peut-être pas pertinentes pour la requête courante.<br />

Ainsi, l’algorithme ne déréférence que les URI contenues dans les solutions intermédiaires<br />

pro<strong>du</strong>ites au fur et à mesure de l’évaluation de la requête (un exemple illustrant cela est<br />

donné plus bas).<br />

Le Link Traversal a pour avantage de profiter totalement <strong>du</strong> potentiel <strong>du</strong> <strong>Web</strong> sé-<br />

mantique et permet d’obtenir, avec peu de triplets RDF, beaucoup d’informations utiles<br />

pour la résolution de la requête. On peut donc obtenir des résultats pertinents en un<br />

temps raisonnable. Par contre, le temps nécessaire avant d’obtenir le dernier résultat<br />

peut être très long comparé aux autres méthodes. Son exhaustivité est inférieure à 100%<br />

puisque, comme dit précédemment, il serait impensable d’interroger l’entièreté <strong>du</strong> <strong>Web</strong><br />

de données avant d’exécuter la requête.<br />

Exemple d’application <strong>du</strong> Link Traversal<br />

Un exemple d’application <strong>du</strong> Link Traversal est donné plus loin à la section 5.3.1.<br />

Cet exemple montrera concrètement que l’ensemble de données local est continuellement


4.5 Le Link Traversal, une approche d’interrogation <strong>récursive</strong> 39<br />

alimenté de données potentiellement intéressantes au fur et à mesure de l’exécution de<br />

la requête, que la découverte de nouvelles informations peut se faire grâce au déréfé-<br />

rencement des URI découvertes, ramenant de nouvelles données de plusieurs espaces de<br />

noms (donc en général de plusieurs sources différentes), et que chaque source a référencé<br />

des liens vers d’autres sources potentiellement pertinentes, permettant à l’utilisateur de<br />

n’avoir eu aucune connaissance préalable des sources de données.


Chapitre 5<br />

Analyse de SQUIN, un outil<br />

d’interrogation<br />

Comme nous l’avons vu précédemment, la méthode d’interrogation <strong>du</strong> Link Traversal<br />

est un nouveau paradigme d’exécution et offre un haut potentiel d’exploitation <strong>du</strong> <strong>Web</strong><br />

de données. Afin de concrétiser cet algorithme, Hartig et al. ont développé un outil<br />

d’interrogation nommé SQUIN 1 , basé sur les principes <strong>du</strong> Link Traversal [14].<br />

SQUIN est une interface d’interrogation <strong>du</strong> <strong>Web</strong> de données, pour les sources adhé-<br />

rant aux principes de Linked Data. Cette librairie, dont le nom est un acronyme de<br />

Semantic web QUery INterface, permet d’exécuter une requête SPARQL en la résolvant<br />

par la méthode <strong>du</strong> Link Traversal.<br />

Trouvant l’approche <strong>du</strong> Link Traversal et l’outil SQUIN très intéressants grâce à leur<br />

énorme potentiel d’exploitation, j’ai décidé, dans le cadre de mon mémoire, d’analyser<br />

dans un premier temps cette librairie pour ensuite tenter de trouver des améliorations à<br />

lui apporter en vue de diminuer le temps nécessaire à l’obtention des résultats. En effet,<br />

la librairie étant basée sur une approche totalement distribuée, les temps d’exécution<br />

peuvent être parfois très longs (de l’ordre de plusieurs minutes facilement), et un gain en<br />

temps serait appréciable pour les utilisateurs de l’outil. Cependant, je n’avais aucune cer-<br />

titude quant à la faisabilité de cette amélioration. C’est pourquoi la suite de ce mémoire<br />

de recherche est composée en trois parties : d’abord une analyse de l’outil (d’un point<br />

de vue utilisation ainsi qu’implémentation), suivie des différentes pistes que j’ai inves-<br />

tiguées afin d’améliorer l’outil et leurs résultats, et enfin diverses idées supplémentaires<br />

1. http://squin.sourceforge.net/<br />

40


5.1 La librairie 41<br />

d’amélioration qu’il aurait été trop long d’approfondir dans le cadre de ce mémoire. La<br />

suite de ce chapitre décrit la première partie, l’analyse de l’outil.<br />

Contenu<br />

5.1 La librairie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

5.2 Son utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

5.3 Ses principes de fonctionnement et son architecture . . . . . 42<br />

5.1 La librairie<br />

La librairie SQUIN, écrite en Java, a été développée par Olaf Hartig et Juan Sequeda.<br />

Le projet a débuté fin 2008 et la dernière mise à jour date de juin 2011. La librairie est<br />

basée sur deux frameworks sous-jacents : Jena et ARQ. Ces derniers ont été décrits<br />

précédemment, respectivement aux sections 3.6 et 3.7.<br />

SQUIN utilise Jena afin de créer des modèles RDF pour représenter les données<br />

qu’elle traite. ARQ est quant à lui utilisé afin d’exécuter la requête SPARQL sur le<br />

modèle créé avec Jena. Comme nous l’avons vu précédemment, le modèle Jena ne cessera<br />

de s’enrichir au fur et à mesure de l’exécution de la requête. La librairie est publiée sous<br />

deux versions : une version standard et une version stand-alone.<br />

La version standard possède le moteur d’interrogation de SQUIN et est récupérable<br />

via un dépôt Subversion (https://squin.svn.sourceforge.net/svnroot/squin). Afin<br />

de l’utiliser, il faut l’intégrer dans un projet Java et l’appeler via les méthodes Java pu-<br />

bliques de la librairie. C’est ce code source-là que j’ai repris afin de l’améliorer.<br />

La version stand-alone est un exécutable Java, pouvant être lancé sans qu’il soit<br />

nécessaire d’intégrer la librairie dans un projet Java personnel. Elle intègre un serveur<br />

HTTP (Jetty) et une interface <strong>Web</strong> afin d’exécuter les requêtes. Une fois l’exécutable<br />

lancé, le serveur HTTP Jetty écoute localement et il suffit donc d’utiliser un navigateur<br />

à l’adresse http://localhost:8890/SQUIN afin de pouvoir exécuter une requête à l’aide<br />

de SQUIN. Cette version est plus pratique pour les personnes désirant simplement utiliser<br />

la librairie telle qu’elle est. La mise en place de ces deux versions est détaillée à la section<br />

5.2.


5.2 Son utilisation 42<br />

5.2 Son utilisation<br />

Nous allons ici donner une explication sur la manière d’utiliser concrètement ces deux<br />

librairies.<br />

5.2.1 Version stand-alone<br />

Pour mettre en place la version stand-alone, la procé<strong>du</strong>re est relativement directe.<br />

1. Installer Jetty au préalable (distribué par Apache).<br />

2. Récupérer la version stand-alone sur la page <strong>Web</strong> <strong>du</strong> projet 2 .<br />

3. Ouvrir un terminal et se placer dans le répertoire racine <strong>du</strong> projet.<br />

4. Exécuter la commande bin/squinserver.sh start . Cela va alors lancer un ser-<br />

veur HTTP Jetty écoutant localement sur le port 8890.<br />

5. Ouvrir un navigateur web et aller sur http://localhost:8890/SQUIN afin d’ob-<br />

tenir l’interface <strong>Web</strong> de SQUIN, comme illustré à la figure 5.1.<br />

6. Il est alors loisible à l’utilisateur d’y exécuter une requête SPARQL et d’en récu-<br />

pérer les résultats.<br />

5.2.2 Version standard<br />

L’utilisation de la version standard demande un peu plus de manipulations. Après<br />

l’avoir téléchargée sur le site <strong>Web</strong> <strong>du</strong> projet (http://squin.sourceforge.net/), il faut<br />

en incorporer les sources dans un projet Java créé au préalable. Une fois cela fait, voici ci-<br />

dessous un exemple de code Java constituant un squelette de base permettant d’exécuter<br />

une requête SPARQL grâce à l’outil SQUIN. Des informations sur certaines des classes<br />

citées dans l’exemple seront données dans la section 5.3.2.<br />

5.3 Ses principes de fonctionnement et son architecture<br />

Dans cette section, nous aborderons les aspects d’architecture et d’implémentation de<br />

SQUIN. La première partie est une analyse et explication <strong>du</strong> mécanisme fondamental de<br />

SQUIN pour appliquer les principes <strong>du</strong> Link Traversal, à savoir un fonctionnement par<br />

chaîne d’itérateurs. La deuxième partie est une analyse de la librairie Java en elle-même,<br />

et des classes principales utilisées lors de son exécution.<br />

2. http://squin.sourceforge.net/


5.3 Ses principes de fonctionnement et son architecture 43<br />

Figure 5.1 – Interface <strong>Web</strong> de SQUIN en version stand-alone.<br />

String queryString = "SELECT ... WHERE { ... }"; // La requ^ete SPARQL<br />

LinkTraversalBasedQueryEngine.register();<br />

QueriedDataset qds = new QueriedDatasetImpl();<br />

JenaIOBasedQueriedDataset qdsWrapper = new JenaIOBasedQueriedDataset( qds );<br />

JenaIOBasedLinkedDataCache ldcache = new JenaIOBasedLinkedDataCache( qdsWrapper );<br />

Dataset dsARQ = new LinkedDataCacheWrappingDataset( ldcache );<br />

QueryExecution qe = QueryExecutionFactory.create(queryString, dsARQ);<br />

ResultSet results = qe.execSelect(); // Initialise la requ^ete<br />

while (results.hasNext()) { // Exécute l’algorithme itératif<br />

System.out.println("Résultat : ");<br />

QuerySolution s = results.nextSolution(); // Un résultat<br />

System.out.println(s.toString()); // Par exemple, on l’affiche<br />

}<br />

try {<br />

ldcache.shutdownNow(4000);<br />

} catch (Exception e) { ... }<br />

Figure 5.2 – Exemple de code Java pour l’utilisation de SQUIN.


5.3 Ses principes de fonctionnement et son architecture 44<br />

5.3.1 Fonctionnement par chaîne d’itérateurs<br />

Comme dit précédemment, SQUIN est un outil implémentant les principes <strong>du</strong> Link<br />

Traversal. Concrètement, il est basé sur une chaîne d’itérateurs de TP (Triple Pattern),<br />

dont le mécanisme est le suivant. Prenons en exemple la requête illustrée à la figure 5.3.<br />

?p ex:affiliated_with <br />

?p ex:interested_in ?b<br />

?b rdf:type <br />

Figure 5.3 – Exemple de requête SPARQL pour SQUIN (intérieur de la clause WHERE)<br />

[23].<br />

On a donc une requête composée de trois Triple Patterns (TP). Lors de la création<br />

de la requête, l’outil crée une chaîne d’itérateurs, chaque itérateur étant responsable de<br />

"#$%&'()*+(,-)"#(.+/012)3'$2<br />

l’évaluation d’un TP. On aura donc ici trois itérateurs, respectivement I1, I2 et I3,<br />

comme illustré à la figure 5.4.<br />

!"#$%<br />

!"!!!"#$%&&'('%)"*+,')-!!!.-))/$001110234%56<br />

!"!!!"#$'7)"3"8)"*+'7! !#<br />

!#!!!3*&$)9/"!!!.-))/$001110:22;6<br />

)/ B !=!>!!"!?!"#$%&&'('%)"*+,')-!?!.-))/$001110234%56@ ! 5<br />

)/ < !=!>!!"!?!"#$'7)"3"8)"*+'7!?!!#!@ ! !<br />

)/ A !=!>!!#!?!3*&$)9/"!?!.-))/$001110:22;6!@ ! 4<br />

!"#$%&#'()*%+%,-'.+/0.1"-2*-%34-'5%6"#00)0*%$.'%#0%7(-'#(.'%789"-8-0(#().0%.$%:)0;%#"%?#>-2%34-'5%@A-B4().0 CD<br />

Figure 5.4 – Chaîne de trois itérateurs pour l’évaluation de la requête [23].<br />

Le fonctionnement d’un itérateur In de la chaîne est le suivant. Chaque itérateur<br />

In a connaissance de l’itérateur In−1 qui le précède (à l’exception de I1 qui n’a pas de<br />

prédécesseur).


5.3 Ses principes de fonctionnement et son architecture 45<br />

En sortie, un itérateur In pro<strong>du</strong>it un solution (binding). Une solution partielle (resp.<br />

complète) est définie comme une association (mapping) de valeur à une partie des (resp.<br />

à toutes les) variables de la requête. Le dernier itérateur pro<strong>du</strong>ira donc des solutions<br />

complètes, et les autres des solutions partielles ou complètes. En effet, dans le cas où le<br />

dernier itérateur n’intro<strong>du</strong>it pas de nouvelle variable, toute solution pro<strong>du</strong>ite par l’avant-<br />

dernier itérateur est une solution complète potentielle (“potentielle”car ce n’est pas parce<br />

qu’une solution est complète qu’elle répond pour autant à la requête complète, il faut<br />

pour cela encore que le dernier itérateur valide la solution potentielle vis-à-vis <strong>du</strong> TP<br />

dont il est responsable).<br />

En entrée, un itérateur In consomme la solution partielle pro<strong>du</strong>ite par son prédéces-<br />

seur In−1. Dans le cas particulier de I1, celui-ci consomme en entrée une solution initiale<br />

dans laquelle aucune variable n’a de valeur associée.<br />

Lors d’une première demande de solution, un itérateur In va demander une solution<br />

partielle à In−1 (appellons-la solutionPartielleActuelle). Par la suite, à chaque appel<br />

de la fonction de sortie de In, celui-ci va renvoyer la solution suivante de solutionPar-<br />

tielleActuelle qui répond positivement au TP dont il est responsable. Lorsqu’une telle<br />

solution suivante n’existe plus, In va alors demander à In−1 une nouvelle solution d’en-<br />

trée, qu’il sauve dans solutionPartielleActuelle. Il peut alors recommencer l’évaluation<br />

de son TP sur base de cette nouvelle solution d’entrée. Cette boucle se termine lorsqu’In<br />

reçoit la valeur symbolique FIN de In−1 comme solution d’entrée, auquel cas In renvoie<br />

alors également FIN en sortie. La chaîne d’itérateurs complète se termine donc lorsqu’I1<br />

n’a plus de solution initiale répondant au premier TP.<br />

Revenons maintenant à notre exemple, et voyons ce qu’il se passe concrètement lors<br />

de l’exécution de la requête. Au début de la requête, le programme principal commence<br />

par créer la chaîne d’itérateurs, puis interroge le dernier itérateur I3 et lui demande une<br />

(première) solution (complète, puisqu’I3 est le dernier itérateur de la chaîne). I3 va alors<br />

demander une solution intermédiaire à I2, qui fera de même envers I1. Ce dernier n’ayant<br />

pas de prédécesseur, il va alors procéder directement à l’évaluation de son TP sur base de<br />

l’ensemble de données local (query-local dataset, que l’on appellera QLD par simplicité).<br />

Avant de procéder à cette évaluation, I1 va commencer par déréférencer les URI<br />

présentes dans son TP, en l’occurrence http://.../orgaX, et rajouter ces données dans<br />

le QLD, comme illustré à la figure 5.5.<br />

Parmi ces données ajoutées au QLD, il y a notamment le triplet :<br />

ex:affiliated_with


)%#*+%,*!-+.#/!0$#12%3,4!56+4<br />

5.3 Ses principes de fonctionnement et son architecture 46<br />

CD(-4E?:F>?<br />

/>!>.(!<br />

!" = $%$&$!"$'$()*>33+?+>!(/0@+!6$'$56!!"*778887:-A>B-2%34-'5%@A-B4().0 CD<br />

! 7


5.3 Ses principes de fonctionnement et son architecture 47<br />

I2 va alors consommer la solution partielle renvoyée par I1. Pour cela, I2 crée un<br />

TP secondaire tp ′ 2 dans lequel les variables <strong>du</strong> TP dont il est responsable (tp2) ont été<br />

remplacées par les valeurs données par la solution partielle de I1. De cette manière, ?p<br />

aura été remplacé par http://.../alice>, donnant ainsi le TP temporaire tp ′ 2 illustré<br />

à la figure 5.6.<br />

I2 va alors procéder au déréférencement des URI contenues dans son TP temporaire,<br />

i.e. l’URI http://.../alice, et stocker dans le QLD les données récupérées. Parmi<br />

celles-ci, on trouve le triplet :<br />

ex:interested_in <br />

Ce triplet donnant une correspondance positive avec le TP temporaire (tp ′ 2 ) de I2, ce<br />

dernier va renvoyer à I3 une solution associant la valeur à la variable<br />

*&$+,&-+".,/$0"1%$23&4-5"67,5<br />

?b (en plus de l’association précédente de à ?p donnée par I1),<br />

comme illustré à la figure 5.7.<br />

HI(7@J.6=+.<br />

/+!+G(!<br />

8<br />

!" # $%$&$!"$'$()*+,,-.-+!(/01-!2$'$32!!"*445554678+9:$; ! !<br />

<br />

!" E $%$&$!"$'$()*-F!(7(G!(/0-F$'$!#$;<br />

32!!"*445554D#:$$7/,*!@"($$32!!"*445554A66B:<br />

!" E C$%$&$32!!"*445554+.-=(:$'$()*-F!(7(G!(/0-F$'$!#$;<br />

, donnant ainsi le TP temporaire tp ′ 3 illustré<br />

à la figure 5.7.<br />

! )<br />

! (


5.3 Ses principes de fonctionnement et son architecture 48<br />

I3 va alors procéder au déréférencement des URI contenues dans son TP tempo-<br />

raire, i.e. l’URI http://.../b1, et stocker dans le QLD les données récupérées. Celles-ci<br />

comportent notamment le triplet :<br />

rdf:type <br />

I3 va alors procéder à l’évaluation de son TP temporaire tp ′ 3 . Cependant, le TP de I3<br />

est différent de ceux des itérateurs précédents. En effet, celui-ci ne lie pas une variable<br />

à une autre, mais ne fait que poser une contrainte sur l’unique variable qui le compose<br />

(?b). C’est donc un TP beaucoup plus restrictif que les deux autres, puisqu’il ne pro<strong>du</strong>it<br />

pas plus de résultats en sortie que ce qu’il reçoit en entrée. Sa seule responsabilité est de<br />

laisser passer ou non les solutions reçues de I2.<br />

Dans le cas de notre exemple, le triplet ci-dessus récupéré donne une correspondance<br />

positive avec le TP temporaire (tp ′ 3 ) de I3, comme illustré la figure 5.7. Dans ce cas-ci, on<br />

a donc un comportement de “filtre passant”. I3 va alors pouvoir renvoyer la solution reçue<br />

de I2 (qui est une solution complète, puisqu’elle associe une valeur à toutes les variable<br />

!"#$%"&$'(%)#*'+,#-."/&0'12%0<br />

de la requête, i.e. ?p et ?b), et l’utilisateur aura une première solution retournée, comme<br />

illustré à la figure 5.8.<br />

HI/


5.3 Ses principes de fonctionnement et son architecture 49<br />

se caractérisera par le fait que I1 n’aura plus de résultat à proposer sur base de l’état<br />

actuel <strong>du</strong> QLD. En effet, I3 va demander une solution suivante à I2, qui va demander une<br />

solution suivante à I1. I1 étant à court de solution, il va renvoyer une solution symbolique<br />

FIN à I2, qui fera de même envers I3, qui fera de même envers l’utilisateur, comme illustré<br />

à la figure 5.9. Ce dernier saura alors que l’exécution de la requête est terminée.<br />

Figure 5.9 – Fin de l’exécution d’une requête [23].<br />

Une analyse séquentielle simplifiée des messages échangés <strong>du</strong>rant le processus est<br />

illustrée à la figure 5.10. Simplifiée, notamment car les tâches de déréférencement sont<br />

en réalité exécutées de manière asynchrone et préventive [14].<br />

Comme illustré sur la figure, la demande évolue progressivemment <strong>du</strong> dernier ité-<br />

rateur au premier itérateur. Un ensemble de messages et de solutions intermédiaires<br />

s’échangent de manière transparente aux yeux de l’utilisateur, et ce n’est que quand une<br />

solution complète est acceptée par le dernier itérateur que celui-ci la renvoie à l’utili-<br />

sateur. Ensuite, l’utilisateur redemande au dernier itérateur une solution suivante, et le<br />

processus recommence (à l’exception <strong>du</strong> fait qu’il ne faut plus déréférencer les URI déjà<br />

contenues dans le QLD).<br />

Ceci conclut donc l’algorithme d’exécution d’une requête SQUIN selon les principes<br />

<strong>du</strong> Link Traversal. Nous allons maintenant analyser certains éléments de la structure de<br />

la librairie SQUIN.


5.3 Ses principes de fonctionnement et son architecture 50<br />

Figure 5.10 – Diagramme de séquence de l’exécution d’une requête SQUIN normale.<br />

5.3.2 Architecture de la librairie<br />

Dans cette section, nous analyserons les principaux objets intervenant, aux yeux de<br />

l’utilisateur, lors de la création et de l’exécution d’une requête SPARQL avec SQUIN.<br />

5.3.2.1 Ensemble de données local<br />

L’architecture de la gestion de l’ensemble de données local (query-local dataset, ou<br />

QLD) est illustrée à la figure 5.11 et est à mettre en correspondance directe avec l’exemple<br />

de requête donné à la figure 5.2.


5.3 Ses principes de fonctionnement et son architecture 51<br />

Figure 5.11 – Principales classes utilisées aux yeux de l’utilisateur pour créer une requête<br />

SQUIN.<br />

5.2 :<br />

En effet, ceci représente les objets principaux manipulés dans le cas de la requête<br />

1. Dans un premier temps, un objet de type QueriedDatasetImpl est créé, mais est<br />

vu comme son interface QueriedDataset . Cet objet possède le QLD qui va être<br />

alimenté progressivement, mais n’implémente que des méthodes de lecture et d’in-<br />

terrogation <strong>du</strong> QLD. C’est donc un QLD passif, n’effectuant aucun déréférencement<br />

actif des URI rencontrées.<br />

2. Ensuite, un objet de type JenaIOBasedQueriedDataset est créé, ayant égale-<br />

ment QueriedDataset pour interface. Ce nouvel objet encapsule le premier objet


5.3 Ses principes de fonctionnement et son architecture 52<br />

QueriedDatasetImpl, mais y ajoute des fonctionnalités permettant l’utilisation<br />

<strong>du</strong> framework Jena afin de charger et de parser les données RDF qui doivent être<br />

ajoutées au QLD.<br />

3. Suite à cela, un objet de type JenaIOBasedLinkedDataCache est créé, encapsulant<br />

l’objet JenaIOBasedQueriedDataset fraichement créé. Ce nouvel objet ajoute au<br />

précédent des fonctionnalités d’alimentation active <strong>du</strong> QLD, grâce à la détection<br />

de nouvelles URI identifiant des ressources, et peut alors se charger de déréférencer<br />

les nouvelles URI pertinentes afin d’augmenter les informations contenues dans le<br />

QLD. Ceci en fait donc un QLD actif.<br />

4. Finalement, un objet de type LinkedDataCacheWrappingDataset est créé, encap-<br />

sulant le précédent, et implémente l’interface Dataset définie par Jena/ARQ.<br />

À l’exception de l’interface Dataset, toutes les autres classes/interfaces appartiennent<br />

à la librairie de SQUIN et sont donc inconnues d’ARQ. Afin que le moteur d’interroga-<br />

tion ARQ puisse évaluer la requête SPARQL sur le QLD actif implémenté par SQUIN,<br />

il faut donc qu’un objet de SQUIN soit vu par ARQ comme une une interface définie<br />

par ARQ, et c’est la fonction que remplit le dernier objet créé.<br />

Suite à cela, ARQ peut alors lancer l’exécution de la reqête SPARQL. C’est l’objet<br />

de la section 5.3.2.2.<br />

5.3.2.2 Exécution d’une requête<br />

Comme expliqué à la section précédente, un objet de SQUIN implémentant l’interface<br />

Dataset de ARQ est créé, afin qu’ARQ puisse ensuite lancer l’exécution de la requête<br />

SPARQL.<br />

Pour cela, un premier objet de type QueryExecution, dont la classe appartient à<br />

ARQ, est créé, comme illustré à la figure 5.12. Ce dernier a connaissance de la re-<br />

quête SPARQL, ainsi que <strong>du</strong> QLD représenté par l’interface Dataset. Il offre des mé-<br />

thodes permettant de lancer l’évaluation de la requête SPARQL, dont la principale est<br />

execSelect().<br />

L’appel de cette méthode a deux principales utilités. Dans un premier temps, celle-ci<br />

commence par déréférencer les URI contenues dans la requête SPARQL, afin d’effectuer<br />

une alimentation initiale de triplets RDF dans le QLD. Une fois cela fait, elle renvoie<br />

alors un objet de type ResultSet, qui permettra d’obtenir l’ensemble des résultats de<br />

la requête.


5.3 Ses principes de fonctionnement et son architecture 53<br />

Figure 5.12 – Principales classes utilisées aux yeux de l’utilisateur pour exécuter une<br />

requête SQUIN.<br />

Il est bon de noter que cette méthode ne fait que déréférencer les URI initiales (seed<br />

URIs), mais ne lance en rien l’exécution de la requête SPARQL et la chaîne d’itérateurs<br />

décrite à la section 5.3.1.<br />

L’exécution de la requête SPARQL en elle-même se fait alors dans un second temps<br />

par l’utilisation de l’objet ResultSet créé précédemment. Cet objet fonctionne comme<br />

un simple itérateur de résultats, au sens générique <strong>du</strong> terme (par opposition aux itéra-<br />

teurs décrits dans la section 5.3.1). Son utilisation de base est simple, et basée sur deux<br />

méthodes principales : hasNext() et next().


5.3 Ses principes de fonctionnement et son architecture 54<br />

hasNext() permet de (re)lancer la chaîne d’itérateur, avec les mécanismes de dé-<br />

référencements et solutions intermédiaires décrits à la section 5.3.1, et renvoie true dès<br />

qu’une solution complète est trouvée, ou false lorsque la chaîne d’itérateurs indique<br />

qu’il n’y a plus de résultats disponibles.<br />

next() permet quant à elle de récupérer le résultat suivant disponible, suite à<br />

un renvoi true de la méthode hasNext(), et renvoie un objet de type QuerySolution,<br />

comme illustré à la figure 5.12.<br />

L’objet QuerySolution renvoyé représente une solution complète à la requête SPARQL,<br />

associant par définition une valeur (ressource ou littéral) à chaque variable indiquée dans<br />

la clause SELECT de la requête. L’utilisateur peut alors afficher les résultats au fur et à<br />

mesure qu’ils sont indiqués disponibles par hasNext().


Chapitre 6<br />

Amélioration <strong>du</strong> temps de<br />

réponse<br />

Nous avons vu jusqu’ici les principes et standards <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong>, comparé dif-<br />

férentes méthodes de stockage et d’interrogation des sources de données, et analysé plus<br />

en profondeur SQUIN, une librairie permettant d’effectuer une interrogation <strong>récursive</strong><br />

<strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> selon les principes <strong>du</strong> Link Traversal.<br />

Au vu de la croissance exponentielle <strong>du</strong> nombre de données publiées sur le <strong>Web</strong> de<br />

données, il est primordial de proposer des approches efficaces d’interrogation <strong>du</strong> <strong>Web</strong><br />

<strong>sémantique</strong> afin d’obtenir des résultats pertinents en un temps raisonnable. L’apparition<br />

de nouvelles méthodes d’interrogation basées sur une décentralisation des sources de<br />

données m’a paru être un sujet de recherche très intéressant, c’est pourquoi je me suis<br />

penché sur l’analyse de la librairie SQUIN et des paradigmes d’exécution sous-jacents<br />

que constitue le Link Traversal.<br />

Toujours dans cette optique d’une recherche d’un temps de réponse minimal pour ob-<br />

tenir relativement rapidement des premiers résultats pertinents, j’ai décidé de m’atteler<br />

à la recherche d’améliorations potentielles que je pourrais apporter à la librairie SQUIN<br />

afin d’optimiser son temps de réponse, sans aucunement savoir si la recherche serait<br />

fructueuse et mènerait ou non à des résultats intéressants. En particulier, j’ai recherché<br />

des alternatives à certains processus de l’exécution qui pourraient permettre d’afficher<br />

plus rapidement des premiers résultats de la requête à l’utilisateur.<br />

Pour ce faire, j’ai investigué trois pistes, lesquelles sont décrites ci-dessous. Alors que<br />

les deux premières se sont avérées infructueuses, la troisième en revanche a pro<strong>du</strong>it des<br />

55


6.1 Parallélisation des branches d’interrogation 56<br />

résultats de grand intérêt, qui seront analysés au chapitre 7.<br />

Contenu<br />

6.1 Parallélisation des branches d’interrogation . . . . . . . . . . . 56<br />

6.2 Ordre d’évaluation des Triple Patterns . . . . . . . . . . . . . 58<br />

6.3 <strong>Interrogation</strong> parallèle régulière <strong>du</strong> QLD . . . . . . . . . . . . 58<br />

6.1 Parallélisation des branches d’interrogation<br />

La première piste de recherche a consisté à analyser la possibilité de paralléliser<br />

les branches d’exécution partant <strong>du</strong> premier itérateur. En effet, bien que la chaîne de<br />

demandes de solutions (intermédiaires) soit initiée par le dernier itérateur, la pro<strong>du</strong>ction<br />

concrète de résultats s’effectue dans l’autre sens, et peut être vue comme une division<br />

en branches de résultats partant <strong>du</strong> premier itérateur et terminant au dernier itérateur<br />

de la chaîne.<br />

Cette séquence d’action est illustrée à la figure 6.1. Comme nous pouvons le voir sur la<br />

figure, un ensemble d’échanges de messages et d’évaluations de résultats intermédiaires a<br />

lieu <strong>du</strong>rant ce processus avant que l’utilisateur ne recoive un résultat. Pendant ce temps-<br />

là, le système n’avance aucunement dans l’exécution des branches partant des autres<br />

résultats initiaux de I1. De plus, lors de l’appel suivant de la foncion next() sur I3, le<br />

système reprend l’exécution de la chaîne dans l’état où il l’avait “laissée”, c’est-à-dire<br />

qu’il va continuer l’exécution des sous-branches de la branche <strong>du</strong> premier résultat d’I1<br />

(section en bleu sur la figure 6.1). C’est seulement bien plus tard que l’exécution de la<br />

branche <strong>du</strong> deuxième résultat initial de I1 commencera, illustré par le deuxième cadre<br />

mauve de la figure 6.1.<br />

Une première idée qui m’est venue à l’esprit était de paralléliser à l’aide de threads<br />

l’exécution des branches de résultats qui partent <strong>du</strong> premier itérateur. Cela revient à<br />

lancer en parallèle les appels de méthodes illustrés en mauve sur la figure 6.1.<br />

Si la structure et la complexité des branches d’exécution de chaque itérateur étaient<br />

les mêmes pour toutes, une telle parallélisation n’apporterait aucune amélioration <strong>du</strong><br />

temps de réponse. Cependant, certaines branches d’exécution sont parfois beaucoup plus<br />

petites que d’autres, et une exécution parallèle des branches <strong>du</strong> l’itérateur I1 permettrait<br />

de terminer rapidement les petites branches (avec les résultats pro<strong>du</strong>its qui en découlent,<br />

obtenus rapidement donc), et de continuer ensuite l’exécution des grandes branches pour<br />

l’obtention des derniers résultats.


6.1 Parallélisation des branches d’interrogation 57<br />

Figure 6.1 – Diagramme de séquence de l’exécution d’une requête SQUIN avec mise en<br />

évidence des branches d’exécution parallélisables <strong>du</strong> premier itérateur de la chaîne.<br />

Afin de mettre en oeuvre cette piste de recherche, j’ai créé une structure permettant<br />

le lancement de tâches parallèles, chacune étant responsable de l’exécution d’une branche<br />

de résultats. Cependant, au vu des erreurs obtenues, je me suis rapidement ren<strong>du</strong> compte<br />

que cela nécessiterait une réécriture de fond en comble de la librairie, afin d’y rajouter<br />

des mécanismes de gestion de zones critiques (mutexes) à certains endroits. En effet,


6.2 Ordre d’évaluation des Triple Patterns 58<br />

il n’existe qu’une seule instance de chaque itérateur de la chaîne, et ces itérateurs ne<br />

sont pas <strong>du</strong> tout pensés pour être utilisés au même moment par deux (ou plus) threads<br />

différents.<br />

J’ai donc décidé d’abandonner cette piste de recherche, mais elle a toutefois fait<br />

naître une nouvelle idée d’amélioration potentielle pour le futur : il s’agirait d’analyser<br />

le temps ayant été nécessaire à l’exécution des branches déjà parcourues, et d’utiliser les<br />

informations qui en découlent pour adapter en temps réel le plan d’exécution au moment<br />

de cette exécution. Cette idée sera décrite à la section 8.1.<br />

6.2 Ordre d’évaluation des Triple Patterns<br />

La deuxième piste de recherche était d’analyser le comportement de la librairie en<br />

évaluant toutes les combinaisons possibles d’ordre des itérateurs de la chaîne, afin de<br />

pouvoir en dégager un algorithme d’optimisation <strong>du</strong> plan d’exécution. Cependant, j’ai<br />

également abandonné cette piste de recherche pour deux raisons [23] :<br />

– d’une part, car le changement de l’ordre d’évaluation des Triple Patterns pourrait<br />

dans certains cas en modifier les résultats renvoyés ;<br />

– d’autre part, car la librairie effectue déjà une optimisation de cet ordre, dans une<br />

mesure telle qu’elle ne modifie pas les résultats pro<strong>du</strong>its.<br />

Pour ces raisons, j’ai donc également arrêté l’investigation de cette piste de recherche,<br />

pour me pencher sur la troisième idée, décrite à la section 6.3.<br />

6.3 <strong>Interrogation</strong> parallèle régulière <strong>du</strong> QLD<br />

La troisième piste de recherche que j’ai voulu approfondir a été d’effectuer une inter-<br />

rogation parallèle <strong>du</strong> QLD <strong>du</strong>rant l’exécution de SQUIN. En effet, après avoir analysé<br />

la séquence des actions effectuées par SQUIN lors de son exécution (cf. figure 5.10),<br />

j’ai remarqué qu’il existait un temps entre l’intégration de nouvelles données dans le<br />

QLD suite aux déréférencements et le moment où ces données étaient interrogées afin de<br />

potentiellement pro<strong>du</strong>ire un résultat, comme illustré dans le premier cadre rouge de la<br />

figure 6.2.<br />

J’ai donc décidé de créer un mo<strong>du</strong>le exécuté en parallèle avec l’exécution de SQUIN,<br />

ayant pour fonction d’interroger à intervalle régulier et fréquent le QLD dans son état<br />

actuel (deuxième cadre rouge de la figure 6.2), afin que l’utilisateur puisse recevoir de


6.3 <strong>Interrogation</strong> parallèle régulière <strong>du</strong> QLD 59<br />

Figure 6.2 – Diagramme de séquence de l’exécution d’une requête SQUIN avec inter-<br />

rogation parallèle <strong>du</strong> QLD.<br />

nouveaux résultats dès l’instant où les triplets nécessaires à l’obtention de ce résultat<br />

sont présents dans le QLD. Cette approche permet donc de supprimer le temps qui existe<br />

entre l’intégration des nouvelles données et l’affichage des résultats qu’elles permettent<br />

de pro<strong>du</strong>ire.<br />

Les principales classes intervenant dans ce processus parallèle sont illustrées à la<br />

figure 6.3. Voici ci-dessous les fonctions de chacune.<br />

Tout d’abord, un objet LTBQueryExecutor est créé par l’utilisateur, chargé de l’exé-<br />

cution générale <strong>du</strong> programme. Cet objet va alors principalement effectuer deux actions :<br />

1. Créer les objets nécessaires à l’exécution normale de la librairie, telle que décrite<br />

à la section 5.3.2. Cela implique notamment la création des objets de type Que-<br />

riedDatasetImpl, JenaIOBasedQueriedDataset, JenaIOBasedLinkedDa-<br />

taCache et LinkedDataCacheWrappingDataset. L’objet JenaIOBasedLin-


6.3 <strong>Interrogation</strong> parallèle régulière <strong>du</strong> QLD 60<br />

Figure 6.3 – Nouvelles classes mises en place pour l’interrogation parallèle <strong>du</strong> QLD.<br />

kedDataCache en particulier sera intéressant pour le mo<strong>du</strong>le d’interrogation pa-<br />

rallèle.<br />

2. Créer un objet de type LTBDatasetQuerier, qui sera chargé d’effectuer l’inter-<br />

rogation régulière <strong>du</strong> QLD, parallèlement à l’exécution normale de la librairie.<br />

Une fois l’objet LTBQueryExecutor créé, il ne reste qu’à appeler sa méthode execute(int)<br />

pour lancer l’exécution des deux processus décrits ci-dessus.<br />

L’objet LTBDatasetQuerier hérite de la classe Thread, afin de pouvoir être lancé<br />

en parallèle via sa méthode héritée start() (qui lance alors sa méthode propre run()).


6.3 <strong>Interrogation</strong> parallèle régulière <strong>du</strong> QLD 61<br />

Ce thread va alors interroger régulièrement le QLD dans son état actuel, et évaluer la<br />

requête SPARQL sur ce QLD grâce au moteur d’interrogation ARQ. Dès lors que des<br />

nouveaux résultats seront disponibles, ceux-ci seront affichés dans une fenêtre gérée par<br />

un objet de type LTBDatasetQuerierFrame, dont un exemple <strong>du</strong> ren<strong>du</strong> est ilustré à<br />

la figure 6.4 (le but de ce mo<strong>du</strong>le étant de démontrer l’utilité d’une telle interrogation<br />

parallèle, le design graphique de la fenêtre n’a pas été très approfondi).<br />

Figure 6.4 – Interface d’affichage brut des résultats de l’interrogation parallèle <strong>du</strong> QLD.<br />

Afin que le LTBDatasetQuerier puisse exécuter cette interrogation, il faut bien en-<br />

ten<strong>du</strong> qu’il ait accès au QLD. Cependant, il faut qu’il puisse interroger le QLD de manière<br />

passive, c’est-à-dire en contournant les méthodes d’alimentation active <strong>du</strong> QLD lors de<br />

l’exécution. En effet, les méthodes définies par un ensemble d’objets de la librairie SQUIN<br />

ont pour fonction de déréférencer les nouvelles URI nécessaires au moment où une re-<br />

quête est faite sur le QLD. Il est donc primordial que l’interrogation parallèle se fasse<br />

de manière passive, c’est-à-dire en s’affranchissant un maximum des objets définis par<br />

SQUIN, afin de rester le plus proche d’une utilisation directe des objets de Jena/ARQ.<br />

C’est pourquoi l’objet LTBDatasetQuerier a connaissance de l’objet JenaIOBased-<br />

LinkedDataCache créé précédemment par l’objet LTBQueryExecutor. Cet objet JenaIO-<br />

BasedLinkedDataCache possède notamment une méthode asJenaGraph(), qui renvoie un<br />

objet de type GraphBase ayant pour interface Graph (tous deux définis par Jena et non<br />

pas par SQUIN), un graphe représentant l’état actuel <strong>du</strong> modèle de données contenu<br />

dans le QLD. Ce graphe est donc totalement passif, et affranchi de toute alimentation<br />

active <strong>du</strong> QLD par SQUIN. Une fois cet objet Graph récupéré, le mo<strong>du</strong>le parallèle peut<br />

alors évaluer la requête SPARQL sur le graphe renvoyé sans qu’aucun déréférencement<br />

ne soit effectué, et détecter directement la présence d’éventuels nouveaux résultats.


6.3 <strong>Interrogation</strong> parallèle régulière <strong>du</strong> QLD 62<br />

Pour terminer, il m’a fallu mettre en place un mo<strong>du</strong>le permettant de comparer les<br />

temps nécessaires entre l’affichage des résultats par le mo<strong>du</strong>le d’interrogation parallèle<br />

et l’affichage de ces mêmes résultats par l’exécution normale de SQUIN. C’est pourquoi<br />

j’ai également créé un objet de type LTBResultsAnalyzer, qui a pour fonction d’être<br />

informé dès l’apparition d’un nouveau résultat aussi bien de la part <strong>du</strong> mo<strong>du</strong>le d’interro-<br />

gation parallèle (méthode addQuerierResult()) que de la part de l’exécution normale<br />

de SQUIN (méthode addNormalResult()). De plus, cet objet implémente un mécanisme<br />

d’indexation des résultats dans un double objectif : d’une part, afin d’être capable de<br />

faire la correspondance entre un résultat pro<strong>du</strong>it par l’interrogation parallèle et le même<br />

résultat pro<strong>du</strong>it par l’exécution normale et, d’autre part, afin d’éviter les doublons dans<br />

le cas où le même résultat serait obtenu par deux sources différentes (ou plus).<br />

Pour de ne pas fausser les résultats, la méthode setStartTime() de l’objet LTBRe-<br />

sultsAnalyzer est appelée une seule fois au lancement de l’exécution des processus (par<br />

LTBQueryExecutor.execute()), afin d’utiliser le même temps de départ pour l’exécu-<br />

tion normale et l’interrogation parallèle.<br />

A la fin de l’exécution normale <strong>du</strong> programme, il faut alors exporter les résul-<br />

tats obtenus en vue de pouvoir les analyser. C’est l’objet des fonctions toString() et<br />

toCSVString(). La première permet d’afficher une comparaison des résultats de manière<br />

facilement lisible pour un humain. La deuxième crée quant à elle une string au format<br />

CSV contenant beaucoup plus d’informations, destinée à être sauvée dans un fichier CSV<br />

pour une analyse ultérieure. Ces informations par résultat sont les suivantes :<br />

– les temps absolu et relatif de l’obtention <strong>du</strong> résultat par le mo<strong>du</strong>le d’interrogation<br />

parallèle ;<br />

– les temps absolu et relatif de l’obtention <strong>du</strong> résultat par l’exécution normale de<br />

SQUIN ;<br />

– les différences absolue et relative entre les entre les temps des deux méthodes ;<br />

– la représentation textuelle de la solution.<br />

Les temps absolus sont le temps (en seconde) renvoyé par la fonction time() <strong>du</strong> système.<br />

Les temps relatifs sont le temps écoulé depuis le début de l’exécution de la requête.<br />

J’ai alors effectué un benchmark de l’exécution de quelques requêtes avec ces deux<br />

mo<strong>du</strong>les, afin de savoir si l’implémentation de ce mo<strong>du</strong>le d’interrogation parallèle pouvait<br />

contribuer à une ré<strong>du</strong>ction <strong>du</strong> temps nécessaire à l’affichage des résultats aux yeux de<br />

l’utilisateur. Les résultats de ce benchmark sont analysés au chapitre 7.


Chapitre 7<br />

Résultats de l’amélioration<br />

Nous avons vu au chapitre précédent les trois pistes de recherche que j’ai investiguées<br />

dans le cadre de mon mémoire. Si les deux premières n’ont pas donné de résultats satis-<br />

faisants, la troisième en revanche a abouti à des résultats très intéressants comme nous<br />

allons le voir dans ce chapitre.<br />

Il faut cependant savoir ces résultats sont très aléatoires. Ils dépendent en effet de<br />

multiples paramètres sur lesquels je n’ai aucun contrôle et qui influent fortement sur le<br />

temps d’exécution <strong>du</strong> processus d’origine. On peut citer entre autres le temps de réponse<br />

des communications effectuées sur le réseau Internet (qui est parfois très variable) et la<br />

disponibilité des serveurs interrogés (car certains ne répondent parfois pas, menant ainsi<br />

à un nombre de résultats plus faible).<br />

Dans ce chapitre, je vais dans un premier temps expliquer la méthode que j’ai ap-<br />

pliquée pour analyser les résultats, puis je présenterai les différentes requêtes effectuées<br />

ainsi leurs résultats concrets, et je terminerai par les conclusions que l’on peut tirer de<br />

ces résultats.<br />

Contenu<br />

7.1 Méthode d’analyse des résultats . . . . . . . . . . . . . . . . . 64<br />

7.2 Requête 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

7.3 Requête 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

7.4 Conclusions sur les résultats . . . . . . . . . . . . . . . . . . . . 67<br />

63


7.1 Méthode d’analyse des résultats 64<br />

7.1 Méthode d’analyse des résultats<br />

Afin de tester concrètement l’efficacité <strong>du</strong> mo<strong>du</strong>le d’interrogation parallèle, j’ai écrit<br />

deux requêtes de référence, puis j’ai effectué un benchmark de plusieurs dizaines d’exécu-<br />

tions de chaque requête, afin d’en sauver les résultats pro<strong>du</strong>its grâce à la fonctionnalité<br />

d’exportation CSV décrite à la section 6.3. Les résultats bruts sont repris dans l’annexe<br />

A. Une fois ceux-ci pro<strong>du</strong>its, je les ai aggrégés par requête et par solution, afin d’en<br />

retirer les informations intéressantes.<br />

Comme expliqué à la fin de la section 6.3, chaque exécution pro<strong>du</strong>it plusieurs infor-<br />

mations au sujet des résultats : pour chaque solution, on a les temps absolu et relatif<br />

de l’obtention des résultats avec chacune des deux méthodes, ainsi que les différences<br />

absolue et relative entre les temps de chaque méthode. Cependant, pour l’analyse des<br />

résultats, seule la différence de temps absolue est réellement pertinente. La différence de<br />

temps relative l’est partiellement, et les autres ne le sont pas. En effet :<br />

– Les temps absolus (fonction time() <strong>du</strong> système) des deux méthodes ne sont utiles<br />

qu’à calculer les temps relatifs respectifs.<br />

– Les temps relatifs (temps écoulé depuis le début de l’exécution de la requête)<br />

peuvent varier fortement d’une exécution à l’autre, car l’ordre d’évaluation des<br />

résultats intermédiaires dépend de l’ordre dans lequel les nouveaux triplets sont<br />

ajoutés au QLD. Ainsi, il suffit qu’un seul déréférencement prenne plus de temps<br />

que prévu (traffic sur le réseau, paquet per<strong>du</strong>, surcharge <strong>du</strong> serveur distant, pas<br />

de réponse <strong>du</strong> serveur distant, etc.) pour que l’ordre d’exécution des branches<br />

d’interrogation en soit changé. Dès lors, un même résultat peut tantôt arriver<br />

en premier, tantôt arriver en dernier, ce qui génère des temps relatifs totalement<br />

aléatoires, rendant cette information peu pertinente.<br />

– Pour une exécution particulière, la différence absolue entre les temps des deux<br />

méthodes est par contre la donnée la plus pertinente, puisqu’elle caractérise le<br />

temps gagné grâce à l’interrogation parallèle <strong>du</strong> QLD. L’inconvénient <strong>du</strong> point<br />

précédent n’est donc plus présent ici, puisqu’on compare des informations ayant<br />

exactement le même ordre d’exécution.<br />

– La différence relative entre les temps des deux méthodes, c’est-à-dire le rapport<br />

différence absolue entre les temps des deux méthodes<br />

temps relatif de la méthode normale , n’est que partiellement pertinente.<br />

Du côté pertinent, elle indique le pourcentage de temps gagné grâce au mo<strong>du</strong>le<br />

d’interrogation parallèle et donne une idée <strong>du</strong> gain apporté par ce mo<strong>du</strong>le. Du<br />

côté non pertinent, un même gain absolu obtenu pour la branche d’exécution <strong>du</strong><br />

premier résultat correspondra à un gain relatif le plus élevé, alors que si ce même


7.2 Requête 1 65<br />

gain absolu avait été obtenu pour la branche d’exécution <strong>du</strong> dernier résultat, son<br />

gain relatif correspondant en aurait été fortement diminué.<br />

La différence de temps absolue étant la donnée la plus pertinente, c’est donc celle-là<br />

qui a été aggrégée afin d’en retirer des statistiques.<br />

7.2 Requête 1<br />

La première requête effectuée est donnée à la figure 7.1. Exprimée en français, celle-<br />

ci signifierait Quels sont le nom et le numéro de téléphonne de toutes les personnes<br />

distinctes ayant publié un article lors de la European Semantic <strong>Web</strong> Conference de 2009 ?<br />

PREFIX rdf: <br />

PREFIX rdfs: <br />

PREFIX owl: <br />

PREFIX foaf: <br />

PREFIX swrc: <br />

PREFIX swc: <br />

SELECT DISTINCT ?author ?phone<br />

WHERE {<br />

?pub swc:isPartOf .<br />

?pub swc:hasTopic ?topic .<br />

?topic rdfs:label ?topicLabel .<br />

?pub swrc:author ?author .<br />

{ ?author owl:sameAs ?authorAlt } UNION { ?authorAlt owl:sameAs ?author }<br />

?authorAlt foaf:phone ?phone<br />

}<br />

Figure 7.1 – Requête 1 exécutée lors des tests.<br />

Cette requête pro<strong>du</strong>it 4 résultats et a été exécutée 40 fois. Son temps moyen d’exé-<br />

cution est de 316 secondes, soit environ 5 minutes. Les résultats bruts sont repris dans<br />

l’annexe A avec pour titre “Requête 1”. Les résultats aggrégés concernant la différence<br />

de temps absolue pour chaque solution sont repris dans à table 7.1.<br />

Solution Moyenne abs. Écart type abs. Maximum abs. Moyenne rel. Maximum rel.<br />

Solution 1 2,4 s. 2,6 s. 13 s. 2,48 % 7,41 %<br />

Solution 2 4,8 s. 3,9 s. 16 s. 2,38 % 11,76 %<br />

Solution 3 10,9 s. 13,0 s. 42 s. 4,05 % 19,75 %<br />

Solution 4 2,9 s. 3,3 s. 12 s. 2,35 % 12,50 %<br />

Table 7.1 – Résultats aggrégés des différences de temps absolues de la requête 1.


7.2 Requête 1 66<br />

Afin d’obtenir une visualisation graphique des résultats, j’ai décidé de les représenter<br />

sous forme de box plots, car je trouve que ce type de graphique donne une très bonne vue<br />

d’ensemble des résultats en une seule figure. Cette représentation est donnée à la figure<br />

7.2.<br />

Figure 7.2 – Résultats de l’interrogation parallèle : différence de temps absolue entre<br />

les résultats des deux méthodes, pour les 4 solutions de la requête 1.<br />

Comme nous pouvons le voir sur cette figure, certaines solutions (e.g. la solution<br />

1) sont la plupart <strong>du</strong> temps affichées presque directement par la méthode normale dès<br />

qu’elles sont disponibles dans le QLD (hauteur <strong>du</strong> box très petite), alors que d’autres (e.g.<br />

la solution 3) présentent parfois un temps de “stagnation” dans le QLD beaucoup plus<br />

grand avant d’être affichés par la méthode normale (hauteur <strong>du</strong> box relativement grande).<br />

Le mo<strong>du</strong>le d’interrogation parallèle <strong>du</strong> QLD permet d’économiser cette différence de<br />

temps.<br />

Nous voyons donc que dans le cas de cette première requête, les gains ne sont en<br />

moyenne pas énormes (les gains relatifs sont pour la plupart compris entre 0% et 10%),<br />

mais que de temps en temps ils peuvent être significatifs. Cependant, ce résultat est<br />

propre à la requête 1 et peut différer sensiblement dans le cas d’une autre requête,<br />

comme dans le cas de la deuxième requête décrite à la section 7.3.


7.3 Requête 2 67<br />

7.3 Requête 2<br />

La deuxième requête effectuée est donnée à la figure 7.3. Exprimée en français, celle-<br />

ci signifierait Quels sont les prénoms distincts des personnes vivant dans un pays dans<br />

lequel au moins un membre de l’université de Stanford réside ?<br />

PREFIX rdf: <br />

PREFIX rdfs: <br />

PREFIX owl: <br />

PREFIX foaf: <br />

SELECT DISTINCT ?citizenName WHERE {" +<br />

foaf:member ?stanfordMember .<br />

?stanfordMember foaf:based_near ?country .<br />

?citizen foaf:based_near ?country .<br />

?citizen foaf:firstName ?citizenName .<br />

}<br />

Figure 7.3 – Requête 2 exécutée lors des tests.<br />

Cette requête pro<strong>du</strong>it 27 résultats, et a été exécutée 100 fois. Son temps moyen<br />

d’exécution est de 47 secondes, ce qui explique pourquoi j’ai pu me permettre d’effectuer<br />

plus d’exécution de cette requête. Les résultats bruts sont repris dans l’annexe A avec<br />

pour titre “Requête 2”. Les résultats aggrégés concernant la différence de temps absolue<br />

pour chaque solution sont repris dans à table 7.2.<br />

La représentation graphique sous forme de box plots est donnée à la figure 7.4. J’ai<br />

cette fois choisi d’utiliser une disposition horizontale pour les box plots, vu le plus grand<br />

nombre de résultats à représenter.<br />

Comme nous pouvons le constater grâce au tableau de résultats et au graphique, cette<br />

requête offre en moyenne des résultats bien meilleurs que ceux obtenus avec la première<br />

requête. En effet, le temps moyen d’exécution de cette requête étant de 47 secondes et<br />

le gain absolu moyen étant de 30 secondes, l’ajout <strong>du</strong> mo<strong>du</strong>le d’interrogation parallèle<br />

offre ici en moyenne une ré<strong>du</strong>ction de 58% <strong>du</strong> temps nécessaire à l’affichage des résultats,<br />

allant même dans le meilleur des cas jusqu’à une ré<strong>du</strong>ction de 87% ! Dans le cas de cette<br />

requête, le mo<strong>du</strong>le d’interrogation parallèle apporte donc une contribution significative.<br />

7.4 Conclusions sur les résultats<br />

Les résultats obtenus grâce aux benchmarks réalisés permettent de tirer plusieurs<br />

conclusions. Tout d’abord, cela confirme que les résultats sont extrêmement variables


7.4 Conclusions sur les résultats 68<br />

Solution Moyenne abs. Écart type abs. Maximum abs. Moyenne rel. Maximum rel.<br />

Solution 1 44,8 s. 6,5 s. 63 s. 80,85 % 87,50 %<br />

Solution 2 39,4 s. 5,5 s. 53 s. 71,56 % 81,82 %<br />

Solution 3 44,4 s. 6,4 s. 63 s. 80,18 % 87,32 %<br />

Solution 4 28,0 s. 6,6 s. 46 s. 50,23 % 64,79 %<br />

Solution 5 39,9 s. 5,9 s. 57 s. 72,01 % 80,36 %<br />

Solution 6 22,4 s. 5,6 s. 40 s. 40,04 % 56,34 %<br />

Solution 7 38,6 s. 6,7 s. 56 s. 69,52 % 77,46 %<br />

Solution 8 28,1 s. 6,8 s. 47 s. 50,41 % 64,38 %<br />

Solution 9 44,8 s. 6,2 s. 62 s. 80,81 % 87,32 %<br />

Solution 10 21,1 s. 5,7 s. 39 s. 37,70 % 54,93 %<br />

Solution 11 28,5 s. 7,5 s. 50 s. 51,14 % 68,49 %<br />

Solution 12 33,1 s. 4,5 s. 41 s. 73,90 % 83,33 %<br />

Solution 13 33,2 s. 4,6 s. 42 s. 74,12 % 80,95 %<br />

Solution 14 28,4 s. 6,5 s. 48 s. 50,76 % 66,20 %<br />

Solution 15 33,1 s. 4,2 s. 42 s. 73,97 % 78,57 %<br />

Solution 16 33,1 s. 4,2 s. 42 s. 73,97 % 78,57 %<br />

Solution 17 33,1 s. 4,2 s. 42 s. 73,97 % 78,57 %<br />

Solution 18 37,8 s. 6,1 s. 56 s. 68,19 % 76,71 %<br />

Solution 19 21,7 s. 5,0 s. 37 s. 38,83 % 50,68 %<br />

Solution 20 27,7 s. 6,2 s. 47 s. 49,59 % 66,20 %<br />

Solution 21 20,8 s. 5,3 s. 37 s. 37,23 % 52,11 %<br />

Solution 22 26,9 s. 5,9 s. 46 s. 48,37 % 64,79 %<br />

Solution 23 13,0 s. 5,1 s. 28 s. 23,10 % 40,82 %<br />

Solution 24 21,1 s. 5,7 s. 39 s. 37,70 % 54,93 %<br />

Solution 25 27,1 s. 5,8 s. 45 s. 48,58 % 63,38 %<br />

Solution 26 24,6 s. 5,2 s. 34 s. 54,96 % 67,57 %<br />

Solution 27 26,1 s. 6,0 s. 44 s. 46,69 % 61,97 %<br />

Moyenne 30,5 s. 5,8 s. 46 s. 57,69 % 69,43 %<br />

Table 7.2 – Résultats aggrégés des différences de temps absolues de la requête 2.<br />

à cause des aléas <strong>du</strong> réseau Internet, ce qui rend une mesure précise relativement dif-<br />

ficile. En effet, les résultats dépendent de l’état <strong>du</strong> réseau, des sources interrogées et<br />

d’autres paramètres indépendants de la plateforme d’exécution. Cela confirme égale-<br />

ment que chaque requête s’exécutera selon un plan d’exécution qui lui est propre et que<br />

la récupération des informations se déroule rarement deux fois de la même manière.<br />

De plus, dans un souci de rigueur scientifique, j’ai également relancé ces mêmes<br />

requêtes en désactivant totalement le mo<strong>du</strong>le d’interrogation parallèle lors de l’exécution<br />

normale de la requête, afin de savoir dans quelle mesure ce mo<strong>du</strong>le la ralentissait. Dans<br />

les deux cas de requêtes, j’ai observé un léger gain de l’ordre <strong>du</strong> pourcent, soit une<br />

différence négligeable. Cela confirme donc bien que le temps consommé par le CPU est


7.4 Conclusions sur les résultats 69<br />

minime comparé au temps nécessaire aux déréférencements des URI sur le réseau.<br />

Pour terminer, les résultats démontrent que le mo<strong>du</strong>le d’interrogation parallèle peut<br />

dans certains cas faire bénéficier l’utilisateur d’une très grosse ré<strong>du</strong>ction <strong>du</strong> temps néces-<br />

saire à l’affichage des résultats. Ce mo<strong>du</strong>le apporte donc une contribution significative.


7.4 Conclusions sur les résultats 70<br />

Figure 7.4 – Résultats de l’interrogation parallèle : différence de temps absolue entre<br />

les résultats des deux méthodes, pour les 27 solutions de la requête 2.


Chapitre 8<br />

Perspectives futures<br />

Dans le chapitre 7, j’ai présenté les résultats positifs obtenus grâce au mo<strong>du</strong>le d’in-<br />

terrogation parallèle. Néanmoins, la librairie SQUIN pourrait encore être optimisée da-<br />

vantage. Dans ce chapitre, j’expose trois pistes d’améliorations de la librairie qui permet-<br />

traient une telle optimisation, que ce soit par la ré<strong>du</strong>ction <strong>du</strong> temps de réponse moyen ou<br />

par l’augmentation <strong>du</strong> nombre de résultats pertinents obtenus en un temps raisonnable.<br />

Contenu<br />

8.1 Adaptation en temps réel <strong>du</strong> plan d’exécution . . . . . . . . . 71<br />

8.2 Intégration de requêtes vers des moteurs de recherche . . . . 72<br />

8.3 Fusion et nettoyage des données locales . . . . . . . . . . . . . 73<br />

8.1 Adaptation en temps réel <strong>du</strong> plan d’exécution<br />

La première amélioration consisterait en une adaptation en temps réel <strong>du</strong> plan d’exé-<br />

cution de la requête. En effet, de par la nature décentralisée <strong>du</strong> Link Traversal, il est<br />

impossible de connaître à l’avance la totalité des informations qui caractériseront l’exécu-<br />

tion de la requête. En particulier, la librairie n’a aucune idée préalable <strong>du</strong> temps qui sera<br />

nécessaire à l’exécution de chaque branche/sous-branche d’interrogation des résultats<br />

intermédiaires. L’amélioration pourrait se faire selon deux approches.<br />

La première approche serait d’optimiser en temps réel l’ordre d’exécution des ité-<br />

rateurs de la chaîne. Cela pourrait se faire par exemple en mesurant une donnée telle<br />

71


8.2 Intégration de requêtes vers des moteurs de recherche 72<br />

que le nombre de résultats renvoyés par celui-ci ou le nombre de sous-branches de ré-<br />

sultats qu’il a générées (caractérisant ainsi sa restrictivité). Suite à cela, un algorithme<br />

d’optimisation <strong>du</strong> plan d’exécution pourrait être investigué.<br />

La deuxième approche serait d’optimiser en temps réel l’ordre d’évaluation des branches<br />

d’exécution de la requête. En effet, on ne peut pas savoir à l’avance si une branche d’exé-<br />

cution correspondant à un résultat intermédiaire nécessitera beaucoup de temps ou non.<br />

Dans le cas où une branche correspondant à un résultat R1 nécessiterait beaucoup de<br />

temps et où les branches correspondant aux résultats R2 et R3 en nécessiteraient peu,<br />

l’exécution de la branche de R1 ferait obtenir à l’utilisateur les résultats de R2 et R3<br />

fort tard. Si en revanche la librairie était prévue pour exécuter plusieurs branches un<br />

parallèle, les branches nécessitant peu de temps pourraient donc rapidement pro<strong>du</strong>ire<br />

les résultats qu’elles génèrent et laisser alors place à l’exécution de nouvelles branches<br />

d’exécution. Cependant, une telle modification nécessiterait la réécriture d’une bonne<br />

partie de la librairie, car les itérateurs implémentés par celle-ci ne sont pas prévus pour<br />

être interrogés de manière parallélisée.<br />

8.2 Intégration de requêtes vers des moteurs de recherche<br />

La deuxième amélioration consisterait en l’intégration d’une fonctionnalité d’inter-<br />

rogation de moteurs de recherche <strong>sémantique</strong>s <strong>du</strong>rant l’exécution de la requête. En ef-<br />

fet, dans l’état actuel de la librairie, celle-ci ne commence par interroger que les URI<br />

contenues dans la requête SPARQL et n’interroge par la suite que les nouvelles URI<br />

découvertes <strong>du</strong>rant l’exécution. Dès lors :<br />

– si la requête SPARQL ne contient aucune URI, l’exécution de la librairie ne pro<strong>du</strong>it<br />

aucun résultat ;<br />

– dans le cas contraire, l’exécution peut avoir lieu mais peut dans certains cas se ter-<br />

miner rapidement, même si des informations supplémentaires pertinentes existent<br />

sur le <strong>Web</strong> de données.<br />

C’est pourquoi une interaction avec des moteurs de recherche <strong>sémantique</strong>s pourrait<br />

s’avérer très utile. D’une part, cela permettrait d’alimenter le QLD avant l’exécution de<br />

la requête avec des données probablement pertinentes dans le contexte de la requête.<br />

D’autre part, on pourrait imaginer de continuer d’interroger ces moteurs de recherche<br />

au fur et à mesure de l’exécution de la requête, en vue de récupérer en permanence des<br />

informations potentiellement pertinentes.


8.3 Fusion et nettoyage des données locales 73<br />

8.3 Fusion et nettoyage des données locales<br />

La troisième et dernière amélioration consisterait en une gestion plus intelligente des<br />

données contenues dans le QLD, afin de profiter pleinement <strong>du</strong> potentiel <strong>du</strong> <strong>Web</strong> sé-<br />

mantique. En effet, au fur et à mesure de l’exécution de la requête, le QLD se remplit<br />

progressivement de données, et l’on constate petit à petit l’apparition de données redon-<br />

dantes. En particulier, OWL définit des liens de type sameAs et refersTo définis à la<br />

section 3.3, permettant d’indiquer que deux ressources <strong>du</strong> <strong>Web</strong> de données représentent<br />

en réalité le même concept.<br />

Dans le cas de la librairie SQUIN, celle-ci prend partiellement en compte ces liens <strong>du</strong><br />

fait qu’elle réréférence automatiquement les URI renseignées par ces liens. Cependant,<br />

aucune fusion des triplets équivalents n’est effectuée, ce qui a pour conséquence que lors<br />

d’une interrogation <strong>du</strong> QLD, la librairie n’utilise que partiellement l’information qui y<br />

est contenue. Une fusion des données sur base des liens cités ci-dessus pourrait donc<br />

mener, d’une part, à une augmentation <strong>du</strong> nombre de résultats pro<strong>du</strong>its et, d’autre part,<br />

à une ré<strong>du</strong>ction de la taille <strong>du</strong> QLD (ce qui aurait pour conséquence de ré<strong>du</strong>ire son temps<br />

d’interrogation).<br />

De plus, toujours dans une optique de nettoyage des données, il pourrait être intéres-<br />

sant d’y ajouter un mo<strong>du</strong>le vérifiant l’existance de données contradictoires dans le QLD.<br />

Cela pourrait ensuite être par exemple signalé à l’utilisateur, ou simplement supprimé<br />

<strong>du</strong> QLD afin d’éviter de fournir des résultats erronés.


Chapitre 9<br />

Conclusions<br />

Le chapitre 5 nous a permis d’analyser la librairie SQUIN, et d’en comprendre les<br />

mécanismes sous-jacents. Nous avons ensuite détaillé au chapitre 6 les pistes de recherche<br />

que j’ai investiguées dans le cadre de ce mémoire afin d’optimiser le temps de réponse<br />

nécessaire à l’obtention des résultats. Parmi ces pistes, les deux premières se sont avérées<br />

infructueuses mais la troisième, qui consistait en la création d’un mo<strong>du</strong>le d’interrogation<br />

parallèle <strong>du</strong> QLD, a présenté des résultats fort intéressants. Nous avons alors analysé au<br />

chapitre 7 les résultats obtenus grâce à ce mo<strong>du</strong>le, et avons prouvé que ce dernier pouvait<br />

apporter une ré<strong>du</strong>ction significative <strong>du</strong> temps de réponse. Pour terminer, nous avons vu<br />

diverses pistes d’améliorations futures que je considère pertinentes en vue d’améliorer<br />

davantage l’efficacité de la librairie, tant en termes de rapidité d’obtention des résultats<br />

qu’en termes de nombre de résultats pertinents obtenus.<br />

Avec la réalisation <strong>du</strong> mo<strong>du</strong>le d’interrogation parallèle, nous avons mis en évidence<br />

la grande variabilité des résultats <strong>du</strong>e aux aléas <strong>du</strong> réseau Internet et à sa dépendance à<br />

un ensemble de facteurs externes propres aux serveurs distants interrogés et à l’état <strong>du</strong><br />

réseau. Nous avons également confirmé que le temps consommé pour effectuer l’évalua-<br />

tion locale d’une requête était négligeable face au temps nécessaire aux déréférencements<br />

des URI rencontrées lors de l’exécution de la requête. Dès lors, l’ajout d’une interroga-<br />

tion parallèle <strong>du</strong> QLD permet dans certains cas de ré<strong>du</strong>ire considérablement le temps de<br />

réponse nécessaire à l’affichage des résultats aux yeux de l’utilisateur.<br />

D’un point de vue de développement personnel, la réalisation de ce mémoire m’a ap-<br />

porté un apprentissage très intéressant, complémentaire au cursus d’études poursuivi<br />

jusqu’ici. La difficulté principale que j’ai rencontrée est que l’analyse de la librairie<br />

SQUIN est de loin la partie qui a occupé la majorité de mon temps, car celle-ci est<br />

74


elativement complexe et n’est pas énormément documentée, ce qui ne facilite pas la<br />

tâche. Cette phase d’analyse ne débouchant sur aucune pro<strong>du</strong>ction concrète de code<br />

ou de résultats, cela m’a donné l’impression d’être impro<strong>du</strong>ctif et de ne pas avancer.<br />

Pourtant, cela est inhérent au travail d’un ingénieur informaticien, et cette expérience<br />

me sera probablement fort utile plus tard dans ma vie professionnelle. J’ai également<br />

appris, dans le cadre de ce mémoire, un ensemble de concepts qui n’avaient pas été vus<br />

<strong>du</strong>rant le cursus d’ingénieur civil informaticien et qui pourtant s’avèreront très utiles<br />

par la suite. De plus, ce mémoire a été une bonne initiation au monde de la recherche.<br />

La plus grande frustration rencontrée a été le fait d’investiguer des pistes de recherche,<br />

pour ensuite se rendre compte qu’elles étaient stériles et ne menaient à rien. Je présume<br />

que c’est pour cela que l’on parle de “chercheurs” et non pas de “trouveurs”.<br />

Nous avons vu au chapitre 2 l’évolution <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> depuis sa création, et<br />

en particulier la croissance exponentielle <strong>du</strong> nombre de données publiées sur le <strong>Web</strong> de<br />

données, comme nous l’avons vu à la section 2.4. Cette croissance étant amenée à aug-<br />

menter dans les années à venir, il deviendra donc de plus en plus important d’optimiser<br />

les méthodes d’interrogation <strong>du</strong> <strong>Web</strong> <strong>sémantique</strong> afin de gérer convenablement l’énorme<br />

quantité de données disponibles, et les approches novatrices décentralisées offriront une<br />

bonne alternative aux méthodes traditionnelles de stockage et d’interrogation tels que les<br />

entrepôts de données. Le Link Traversal et son implémentation SQUIN illustrent parfai-<br />

tement cette tendance de décentralisation et permettent ainsi de maintenir une exécution<br />

rapide des requêtes, en phase avec la croissance permanente <strong>du</strong> <strong>Web</strong> de données.<br />

75


Acronymes et abréviations<br />

ADQF Active Discovery Query Federation<br />

BGP Basic Graph Pattern<br />

IRI Internationalized Resource Identifier<br />

LD Linked Data<br />

LDS Linked Dataset(s)<br />

LOD Linked Open Data<br />

OWL <strong>Web</strong> Ontology Language<br />

SPARQL SPARQL Protocol and RDF Query Language<br />

RDF Ressource Description Framework<br />

RDFS RDF Schema<br />

QF Query Federation<br />

QLD Query-local Dataset (ensemble de données local)<br />

TP Triple Pattern<br />

URI Uniform Resource Identifier<br />

URL Uniform Resource Locator<br />

URN Uniform Resource Name<br />

W3C World Wide <strong>Web</strong> Consortium<br />

WS <strong>Web</strong> <strong>sémantique</strong><br />

76


BIBLIOGRAPHIE 77<br />

Bibliographie<br />

[1] T. Berners-Lee, J. Hendler, O. Lassila, et al. The semantic web. Scientific American,<br />

284(5) :34–43, 2001.<br />

[2] E. Pietriga, C. Bizer, D. Karger, and R. Lee. Fresnel - a browser-independent pre-<br />

sentation vocabulary for RDF. In Proceedings of the Second International Workshop<br />

on Interaction Design and the Semantic <strong>Web</strong>, pages 158–171. Springer, 2006.<br />

[3] L. Masinter, T. Berners-Lee, and R.T. Fielding. Uniform resource identifier (URI) :<br />

Generic syntax, 2005.<br />

[4] C. Bizer, T. Heath, K. Idehen, and T. Berners-Lee. Linked data on the web<br />

(LDOW2008). In Proceeding of the 17th international conference on World Wide<br />

<strong>Web</strong>, pages 1265–1266. ACM, 2008.<br />

[5] S. Vansummeren. XML technologies (<strong>Université</strong> Libre de Bruxelles, INFO-H-509<br />

course), 2011. http://dpt-ti.ulb.ac.be/public/teaching/infoh509.<br />

[6] T. Berners-Lee. Design issues : Linked data., 2009. http://www.w3.org/<br />

DesignIssues/LinkedData.html.<br />

[7] W3C OWL Working Group. OWL <strong>Web</strong> Ontology Language Reference. W3C Re-<br />

commendation, 2004. http://www.w3.org/TR/owl-ref/".<br />

[8] K. Alexander, R. Cyganiak, M. Hausenblas, and J. Zhao. Describing linked datasets.<br />

In Proceedings of the 2nd Workshop on Linked Data on the <strong>Web</strong> (LDOW2009), 2009.<br />

[9] C. Bizer, T. Heath, D. Ayers, and Y. Raymond. Linking open data. In Proceedings<br />

of the Poster Session at the 4th European Semantic <strong>Web</strong> Conference, 2007.<br />

[10] F. Manola and E. Miller. Resource Description Framework Primer. W3C Descrip-<br />

tion, 2004. http://www.w3.org/TR/2004/REC-rdf-primer-20040210/.<br />

[11] O. Hartig and A. Langegger. A database perspective on consuming linked data on<br />

the web, 2012.


BIBLIOGRAPHIE 78<br />

[12] D. Brickley and R.V. Guha. RDF Vocabulary Description Language 1.0 : RDF<br />

Schema. W3C Recommendation, 2004. http://www.w3.org/TR/rdf-schema/.<br />

[13] W3C OWL Working Group. OWL 2 <strong>Web</strong> Ontology Language Document Overview.<br />

W3C Recommendation, 2009. http://www.w3.org/TR/owl2-overview/.<br />

[14] O. Hartig, C. Bizer, and J.C. Freytag. Executing SPARQL queries over the web of<br />

linked data. The Semantic <strong>Web</strong>-ISWC 2009, pages 293–309, 2009.<br />

[15] E. Prud’hommeaux and A. Seaborne. SPARQL Query Language for RDF. W3C<br />

Recommendation, 2008. http://www.w3.org/TR/rdf-sparql-query/.<br />

[16] A. Seaborne. ARQ - a SPARQL processor for jena. Obtained through the Internet<br />

[accessed 1/5/2010], 2010. http://jena.sourceforge.net/ARQ/.<br />

[17] J.J. Carroll, C. Bizer, P. Hayes, and P. Stickler. Named graphs. <strong>Web</strong> Semantics :<br />

Science, Services and Agents on the World Wide <strong>Web</strong>, 3(4) :247–267, 2005.<br />

[18] J. Umbrich, M. Hausenblas, A. Hogan, A. Polleres, and S. Decker. Towards dataset<br />

dynamics : Change frequency of linked open data sources. 2010.<br />

[19] E. Oren, R. Delbru, M. Catasta, R. Cyganiak, H. Stenzhorn, and G. Tummarello.<br />

Sindice. com : a document-oriented lookup index for open linked data. International<br />

Journal of Metadata, Semantics and Ontologies, 3(1) :37–52, 2008.<br />

[20] G. Cheng and Y. Qu. Searching linked objects with falcons : Approach, implemen-<br />

tation and evaluation. International Journal on Semantic <strong>Web</strong> and Information<br />

Systems (IJSWIS), 5(3) :49–70, 2009.<br />

[21] B. Quilitz and U. Leser. Querying distributed RDF data sources with SPARQL.<br />

The Semantic <strong>Web</strong> : Research and Applications, pages 524–538, 2008.<br />

[22] A. Langegger. A flexible architecture for virtual information integration based on<br />

semantic web concepts. PhD thesis, Dissertation, J. Kepler University Linz, 2010.<br />

[23] O. Hartig. Zero-knowledge query planning for an iterator implementation of link<br />

traversal based query execution. In Grigoris Antoniou, Marko Grobelnik, Elena<br />

Simperl, Bijan Parsia, Dimitris Plexousakis, Pieter De Leenheer, and Jeff Pan,<br />

editors, The Semantic <strong>Web</strong> : Research and Applications, volume 6643 of Lecture<br />

Notes in Computer Science, pages 154–169. Springer Berlin / Heidelberg, 2011.<br />

http://videolectures.net/eswc2011_hartig_zero/.<br />

[24] T. Berners-Lee, Y. Chen, L. Chilton, D. Connolly, R. Dhanaraj, J. Hollenbach,<br />

A. Lerer, and D. Sheets. Tabulator : Exploring and analyzing linked data on the se-<br />

mantic web. In Proceedings of the 3rd International Semantic <strong>Web</strong> User Interaction<br />

Workshop, 2006.


Annexe A<br />

Résulats complets des tests<br />

effectués<br />

Les résultats bruts des benchmarks effectués sont repris dans les pages qui suivent.<br />

Chaque page de résultats correspond à une solution particulière d’une requête particu-<br />

lière, lesquelles sont précisées en haut à gauche de la page.<br />

79


Requête 1<br />

Solution 1: ( ?author = ) ( ?phone = )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337079855 112 1337079856 113 1 0,88%<br />

1337088148 90 1337088151 93 3 3,23%<br />

1337088570 162 1337088574 166 4 2,41%<br />

1337088852 89 1337088854 91 2 2,20%<br />

1337089102 19 1337089103 20 1 5,00%<br />

1337089513 103 1337089515 105 2 1,90%<br />

1337089863 102 1337089869 108 6 5,56%<br />

1337090429 246 1337090431 248 2 0,81%<br />

1337090720 118 1337090726 124 6 4,84%<br />

1337091037 40 1337091040 43 3 6,98%<br />

1337091612 225 1337091625 238 13 5,46%<br />

1337080194 150 1337080196 152 2 1,32%<br />

1337091890 153 1337091895 158 5 3,16%<br />

1337092202 27 1337092204 29 2 6,90%<br />

1337092707 160 1337092708 161 1 0,62%<br />

1337093336 361 1337093338 363 2 0,55%<br />

1337093716 326 1337093719 329 3 0,91%<br />

1337093873 80 1337093875 82 2 2,44%<br />

1337094344 164 1337094346 166 2 1,20%<br />

1337094722 114 1337094724 116 2 1,72%<br />

1337095308 289 1337095309 290 1 0,34%<br />

1337095574 178 1337095579 183 5 2,73%<br />

1337080561 133 1337080563 135 2 1,48%<br />

1337095834 42 1337095835 43 1 2,33%<br />

1337096297 131 1337096297 131 0 0,00%<br />

1337096652 125 1337096654 127 2 1,57%<br />

1337097250 43 1337097251 44 1 2,27%<br />

1337097667 95 1337097670 98 3 3,06%<br />

1337098042 35 1337098042 35 0 0,00%<br />

1337098851 25 1337098853 27 2 7,41%<br />

1337080913 121 1337080918 126 5 3,97%<br />

1337081459 155 1337081461 157 2 1,27%<br />

1337082052 372 1337082050 370 -­‐2 -­‐0,54%<br />

1337082202 112 1337082205 115 3 2,61%<br />

1337082932 371 1337082930 369 -­‐2 -­‐0,54%<br />

1337083008 29 1337083009 30 1 3,33%<br />

Moyenne 141,58 144,03 2,44 2,48%<br />

Écart type 99,22 99,09 2,56 2,11%<br />

Maximum 372 370 13 7,41%


Requête 1<br />

Solution 2: ( ?author = ) ( ?phone = )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337079957 214 1337079958 215 1 0,47%<br />

1337088275 217 1337088278 220 3 1,36%<br />

1337088696 288 1337088699 291 3 1,03%<br />

1337088954 191 1337088955 192 1 0,52%<br />

1337089234 151 1337089236 153 2 1,31%<br />

1337089597 187 1337089599 189 2 1,06%<br />

1337090011 250 1337090013 252 2 0,79%<br />

1337090525 342 1337090539 356 14 3,93%<br />

1337090929 327 1337090941 339 12 3,54%<br />

1337091220 223 1337091229 232 9 3,88%<br />

1337091642 255 1337091654 267 12 4,49%<br />

1337080234 190 1337080235 191 1 0,52%<br />

1337092017 280 1337092023 286 6 2,10%<br />

1337092434 259 1337092436 261 2 0,77%<br />

1337092884 337 1337092887 340 3 0,88%<br />

1337093140 165 1337093143 168 3 1,79%<br />

1337093420 30 1337093424 34 4 11,76%<br />

1337094005 212 1337094014 221 9 4,07%<br />

1337094455 275 1337094459 279 4 1,43%<br />

1337094827 219 1337094833 225 6 2,67%<br />

1337095232 213 1337095235 216 3 1,39%<br />

1337095704 308 1337095709 313 5 1,60%<br />

1337080689 261 1337080690 262 1 0,38%<br />

1337095983 191 1337095983 191 0 0,00%<br />

1337096356 190 1337096362 196 6 3,06%<br />

1337096755 228 1337096761 234 6 2,56%<br />

1337097049 159 1337097055 165 6 3,64%<br />

1337097482 275 1337097486 279 4 1,43%<br />

1337097849 277 1337097853 281 4 1,42%<br />

1337098084 77 1337098090 83 6 7,23%<br />

1337098562 170 1337098566 174 4 2,30%<br />

1337099027 201 1337099031 205 4 1,95%<br />

1337081065 273 1337081070 278 5 1,80%<br />

1337081498 194 1337081507 203 9 4,43%<br />

1337081926 246 1337081926 246 0 0,00%<br />

1337082459 369 1337082457 367 -­‐2 -­‐0,54%<br />

1337082709 148 1337082714 153 5 3,27%<br />

1337083223 244 1337083239 260 16 6,15%<br />

Moyenne 227,26 232,03 4,76 2,38%<br />

Écart type 69,06 69,62 3,95 2,32%<br />

Maximum 369 367 16 11,76%


Requête 1<br />

Solution 3: ( ?author = ) ( ?phone = )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337079977 234 1337080010 267 33 12,36%<br />

1337088284 226 1337088287 229 3 1,31%<br />

1337088708 300 1337088713 305 5 1,64%<br />

1337088977 214 1337088979 216 2 0,93%<br />

1337089268 185 1337089269 186 1 0,54%<br />

1337089637 227 1337089638 228 1 0,44%<br />

1337090021 260 1337090022 261 1 0,38%<br />

1337090542 359 1337090545 362 3 0,83%<br />

1337090959 357 1337090962 360 3 0,83%<br />

1337091251 254 1337091253 256 2 0,78%<br />

1337091658 271 1337091659 272 1 0,37%<br />

1337080258 214 1337080291 247 33 13,36%<br />

1337092040 303 1337092041 304 1 0,33%<br />

1337092434 259 1337092442 267 8 3,00%<br />

1337092871 324 1337092879 332 8 2,41%<br />

1337093164 189 1337093169 194 5 2,58%<br />

1337093447 57 1337093450 60 3 5,00%<br />

1337094027 234 1337094032 239 5 2,09%<br />

1337094468 288 1337094483 303 15 4,95%<br />

1337094872 264 1337094878 270 6 2,22%<br />

1337095246 227 1337095251 232 5 2,16%<br />

1337095714 318 1337095714 318 0 0,00%<br />

1337080699 271 1337080733 305 34 11,15%<br />

1337096011 219 1337096016 224 5 2,23%<br />

1337096374 208 1337096379 213 5 2,35%<br />

1337096764 237 1337096766 239 2 0,84%<br />

1337097064 174 1337097067 177 3 1,69%<br />

1337097482 275 1337097491 284 9 3,17%<br />

1337097860 288 1337097864 292 4 1,37%<br />

1337098221 214 1337098229 222 8 3,60%<br />

1337098608 216 1337098608 216 0 0,00%<br />

1337099074 248 1337099074 248 0 0,00%<br />

1337081161 369 1337081203 411 42 10,22%<br />

1337081542 238 1337081571 267 29 10,86%<br />

1337081936 256 1337081968 288 32 11,11%<br />

1337082481 391 1337082512 422 31 7,35%<br />

1337082691 130 1337082723 162 32 19,75%<br />

1337083281 302 1337083314 335 33 9,85%<br />

Moyenne 252,63 263,50 10,87 4,05%<br />

Écart type 64,86 68,36 13,06 4,79%<br />

Maximum 391 422 42 19,75%


Requête 1<br />

Solution 4: ( ?author = ) ( ?phone = )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337079922 179 1337079922 179 0 0,00%<br />

1337088375 317 1337088377 319 2 0,63%<br />

1337088673 265 1337088680 272 7 2,57%<br />

1337088796 33 1337088796 33 0 0,00%<br />

1337089240 157 1337089244 161 4 2,48%<br />

1337089693 283 1337089695 285 2 0,70%<br />

1337090086 325 1337090086 325 0 0,00%<br />

1337090206 23 1337090207 24 1 4,17%<br />

1337090776 174 1337090775 173 -­‐1 -­‐0,58%<br />

1337091135 138 1337091138 141 3 2,13%<br />

1337091612 225 1337091616 229 4 1,75%<br />

1337080143 99 1337080144 100 1 1,00%<br />

1337092107 370 1337092110 373 3 0,80%<br />

1337092383 208 1337092386 211 3 1,42%<br />

1337092843 296 1337092846 299 3 1,00%<br />

1337092996 21 1337092999 24 3 12,50%<br />

1337093467 77 1337093467 77 0 0,00%<br />

1337094120 327 1337094131 338 11 3,25%<br />

1337094549 369 1337094544 364 -­‐5 -­‐1,37%<br />

1337094872 264 1337094879 271 7 2,58%<br />

1337095324 305 1337095329 310 5 1,61%<br />

1337095681 285 1337095681 285 0 0,00%<br />

1337080650 222 1337080654 226 4 1,77%<br />

1337095820 28 1337095822 30 2 6,67%<br />

1337096494 328 1337096495 329 1 0,30%<br />

1337096563 36 1337096564 37 1 2,70%<br />

1337097086 196 1337097089 199 3 1,51%<br />

1337097524 317 1337097529 322 5 1,55%<br />

1337097819 247 1337097820 248 1 0,40%<br />

1337098154 147 1337098157 150 3 2,00%<br />

1337098510 118 1337098522 130 12 9,23%<br />

1337098897 71 1337098897 71 0 0,00%<br />

1337080834 42 1337080835 43 1 2,33%<br />

1337081542 238 1337081544 240 2 0,83%<br />

1337081781 101 1337081786 106 5 4,72%<br />

1337082382 292 1337082392 302 10 3,31%<br />

1337082699 138 1337082705 144 6 4,17%<br />

1337083003 24 1337083006 27 3 11,11%<br />

Moyenne 191,71 194,66 2,95 2,35%<br />

Écart type 111,74 112,20 3,34 3,04%<br />

Maximum 370 373 12 12,50%


Requête 2<br />

Solution 1: ( ?name = "Adam" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738885 8 1337738919 42 34 80,95%<br />

1337740196 10 1337740227 41 31 75,61%<br />

1337740240 11 1337740284 55 44 80,00%<br />

1337740300 14 1337740343 57 43 75,44%<br />

1337740353 8 1337740400 55 47 85,45%<br />

1337740414 10 1337740454 50 40 80,00%<br />

1337740466 10 1337740504 48 38 79,17%<br />

1337740518 9 1337740568 59 50 84,75%<br />

1337740580 11 1337740627 58 47 81,03%<br />

1337740640 12 1337740684 56 44 78,57%<br />

1337740696 11 1337740735 50 39 78,00%<br />

1337738932 11 1337738975 54 43 79,63%<br />

1337740747 10 1337740786 49 39 79,59%<br />

1337740799 11 1337740847 59 48 81,36%<br />

1337740858 9 1337740900 51 42 82,35%<br />

1337740912 10 1337740956 54 44 81,48%<br />

1337740969 11 1337741017 59 48 81,36%<br />

1337741029 10 1337741084 65 55 84,62%<br />

1337741095 9 1337741153 67 58 86,57%<br />

1337741168 13 1337741211 56 43 76,79%<br />

1337741223 10 1337741258 45 35 77,78%<br />

1337741294 10 1337741340 56 46 82,14%<br />

1337738987 10 1337739028 51 41 80,39%<br />

1337741354 10 1337741415 71 61 85,92%<br />

1337741429 10 1337741492 73 63 86,30%<br />

1337741502 7 1337741551 56 49 87,50%<br />

1337741563 11 1337741606 54 43 79,63%<br />

1337741619 11 1337741670 62 51 82,26%<br />

1337741682 10 1337741732 60 50 83,33%<br />

1337741746 12 1337741790 56 44 78,57%<br />

1337741801 9 1337741844 52 43 82,69%<br />

1337741856 10 1337741903 57 47 82,46%<br />

1337741915 10 1337741966 61 51 83,61%<br />

1337739871 20 1337739902 51 31 60,78%<br />

1337741978 10 1337742029 61 51 83,61%<br />

1337742040 10 1337742084 54 44 81,48%<br />

1337742096 10 1337742141 55 45 81,82%<br />

1337742154 11 1337742195 52 41 78,85%<br />

1337742208 11 1337742254 57 46 80,70%<br />

1337742265 10 1337742316 61 51 83,61%<br />

1337742328 10 1337742376 58 48 82,76%<br />

1337742388 11 1337742431 54 43 79,63%<br />

1337742443 10 1337742482 49 39 79,59%<br />

1337742498 11 1337742542 55 44 80,00%<br />

1337739922 11 1337739959 48 37 77,08%<br />

1337742553 10 1337742596 53 43 81,13%<br />

1337739971 10 1337740018 57 47 82,46%<br />

1337740031 10 1337740076 55 45 81,82%<br />

1337740088 11 1337740132 55 44 80,00%<br />

1337740143 9 1337740184 50 41 82,00%<br />

Moyenne 10,46 55,28 44,82 80,85%<br />

Écart type 1,80 6,18 6,47 3,96%<br />

Maximum 20 73 63 87,50%


Requête 2<br />

Solution 2: ( ?name = "Clement" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738894 17 1337738919 42 25 59,52%<br />

1337740201 15 1337740227 41 26 63,41%<br />

1337740245 16 1337740284 55 39 70,91%<br />

1337740304 18 1337740343 57 39 68,42%<br />

1337740355 10 1337740400 55 45 81,82%<br />

1337740420 16 1337740454 50 34 68,00%<br />

1337740470 14 1337740504 48 34 70,83%<br />

1337740523 14 1337740568 59 45 76,27%<br />

1337740585 16 1337740627 58 42 72,41%<br />

1337740644 16 1337740684 56 40 71,43%<br />

1337740700 15 1337740735 50 35 70,00%<br />

1337738936 15 1337738975 54 39 72,22%<br />

1337740751 14 1337740786 49 35 71,43%<br />

1337740809 21 1337740847 59 38 64,41%<br />

1337740865 16 1337740900 51 35 68,63%<br />

1337740916 14 1337740956 54 40 74,07%<br />

1337740973 15 1337741017 59 44 74,58%<br />

1337741037 18 1337741084 65 47 72,31%<br />

1337741102 16 1337741153 67 51 76,12%<br />

1337741171 16 1337741211 56 40 71,43%<br />

1337741230 17 1337741258 45 28 62,22%<br />

1337741303 19 1337741340 56 37 66,07%<br />

1337738992 15 1337739028 51 36 70,59%<br />

1337741359 15 1337741396 52 37 71,15%<br />

1337741439 20 1337741492 73 53 72,60%<br />

1337741507 12 1337741551 56 44 78,57%<br />

1337741568 16 1337741606 54 38 70,37%<br />

1337741625 17 1337741670 62 45 72,58%<br />

1337741686 14 1337741731 59 45 76,27%<br />

1337741750 16 1337741790 56 40 71,43%<br />

1337741805 13 1337741844 52 39 75,00%<br />

1337741862 16 1337741903 57 41 71,93%<br />

1337741920 15 1337741966 61 46 75,41%<br />

1337739866 15 1337739902 51 36 70,59%<br />

1337741983 15 1337742029 61 46 75,41%<br />

1337742046 16 1337742084 54 38 70,37%<br />

1337742101 15 1337742141 55 40 72,73%<br />

1337742159 16 1337742195 52 36 69,23%<br />

1337742214 17 1337742254 57 40 70,18%<br />

1337742269 14 1337742316 61 47 77,05%<br />

1337742332 14 1337742376 58 44 75,86%<br />

1337742392 15 1337742431 54 39 72,22%<br />

1337742447 14 1337742482 49 35 71,43%<br />

1337742503 16 1337742542 55 39 70,91%<br />

1337739926 15 1337739959 48 33 68,75%<br />

1337742558 15 1337742596 53 38 71,70%<br />

1337739977 16 1337740018 57 41 71,93%<br />

1337740036 15 1337740076 55 40 72,73%<br />

1337740092 15 1337740132 55 40 72,73%<br />

1337740148 14 1337740184 50 36 72,00%<br />

Moyenne 15,48 54,88 39,40 71,56%<br />

Écart type 1,81 5,75 5,51 3,96%<br />

Maximum 21 73 53 81,82%


Requête 2<br />

Solution 3: ( ?name = "Collin" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738886 9 1337738919 42 33 78,57%<br />

1337740196 10 1337740227 41 31 75,61%<br />

1337740241 12 1337740284 55 43 78,18%<br />

1337740299 13 1337740343 57 44 77,19%<br />

1337740353 8 1337740400 55 47 85,45%<br />

1337740414 10 1337740454 50 40 80,00%<br />

1337740465 9 1337740504 48 39 81,25%<br />

1337740519 10 1337740568 59 49 83,05%<br />

1337740581 12 1337740627 58 46 79,31%<br />

1337740639 11 1337740684 56 45 80,36%<br />

1337740697 12 1337740735 50 38 76,00%<br />

1337738931 10 1337738975 54 44 81,48%<br />

1337740746 9 1337740786 49 40 81,63%<br />

1337740800 12 1337740847 59 47 79,66%<br />

1337740860 11 1337740900 51 40 78,43%<br />

1337740912 10 1337740956 54 44 81,48%<br />

1337740968 10 1337741017 59 49 83,05%<br />

1337741029 10 1337741084 65 55 84,62%<br />

1337741096 10 1337741153 67 57 85,07%<br />

1337741181 26 1337741211 56 30 53,57%<br />

1337741222 9 1337741258 45 36 80,00%<br />

1337741296 12 1337741340 56 44 78,57%<br />

1337738987 10 1337739028 51 41 80,39%<br />

1337741353 9 1337741415 71 62 87,32%<br />

1337741429 10 1337741492 73 63 86,30%<br />

1337741503 8 1337741551 56 48 85,71%<br />

1337741565 13 1337741606 54 41 75,93%<br />

1337741626 18 1337741670 62 44 70,97%<br />

1337741682 10 1337741732 60 50 83,33%<br />

1337741745 11 1337741790 56 45 80,36%<br />

1337741802 10 1337741844 52 42 80,77%<br />

1337741856 10 1337741903 57 47 82,46%<br />

1337741921 16 1337741966 61 45 73,77%<br />

1337739862 11 1337739902 51 40 78,43%<br />

1337741980 12 1337742029 61 49 80,33%<br />

1337742041 11 1337742084 54 43 79,63%<br />

1337742095 9 1337742141 55 46 83,64%<br />

1337742153 10 1337742195 52 42 80,77%<br />

1337742207 10 1337742254 57 47 82,46%<br />

1337742264 9 1337742316 61 52 85,25%<br />

1337742328 10 1337742376 58 48 82,76%<br />

1337742388 11 1337742431 54 43 79,63%<br />

1337742442 9 1337742482 49 40 81,63%<br />

1337742497 10 1337742542 55 45 81,82%<br />

1337739921 10 1337739959 48 38 79,17%<br />

1337742554 11 1337742596 53 42 79,25%<br />

1337739971 10 1337740018 57 47 82,46%<br />

1337740031 10 1337740076 55 45 81,82%<br />

1337740088 11 1337740132 55 44 80,00%<br />

1337740144 10 1337740184 50 40 80,00%<br />

Moyenne 10,88 55,28 44,40 80,18%<br />

Écart type 2,80 6,18 6,40 4,97%<br />

Maximum 26 73 63 87,32%


Requête 2<br />

Solution 4: ( ?name = "Csongor" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738896 19 1337738919 42 23 54,76%<br />

1337740209 23 1337740227 41 18 43,90%<br />

1337740259 30 1337740284 55 25 45,45%<br />

1337740317 31 1337740343 57 26 45,61%<br />

1337740366 21 1337740400 55 34 61,82%<br />

1337740430 26 1337740454 50 24 48,00%<br />

1337740480 24 1337740504 48 24 50,00%<br />

1337740533 24 1337740568 59 35 59,32%<br />

1337740596 27 1337740627 58 31 53,45%<br />

1337740655 27 1337740684 56 29 51,79%<br />

1337740712 27 1337740735 50 23 46,00%<br />

1337738948 27 1337738975 54 27 50,00%<br />

1337740759 22 1337740786 49 27 55,10%<br />

1337740815 27 1337740847 59 32 54,24%<br />

1337740874 25 1337740900 51 26 50,98%<br />

1337740938 36 1337740956 54 18 33,33%<br />

1337740987 29 1337741017 59 30 50,85%<br />

1337741044 25 1337741084 65 40 61,54%<br />

1337741117 31 1337741153 67 36 53,73%<br />

1337741183 28 1337741211 56 28 50,00%<br />

1337741240 27 1337741258 45 18 40,00%<br />

1337741312 28 1337741340 56 28 50,00%<br />

1337739002 25 1337739028 51 26 50,98%<br />

1337741369 25 1337741415 71 46 64,79%<br />

1337741446 27 1337741492 73 46 63,01%<br />

1337741519 24 1337741551 56 32 57,14%<br />

1337741581 29 1337741606 54 25 46,30%<br />

1337741656 48 1337741670 62 14 22,58%<br />

1337741700 28 1337741732 60 32 53,33%<br />

1337741761 27 1337741790 56 29 51,79%<br />

1337741821 29 1337741844 52 23 44,23%<br />

1337741877 31 1337741903 57 26 45,61%<br />

1337741930 25 1337741966 61 36 59,02%<br />

1337739880 29 1337739902 51 22 43,14%<br />

1337741995 27 1337742029 61 34 55,74%<br />

1337742056 26 1337742084 54 28 51,85%<br />

1337742113 27 1337742141 55 28 50,91%<br />

1337742181 38 1337742195 52 14 26,92%<br />

1337742226 29 1337742254 57 28 49,12%<br />

1337742283 28 1337742316 61 33 54,10%<br />

1337742343 25 1337742376 58 33 56,90%<br />

1337742400 23 1337742431 54 31 57,41%<br />

1337742457 24 1337742482 49 25 51,02%<br />

1337742513 26 1337742542 55 29 52,73%<br />

1337739939 28 1337739959 48 20 41,67%<br />

1337742570 27 1337742596 53 26 49,06%<br />

1337739987 26 1337740018 57 31 54,39%<br />

1337740046 25 1337740076 55 30 54,55%<br />

1337740107 30 1337740132 55 25 45,45%<br />

1337740160 26 1337740184 50 24 48,00%<br />

Moyenne 27,32 55,28 27,96 50,23%<br />

Écart type 4,41 6,18 6,62 8,03%<br />

Maximum 48 73 46 64,79%


Requête 2<br />

Solution: ( ?name = "Daniel" )<br />

Informations sur l'écart différentiel absolu (absolute delta time)<br />

Moyenne: 39,94 secondes<br />

Ecart type: 5,905410871 secondes<br />

Maximum: 57 secondes<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738888 11 1337738919 42 31 73,81%<br />

1337740201 15 1337740227 41 26 63,41%<br />

1337740245 16 1337740284 55 39 70,91%<br />

1337740306 20 1337740343 57 37 64,91%<br />

1337740361 16 1337740400 55 39 70,91%<br />

1337740420 16 1337740454 50 34 68,00%<br />

1337740470 14 1337740504 48 34 70,83%<br />

1337740525 16 1337740568 59 43 72,88%<br />

1337740585 16 1337740627 58 42 72,41%<br />

1337740644 16 1337740684 56 40 71,43%<br />

1337740700 15 1337740735 50 35 70,00%<br />

1337738935 14 1337738975 54 40 74,07%<br />

1337740752 15 1337740786 49 34 69,39%<br />

1337740805 17 1337740847 59 42 71,19%<br />

1337740864 15 1337740900 51 36 70,59%<br />

1337740918 16 1337740956 54 38 70,37%<br />

1337740974 16 1337741017 59 43 72,88%<br />

1337741035 16 1337741084 65 49 75,38%<br />

1337741104 18 1337741153 67 49 73,13%<br />

1337741169 14 1337741211 56 42 75,00%<br />

1337741227 14 1337741258 45 31 68,89%<br />

1337741301 17 1337741340 56 39 69,64%<br />

1337738991 14 1337739028 51 37 72,55%<br />

1337741359 15 1337741415 71 56 78,87%<br />

1337741435 16 1337741492 73 57 78,08%<br />

1337741506 11 1337741551 56 45 80,36%<br />

1337741567 15 1337741606 54 39 72,22%<br />

1337741624 16 1337741670 62 46 74,19%<br />

1337741686 14 1337741732 60 46 76,67%<br />

1337741750 16 1337741790 56 40 71,43%<br />

1337741811 19 1337741844 52 33 63,46%<br />

1337741861 15 1337741903 57 42 73,68%<br />

1337741919 14 1337741966 61 47 77,05%<br />

1337739868 17 1337739902 51 34 66,67%<br />

1337741984 16 1337742029 61 45 73,77%<br />

1337742046 16 1337742084 54 38 70,37%<br />

1337742101 15 1337742141 55 40 72,73%<br />

1337742158 15 1337742195 52 37 71,15%<br />

1337742212 15 1337742254 57 42 73,68%<br />

1337742270 15 1337742316 61 46 75,41%<br />

1337742332 14 1337742376 58 44 75,86%<br />

1337742392 15 1337742431 54 39 72,22%<br />

1337742446 13 1337742482 49 36 73,47%<br />

1337742503 16 1337742542 55 39 70,91%<br />

1337739927 16 1337739959 48 32 66,67%<br />

1337742557 14 1337742596 53 39 73,58%<br />

1337739978 17 1337740018 57 40 70,18%<br />

1337740035 14 1337740076 55 41 74,55%<br />

1337740093 16 1337740132 55 39 70,91%<br />

1337740149 15 1337740184 50 35 70,00%<br />

Moyenne 15,34 55,28 39,94 72,01%<br />

Écart type 1,59 6,18 5,91 3,51%<br />

Maximum 20 73 57 80,36%


Requête 2<br />

Solution 6: ( ?name = "Das" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738902 25 1337738919 42 17 40,48%<br />

1337740213 27 1337740228 42 15 35,71%<br />

1337740263 34 1337740284 55 21 38,18%<br />

1337740325 39 1337740343 57 18 31,58%<br />

1337740374 29 1337740400 55 26 47,27%<br />

1337740438 34 1337740454 50 16 32,00%<br />

1337740485 29 1337740504 48 19 39,58%<br />

1337740540 31 1337740568 59 28 47,46%<br />

1337740603 34 1337740627 58 24 41,38%<br />

1337740661 33 1337740684 56 23 41,07%<br />

1337740718 33 1337740735 50 17 34,00%<br />

1337738954 33 1337738975 54 21 38,89%<br />

1337740762 25 1337740786 49 24 48,98%<br />

1337740822 34 1337740847 59 25 42,37%<br />

1337740878 29 1337740900 51 22 43,14%<br />

1337740932 30 1337740956 54 24 44,44%<br />

1337740995 37 1337741017 59 22 37,29%<br />

1337741051 32 1337741084 65 33 50,77%<br />

1337741122 36 1337741153 67 31 46,27%<br />

1337741191 36 1337741211 56 20 35,71%<br />

1337741245 32 1337741258 45 13 28,89%<br />

1337741321 37 1337741340 56 19 33,93%<br />

1337739011 34 1337739028 51 17 33,33%<br />

1337741375 31 1337741415 71 40 56,34%<br />

1337741453 34 1337741492 73 39 53,42%<br />

1337741524 29 1337741551 56 27 48,21%<br />

1337741586 34 1337741606 54 20 37,04%<br />

1337741644 36 1337741670 62 26 41,94%<br />

1337741705 33 1337741732 60 27 45,00%<br />

1337741770 36 1337741790 56 20 35,71%<br />

1337741828 36 1337741844 52 16 30,77%<br />

1337741881 35 1337741903 57 22 38,60%<br />

1337741939 34 1337741966 61 27 44,26%<br />

1337739886 35 1337739902 51 16 31,37%<br />

1337742002 34 1337742029 61 27 44,26%<br />

1337742062 32 1337742084 54 22 40,74%<br />

1337742118 32 1337742141 55 23 41,82%<br />

1337742176 33 1337742195 52 19 36,54%<br />

1337742232 35 1337742254 57 22 38,60%<br />

1337742293 38 1337742316 61 23 37,70%<br />

1337742350 32 1337742376 58 26 44,83%<br />

1337742405 28 1337742431 54 26 48,15%<br />

1337742465 32 1337742482 49 17 34,69%<br />

1337742523 36 1337742542 55 19 34,55%<br />

1337739947 36 1337739959 48 12 25,00%<br />

1337742575 32 1337742596 53 21 39,62%<br />

1337739993 32 1337740018 57 25 43,86%<br />

1337740053 32 1337740076 55 23 41,82%<br />

1337740113 36 1337740132 55 19 34,55%<br />

1337740164 30 1337740184 50 20 40,00%<br />

Moyenne 32,92 55,30 22,38 40,04%<br />

Écart type 3,11 6,14 5,64 6,42%<br />

Maximum 39 73 40 56,34%


Requête 2<br />

Solution 7: ( ?name = "Deborah" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738889 12 1337738919 42 30 71,43%<br />

1337740202 16 1337740227 41 25 60,98%<br />

1337740246 17 1337740284 55 38 69,09%<br />

1337740305 19 1337740343 57 38 66,67%<br />

1337740361 16 1337740400 55 39 70,91%<br />

1337740419 15 1337740454 50 35 70,00%<br />

1337740471 15 1337740504 48 33 68,75%<br />

1337740523 14 1337740568 59 45 76,27%<br />

1337740586 17 1337740627 58 41 70,69%<br />

1337740644 16 1337740684 56 40 71,43%<br />

1337740701 16 1337740735 50 34 68,00%<br />

1337738938 17 1337738975 54 37 68,52%<br />

1337740753 16 1337740786 49 33 67,35%<br />

1337740804 16 1337740847 59 43 72,88%<br />

1337740865 16 1337740900 51 35 68,63%<br />

1337740917 15 1337740956 54 39 72,22%<br />

1337740975 17 1337741017 59 42 71,19%<br />

1337741039 20 1337741084 65 45 69,23%<br />

1337741103 17 1337741153 67 50 74,63%<br />

1337741171 16 1337741211 56 40 71,43%<br />

1337741227 14 1337741258 45 31 68,89%<br />

1337741302 18 1337741340 56 38 67,86%<br />

1337738993 16 1337739028 51 35 68,63%<br />

1337741360 16 1337741415 71 55 77,46%<br />

1337741436 17 1337741492 73 56 76,71%<br />

1337741509 14 1337741551 56 42 75,00%<br />

1337741574 22 1337741606 54 32 59,26%<br />

1337741625 17 1337741670 62 45 72,58%<br />

1337741691 19 1337741732 60 41 68,33%<br />

1337741751 17 1337741790 56 39 69,64%<br />

1337741805 13 1337741844 52 39 75,00%<br />

1337741862 16 1337741903 57 41 71,93%<br />

1337741920 15 1337741966 61 46 75,41%<br />

1337739870 19 1337739902 51 32 62,75%<br />

1337741987 19 1337742029 61 42 68,85%<br />

1337742047 17 1337742084 54 37 68,52%<br />

1337742103 17 1337742141 55 38 69,09%<br />

1337742160 17 1337742195 52 35 67,31%<br />

1337742213 16 1337742254 57 41 71,93%<br />

1337742270 15 1337742316 61 46 75,41%<br />

1337742334 16 1337742376 58 42 72,41%<br />

1337742391 14 1337742431 54 40 74,07%<br />

1337742454 21 1337742482 49 28 57,14%<br />

1337742503 16 1337742542 55 39 70,91%<br />

1337739943 32 1337739959 48 16 33,33%<br />

1337742558 15 1337742596 53 38 71,70%<br />

1337739976 15 1337740018 57 42 73,68%<br />

1337740037 16 1337740076 55 39 70,91%<br />

1337740093 16 1337740132 55 39 70,91%<br />

1337740149 15 1337740184 50 35 70,00%<br />

Moyenne 16,66 55,28 38,62 69,52%<br />

Écart type 2,90 6,18 6,74 6,62%<br />

Maximum 32 73 56 77,46%


Requête 2<br />

Solution 8: ( ?name = "Georgia" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738897 20 1337738919 42 22 52,38%<br />

1337740209 23 1337740227 41 18 43,90%<br />

1337740259 30 1337740284 55 25 45,45%<br />

1337740317 31 1337740343 57 26 45,61%<br />

1337740366 21 1337740400 55 34 61,82%<br />

1337740430 26 1337740454 50 24 48,00%<br />

1337740481 25 1337740504 48 23 47,92%<br />

1337740534 25 1337740568 59 34 57,63%<br />

1337740595 26 1337740627 58 32 55,17%<br />

1337740653 25 1337740684 56 31 55,36%<br />

1337740711 26 1337740735 50 24 48,00%<br />

1337738947 26 1337738975 54 28 51,85%<br />

1337740759 22 1337740786 49 27 55,10%<br />

1337740814 26 1337740847 59 33 55,93%<br />

1337740874 25 1337740900 51 26 50,98%<br />

1337740930 28 1337740956 54 26 48,15%<br />

1337740986 28 1337741017 59 31 52,54%<br />

1337741045 26 1337741084 65 39 60,00%<br />

1337741114 28 1337741153 67 39 58,21%<br />

1337741184 29 1337741211 56 27 48,21%<br />

1337741249 36 1337741258 45 9 20,00%<br />

1337741312 28 1337741340 56 28 50,00%<br />

1337739020 43 1337739028 51 8 15,69%<br />

1337741379 35 1337741415 71 36 50,70%<br />

1337741445 26 1337741492 73 47 64,38%<br />

1337741519 24 1337741551 56 32 57,14%<br />

1337741580 28 1337741606 54 26 48,15%<br />

1337741640 32 1337741670 62 30 48,39%<br />

1337741700 28 1337741732 60 32 53,33%<br />

1337741759 25 1337741790 56 31 55,36%<br />

1337741821 29 1337741844 52 23 44,23%<br />

1337741877 31 1337741903 57 26 45,61%<br />

1337741929 24 1337741966 61 37 60,66%<br />

1337739880 29 1337739902 51 22 43,14%<br />

1337741995 27 1337742029 61 34 55,74%<br />

1337742055 25 1337742084 54 29 53,70%<br />

1337742112 26 1337742141 55 29 52,73%<br />

1337742173 30 1337742195 52 22 42,31%<br />

1337742224 27 1337742254 57 30 52,63%<br />

1337742282 27 1337742316 61 34 55,74%<br />

1337742343 25 1337742376 58 33 56,90%<br />

1337742400 23 1337742431 54 31 57,41%<br />

1337742465 32 1337742482 49 17 34,69%<br />

1337742513 26 1337742542 55 29 52,73%<br />

1337739937 26 1337739959 48 22 45,83%<br />

1337742568 25 1337742596 53 28 52,83%<br />

1337739988 27 1337740018 57 30 52,63%<br />

1337740047 26 1337740076 55 29 52,73%<br />

1337740104 27 1337740132 55 28 50,91%<br />

1337740158 24 1337740184 50 26 52,00%<br />

Moyenne 27,14 55,28 28,14 50,41%<br />

Écart type 3,86 6,18 6,83 8,72%<br />

Maximum 43 73 47 64,38%


Requête 2<br />

Solution 9: ( ?name = "Hamid" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738885 8 1337738919 42 34 80,95%<br />

1337740197 11 1337740227 41 30 73,17%<br />

1337740241 12 1337740284 55 43 78,18%<br />

1337740301 15 1337740343 57 42 73,68%<br />

1337740354 9 1337740400 55 46 83,64%<br />

1337740415 11 1337740454 50 39 78,00%<br />

1337740465 9 1337740504 48 39 81,25%<br />

1337740518 9 1337740568 59 50 84,75%<br />

1337740581 12 1337740627 58 46 79,31%<br />

1337740639 11 1337740684 56 45 80,36%<br />

1337740695 10 1337740735 50 40 80,00%<br />

1337738932 11 1337738975 54 43 79,63%<br />

1337740747 10 1337740786 49 39 79,59%<br />

1337740799 11 1337740847 59 48 81,36%<br />

1337740862 13 1337740900 51 38 74,51%<br />

1337740912 10 1337740956 54 44 81,48%<br />

1337740967 9 1337741017 59 50 84,75%<br />

1337741029 10 1337741084 65 55 84,62%<br />

1337741096 10 1337741153 67 57 85,07%<br />

1337741169 14 1337741211 56 42 75,00%<br />

1337741224 11 1337741258 45 34 75,56%<br />

1337741294 10 1337741340 56 46 82,14%<br />

1337738986 9 1337739028 51 42 82,35%<br />

1337741353 9 1337741415 71 62 87,32%<br />

1337741431 12 1337741492 73 61 83,56%<br />

1337741504 9 1337741551 56 47 83,93%<br />

1337741564 12 1337741606 54 42 77,78%<br />

1337741618 10 1337741670 62 52 83,87%<br />

1337741682 10 1337741732 60 50 83,33%<br />

1337741745 11 1337741790 56 45 80,36%<br />

1337741801 9 1337741844 52 43 82,69%<br />

1337741856 10 1337741903 57 47 82,46%<br />

1337741916 11 1337741966 61 50 81,97%<br />

1337739862 11 1337739902 51 40 78,43%<br />

1337741980 12 1337742029 61 49 80,33%<br />

1337742040 10 1337742084 54 44 81,48%<br />

1337742096 10 1337742141 55 45 81,82%<br />

1337742154 11 1337742195 52 41 78,85%<br />

1337742209 12 1337742254 57 45 78,95%<br />

1337742265 10 1337742316 61 51 83,61%<br />

1337742328 10 1337742376 58 48 82,76%<br />

1337742388 11 1337742431 54 43 79,63%<br />

1337742442 9 1337742482 49 40 81,63%<br />

1337742498 11 1337742542 55 44 80,00%<br />

1337739921 10 1337739959 48 38 79,17%<br />

1337742552 9 1337742596 53 44 83,02%<br />

1337739971 10 1337740018 57 47 82,46%<br />

1337740031 10 1337740076 55 45 81,82%<br />

1337740088 11 1337740132 55 44 80,00%<br />

1337740144 10 1337740184 50 40 80,00%<br />

Moyenne 10,50 55,28 44,78 80,81%<br />

Écart type 1,34 6,18 6,17 3,00%<br />

Maximum 15 73 62 87,32%


Requête 2<br />

Solution 10: ( ?name = "Hassanpour" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738902 25 1337738919 42 17 40,48%<br />

1337740212 26 1337740228 42 16 38,10%<br />

1337740265 36 1337740284 55 19 34,55%<br />

1337740325 39 1337740343 57 18 31,58%<br />

1337740375 30 1337740400 55 25 45,45%<br />

1337740436 32 1337740454 50 18 36,00%<br />

1337740489 33 1337740504 48 15 31,25%<br />

1337740543 34 1337740568 59 25 42,37%<br />

1337740603 34 1337740627 58 24 41,38%<br />

1337740673 45 1337740684 56 11 19,64%<br />

1337740720 35 1337740735 50 15 30,00%<br />

1337738954 33 1337738975 54 21 38,89%<br />

1337740762 25 1337740786 49 24 48,98%<br />

1337740824 36 1337740847 59 23 38,98%<br />

1337740880 31 1337740900 51 20 39,22%<br />

1337740934 32 1337740956 54 22 40,74%<br />

1337740996 38 1337741017 59 21 35,59%<br />

1337741053 34 1337741084 65 31 47,69%<br />

1337741122 36 1337741153 67 31 46,27%<br />

1337741189 34 1337741211 56 22 39,29%<br />

1337741245 32 1337741258 45 13 28,89%<br />

1337741321 37 1337741340 56 19 33,93%<br />

1337739012 35 1337739028 51 16 31,37%<br />

1337741376 32 1337741415 71 39 54,93%<br />

1337741457 38 1337741492 73 35 47,95%<br />

1337741527 32 1337741551 56 24 42,86%<br />

1337741588 36 1337741606 54 18 33,33%<br />

1337741642 34 1337741670 62 28 45,16%<br />

1337741706 34 1337741732 60 26 43,33%<br />

1337741772 38 1337741790 56 18 32,14%<br />

1337741829 37 1337741844 52 15 28,85%<br />

1337741882 36 1337741903 57 21 36,84%<br />

1337741939 34 1337741966 61 27 44,26%<br />

1337739889 38 1337739902 51 13 25,49%<br />

1337742002 34 1337742029 61 27 44,26%<br />

1337742071 41 1337742084 54 13 24,07%<br />

1337742118 32 1337742141 55 23 41,82%<br />

1337742177 34 1337742195 52 18 34,62%<br />

1337742232 35 1337742254 57 22 38,60%<br />

1337742291 36 1337742316 61 25 40,98%<br />

1337742352 34 1337742376 58 24 41,38%<br />

1337742409 32 1337742431 54 22 40,74%<br />

1337742464 31 1337742482 49 18 36,73%<br />

1337742523 36 1337742542 55 19 34,55%<br />

1337739943 32 1337739959 48 16 33,33%<br />

1337742575 32 1337742596 53 21 39,62%<br />

1337739997 36 1337740018 57 21 36,84%<br />

1337740055 34 1337740076 55 21 38,18%<br />

1337740117 40 1337740132 55 15 27,27%<br />

1337740166 32 1337740184 50 18 36,00%<br />

Moyenne 34,24 55,30 21,06 37,70%<br />

Écart type 3,63 6,14 5,65 6,86%<br />

Maximum 45 73 39 54,93%


Requête 2<br />

Solution 11: ( ?name = "Jure" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738896 19 1337738919 42 23 54,76%<br />

1337740209 23 1337740227 41 18 43,90%<br />

1337740256 27 1337740284 55 28 50,91%<br />

1337740315 29 1337740343 57 28 49,12%<br />

1337740366 21 1337740400 55 34 61,82%<br />

1337740429 25 1337740454 50 25 50,00%<br />

1337740478 22 1337740504 48 26 54,17%<br />

1337740549 40 1337740568 59 19 32,20%<br />

1337740594 25 1337740627 58 33 56,90%<br />

1337740654 26 1337740684 56 30 53,57%<br />

1337740711 26 1337740735 50 24 48,00%<br />

1337738946 25 1337738975 54 29 53,70%<br />

1337740757 20 1337740786 49 29 59,18%<br />

1337740813 25 1337740847 59 34 57,63%<br />

1337740887 38 1337740900 51 13 25,49%<br />

1337740926 24 1337740956 54 30 55,56%<br />

1337740984 26 1337741017 59 33 55,93%<br />

1337741045 26 1337741084 65 39 60,00%<br />

1337741111 25 1337741153 67 42 62,69%<br />

1337741179 24 1337741211 56 32 57,14%<br />

1337741236 23 1337741258 45 22 48,89%<br />

1337741312 28 1337741340 56 28 50,00%<br />

1337739003 26 1337739028 51 25 49,02%<br />

1337741372 28 1337741415 71 43 60,56%<br />

1337741442 23 1337741492 73 50 68,49%<br />

1337741518 23 1337741551 56 33 58,93%<br />

1337741579 27 1337741606 54 27 50,00%<br />

1337741637 29 1337741670 62 33 53,23%<br />

1337741698 26 1337741732 60 34 56,67%<br />

1337741784 50 1337741790 56 6 10,71%<br />

1337741821 29 1337741844 52 23 44,23%<br />

1337741876 30 1337741903 57 27 47,37%<br />

1337741929 24 1337741966 61 37 60,66%<br />

1337739882 31 1337739902 51 20 39,22%<br />

1337741992 24 1337742029 61 37 60,66%<br />

1337742054 24 1337742084 54 30 55,56%<br />

1337742114 28 1337742141 55 27 49,09%<br />

1337742170 27 1337742195 52 25 48,08%<br />

1337742224 27 1337742254 57 30 52,63%<br />

1337742282 27 1337742316 61 34 55,74%<br />

1337742357 39 1337742376 58 19 32,76%<br />

1337742404 27 1337742431 54 27 50,00%<br />

1337742460 27 1337742482 49 22 44,90%<br />

1337742513 26 1337742542 55 29 52,73%<br />

1337739937 26 1337739959 48 22 45,83%<br />

1337742568 25 1337742596 53 28 52,83%<br />

1337739986 25 1337740018 57 32 56,14%<br />

1337740046 25 1337740076 55 30 54,55%<br />

1337740103 26 1337740132 55 29 52,73%<br />

1337740158 24 1337740184 50 26 52,00%<br />

Moyenne 26,80 55,28 28,48 51,14%<br />

Écart type 5,22 6,18 7,46 9,78%<br />

Maximum 50 73 50 68,49%


Requête 2<br />

Solution 12: ( ?name = "Li" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738888 11 1337738914 37 26 70,27%<br />

1337740197 11 1337740222 36 25 69,44%<br />

1337740242 13 1337740275 46 33 71,74%<br />

1337740301 15 1337740340 54 39 72,22%<br />

1337740354 9 1337740384 39 30 76,92%<br />

1337740415 11 1337740444 40 29 72,50%<br />

1337740467 11 1337740496 40 29 72,50%<br />

1337740520 11 1337740555 46 35 76,09%<br />

1337740582 13 1337740612 43 30 69,77%<br />

1337740640 12 1337740674 46 34 73,91%<br />

1337740697 12 1337740728 43 31 72,09%<br />

1337738933 12 1337738964 43 31 72,09%<br />

1337740749 12 1337740767 30 18 60,00%<br />

1337740800 12 1337740832 44 32 72,73%<br />

1337740859 10 1337740888 39 29 74,36%<br />

1337740913 11 1337740949 47 36 76,60%<br />

1337740969 11 1337741008 50 39 78,00%<br />

1337741029 10 1337741062 43 33 76,74%<br />

1337741096 10 1337741136 50 40 80,00%<br />

1337741172 17 1337741199 44 27 61,36%<br />

1337741225 12 1337741253 40 28 70,00%<br />

1337741295 11 1337741333 49 38 77,55%<br />

1337738987 10 1337739020 43 33 76,74%<br />

1337741356 12 1337741387 43 31 72,09%<br />

1337741431 12 1337741465 46 34 73,91%<br />

1337741502 7 1337741537 42 35 83,33%<br />

1337741565 13 1337741597 45 32 71,11%<br />

1337741620 12 1337741660 52 40 76,92%<br />

1337741685 13 1337741720 48 35 72,92%<br />

1337741745 11 1337741781 47 36 76,60%<br />

1337741802 10 1337741838 46 36 78,26%<br />

1337741858 12 1337741891 45 33 73,33%<br />

1337741916 11 1337741950 45 34 75,56%<br />

1337739862 11 1337739898 47 36 76,60%<br />

1337741982 14 1337742022 54 40 74,07%<br />

1337742042 12 1337742076 46 34 73,91%<br />

1337742098 12 1337742133 47 35 74,47%<br />

1337742154 11 1337742187 44 33 75,00%<br />

1337742209 12 1337742247 50 38 76,00%<br />

1337742265 10 1337742302 47 37 78,72%<br />

1337742330 12 1337742368 50 38 76,00%<br />

1337742388 11 1337742421 44 33 75,00%<br />

1337742443 10 1337742476 43 33 76,74%<br />

1337742498 11 1337742532 45 34 75,56%<br />

1337739923 12 1337739950 39 27 69,23%<br />

1337742555 12 1337742583 40 28 70,00%<br />

1337739977 16 1337740007 46 30 65,22%<br />

1337740032 11 1337740065 44 33 75,00%<br />

1337740088 11 1337740129 52 41 78,85%<br />

1337740144 10 1337740177 43 33 76,74%<br />

Moyenne 11,56 44,64 33,08 73,90%<br />

Écart type 1,63 4,58 4,47 4,23%<br />

Maximum 17 54 41 83,33%


Requête 2<br />

Solution 13: ( ?name = "Mark" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738886 9 1337738914 37 28 75,68%<br />

1337740197 11 1337740222 36 25 69,44%<br />

1337740242 13 1337740275 46 33 71,74%<br />

1337740301 15 1337740340 54 39 72,22%<br />

1337740354 9 1337740384 39 30 76,92%<br />

1337740415 11 1337740444 40 29 72,50%<br />

1337740470 14 1337740496 40 26 65,00%<br />

1337740519 10 1337740555 46 36 78,26%<br />

1337740582 13 1337740612 43 30 69,77%<br />

1337740639 11 1337740674 46 35 76,09%<br />

1337740697 12 1337740728 43 31 72,09%<br />

1337738931 10 1337738964 43 33 76,74%<br />

1337740747 10 1337740767 30 20 66,67%<br />

1337740801 13 1337740832 44 31 70,45%<br />

1337740861 12 1337740888 39 27 69,23%<br />

1337740913 11 1337740949 47 36 76,60%<br />

1337740970 12 1337741008 50 38 76,00%<br />

1337741029 10 1337741062 43 33 76,74%<br />

1337741096 10 1337741136 50 40 80,00%<br />

1337741176 21 1337741199 44 23 52,27%<br />

1337741222 9 1337741253 40 31 77,50%<br />

1337741296 12 1337741333 49 37 75,51%<br />

1337738988 11 1337739020 43 32 74,42%<br />

1337741354 10 1337741387 43 33 76,74%<br />

1337741430 11 1337741465 46 35 76,09%<br />

1337741503 8 1337741537 42 34 80,95%<br />

1337741564 12 1337741597 45 33 73,33%<br />

1337741621 13 1337741660 52 39 75,00%<br />

1337741683 11 1337741720 48 37 77,08%<br />

1337741746 12 1337741781 47 35 74,47%<br />

1337741805 13 1337741838 46 33 71,74%<br />

1337741858 12 1337741891 45 33 73,33%<br />

1337741915 10 1337741950 45 35 77,78%<br />

1337739869 18 1337739898 47 29 61,70%<br />

1337741980 12 1337742022 54 42 77,78%<br />

1337742041 11 1337742076 46 35 76,09%<br />

1337742097 11 1337742133 47 36 76,60%<br />

1337742155 12 1337742187 44 32 72,73%<br />

1337742209 12 1337742247 50 38 76,00%<br />

1337742266 11 1337742302 47 36 76,60%<br />

1337742328 10 1337742368 50 40 80,00%<br />

1337742388 11 1337742421 44 33 75,00%<br />

1337742443 10 1337742476 43 33 76,74%<br />

1337742498 11 1337742532 45 34 75,56%<br />

1337739923 12 1337739950 39 27 69,23%<br />

1337742554 11 1337742583 40 29 72,50%<br />

1337739971 10 1337740007 46 36 78,26%<br />

1337740030 9 1337740065 44 35 79,55%<br />

1337740088 11 1337740129 52 41 78,85%<br />

1337740145 11 1337740177 43 32 74,42%<br />

Moyenne 11,48 44,64 33,16 74,12%<br />

Écart type 2,16 4,58 4,58 5,01%<br />

Maximum 21 54 42 80,95%


Requête 2<br />

Solution 14: ( ?name = "Martin" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738900 23 1337738919 42 19 45,24%<br />

1337740210 24 1337740227 41 17 41,46%<br />

1337740257 28 1337740284 55 27 49,09%<br />

1337740316 30 1337740343 57 27 47,37%<br />

1337740367 22 1337740400 55 33 60,00%<br />

1337740432 28 1337740454 50 22 44,00%<br />

1337740480 24 1337740504 48 24 50,00%<br />

1337740535 26 1337740568 59 33 55,93%<br />

1337740596 27 1337740627 58 31 53,45%<br />

1337740654 26 1337740684 56 30 53,57%<br />

1337740712 27 1337740735 50 23 46,00%<br />

1337738948 27 1337738975 54 27 50,00%<br />

1337740759 22 1337740786 49 27 55,10%<br />

1337740816 28 1337740847 59 31 52,54%<br />

1337740875 26 1337740900 51 25 49,02%<br />

1337740927 25 1337740956 54 29 53,70%<br />

1337740986 28 1337741017 59 31 52,54%<br />

1337741045 26 1337741084 65 39 60,00%<br />

1337741114 28 1337741153 67 39 58,21%<br />

1337741182 27 1337741211 56 29 51,79%<br />

1337741244 31 1337741258 45 14 31,11%<br />

1337741315 31 1337741340 56 25 44,64%<br />

1337739006 29 1337739028 51 22 43,14%<br />

1337741368 24 1337741415 71 47 66,20%<br />

1337741444 25 1337741492 73 48 65,75%<br />

1337741519 24 1337741551 56 32 57,14%<br />

1337741582 30 1337741606 54 24 44,44%<br />

1337741634 26 1337741670 62 36 58,06%<br />

1337741700 28 1337741732 60 32 53,33%<br />

1337741763 29 1337741790 56 27 48,21%<br />

1337741822 30 1337741844 52 22 42,31%<br />

1337741877 31 1337741903 57 26 45,61%<br />

1337741930 25 1337741966 61 36 59,02%<br />

1337739881 30 1337739902 51 21 41,18%<br />

1337741996 28 1337742029 61 33 54,10%<br />

1337742056 26 1337742084 54 28 51,85%<br />

1337742112 26 1337742141 55 29 52,73%<br />

1337742168 25 1337742195 52 27 51,92%<br />

1337742224 27 1337742254 57 30 52,63%<br />

1337742283 28 1337742316 61 33 54,10%<br />

1337742345 27 1337742376 58 31 53,45%<br />

1337742401 24 1337742431 54 30 55,56%<br />

1337742457 24 1337742482 49 25 51,02%<br />

1337742514 27 1337742542 55 28 50,91%<br />

1337739940 29 1337739959 48 19 39,58%<br />

1337742569 26 1337742596 53 27 50,94%<br />

1337739994 33 1337740018 57 24 42,11%<br />

1337740047 26 1337740076 55 29 52,73%<br />

1337740106 29 1337740132 55 26 47,27%<br />

1337740160 26 1337740184 50 24 48,00%<br />

Moyenne 26,92 55,28 28,36 50,76%<br />

Écart type 2,43 6,18 6,51 6,61%<br />

Maximum 33 73 48 66,20%


Requête 2<br />

Solution 15: ( ?name = "Natalya" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738885 8 1337738914 37 29 78,38%<br />

1337740197 11 1337740222 36 25 69,44%<br />

1337740241 12 1337740275 46 34 73,91%<br />

1337740301 15 1337740340 54 39 72,22%<br />

1337740354 9 1337740384 39 30 76,92%<br />

1337740417 13 1337740444 40 27 67,50%<br />

1337740466 10 1337740496 40 30 75,00%<br />

1337740519 10 1337740555 46 36 78,26%<br />

1337740583 14 1337740612 43 29 67,44%<br />

1337740640 12 1337740674 46 34 73,91%<br />

1337740697 12 1337740728 43 31 72,09%<br />

1337738932 11 1337738964 43 32 74,42%<br />

1337740749 12 1337740767 30 18 60,00%<br />

1337740800 12 1337740832 44 32 72,73%<br />

1337740859 10 1337740888 39 29 74,36%<br />

1337740914 12 1337740949 47 35 74,47%<br />

1337740970 12 1337741008 50 38 76,00%<br />

1337741031 12 1337741062 43 31 72,09%<br />

1337741098 12 1337741136 50 38 76,00%<br />

1337741167 12 1337741199 44 32 72,73%<br />

1337741224 11 1337741253 40 29 72,50%<br />

1337741296 12 1337741333 49 37 75,51%<br />

1337738988 11 1337739020 43 32 74,42%<br />

1337741356 12 1337741387 43 31 72,09%<br />

1337741430 11 1337741465 46 35 76,09%<br />

1337741504 9 1337741537 42 33 78,57%<br />

1337741564 12 1337741597 45 33 73,33%<br />

1337741621 13 1337741660 52 39 75,00%<br />

1337741683 11 1337741720 48 37 77,08%<br />

1337741746 12 1337741781 47 35 74,47%<br />

1337741804 12 1337741838 46 34 73,91%<br />

1337741857 11 1337741891 45 34 75,56%<br />

1337741916 11 1337741950 45 34 75,56%<br />

1337739862 11 1337739898 47 36 76,60%<br />

1337741980 12 1337742022 54 42 77,78%<br />

1337742042 12 1337742076 46 34 73,91%<br />

1337742097 11 1337742133 47 36 76,60%<br />

1337742157 14 1337742187 44 30 68,18%<br />

1337742210 13 1337742247 50 37 74,00%<br />

1337742266 11 1337742302 47 36 76,60%<br />

1337742331 13 1337742368 50 37 74,00%<br />

1337742389 12 1337742421 44 32 72,73%<br />

1337742443 10 1337742476 43 33 76,74%<br />

1337742499 12 1337742532 45 33 73,33%<br />

1337739924 13 1337739950 39 26 66,67%<br />

1337742553 10 1337742583 40 30 75,00%<br />

1337739971 10 1337740007 46 36 78,26%<br />

1337740032 11 1337740065 44 33 75,00%<br />

1337740089 12 1337740129 52 40 76,92%<br />

1337740145 11 1337740177 43 32 74,42%<br />

Moyenne 11,54 44,64 33,10 73,97%<br />

Écart type 1,30 4,58 4,21 3,44%<br />

Maximum 15 54 42 78,57%


Requête 2<br />

Solution 16: ( ?name = "Natasha F." )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738885 8 1337738914 37 29 78,38%<br />

1337740197 11 1337740222 36 25 69,44%<br />

1337740241 12 1337740275 46 34 73,91%<br />

1337740301 15 1337740340 54 39 72,22%<br />

1337740354 9 1337740384 39 30 76,92%<br />

1337740417 13 1337740444 40 27 67,50%<br />

1337740466 10 1337740496 40 30 75,00%<br />

1337740519 10 1337740555 46 36 78,26%<br />

1337740583 14 1337740612 43 29 67,44%<br />

1337740640 12 1337740674 46 34 73,91%<br />

1337740697 12 1337740728 43 31 72,09%<br />

1337738932 11 1337738964 43 32 74,42%<br />

1337740749 12 1337740767 30 18 60,00%<br />

1337740800 12 1337740832 44 32 72,73%<br />

1337740859 10 1337740888 39 29 74,36%<br />

1337740914 12 1337740949 47 35 74,47%<br />

1337740970 12 1337741008 50 38 76,00%<br />

1337741031 12 1337741062 43 31 72,09%<br />

1337741098 12 1337741136 50 38 76,00%<br />

1337741167 12 1337741199 44 32 72,73%<br />

1337741224 11 1337741253 40 29 72,50%<br />

1337741296 12 1337741333 49 37 75,51%<br />

1337738988 11 1337739020 43 32 74,42%<br />

1337741356 12 1337741387 43 31 72,09%<br />

1337741430 11 1337741465 46 35 76,09%<br />

1337741504 9 1337741537 42 33 78,57%<br />

1337741564 12 1337741597 45 33 73,33%<br />

1337741621 13 1337741660 52 39 75,00%<br />

1337741683 11 1337741720 48 37 77,08%<br />

1337741746 12 1337741781 47 35 74,47%<br />

1337741804 12 1337741838 46 34 73,91%<br />

1337741857 11 1337741891 45 34 75,56%<br />

1337741916 11 1337741950 45 34 75,56%<br />

1337739862 11 1337739898 47 36 76,60%<br />

1337741980 12 1337742022 54 42 77,78%<br />

1337742042 12 1337742076 46 34 73,91%<br />

1337742097 11 1337742133 47 36 76,60%<br />

1337742157 14 1337742187 44 30 68,18%<br />

1337742210 13 1337742247 50 37 74,00%<br />

1337742266 11 1337742302 47 36 76,60%<br />

1337742331 13 1337742368 50 37 74,00%<br />

1337742389 12 1337742421 44 32 72,73%<br />

1337742443 10 1337742476 43 33 76,74%<br />

1337742499 12 1337742532 45 33 73,33%<br />

1337739924 13 1337739950 39 26 66,67%<br />

1337742553 10 1337742583 40 30 75,00%<br />

1337739971 10 1337740007 46 36 78,26%<br />

1337740032 11 1337740065 44 33 75,00%<br />

1337740089 12 1337740129 52 40 76,92%<br />

1337740145 11 1337740177 43 32 74,42%<br />

Moyenne 11,54 44,64 33,10 73,97%<br />

Écart type 1,30 4,58 4,21 3,44%<br />

Maximum 15 54 42 78,57%


Requête 2<br />

Solution 17: ( ?name = "Natasha" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738885 8 1337738914 37 29 78,38%<br />

1337740197 11 1337740222 36 25 69,44%<br />

1337740241 12 1337740275 46 34 73,91%<br />

1337740301 15 1337740340 54 39 72,22%<br />

1337740354 9 1337740384 39 30 76,92%<br />

1337740417 13 1337740444 40 27 67,50%<br />

1337740466 10 1337740496 40 30 75,00%<br />

1337740519 10 1337740555 46 36 78,26%<br />

1337740583 14 1337740612 43 29 67,44%<br />

1337740640 12 1337740674 46 34 73,91%<br />

1337740697 12 1337740728 43 31 72,09%<br />

1337738932 11 1337738964 43 32 74,42%<br />

1337740749 12 1337740767 30 18 60,00%<br />

1337740800 12 1337740832 44 32 72,73%<br />

1337740859 10 1337740888 39 29 74,36%<br />

1337740914 12 1337740949 47 35 74,47%<br />

1337740970 12 1337741008 50 38 76,00%<br />

1337741031 12 1337741062 43 31 72,09%<br />

1337741098 12 1337741136 50 38 76,00%<br />

1337741167 12 1337741199 44 32 72,73%<br />

1337741224 11 1337741253 40 29 72,50%<br />

1337741296 12 1337741333 49 37 75,51%<br />

1337738988 11 1337739020 43 32 74,42%<br />

1337741356 12 1337741387 43 31 72,09%<br />

1337741430 11 1337741465 46 35 76,09%<br />

1337741504 9 1337741537 42 33 78,57%<br />

1337741564 12 1337741597 45 33 73,33%<br />

1337741621 13 1337741660 52 39 75,00%<br />

1337741683 11 1337741720 48 37 77,08%<br />

1337741746 12 1337741781 47 35 74,47%<br />

1337741804 12 1337741838 46 34 73,91%<br />

1337741857 11 1337741891 45 34 75,56%<br />

1337741916 11 1337741950 45 34 75,56%<br />

1337739862 11 1337739898 47 36 76,60%<br />

1337741980 12 1337742022 54 42 77,78%<br />

1337742042 12 1337742076 46 34 73,91%<br />

1337742097 11 1337742133 47 36 76,60%<br />

1337742157 14 1337742187 44 30 68,18%<br />

1337742210 13 1337742247 50 37 74,00%<br />

1337742266 11 1337742302 47 36 76,60%<br />

1337742331 13 1337742368 50 37 74,00%<br />

1337742389 12 1337742421 44 32 72,73%<br />

1337742443 10 1337742476 43 33 76,74%<br />

1337742499 12 1337742532 45 33 73,33%<br />

1337739924 13 1337739950 39 26 66,67%<br />

1337742553 10 1337742583 40 30 75,00%<br />

1337739971 10 1337740007 46 36 78,26%<br />

1337740032 11 1337740065 44 33 75,00%<br />

1337740089 12 1337740129 52 40 76,92%<br />

1337740145 11 1337740177 43 32 74,42%<br />

Moyenne 11,54 44,64 33,10 73,97%<br />

Écart type 1,30 4,58 4,21 3,44%<br />

Maximum 15 54 42 78,57%


Requête 2<br />

Solution 18: ( ?name = "Nigam" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738891 14 1337738919 42 28 66,67%<br />

1337740202 16 1337740227 41 25 60,98%<br />

1337740247 18 1337740284 55 37 67,27%<br />

1337740307 21 1337740343 57 36 63,16%<br />

1337740362 17 1337740400 55 38 69,09%<br />

1337740420 16 1337740454 50 34 68,00%<br />

1337740472 16 1337740504 48 32 66,67%<br />

1337740523 14 1337740568 59 45 76,27%<br />

1337740588 19 1337740627 58 39 67,24%<br />

1337740645 17 1337740684 56 39 69,64%<br />

1337740703 18 1337740735 50 32 64,00%<br />

1337738936 15 1337738975 54 39 72,22%<br />

1337740753 16 1337740786 49 33 67,35%<br />

1337740805 17 1337740847 59 42 71,19%<br />

1337740867 18 1337740900 51 33 64,71%<br />

1337740918 16 1337740956 54 38 70,37%<br />

1337740983 25 1337741017 59 34 57,63%<br />

1337741038 19 1337741084 65 46 70,77%<br />

1337741103 17 1337741153 67 50 74,63%<br />

1337741171 16 1337741211 56 40 71,43%<br />

1337741228 15 1337741258 45 30 66,67%<br />

1337741303 19 1337741340 56 37 66,07%<br />

1337738993 16 1337739028 51 35 68,63%<br />

1337741362 18 1337741415 71 53 74,65%<br />

1337741436 17 1337741492 73 56 76,71%<br />

1337741509 14 1337741551 56 42 75,00%<br />

1337741570 18 1337741606 54 36 66,67%<br />

1337741627 19 1337741670 62 43 69,35%<br />

1337741690 18 1337741732 60 42 70,00%<br />

1337741751 17 1337741790 56 39 69,64%<br />

1337741814 22 1337741844 52 30 57,69%<br />

1337741863 17 1337741903 57 40 70,18%<br />

1337741923 18 1337741966 61 43 70,49%<br />

1337739870 19 1337739902 51 32 62,75%<br />

1337741985 17 1337742029 61 44 72,13%<br />

1337742057 27 1337742084 54 27 50,00%<br />

1337742103 17 1337742141 55 38 69,09%<br />

1337742160 17 1337742195 52 35 67,31%<br />

1337742215 18 1337742254 57 39 68,42%<br />

1337742270 15 1337742316 61 46 75,41%<br />

1337742335 17 1337742376 58 41 70,69%<br />

1337742395 18 1337742431 54 36 66,67%<br />

1337742448 15 1337742482 49 34 69,39%<br />

1337742503 16 1337742542 55 39 70,91%<br />

1337739926 15 1337739959 48 33 68,75%<br />

1337742560 17 1337742596 53 36 67,92%<br />

1337739979 18 1337740018 57 39 68,42%<br />

1337740037 16 1337740076 55 39 70,91%<br />

1337740097 20 1337740132 55 35 63,64%<br />

1337740151 17 1337740184 50 33 66,00%<br />

Moyenne 17,44 55,28 37,84 68,19%<br />

Écart type 2,43 6,18 6,14 4,86%<br />

Maximum 27 73 56 76,71%


Requête 2<br />

Solution 19: ( ?name = "O'Connor" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738905 28 1337738919 42 14 33,33%<br />

1337740213 27 1337740228 42 15 35,71%<br />

1337740265 36 1337740284 55 19 34,55%<br />

1337740324 38 1337740343 57 19 33,33%<br />

1337740374 29 1337740400 55 26 47,27%<br />

1337740436 32 1337740454 50 18 36,00%<br />

1337740485 29 1337740504 48 19 39,58%<br />

1337740540 31 1337740568 59 28 47,46%<br />

1337740603 34 1337740627 58 24 41,38%<br />

1337740664 36 1337740684 56 20 35,71%<br />

1337740719 34 1337740735 50 16 32,00%<br />

1337738954 33 1337738975 54 21 38,89%<br />

1337740762 25 1337740786 49 24 48,98%<br />

1337740822 34 1337740847 59 25 42,37%<br />

1337740879 30 1337740900 51 21 41,18%<br />

1337740933 31 1337740956 54 23 42,59%<br />

1337740995 37 1337741017 59 22 37,29%<br />

1337741054 35 1337741084 65 30 46,15%<br />

1337741122 36 1337741153 67 31 46,27%<br />

1337741190 35 1337741211 56 21 37,50%<br />

1337741244 31 1337741258 45 14 31,11%<br />

1337741321 37 1337741340 56 19 33,93%<br />

1337739009 32 1337739028 51 19 37,25%<br />

1337741385 41 1337741415 71 30 42,25%<br />

1337741455 36 1337741492 73 37 50,68%<br />

1337741525 30 1337741551 56 26 46,43%<br />

1337741586 34 1337741606 54 20 37,04%<br />

1337741644 36 1337741670 62 26 41,94%<br />

1337741705 33 1337741732 60 27 45,00%<br />

1337741770 36 1337741790 56 20 35,71%<br />

1337741829 37 1337741844 52 15 28,85%<br />

1337741881 35 1337741903 57 22 38,60%<br />

1337741937 32 1337741966 61 29 47,54%<br />

1337739887 36 1337739902 51 15 29,41%<br />

1337742002 34 1337742029 61 27 44,26%<br />

1337742063 33 1337742084 54 21 38,89%<br />

1337742119 33 1337742141 55 22 40,00%<br />

1337742176 33 1337742195 52 19 36,54%<br />

1337742231 34 1337742254 57 23 40,35%<br />

1337742293 38 1337742316 61 23 37,70%<br />

1337742353 35 1337742376 58 23 39,66%<br />

1337742408 31 1337742431 54 23 42,59%<br />

1337742466 33 1337742482 49 16 32,65%<br />

1337742530 43 1337742542 55 12 21,82%<br />

1337739943 32 1337739959 48 16 33,33%<br />

1337742575 32 1337742596 53 21 39,62%<br />

1337739994 33 1337740018 57 24 42,11%<br />

1337740056 35 1337740076 55 20 36,36%<br />

1337740112 35 1337740132 55 20 36,36%<br />

1337740166 32 1337740184 50 18 36,00%<br />

Moyenne 33,64 55,30 21,66 38,83%<br />

Écart type 3,29 6,14 5,01 5,75%<br />

Maximum 43 73 37 50,68%


Requête 2<br />

Solution 20: ( ?name = "Paea" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738899 22 1337738919 42 20 47,62%<br />

1337740210 24 1337740227 41 17 41,46%<br />

1337740258 29 1337740284 55 26 47,27%<br />

1337740317 31 1337740343 57 26 45,61%<br />

1337740367 22 1337740400 55 33 60,00%<br />

1337740431 27 1337740454 50 23 46,00%<br />

1337740486 30 1337740504 48 18 37,50%<br />

1337740535 26 1337740568 59 33 55,93%<br />

1337740596 27 1337740627 58 31 53,45%<br />

1337740654 26 1337740684 56 30 53,57%<br />

1337740713 28 1337740735 50 22 44,00%<br />

1337738948 27 1337738975 54 27 50,00%<br />

1337740759 22 1337740786 49 27 55,10%<br />

1337740817 29 1337740847 59 30 50,85%<br />

1337740877 28 1337740900 51 23 45,10%<br />

1337740928 26 1337740956 54 28 51,85%<br />

1337740989 31 1337741017 59 28 47,46%<br />

1337741046 27 1337741084 65 38 58,46%<br />

1337741114 28 1337741153 67 39 58,21%<br />

1337741183 28 1337741211 56 28 50,00%<br />

1337741239 26 1337741258 45 19 42,22%<br />

1337741316 32 1337741340 56 24 42,86%<br />

1337739001 24 1337739028 51 27 52,94%<br />

1337741368 24 1337741415 71 47 66,20%<br />

1337741447 28 1337741492 73 45 61,64%<br />

1337741519 24 1337741551 56 32 57,14%<br />

1337741581 29 1337741606 54 25 46,30%<br />

1337741635 27 1337741670 62 35 56,45%<br />

1337741701 29 1337741732 60 31 51,67%<br />

1337741763 29 1337741790 56 27 48,21%<br />

1337741822 30 1337741844 52 22 42,31%<br />

1337741878 32 1337741903 57 25 43,86%<br />

1337741932 27 1337741966 61 34 55,74%<br />

1337739881 30 1337739902 51 21 41,18%<br />

1337741997 29 1337742029 61 32 52,46%<br />

1337742056 26 1337742084 54 28 51,85%<br />

1337742119 33 1337742141 55 22 40,00%<br />

1337742169 26 1337742195 52 26 50,00%<br />

1337742225 28 1337742254 57 29 50,88%<br />

1337742283 28 1337742316 61 33 54,10%<br />

1337742347 29 1337742376 58 29 50,00%<br />

1337742405 28 1337742431 54 26 48,15%<br />

1337742461 28 1337742482 49 21 42,86%<br />

1337742519 32 1337742542 55 23 41,82%<br />

1337739940 29 1337739959 48 19 39,58%<br />

1337742569 26 1337742596 53 27 50,94%<br />

1337739988 27 1337740018 57 30 52,63%<br />

1337740047 26 1337740076 55 29 52,73%<br />

1337740107 30 1337740132 55 25 45,45%<br />

1337740160 26 1337740184 50 24 48,00%<br />

Moyenne 27,60 55,28 27,68 49,59%<br />

Écart type 2,56 6,18 6,23 6,23%<br />

Maximum 33 73 47 66,20%


Requête 2<br />

Solution 21: ( ?name = "Parag" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738907 30 1337738919 42 12 28,57%<br />

1337740214 28 1337740228 42 14 33,33%<br />

1337740265 36 1337740284 55 19 34,55%<br />

1337740325 39 1337740343 57 18 31,58%<br />

1337740383 38 1337740400 55 17 30,91%<br />

1337740438 34 1337740454 50 16 32,00%<br />

1337740487 31 1337740504 48 17 35,42%<br />

1337740542 33 1337740568 59 26 44,07%<br />

1337740603 34 1337740627 58 24 41,38%<br />

1337740664 36 1337740684 56 20 35,71%<br />

1337740719 34 1337740735 50 16 32,00%<br />

1337738954 33 1337738975 54 21 38,89%<br />

1337740762 25 1337740786 49 24 48,98%<br />

1337740823 35 1337740847 59 24 40,68%<br />

1337740880 31 1337740900 51 20 39,22%<br />

1337740935 33 1337740956 54 21 38,89%<br />

1337740998 40 1337741017 59 19 32,20%<br />

1337741054 35 1337741084 65 30 46,15%<br />

1337741124 38 1337741153 67 29 43,28%<br />

1337741189 34 1337741211 56 22 39,29%<br />

1337741245 32 1337741258 45 13 28,89%<br />

1337741321 37 1337741340 56 19 33,93%<br />

1337739013 36 1337739028 51 15 29,41%<br />

1337741378 34 1337741415 71 37 52,11%<br />

1337741457 38 1337741492 73 35 47,95%<br />

1337741528 33 1337741551 56 23 41,07%<br />

1337741588 36 1337741606 54 18 33,33%<br />

1337741644 36 1337741670 62 26 41,94%<br />

1337741705 33 1337741732 60 27 45,00%<br />

1337741772 38 1337741790 56 18 32,14%<br />

1337741830 38 1337741844 52 14 26,92%<br />

1337741882 36 1337741903 57 21 36,84%<br />

1337741939 34 1337741966 61 27 44,26%<br />

1337739889 38 1337739902 51 13 25,49%<br />

1337742004 36 1337742029 61 25 40,98%<br />

1337742066 36 1337742084 54 18 33,33%<br />

1337742121 35 1337742141 55 20 36,36%<br />

1337742176 33 1337742195 52 19 36,54%<br />

1337742234 37 1337742254 57 20 35,09%<br />

1337742290 35 1337742316 61 26 42,62%<br />

1337742352 34 1337742376 58 24 41,38%<br />

1337742409 32 1337742431 54 22 40,74%<br />

1337742464 31 1337742482 49 18 36,73%<br />

1337742523 36 1337742542 55 19 34,55%<br />

1337739944 33 1337739959 48 15 31,25%<br />

1337742573 30 1337742596 53 23 43,40%<br />

1337739999 38 1337740018 57 19 33,33%<br />

1337740055 34 1337740076 55 21 38,18%<br />

1337740113 36 1337740132 55 19 34,55%<br />

1337740166 32 1337740184 50 18 36,00%<br />

Moyenne 34,48 55,30 20,82 37,23%<br />

Écart type 2,92 6,14 5,25 5,90%<br />

Maximum 40 73 37 52,11%


Requête 2<br />

Solution 22: ( ?name = "Paul" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738897 20 1337738919 42 22 52,38%<br />

1337740210 24 1337740228 42 18 42,86%<br />

1337740259 30 1337740284 55 25 45,45%<br />

1337740318 32 1337740343 57 25 43,86%<br />

1337740368 23 1337740400 55 32 58,18%<br />

1337740432 28 1337740454 50 22 44,00%<br />

1337740482 26 1337740504 48 22 45,83%<br />

1337740536 27 1337740568 59 32 54,24%<br />

1337740597 28 1337740627 58 30 51,72%<br />

1337740656 28 1337740684 56 28 50,00%<br />

1337740712 27 1337740735 50 23 46,00%<br />

1337738950 29 1337738975 54 25 46,30%<br />

1337740759 22 1337740786 49 27 55,10%<br />

1337740831 43 1337740847 59 16 27,12%<br />

1337740875 26 1337740900 51 25 49,02%<br />

1337740928 26 1337740956 54 28 51,85%<br />

1337740988 30 1337741017 59 29 49,15%<br />

1337741047 28 1337741084 65 37 56,92%<br />

1337741115 29 1337741153 67 38 56,72%<br />

1337741182 27 1337741211 56 29 51,79%<br />

1337741239 26 1337741258 45 19 42,22%<br />

1337741316 32 1337741340 56 24 42,86%<br />

1337739004 27 1337739028 51 24 47,06%<br />

1337741369 25 1337741415 71 46 64,79%<br />

1337741448 29 1337741492 73 44 60,27%<br />

1337741521 26 1337741551 56 30 53,57%<br />

1337741582 30 1337741606 54 24 44,44%<br />

1337741636 28 1337741670 62 34 54,84%<br />

1337741700 28 1337741732 60 32 53,33%<br />

1337741763 29 1337741790 56 27 48,21%<br />

1337741823 31 1337741844 52 21 40,38%<br />

1337741879 33 1337741903 57 24 42,11%<br />

1337741938 33 1337741966 61 28 45,90%<br />

1337739882 31 1337739902 51 20 39,22%<br />

1337741995 27 1337742029 61 34 55,74%<br />

1337742057 27 1337742084 54 27 50,00%<br />

1337742113 27 1337742141 55 28 50,91%<br />

1337742170 27 1337742195 52 25 48,08%<br />

1337742227 30 1337742254 57 27 47,37%<br />

1337742294 39 1337742316 61 22 36,07%<br />

1337742347 29 1337742376 58 29 50,00%<br />

1337742402 25 1337742431 54 29 53,70%<br />

1337742458 25 1337742482 49 24 48,98%<br />

1337742518 31 1337742542 55 24 43,64%<br />

1337739939 28 1337739959 48 20 41,67%<br />

1337742571 28 1337742596 53 25 47,17%<br />

1337739988 27 1337740018 57 30 52,63%<br />

1337740049 28 1337740076 55 27 49,09%<br />

1337740108 31 1337740132 55 24 43,64%<br />

1337740163 29 1337740184 50 21 42,00%<br />

Moyenne 28,38 55,30 26,92 48,37%<br />

Écart type 3,71 6,14 5,94 6,55%<br />

Maximum 43 73 46 64,79%


Requête 2<br />

Solution 23: ( ?name = "Robert" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738912 35 1337738919 42 7 16,67%<br />

1337740221 35 1337740228 42 7 16,67%<br />

1337740275 46 1337740284 55 9 16,36%<br />

1337740331 45 1337740343 57 12 21,05%<br />

1337740383 38 1337740400 55 17 30,91%<br />

1337740444 40 1337740454 50 10 20,00%<br />

1337740496 40 1337740504 48 8 16,67%<br />

1337740549 40 1337740568 59 19 32,20%<br />

1337740611 42 1337740627 58 16 27,59%<br />

1337740671 43 1337740684 56 13 23,21%<br />

1337740726 41 1337740735 50 9 18,00%<br />

1337738963 42 1337738975 54 12 22,22%<br />

1337740766 29 1337740786 49 20 40,82%<br />

1337740832 44 1337740847 59 15 25,42%<br />

1337740887 38 1337740900 51 13 25,49%<br />

1337740944 42 1337740956 54 12 22,22%<br />

1337741005 47 1337741017 59 12 20,34%<br />

1337741062 43 1337741084 65 22 33,85%<br />

1337741130 44 1337741153 67 23 34,33%<br />

1337741198 43 1337741211 56 13 23,21%<br />

1337741252 39 1337741258 45 6 13,33%<br />

1337741332 48 1337741340 56 8 14,29%<br />

1337739019 42 1337739028 51 9 17,65%<br />

1337741387 43 1337741415 71 28 39,44%<br />

1337741464 45 1337741492 73 28 38,36%<br />

1337741534 39 1337741551 56 17 30,36%<br />

1337741596 44 1337741606 54 10 18,52%<br />

1337741654 46 1337741670 62 16 25,81%<br />

1337741715 43 1337741732 60 17 28,33%<br />

1337741780 46 1337741790 56 10 17,86%<br />

1337741838 46 1337741844 52 6 11,54%<br />

1337741889 43 1337741903 57 14 24,56%<br />

1337741949 44 1337741966 61 17 27,87%<br />

1337739897 46 1337739902 51 5 9,80%<br />

1337742012 44 1337742029 61 17 27,87%<br />

1337742074 44 1337742084 54 10 18,52%<br />

1337742129 43 1337742141 55 12 21,82%<br />

1337742185 42 1337742195 52 10 19,23%<br />

1337742240 43 1337742254 57 14 24,56%<br />

1337742301 46 1337742316 61 15 24,59%<br />

1337742366 48 1337742376 58 10 17,24%<br />

1337742416 39 1337742431 54 15 27,78%<br />

1337742473 40 1337742482 49 9 18,37%<br />

1337742530 43 1337742542 55 12 21,82%<br />

1337739949 38 1337739959 48 10 20,83%<br />

1337742582 39 1337742596 53 14 26,42%<br />

1337740006 45 1337740018 57 12 21,05%<br />

1337740064 43 1337740076 55 12 21,82%<br />

1337740121 44 1337740132 55 11 20,00%<br />

1337740175 41 1337740184 50 9 18,00%<br />

Moyenne 42,26 55,30 13,04 23,10%<br />

Écart type 3,57 6,14 5,09 6,89%<br />

Maximum 48 73 28 40,82%


Requête 2<br />

Solution 24: ( ?name = "Saeed" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738902 25 1337738919 42 17 40,48%<br />

1337740212 26 1337740228 42 16 38,10%<br />

1337740265 36 1337740284 55 19 34,55%<br />

1337740325 39 1337740343 57 18 31,58%<br />

1337740375 30 1337740400 55 25 45,45%<br />

1337740436 32 1337740454 50 18 36,00%<br />

1337740489 33 1337740504 48 15 31,25%<br />

1337740543 34 1337740568 59 25 42,37%<br />

1337740603 34 1337740627 58 24 41,38%<br />

1337740673 45 1337740684 56 11 19,64%<br />

1337740720 35 1337740735 50 15 30,00%<br />

1337738954 33 1337738975 54 21 38,89%<br />

1337740762 25 1337740786 49 24 48,98%<br />

1337740824 36 1337740847 59 23 38,98%<br />

1337740880 31 1337740900 51 20 39,22%<br />

1337740934 32 1337740956 54 22 40,74%<br />

1337740996 38 1337741017 59 21 35,59%<br />

1337741053 34 1337741084 65 31 47,69%<br />

1337741122 36 1337741153 67 31 46,27%<br />

1337741189 34 1337741211 56 22 39,29%<br />

1337741245 32 1337741258 45 13 28,89%<br />

1337741321 37 1337741340 56 19 33,93%<br />

1337739012 35 1337739028 51 16 31,37%<br />

1337741376 32 1337741415 71 39 54,93%<br />

1337741457 38 1337741492 73 35 47,95%<br />

1337741527 32 1337741551 56 24 42,86%<br />

1337741588 36 1337741606 54 18 33,33%<br />

1337741642 34 1337741670 62 28 45,16%<br />

1337741706 34 1337741732 60 26 43,33%<br />

1337741772 38 1337741790 56 18 32,14%<br />

1337741829 37 1337741844 52 15 28,85%<br />

1337741882 36 1337741903 57 21 36,84%<br />

1337741939 34 1337741966 61 27 44,26%<br />

1337739889 38 1337739902 51 13 25,49%<br />

1337742002 34 1337742029 61 27 44,26%<br />

1337742071 41 1337742084 54 13 24,07%<br />

1337742118 32 1337742141 55 23 41,82%<br />

1337742177 34 1337742195 52 18 34,62%<br />

1337742232 35 1337742254 57 22 38,60%<br />

1337742291 36 1337742316 61 25 40,98%<br />

1337742352 34 1337742376 58 24 41,38%<br />

1337742409 32 1337742431 54 22 40,74%<br />

1337742464 31 1337742482 49 18 36,73%<br />

1337742523 36 1337742542 55 19 34,55%<br />

1337739943 32 1337739959 48 16 33,33%<br />

1337742575 32 1337742596 53 21 39,62%<br />

1337739997 36 1337740018 57 21 36,84%<br />

1337740055 34 1337740076 55 21 38,18%<br />

1337740117 40 1337740132 55 15 27,27%<br />

1337740166 32 1337740184 50 18 36,00%<br />

Moyenne 34,24 55,30 21,06 37,70%<br />

Écart type 3,63 6,14 5,65 6,86%<br />

Maximum 45 73 39 54,93%


Requête 2<br />

Solution 25: ( ?name = "Sean" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738897 20 1337738919 42 22 52,38%<br />

1337740210 24 1337740228 42 18 42,86%<br />

1337740260 31 1337740284 55 24 43,64%<br />

1337740319 33 1337740343 57 24 42,11%<br />

1337740368 23 1337740400 55 32 58,18%<br />

1337740433 29 1337740454 50 21 42,00%<br />

1337740481 25 1337740504 48 23 47,92%<br />

1337740536 27 1337740568 59 32 54,24%<br />

1337740597 28 1337740627 58 30 51,72%<br />

1337740658 30 1337740684 56 26 46,43%<br />

1337740718 33 1337740735 50 17 34,00%<br />

1337738950 29 1337738975 54 25 46,30%<br />

1337740759 22 1337740786 49 27 55,10%<br />

1337740818 30 1337740847 59 29 49,15%<br />

1337740875 26 1337740900 51 25 49,02%<br />

1337740928 26 1337740956 54 28 51,85%<br />

1337740990 32 1337741017 59 27 45,76%<br />

1337741047 28 1337741084 65 37 56,92%<br />

1337741116 30 1337741153 67 37 55,22%<br />

1337741184 29 1337741211 56 27 48,21%<br />

1337741239 26 1337741258 45 19 42,22%<br />

1337741316 32 1337741340 56 24 42,86%<br />

1337739003 26 1337739028 51 25 49,02%<br />

1337741370 26 1337741415 71 45 63,38%<br />

1337741449 30 1337741492 73 43 58,90%<br />

1337741520 25 1337741551 56 31 55,36%<br />

1337741583 31 1337741606 54 23 42,59%<br />

1337741636 28 1337741670 62 34 54,84%<br />

1337741701 29 1337741732 60 31 51,67%<br />

1337741762 28 1337741790 56 28 50,00%<br />

1337741824 32 1337741844 52 20 38,46%<br />

1337741879 33 1337741903 57 24 42,11%<br />

1337741932 27 1337741966 61 34 55,74%<br />

1337739882 31 1337739902 51 20 39,22%<br />

1337742000 32 1337742029 61 29 47,54%<br />

1337742057 27 1337742084 54 27 50,00%<br />

1337742114 28 1337742141 55 27 49,09%<br />

1337742170 27 1337742195 52 25 48,08%<br />

1337742224 27 1337742254 57 30 52,63%<br />

1337742284 29 1337742316 61 32 52,46%<br />

1337742346 28 1337742376 58 30 51,72%<br />

1337742401 24 1337742431 54 30 55,56%<br />

1337742462 29 1337742482 49 20 40,82%<br />

1337742518 31 1337742542 55 24 43,64%<br />

1337739940 29 1337739959 48 19 39,58%<br />

1337742570 27 1337742596 53 26 49,06%<br />

1337739989 28 1337740018 57 29 50,88%<br />

1337740050 29 1337740076 55 26 47,27%<br />

1337740107 30 1337740132 55 25 45,45%<br />

1337740161 27 1337740184 50 23 46,00%<br />

Moyenne 28,22 55,30 27,08 48,58%<br />

Écart type 2,87 6,14 5,83 6,04%<br />

Maximum 33 73 45 63,38%


Requête 2<br />

Solution 26: ( ?name = "Tania" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738889 12 1337738914 37 25 67,57%<br />

1337740205 19 1337740222 36 17 47,22%<br />

1337740274 45 1337740275 46 1 2,17%<br />

1337740307 21 1337740340 54 33 61,11%<br />

1337740363 18 1337740384 39 21 53,85%<br />

1337740423 19 1337740444 40 21 52,50%<br />

1337740473 17 1337740496 40 23 57,50%<br />

1337740527 18 1337740555 46 28 60,87%<br />

1337740592 23 1337740612 43 20 46,51%<br />

1337740647 19 1337740674 46 27 58,70%<br />

1337740705 20 1337740728 43 23 53,49%<br />

1337738940 19 1337738964 43 24 55,81%<br />

1337740755 18 1337740767 30 12 40,00%<br />

1337740806 18 1337740832 44 26 59,09%<br />

1337740868 19 1337740888 39 20 51,28%<br />

1337740921 19 1337740949 47 28 59,57%<br />

1337740983 25 1337741008 50 25 50,00%<br />

1337741036 17 1337741062 43 26 60,47%<br />

1337741106 20 1337741136 50 30 60,00%<br />

1337741176 21 1337741199 44 23 52,27%<br />

1337741231 18 1337741253 40 22 55,00%<br />

1337741312 28 1337741333 49 21 42,86%<br />

1337738997 20 1337739020 43 23 53,49%<br />

1337741363 19 1337741387 43 24 55,81%<br />

1337741439 20 1337741465 46 26 56,52%<br />

1337741512 17 1337741537 42 25 59,52%<br />

1337741572 20 1337741597 45 25 55,56%<br />

1337741628 20 1337741660 52 32 61,54%<br />

1337741692 20 1337741720 48 28 58,33%<br />

1337741753 19 1337741781 47 28 59,57%<br />

1337741814 22 1337741838 46 24 52,17%<br />

1337741864 18 1337741891 45 27 60,00%<br />

1337741926 21 1337741950 45 24 53,33%<br />

1337739872 21 1337739898 47 26 55,32%<br />

1337741988 20 1337742022 54 34 62,96%<br />

1337742050 20 1337742076 46 26 56,52%<br />

1337742105 19 1337742133 47 28 59,57%<br />

1337742164 21 1337742187 44 23 52,27%<br />

1337742218 21 1337742247 50 29 58,00%<br />

1337742276 21 1337742302 47 26 55,32%<br />

1337742338 20 1337742368 50 30 60,00%<br />

1337742394 17 1337742421 44 27 61,36%<br />

1337742452 19 1337742476 43 24 55,81%<br />

1337742506 19 1337742532 45 26 57,78%<br />

1337739930 19 1337739950 39 20 51,28%<br />

1337742562 19 1337742583 40 21 52,50%<br />

1337739981 20 1337740007 46 26 56,52%<br />

1337740040 19 1337740065 44 25 56,82%<br />

1337740097 20 1337740129 52 32 61,54%<br />

1337740151 17 1337740177 43 26 60,47%<br />

Moyenne 20,02 44,64 24,62 54,96%<br />

Écart type 4,24 4,58 5,25 9,15%<br />

Maximum 45 54 34 67,57%


Requête 2<br />

Solution 27: ( ?name = "Timothy" )<br />

Absolute querier time Relative querier time Absolute normal time Relative normal time Absolute delta time Relative delta time<br />

1337738903 26 1337738919 42 16 38,10%<br />

1337740210 24 1337740228 42 18 42,86%<br />

1337740261 32 1337740284 55 23 41,82%<br />

1337740319 33 1337740343 57 24 42,11%<br />

1337740369 24 1337740400 55 31 56,36%<br />

1337740432 28 1337740454 50 22 44,00%<br />

1337740481 25 1337740504 48 23 47,92%<br />

1337740537 28 1337740568 59 31 52,54%<br />

1337740597 28 1337740627 58 30 51,72%<br />

1337740658 30 1337740684 56 26 46,43%<br />

1337740715 30 1337740735 50 20 40,00%<br />

1337738950 29 1337738975 54 25 46,30%<br />

1337740760 23 1337740786 49 26 53,06%<br />

1337740818 30 1337740847 59 29 49,15%<br />

1337740874 25 1337740900 51 26 50,98%<br />

1337740928 26 1337740956 54 28 51,85%<br />

1337740991 33 1337741017 59 26 44,07%<br />

1337741050 31 1337741084 65 34 52,31%<br />

1337741116 30 1337741153 67 37 55,22%<br />

1337741191 36 1337741211 56 20 35,71%<br />

1337741239 26 1337741258 45 19 42,22%<br />

1337741316 32 1337741340 56 24 42,86%<br />

1337739006 29 1337739028 51 22 43,14%<br />

1337741371 27 1337741415 71 44 61,97%<br />

1337741450 31 1337741492 73 42 57,53%<br />

1337741520 25 1337741551 56 31 55,36%<br />

1337741583 31 1337741606 54 23 42,59%<br />

1337741636 28 1337741670 62 34 54,84%<br />

1337741701 29 1337741732 60 31 51,67%<br />

1337741763 29 1337741790 56 27 48,21%<br />

1337741825 33 1337741844 52 19 36,54%<br />

1337741879 33 1337741903 57 24 42,11%<br />

1337741934 29 1337741966 61 32 52,46%<br />

1337739882 31 1337739902 51 20 39,22%<br />

1337741999 31 1337742029 61 30 49,18%<br />

1337742064 34 1337742084 54 20 37,04%<br />

1337742126 40 1337742141 55 15 27,27%<br />

1337742172 29 1337742195 52 23 44,23%<br />

1337742227 30 1337742254 57 27 47,37%<br />

1337742288 33 1337742316 61 28 45,90%<br />

1337742346 28 1337742376 58 30 51,72%<br />

1337742402 25 1337742431 54 29 53,70%<br />

1337742460 27 1337742482 49 22 44,90%<br />

1337742518 31 1337742542 55 24 43,64%<br />

1337739940 29 1337739959 48 19 39,58%<br />

1337742571 28 1337742596 53 25 47,17%<br />

1337739989 28 1337740018 57 29 50,88%<br />

1337740050 29 1337740076 55 26 47,27%<br />

1337740108 31 1337740132 55 24 43,64%<br />

1337740160 26 1337740184 50 24 48,00%<br />

Moyenne 29,26 55,30 26,04 46,69%<br />

Écart type 3,27 6,14 5,95 6,56%<br />

Maximum 40 73 44 61,97%

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!