Archive:Recherche sémantique 1.0

Semantic MediaWiki comporte un langage de requêtes facile à utiliser permettant aux utilisateurs d'accéder aux connaissances d'un wiki. La syntaxe de ce langage de requête est semblable à la syntaxe des annotations dans Semantic MediaWiki. Ce langage de requête peut être utilisé sur la page spéciale Special:Ask ou dans des requêtes intégrées.

Évidemment, répondre à ces requêtes nécessite des ressources supplémentaires et les administrateurs d'un site peuvent décider de désactiver ou de restreindre beaucoup des fonctions décrites ci-dessous, de manière à garantir que même un site fortement visité pourra traiter cette charge supplémentaire.

Introduction
Les requêtes sémantiques précisent deux choses :
 * 1) Quelles pages sélectionner ;
 * 2) Quelle information afficher sur ces pages.

Toutes les requêtes doivent donner des conditions qui décrivent ce qui est recherché. Vous pouvez sélectionner les pages par nom, espace de nom, catégorie et, surtout, par valeur de propriété. Par exemple, la requête :

Located in::Germany

est une requête pour toute page avec la propriété « located in » avec la valeur « Germany ». Si vous entrez ceci dans Special:Ask et cliquez sur « Trouver des résultats », SMW exécute la requête et affiche les résultats dans un tableau simple de toutes les pages correspondantes. S'il y a plusieurs résultats à la requête, ils peuvent être parcourus avec les liens de navigation en haut et en bas des résultats de la requête, par exemple une requête de toutes les personnes sur ontoworld.org.

Le deuxième point est important pour afficher plus d'information. Dans l'exemple ci-dessus, on peut s'intéresser à la population de ce qui est situé en Allemagne. Pour l'afficher avec les titres de page, modifions la requête en : Located in::GermanyPopulation::* et SMW affiche les mêmes titres de page et les valeurs de la propriété Population de ces pages, s'il y en a une.

Ces deux points sont expliqués plus en détail dans la section ci-dessous.

Par catégorie ou valeur de pages
Dans l'exemple ci-dessus, nous donnions une condition unique Located in::Germany pour décrire quelles pages nous intéressaient. Le texte balisé est exactement ce que nous écririons par ailleurs pour affirmer qu'une page a ces propriété et valeur. Mettre ceci dans une requête sémantique donne toutes ces pages (actuellement, v. plus bas). Ceci est un schéma général : « La syntaxe pour rechercher les pages remplissant certaines conditions est exactement la même que celle pour affirmer que ces conditions sont remplies ».

Les requêtes suivantes montre ce que cela signifie :
 * 1)  donne toutes les pages de la catégorie directement ou indirectement (par des sous-catégories ou des sous-sous-catégories)
 * 2) Born in::Boston donne toutes les pages marquées comme étant relatives à quelqu'un né à Boston.
 * 3) height:180cm donne toutes les pages marquées comme étant relatives à des gens ayant une taille de 180cm.

En utilisant d'autres catégories, relations ou attributs que ci-dessus, nous pouvons déger rechercher des pages ayant certaines annotations. Combinons ensuite ces conditions : Born in::Boston height::180cm recherche toute personne qui est un acteur et est né à Boston et est haut de 180cm. En d'autres termes, quand plusieurs conditions sont données dans une requêtes, le résultat est restreint aux pages remplissant toutes ces conditions. Ainsi, nous avons une conjonction logique ET. Par ailleurs, les requêtes peuvent comporter des retours à la ligne de manière à les rendre plus lisibles. Nous pourrions parfaitement écrire :

born in::Boston height:180 pour obtenir le même résultat que précédemment. Notez que les requêtes ne donnent que les articles qui remplissent actuellement les propriétés requises : s'il n'y a aucune propriété pour la hauteur d'un acteur, celui-ci ne sera pas sélectionné.

Joker et disjonctions
Dans les exemples ci-dessus, nous donnions des conditions très concrètes en utilisant « acteur », « Boston » et « 180cm » comme valeur de la catégorie ou de la propriété. Il est possible d'élargir ces conditions de plusieurs manières.

