Aide:Recherche : Différence entre versions
(→L'affichage des données) |
(→L'affichage des données) |
||
Ligne 104 : | Ligne 104 : | ||
<nowiki><ask>[[Voisin de::Belgique]][[A pour capitale::*]]</ask></nowiki> | <nowiki><ask>[[Voisin de::Belgique]][[A pour capitale::*]]</ask></nowiki> | ||
donne | donne | ||
− | + | <ask>[[Voisin de::Belgique]][[A pour capitale::*]]</ask> | |
mais | mais | ||
<nowiki><ask format=table>France||Allemagne[[:+]][[A pour capitale::*]]</ask></nowiki> | <nowiki><ask format=table>France||Allemagne[[:+]][[A pour capitale::*]]</ask></nowiki> |
Version du 24 février 2007 à 17:03
Ceci est une traduction rapide de l'aide disponible sur Ontoworld.org. Les exemples en sont traduits
sans être adaptés à JurisPedia, qui n'en possède pas encore suffisamment. Pour voir ce que donnent
les exemples, veuillez vous reporter à cette page.
Semantic MediaWiki comprend un langage de requêtes facile à utiliser permettant aux utilisateurs d'accéder aux connaissances du wiki. La syntaxe de ce langage de requête ressemble beaucoup à celle des annotations. Les lecteurs qui ne souhaitent pas apprendre ce langage de requête peuvent tout de même en bénéficier de cette fonction : les « requêtes intégrées » affichent dynamiquement les résultats de requête dans les pages. Les requêtes, une fois formulées par quelques contributeurs, peuvent alors être utilisées par beaucoup de lecteurs.
Évidemment, répondre à des requêtes exige des ressources supplémentaires, et les administrateurs peuvent décider de limiter ou d'interdire beaucoup des fonctionnalités décrites ci-dessous, de manière à garantir que même des sites avec beaucoup de trafic puissent supporter la charge supplémentaire. D'ailleurs, puique les requêtes intégrées exploitent les mécanismes existants d'antémémoire de MediaWiki, la plupart des requêtes d'une page avec un tel contenu dynamique peuvent être faites sans baisse quelconque de capacité.
Sommaire
- 1 Introduction
- 2 Sélection des pages
- 3 L'affichage des données
Introduction
Les requêtes intégrées sont écrites dans le texte wiki d'une page en écrivant le texte suivant :
<ask ...>...</ask>
dans lequel les décrivent la requête. La partie entre les deux balises ask contient, entre autres, les conditions décrivant ce qui est demandé. Par exemple, la requête :
<ask>[[Catégorie:Acteur]]</ask>
est une requête pour toutes les pages dans la catégorie « Acteur », c'est-à-dire pour tout ce qui concerne le droit administratif. À l'endroit où la requête sera insérée dans le texte du wiki, une liste simple de toutes les pages demandées sera insérée dans la page. Autrement, tout ce qui se trouve entre <ask> et </ask> sera ignoré ; ainsi, l'exemple ci-dessus n'ajoutera pas la page courante à la catégorie Droit administratif (fr). Des requêtes beaucoup plus complexes sont possibles, mais voyons tout d'abord des choses importantes concernant les requêtes.
En général, une requête est une requête intégrée est une requête destinée à trouver un nombre de page qui satisfait à certaines exigences. La requête doit répondre à trois questions :
- Quelles pages sont demandées ?
- Quelles informations doivent être affichées sur ces pages ?
- Comment doivent être formétés les résultats dans la page ?
Le premier point est évident. Le deuxième point est important pour trouver plus de connaissance. Dans l'exemple ci-dessus, on peut s'intéresser à tous les acteurs et le leur nom et leur date de naissance. Le troisième point est important pour ajouter correctement les résultats des requêtes sur plusieurs pages. Dans cet exemple, on peut vouloir avoir une liste avec des puces de tous les acteurs, avec leur date de naissance imprimée entre parenthèses après chaque acteur. Encore une fois, cette troisème étape est plutôt indépendante des deux autres. Chacun des trois poins vont être expliqués indépendamment dans les setions ci-dessous.
Sélection des pages
Dans l'exemple ci-dessus, nous donnions la condition unique [[Catégorie:Acteur]] pour décrire quelles pages nous intéressent. La condition ici est exactement ce qu'on pourrait également écrire pour déclarer qu'une page est dans la catégorie Acteur. Les balises fermantes ask inversent leur signification pour retourner toutes ces pages (en fait plus, voir ci-dessus). Ceci est un schéma général : La syntaxe pour demander des pages satisfaisant à certaines conditions est exactement la même que celle pour déclarer explicitement que cette condition est remplie.
Les requêtes suivantes montrent ce que cela signifie :
#<ask>[[Catégorie:Acteur]]</ask> retourne toutes les pages de la catégorie, directement ou indirectement (par une sous-catégorie, une sous-sous-catégorie, etc.). #<ask>[[Né à::Klow]]</ask> retourne toutes les pages annotées comme étant relatives à quelqu'un né à Klow. #<ask>[[taille:=180cm]]</ask> retourne toutes les pages annotées comme étant relatives à quelqu'un d'une taille de 180 cm.
En utilisant d'autres catégories, relations ou attributs que ceux ci-dessus, nous pouvons déjà rechercher des pages qui ont certaines annotations. Ce qui suit combine ces conditions :
<ask>[[Catégorie:Acteur]] [[Né à::Klow]] [[taille:=180cm]]</ask>
recherche toute personne qui est un acteur et est né à Klow et a une taille de 180 cm. En d'autres termes, lorsqu'une requête contient plusieurs conditions, le résultat est restreint aux pages remplissant toutes les conditions. Nous avons donc un ET logique. Par ailleurs, les requêtes peuvent comporter des retours à la ligne de manière à les rendre plus lisibles aux autres contributeurs. Ainsi, nous pouvons également écrire :
<ask> [[Catégorie::Acteur]] [[Né à::Klow]] [[taille:=180cm]] </ask>
pour obtenir le même résultat que ci-dessus.
Notez que « inconnunbsp;» est considéré comme « faux » : s'il n'y a aucun attribut 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, avec « Acteur », « Klow » et « 180 » comme argument. Il est possible d'élargir ces conditions de plusieurs manières.
Les joker sont écris par « + » et permettent n'importe quel argument à une condition donnée. Par exemple, <ask>[[Né à::+]]</ask> retourne toutes les pages qui ont des annotations pour la relation « Né à » et <ask>[[taille:=+]]</ask> retourne toutes les pages qui ont spécifié une hauteur quelconque. Pour les catégories, cette fonctions a peu d'intérêt : <ask>[[Catégorie::+]]</ask> ne retourne que tout ce qui a une catégorie.
Les disjonctions sont écrites comme « || » et permettent aux requêtes de demander (au moins) un plusieurs arguments possibles. Par exemples <ask>[[Catégorie::Acteur de comédie musicale||Acteur de théâtre]]</ask> recherche tout acteur de comédie musicale ou tout acteur de théâtre. Cela inclut donc tout ce qui est les deux à la fois, c'est-à-dire que nous avons un OU logique. Nous pouvons donc spécifier une liste de pages comme cible de relation, c'est-à-dire <ask>[[Né à::Klow||Nancy]]</ask> et une liste de valeurs d'attribut. Cela peut être utilisé pour recenser toutes les pages à traiter, mais dans le cas de la table des sorties, cela produit la complication que le nom de la page ne figure pas dans la liste (v. infra).
Sous-requêtes
Pour demander d'une manière un peu plus complexe une page ayant une relation particulière à d'autres pages, cela peut se faire sous forme de requête.
Un seul niveau d'emboîtement est possible ; L'extension de l'analyseur (parser) de Mediawiki exige que les balises emboîtées soient différentes. La balise de la requête emboîtée dans une autre est <q> et </q>.
Rechercher des catégories
Les conditions avec des catégories sont en général simples, mais elles sont plus puissantes qu'à 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 la catégorie « Acteur de théâtre », qui est une sous-catégorie d'« Acteur », la requête <ask>[[catégorie:Acteur]]</ask> retournera ces acteurs « spéciaux » uniquement mentionnés dans la catégorie « Acteur de théâtre ». Ceci est utile dans beaucoup de situations, mais vous pouvez encore distinguer les pages qui ont été mises directement dans la catégorie Acteur simplement en allant sur la page de cette catégorie (en suivant le lien [[:Catégorie:Acteur]]).
Les conditions avec des attributs
Avec les valeurs d'attribut, on ne recherche en général pas de résultat exact, mais plutôt des entités comprises à l'intérieur de certaines limites. Par exemple,
<ask>[[Catégorie:Acteur]] [[taille:=>6 ft]] [[taille:=<7 ft]]</ask>
recherche tous les acteurs d'une taille d'au moins six pieds et au maximum sept pieds. On profite ici de l'avantage de la conversion automatique : même si la taille de l'acteur a été déclarée avec [[Hauteur:=195cm]], elle sera considérée comme une réponse correcte.
Pareilles suites de conditions dans les attributs sont souvent intéressantes pour les attributs avec des valeurs qui peuvent être ordonnées d'une manière naturelle. Par exemple, il est utile de faire une requête sur <ask>[[Début date:=>6 mai 2006]]</ask> mais cela ne sert pas à grand chose de dire <ask>[[Homepage URL:=http://quelquepart.org]]</ask>.
Si le type de données n'a pas d'ordre naturel, Semantic MediaWiki appliquera simplement l'ordre alphabétique aux valeurs de données normalitées telles qu'elles sont utilisées dans l'export RDF.
Conditions directes sur les pages
À ce stade, toutes les conditions dépendaient des annotations données à l'intérieur des pages. Mais il y a des conditions qui sélectionnent directement certaines pages, ou des pages ayant un certain nom.
En donnant directement certains noms de page ou une liste de noms de page séparés par ||, sans préfixe de champ de nom, les pages existantes de tous les champs de nom avec ces noms sont sélectionnées, ce qui signifie que <ask>[[ABDEF||AIFB]]</ask> retourne <ask>|AIFB</ask> (notez que le préfixe du champ de nom n'est pas affiché, voir le champ supérieur ou la barre de statut du navigateur, ou suivez les liens). Pour sélectionner spécialement les pages dans le champ de nom principal, utilisez par exemple <ask>[[ABCDEF||AIFB]][[:+]]</ask>. En restreignant les conditions à une valeur d'attribut, on pourrait écrire, par exemple, « Qui de Bill Murray, Dan Aykroyd, Harold Ramis et Ernie Hudson est d'une taille inférieure à sept pieds ? »
Dans le cas des catégories, il est nécessaire (c'est-à-dire à partir des pages normales), de mettre un « : » avant le nom de la page pour éviter une confusion entre les conditions [[Catégorie:Acteur]] (retourne tous les acteurs) et [[:Catégorie:Acteur]] (retourne la catégorie « Acteur »).
Grâce aux champs de nom, on peut sélectionner ces pages d'une manière moins restrictive. Cela se fait en utilisant des joker dans les pages sélectionnées, c'est-à-dire en écrivant
<ask>[[Aide:+]]</ask>
pour retourner toute page du champ « Aide ». Puisque le champ de nom principal n'a généralement pas de préfixe, on peut écrire <ask>[[:+]]</ask>, ce que nous avons déjà vu. Dans le cas des catégories, un « : » supplémentaire est nécessaire devant le champ de nom pour éviter la confusion.
L'affichage des données
Les requêtes simples utilisant des conditions comme indiqué ci-dessus, ne feront que retourner une liste de pages. Pour afficher les propriétés de ces pages, on peut ajouter des informations telles que [[Taille:=*]] pour afficher la taille (s'il y en a une) des pages sélectionnées. Utiliser « *&nbps;» comme tampon indique que ce code ne spécificie pas de condition pour la sélection des pages, mais spécifie ce qui doit être affiché des pages sélectionnées. On peut donc écrire
- [[Né à::*]] pour afficher toutes les pages qui ont une relation « Né à » dans la page des résultats
- [[Catégorie::*]] pour afficher toutes les catégories dont les pages du résultat ont été expressément incluses dans une catégorie.
même s'il n'y a aucune relation « Né à » pour une page, celle-ci est quand même dans la sélection.
Si les pages considérées sont énumérées dans la requête, le nom de la page ne figurera pas dans les données affichées, ce qui peut être un problème :
<ask>[[Voisin de::Belgique]][[A pour capitale::*]]</ask>
donne
<ask>Voisin de::BelgiqueA pour capitale::*</ask>
mais
<ask format=table>France||Allemagne[[:+]][[A pour capitale::*]]</ask>
donne
<ask format=table>France||Allemagne+A pour capitale::*</ask>
Format d'affichage
La liste de résultats est une liste dont les éléments sont séparés par des virgules. Le séparateur peut être choisi explicitement dans la requête avec l'argument « sep » (v. infra pour tous les attributs) dans la balise ouvrante <ask>, de manière à pouvoir modifier la sortie selon ses besoins. Pour capturer les deux styles de liste les plus répandus, l'utilisateur peut utiliser à la place l'attribut format. La requête suivante retourne tout ce qui est situé à Klow sous forme de liste à puce :
<ask format="ul">[[Situé à::Klow]]</ask>
Au lieu d'une « ul » (d'après la balise UL de HTML), une liste ordonnée et numérotée peut être requise en utilisant « ol » comme format, ou un véritable tableau (format="table"). Les tableaux créés par Semantic MediaWiki sont connectés par la feuille de style à un programme javascript qui permet aux utilisateurs de trier par colonnes le tableau affiché dans le navigateur. Les tableaux sont donc la seule possibilité de traiter l'affichage de requêtes plus complexes nécessitant plus d'une colonne, comme le tableau suivant, qui retourne tous les acteus avec leur lieu de naissance et leur taille.
<ask>[[Catégorie:Acteur]][[Né à::*]][[Taille:=*]]</ask><pre> Le nom de la relation ou de l'attribut est utilisé comme en-tête. Si l'on souhaite utiliser un autre en-tête, la syntaxe de Wikipedia pour le texte alternatif peut être utilisé. <pre><ask>[[Catégorie:Acteur]][[Né à::*|Lieu de naissance]]</ask>
Sommaire du format affiché
Si l'ensemble des pages sélectionnées par une requête est vide, aucun en-tête, aucune rangée ou ligne vite, ni même d'espace ne sera produite. Comme résultat, les requêtes qui ne sont pas fructueuses n'encombrent pas la sortie.
Si l'ensemble des pages sélectionnées par une requête est non-vide, nous avons avec le format « table » un en-tête de tableau, et avec le format « ul » et « ol » une ligne vide. Entre les résultats de requête dans le format « list », il n'y a aucune séparation automatique du tout ; si nous spécifions sep (v. paragraphe suivant) et séparons les requêtes par la même chose, le résultat ressemble à une unique liste, mis à part le tri et en supposant qu'aucune requête ne retourne de résultat vide.
Dans le format « list », le paramètre sep est le séparateur de plus haut niveau (entre l'information relative à une page sélectionnée et celle relative à la prochaine page sélectionnée). Le séparateur par défaut est « , », excepté pour le dernier séparateur, qui est « , et ». Ainsi la liste entière est de la forme « B, C, et D » ou « BsepCsepD ».
Le sous-article de plus haut niveau est une rangée d'un tableau, ou dans les formats « ul », « ol » et « list », une liste de niveau intermédiaire de sous-articles. Dans les deux cas, la page sélectionnée est affichée, à moins qu'elle ne soit énumérée dans la requête. Dans les formats « ul », « ol » et « list », si la page sélectionnée est affichée, le reste des informations sur elle est mis entre parenthèses après elle. Dans ces formats, les bits d'information sur les articles affichés (de niveau moyen ou sous-articles) sont séparés par des virgules. Ainsi, B, C et D sont sous la forme « E (F, G, H) » ou « F, G, H ». Les virgules apparaissent même si certains des articles sont des chaînes vides.
Les sous-articles de niveau moyen (dans un tableau : les cellules) commence dans les formats « ul », « ol » et « list » avec l'en-tête, à moins de mettre « headers=hide ». Le reste est une liste de sous-article de bas niveau séparés par des virgules. Ainsi, E est de la forme L I ou I, avec L déclaré comme "mainlabel=L" (par défaut : une chaine vide) et F, G et H sont de la forme « M, J, K, N » ou « J, K, N » avec M comme en-tête principal déclaré (par défaut : le nom de la relation ou de l'attribut). Cet en-tête est affiché même si la liste est vide. Avec l'option « headers=hide », tout L et M déclarés sont ignorés.
Format de requête
Les requêtes n'ont pas à tenir en une seule ligne, mais peuvent être aérées pour être plus lisibles et pour une maintenance plus facile. Par conséquent, les articles de la sélections des pages peuvent être mélangés avec ceux spécifiant les articles à afficher parmi les pages sélectionnées. L'ordre respectif de ces dernières détermine l'ordre d'affichage.
Exemple de sous-requête
Pour poser une question relatives aux villes de l'Union européenne, on pourrait soit énumérer les pays de l'Union européenne à la main, soit utiliser une requête emboîtée et, ce faisant, éviter d'avoir à mettre à jour la requête dans le cas où l'Union européenne admettrait un nouveau membre.
<ask sort="Situé à" limit="10" link="all"> [[Population:=>30000]] [[Catégorie:Villes]] [[Situé à::<q>[[Catégorie:Pays]] [[Membre de::Union européenne]]</q>]] [[Situé à::*]] [[Population:=*]] </ask>
Utilisation intégrée des requêtes
Pour éviter les répétitions et par conséquent faciliter la maintenance, ainsi que pour améliorer la qualité du contenu d'un wiki, on peut utiliser la construction <ask> pour interroger la connaissance du wiki non seulement pour les listes, mais également pour le texte des pages. Par exemple, imaginons la page sur la chaîne de commandement des forces armées américaines. En tête de la chaîne, il y a le Président des États Unis. Mais la page pourrait, plutôt que de simplement offrir une information abstraite sur le poste en tête de la chaîne de commandement, nommer la personne tenant ce poste, c'est-à-dire actuellement George W. Bush. Au lieu de l'écrire expressément dans le texte de la page et risquer d'être obsolète après les prochaines élections, on peut simplement écrire
Le [[Président des États Unis]], actuellement <ask headers="hide">[[:+]][[États Unis d'Amérique]][[A pour président::*]]</ask>, est à la tête de la chaîne de commandement.
On peut utiliser ceci pour les attributs et ainsi, la population d'une ville ou d'un pays peut être maintenu à un seul endroit sur la page où elle doit figurer -- la page de la ville ou du pays -- mais être réutilisée par tout le wiki.
Paramètres
Ces paramètres peuvent être entrés dans la balise ouvrante <ask>.
- limit -- nombre maximum de pages sélectionnées (ou de rangées dans le cas d'un tableau). Il sera limité à 500 de toute façon.
- sort -- voir infra
- order -- "ascending" (est équivalent à "asc", choix par défaut) ou "descending" (equivalent à "desc" ou "reverse")
- sep -- dans une liste, ce qui est utilisé comme séparateur
- format -- soit list (séparée par sep), ul (pour liste à puces non ordonnée), ol (liste ordonnée et numérotée) ou tableau
- headers="hide" (v. supra)
- link=none -- les pages en résultat ne sont pas liées. Par défaut, toutes les pages en résultat (mais non les valeurs d'attribut) sont liées ; les pages inexistantes sont considérées commes nouvelles, comme d'habitude, mais le lien conduit à la page vide elle-même, et non vers la page d'édition.
- default -- si, pour une raison quelconque, aucun résultat n'est créé, ceci sera ce qui sera retourné
- mainlabel -- titre de la première colonne (celle contenant les titres de page)
- debug=true -- donne le rapport SQL au lieu des résultats de la requête.
Liens externes dans les résultats d'une requête
Les liens externes dans les résultats d'une requête ne fonctionnent pas.
Utiliser la variable PAGENAME dans les requêtes
Il est possible de se référer à la page courante dans un modèle. Ceci permet de faire deux choses :
- rechercher quelqu'un connaissant l'instance représentée par la page dans laquelle se trouve la requête
- rechercher tous les usages d'une relation
Si vous écrivez le modèle « ask » avec <ask>[[{{PAGENAME}}::+]]</ask> vous obtiendrez tous les usages d'une relation en insérant {{ask}} sur la page de la relation.
Tri : généralités
Le tri est alphabétique pour les noms de pages et pour les attributs de type chaîne. Il est numérique pour les attributs de type entier et décimal, en prenant en compte les unités. Il est chronologique pour les attributs de type date.
Paramètres de tri
Un paramètre de tri spécifie une relation ou un attribut qui détermine l'ordre des pages sélectionnées. La relation ou l'attribut doit être compris dans la sélection. La clef de tri est une des instances de l'objet ou valeur (il y en a au moins une à cause de la condition mentionnée : s'il y en a plus d'une, le choix de l'une d'entre elle comme clef de tri semble arbitraire, peut-être se fait-il simplement en fonction de la première trouvée dans la base de donnée). La clef de tri par défaut est le nom, sans préfixe de champ de nom, de la page sélectionnée. Ceci vaut également lorsque des pages sont énumérées dans la requête.
L'objet ou la valeur utilisée comme clef de tri n'a pas besoin de figurer parmi les articles affichés.
Le paramètre de tri peut être croissant (« ascending », équivalent à « asc », réglage par défaut) ou décroissant (équivalent à « descending », « desc » ou « reverse »). Il s'applique à la fois à l'ordre des pages sélectionnées (dans un tableau : aux rangées) et aux instances d'un article qui doit être affiché pour une page (dans un tableau : les différents éléments à l'intérieur d'une cellule).
L'ordre des articles à afficher (dans un tableau : les colonnes) est tel que spécifié.
Exemples (le dernier montre que le paramètre de tri est ignoré si l'attribut concerné n'est pas utilisé pour la sélection :
<ask>Inférieur à::+Inférieur à::*</ask>
order=desc: <ask order=desc>Inférieur à::+Inférieur à::*</ask>
sort="Inférieur à": <ask sort="Inférieur à">Inférieur à::+Inférieur à::*</ask>
sort="Inférieur à" order=desc: <ask sort="Inférieur à" order=desc>Inférieur à::+Inférieur à::*</ask>
<ask sort="Population">[[Population:=+]][[Population:=*]]</ask> <ask sort="Population">[[Population:=+]]</ask> <ask sort="Population" order=desc> [[Category:Cities]] [[Population:=+]] [[Population:=*]]</ask> <ask sort="Population"> [[Categorie:Villes]] [[Population:=*]]</ask>
donne :
<ask sort="Population">Population:=+Population:=*</ask> <ask sort="Population">Population:=+</ask> <ask sort="Population" order=desc> Population:=+ Population:=*</ask> <ask sort="Population"> Population:=*</ask>
Tri par javascript
Les tableaux créés par Semantic MediaWiki sont connectés à la feuille de style fournie par un programme javascript permettant aux utilisateurs de trier, dans le navigateur, les rangées des tableaux affichés en fonction du contenu d'une colonne donnée, de manière croissante ou décroissante. Cela va plus loin que le tri des rangées tel que spécifié dans la requête, mais ne modifie pas le tri (croissant ou décroissant, tel que spécifié par le paramètre de tri) des différents articles dans une cellule.
Les valeurs chiffrée sans caractère de groupement sont triées par leur grandeur numérique. Cependant, « 12,345 est trié à partir de 12, ce qui signifie que dans l'ordre ascendant, il vient avant 13.
Le tri de texte se fait par ordre alphabétique, avec la virgule avant les chiffres. Dans l'ordre ascendant, 1 795 000 vient avant 143 346.