Un joker est exprimé par « + » et permet n'importe quelle valeur à une condition donnée. Par exemple born in::+ donne toutes les pages qui ont des annotations pour la propriété « né à ». Pour les catégories, cette catégorie, cette fonction n'est pas très utile : [[Category:+]] donne simplement tout ce qui est classé dans une catégorie.

Les disjonctions sont exprimées « || » et permettent aux requêtes d'interroger sur (au moins) une des valeurs possibles. Par exemple, retrouve tout ce qui est acteur de comédie musicale ou acteur de théâtre, ou les deux, c'est-à-dire que nous avons ici une disjonction logique OU. Nous pouvons donc spécifier plusieurs valeurs pour une propriété, par exemple | New York.

Sous-requêtes
L'énumération d'un grand nombre de pages pour une propriété est encombrant et difficile à mettre à jour. Par exemple, pour sélectionner tous les acteurs nés dans une ville italienne, on pourrait écrire :

| Milan || Turin || Florence || … Pour générer une liste de ces cités italiennes, on pourrait lancer une autre requête : [[Located in::Italy et copier-coller les résultats dans la première requête. Ce que vous aimeriez faire est l'utilisation de la requête sur les villes pour générer cet ensemble complexe de pages. Cela s'appelle une sous-requête. Au lieu d'une liste fixe de noms de page pour la valeur de propriété, entrez une nouvelle requête à l'intérieur de et à l'intérieur de la condition de la propriété. Dans cet exemple, vous combinez et écrivez :  born in::  [[located in::Italy ]]

Le niveau d'emboîtement est indéfini, cependant l'emboîtement peut être restreint sur certains sites pour améliorer les performances.

Autre exemple, pour sélectionner toutes les villes de l'Union européenne, vous pourriez écrire :

located in:: [[members of::European Union ]]



Sous-catégories et sous-propriétés
Les conditions avec des catégories sont souvent simples, mais elles sont plus puissantes qu'elles ne le semblent à première vue.

Lorsque l'on cherche des pages à l'intérieur d'une catégorie, le résultat comprend toutes les pages contenues dans les sous-catégories de cette catégorie.

Par exemple, supposons que nous avons les catégories « directed » et « wrote screenplay », marquées comme étant des sous-catégorie de la propriété plus générale « worked on ». La requête worked on::Titanic donnera les gens qui ont ces relations spécifiques avec ce film. Ceci ne vaut que pour la sélection, pas pour l'affichage : si vous demandez la propriété à afficher dans les résultats de la recherche, vous ne verrez pas les valeurs de ses sous-propriétés ; toujours avec le même exemple, si vous affichez « worked on », vous ne verrez pas les valeurs de ses sous-propriétés « directed » à moins que vous ne demandiez l'affichage des deux propriétés.

Comparateurs
Ce qui suit les « :: » est la valeur de la propriété qui doit être trouvée. Autrement dit, c'est un test d'égalité.

Pour chaque type de données, SMW essaie de régulariser les propriétés avant de faire la comparaison :
 * pour les chaînes, il ajuste les espaces précédentes et suivantes ;
 * pour les pages de wiki, il gère les majuscules et les tirets bas (« _ »)
 * pour les nombres, il normalise les séparateurs de milliers, les virgules décimales et les notations scientifiques ;
 * pour les nombres exprimés en certaines unités, il convertit le nombre dans une unité primaire (qui peut conduire à un arrondissement pendant le calcul et affiche la valeur convertie)

En ajoutant d'autres signes après le« :: » avant la valeur, vous pouvez utiliser un comparateur différent de l'égalité.


 * > et < (supérieur à/inférieur à)
 * supérieur ou égal à, et inférieur ou égal à
 * ! (point d'exclamation)
 * différent de
 * ~ (tilde)
 * comparateur "comme" pour les chaînes

Sur SMW 1.0, ces comparateurs ne fonctionnent pas pour les propriétés de type Page ou pour les conditions dans les catégories.

La configuration d'un wiki peut limiter les comparateurs disponibles. Par défaut ~ pour comme n'est pas activé et l'administrateur doit modifier $smwgQComparators in the file SMW_Settings.php.

Opérateurs Supérieur ou égal à, Inférieur ou égal à
Avec des valeurs numériques, vous aurez souvent besoin de sélectionner des pages avec des valeurs de propriété à l'intérieur de certaines limites. Par exemple,

height::>6ft height::<7ft

demande tous les acteurs d'une taille de six à sept pieds. Notez que cela s'appuie sur les conversions automatiques d'unité : même si la hauteur d'un acteur a été indiquée par height::195cm, elle sera considérée comme étant une réponse correcte (pourvu que le type de donnée de la hauteur comprennent les deux unités, voir Aide:Unités configurables).

Notez que le comparateur supérieur /inférieur ou égal à. Ne lui ajoutez pas « = ».

Ces conditions avec intervalle dans les propriétés sont souvent intéressantes si les valeurs peuvent être ordonnées d'une manière naturelle. Par exemple, il est pertinent de demander start date::>May 6 2006 mais ce n'est pas très utile de spécifier homepage URL::>http://somewhere.org.

Si un type de données n'a pas d'ordre linéaire naturel, Semantic Mediawiki applique simplement l'ordre alphabétique aux valeurs normalisées telles qu'elles sont utilisées dans l'export RDF. Vous pouvez ainsi utiliser supérieur à et inférieur à pour sélectionner des intervalles alphabétiques dans les propriétés d'une chaîne. Par exemple, vous pouvez demander surname::>Do surname::<G pour sélectionner les surnoms entre « Do » et « G ».

Opérateur Est différent de
Vous pouvez sélectionner les pages dont les propriétés sont différentes à une valeur déterminée. Par exemple, Area code::!415 sélectionnera les pages dont les coordonnées de l'aire ne sont pas « 415 ». Comme avec le comparateur d'égalité (par défaut), l'arrondissement lors des conversions numériques peut mener à des résultats inattendus ; par exemple height::!6.00ft peut quand même sélectionner quelqu'un dont la taille est affichée comme étant de 6.00ft dans d'autre unités.

Comparateur Comme
Ceci ne marche que pour les propriétés de type String.

Dans une condition Comme, vous utilisez les jokers « * » pour sélectionner toute séquence de caractères et « ? » pour sélectionner tout caractère simple. Par exemple, vous pourriez demander Address::~*Park Place* pour sélectionner les adresses contenant « Park place », ou Honorific::~M?. pour sélectionner à la fois « M. » ou « Mme ».

Conditions directes sur les pages
À ce stade, toutes les conditions dépendaient de l'une ou de l'autre annotation écrite sur une page. Mais il y a des conditions qui sélectionnent directement les pages ou les pages d'un espace de nom donné.

En indiquant directement des titres de page (pouvant inclure un préfixe d'espace de nom) ou une liste de leurs noms séparés par ||, sélectionnez les pages portant ces noms. Par exemple,

|France||User:John Doe

Notez que le résultat n'affiche aucun préfixe d'espace de nom ; voyez la barre d'adresse ou la barre de statut du navigateur, ou suivez les liens pour déterminer l'espace de nom. En limitant la sélectionn uniquement aux pages contenant une valeur donnée d'attribut, par exemple, on pourrait écrire « Qui de Bill Murray, Dan Aykroyd, Harold Ramis et Ernie Hudson est plus grand que 6ft ? ». Mais la sélection directe d'articles est plus utile dans d'autres propriétés des articles recherchés, comme il sera expliqué après.

Pour sélectionner une catégorie, vous devez mettre un « : » avant le nom de la catégorie ; ceci évite de confondre (donne tous les acteurs) et Category:Actor (donne la catégorie « Actor »).

Restriction à un espace de nom
Il est possible de sélectionner des pages de manière moins restrictive par leur espace de nom. Par défaut, seules les pages de l'espace de nom principal sont données. Pour obtenir des pages d'un espace de nom particulier, ajoutez l'espace de nom avec un joker, par exemple, Help:+ pour obtenir toute page de l'espace de nom «&bnsp;Aide ». Puisque l'espace de nom principal n'a habituellement pas de préfixe, écrivez +. Encore une fois, pour obtenir des pages de l'espace de nom « Category », vous devez écrire un « : » devant l'espace de nom pour éviter toute confusion.

Affichage des informations
Les requêtes donnent une liste de pages et chaque résultat est par défaut affiché simplement par le titres de sa page. Vous pouvez spécifier l'affichage supplémentaire de propriétés des pages et donc afficher les catégories des pages. La manière de le faire varie selon que vous le faites sur la page Special:Ask et les deux formes de requêtes intégrées.

Sur Special:Ask
Dans le champ « conditions supplémentaires » du formulaire sur la page web, ajoutez simplement chacune des propriétés supplémentaires que vous souhaitez ajouter, précédée d'un ? (point d'interrogation), une seule par ligne, par exemple, ?Population ?Has capital Utilisez ?Category pour afficher toutes les catégories dans lesquelles la page est directement classée.

Dans la fonction
Ajoutez chacune des propriétés supplémentaires que vous souhaitez afficher, précédée d'un ? (point d'exclamation), séparée par un | (barre verticale). Par exemple,

Dans la balise
Ajoutez vos conditions comme Population::+* pour afficher les valeurs de la propriété Population (s'il y en a) des page sélectionnées. L'utilisation d'un * comme argument indique que cette commande ne spécifie pas de condition de sélection des pages, mais ne spécifie que ce qui doit être affiché des pages sélectionnées. Par exemple, la requête ci-dessus peut aussi bien être écrite comme ceci : Population::+ Population::* Has capital::* [[Category:*]] Notez que cela marche pour les catégories.

Ce qui est affiché
Même s'il n'y a aucune propriété « height&bsp;» sur une page, la page figure quand même dans la sélection, et le résultat affichera un champ champ vide. De même, si plusieurs valeurs d'une propriété ont été assignées à une page, elles seront toutes affichées.

Ainsi, un truc courant lorsque vous voulez sélectionner toutes les valeurs d'une propriété est de ne sélectionner que les pages qui ont une valeur pour cette propriété, en l'utilisant avec le joker '+', par exemple, en utilisant la synttaxe de la fonction  : </nowiki. Autrement vous afficherez toutes les pages du wiki, la plupart n'ayant aucune valeur pour « height ».

Format d'affichage
Pour les attributs qui supportent des unités, les requêtes peuvent déterminer quelle unité sera utilisée pour la sortie. Il suffit de mentionner une des unités disponible après le nom de la propriété. Les détails de la syntaxe sont différents pour les différentes formes d'une requête.
 * Sur la page Special:Ask et dans la fonction :
 * Ajoutez l'unité après la propriété à afficher, séparée par « # ». Par exemple, ?Area#km² affiche les valeurs d'une propriété « area » converties en  « km² ».
 * Dans les balises ,
 * Ajoutez l'unité après le « * » suivant la propriété à afficher. Par exemple  height::*cm  affiche la valeur de la propriété « heightnbsp;» en « cm ».

Labels d'en-têtes
Par défaut, le nom d'une propriété est affiché comme en-tête de la colonne de ses valeurs. Vous pouvez modifier cet affichage en d'autres en-têtes, mais les détails de la syntaxe diffèrent ici encore pour les différentes formes de la requête.


 * Sur la page Special:Ask et dans la fonction :
 * Ajoutez le label d'en-tête après la propriété à aficher (et après tout format d'affichage), séparé par « = ». Par exemple, ?Population=Count of people living there ou ?Area#km²=étendue.
 * Dans les balises :

 Quelle taille .

L'affichage ne comprend pas les sous-propriétés
Comme il a été dit dans, une requête sur une propriété s'étend jusqu'à ses sous-propriétés. Cependant, l'affichage de la propriété ne mentionnera que les valeurs de la propriété elle-même et non les valeurs de ses sous-propriétés. Vous devez demander l'affichage des sous-propriétés. Dans le même exemple que ci-dessus, la requête de worked on::Titanic va donner les personnes avec les sous propriétés directed::Titanic, mais si vous affichez la propriété « worked on », un blanc sera affiché pour cette page.

Tri des résultats
En principe, les résultats sont triés par titre de page. Vous pouvez trier les résultats par catégorie.


 * Sur Special:Ask
 * Indiquez simplement la propriété dans le champ « trier par colonne »
 * Dans la fonction ,
 * Indiquez la propriété servant de clef de tri comme paramètre sort="property name", séparé des autres paramètres par une « | » (barre verticale)
 * Dans les balises
 * Indiquez la colonne à trier dans la balise ask :

L'ordre peut être déterminé comme étant ascendant ou descendant en spécifiant order="ascending" (ou "asc"), "descendig" (ou "desc") de la même façon. Vous pouvez également cliquer sur les petites icônes de tri en haut du tableau des résultats, mais notez que ce tri JavaScript dans l'interface utilisateur ne trie que les résultats visibles sur la page actuelle, et non tous les résultats.

Utilisation de modèles et de variables
À l'intérieur d'une requête peuvent être utilisés un nombre indéterminé de modèles et de variables. Ceci peut être utilisé pour créer une requête standard qui affiche tous les événements futurs (où « futur » signifie à partir de maintenant) :

end date::>28 &ndash August –2024

Beaucoup d'autres usages sont possibles, notamment dans les requêtes intégrées. Cependant, il n'est en aucun cas possible d'utiliser un modèle de paramètre (ce qui est entre à l'intérieur d'une requête. Désolé.

Une autre variable utile aux requêtes intégrées est pour la page actuelle, qui vous permet de réutiliser une requête générique sur plusieurs pages. Par exemple, voyez la requête Property:Population. Consultez requêtes intégrées pour plus d'information.

Mettre un lien vers les résultats d'une recherche sémantique
La manière la plus simple de faire cela est de crédr une page contenant la recherche sémantique dans une requête intégrée (voir le prochain chapitre). Si vous voulez mettre un lien vers les résultats d'une requête de la page Special:Ask, vous aurez à faire avec les caractères « ? », « [ » et « ] » dans son URL. Pour dissimuler le « ? » introduisant le paramètre de la recherche, utilisez un modèle comme le modèle Querylink de Wikipédia. Pour échapper les crochets, utilisez &amp;#91; </tt> et &amp;#93;</tt> pour les représenter.

"Raisonnement" limité

 * Lorsqu'une catégorie est recherchée, SMW ne recherche pas dans les catégories ancêtre (identifiées par le classement de la catégorie parente dans l'article enfant)
 * Lorsqu'une propriété est recherchée, SMW ne recherche pas les ancêtre (identifiées par Property:Subproperty of dans l'article de l'article enfant).

Ces requêtes coûtent beaucoup de temps de calcul et les administrateurs peuvent les désactiver sur certains wiki.

Cependant, vous pouvez créer et utiliser des propriétés pour annoter beaucoup d'autres fonctions d'une propriété (qui est transitive, l'inverse d'une autre, plus large/plus proche qu'une autre, etc.) et vous pouvez même lier celles-ci à des propriétés connues dans des ontologies, en owl, rdfs, SKOS, etc. SMW n'utilise pas ces annotations pour faire des requêtes plus intelligentes. Vous devez optimiser les requêtes et les sous-requêtes pour lesquelles elles recherchent.

Les requêtes ne s'étendent pas aux propriétés redirigées
Si une propriété est une redirection vers une autre, la recherche sur la première ne trouvera pas les articles utilisant la seconde.

Vous devriez utilisez Propriété:Subproperty of pour rendre l'une sous-propriété de l'autre, qui affichera comme résultat le contenu de l'autre.

Pas de sous-requête pour les propriétés
Vous ne pouvez pas utiliser de sous-requêtes pour obtenir une liste de propriétés sur lesquelles faire une requête. Vous pouvez faire une requête pour trouver une liste de sous-propriétés et la copier-coller dans une requête.

Pas de requête sur une propriété spéciale
Vous ne pouvez pas faire de requête sur les valeurs des propriétés spéciales intégrées à SMW, comme « Allow value » ou « URI équivalente »