Help:Sélection des pages

La partie la plus importante des fonctions de recherche sémantique dans Semantic MediaWiki est un format simple pour la description de quelles pages doivent être affichées comme résultat de recherche. Les requêtes sélectionnent les pages wiki basées sur l'information qui a été spécifiée pour celles-ci en utilisant les Catégories, les Propriétés et peut-être d'autres fonctions MediaWiki comme l'espace de nom de la page. Les paragraphes suivants présentent les fonctions principales de requête dans SMW.

Catégories et valeurs de propriété
Dans l'exemple d'introduction, nous avons donné la condition simple Located in::Germany pour décrire quelles pages nous intéressaient. Le texte de balisage est exactement ce vous écririez autrement pour affirmer que des pages ont cette propriété et cette valeur. Mettre ceci dans une requête sémantique ordonne à SMW de vous afficher les pages concernées. Il s'agit d'un schéma général : La syntaxe pour demander les pages qui répondent à certaines conditions est exactement la syntaxe pour déclarer explicitement que cette condition tient.

Les requêtes qui suivent montrent ce que cela veut dire.
 * 1)  donne toutes les pages de la catégorie directement ou indirectement (au moyen des sous-catégories, des sous-sous-catégories, etc.).
 * 2) born in::Boston donne toutes les pages annotées concernant quelqu'un qui est né à Boston.
 * 3) height::180cm donne toutes les pages annotées concernant quelqu'un qui mesure 180 cm.

En utilisant d'autres catégories ou propriétés que celles citées plus haut, nous pouvons déjà demander des pages qui possèdent certaines annotations. Combinons maintenant ces exigences :

born in::Boston height::180cm

demande tous ceux qui sont acteurs et nés à Boston et mesurant 180 cm. En d'autres termes : quand plusieurs conditions sont écrites dans une requête, le résultat est réduit aux pages qui satisfont à toutes les exigences. Ainsi, nous avons un ET logique. Au fait : les requêtes peuvent aussi comprendre des sauts de ligne afin de les rendre plus lisibles. On pourrait tout aussi bien écrire :

born in::Boston height::180cm

pour obtenir le même résultat que ci-dessus. Notez que les requêtes ne donnent que les articles qui répondent de manière positive à toutes les propriétés requises : s'il n'y a pas de propriété de taille renseignée pour un acteur, cet acteur ne sera pas sélectionné.

Quand on spécifie les valeurs de propriété, SMW ignorera en temps normal tous les espaces blancs de début et de fin ce qui veut dire que les deux conditions height::180cm et height:: 180cm  veulent dire exactement la même chose. Les types de données comme les nombres peuvent avoir des fonctions supplémentaires comme par exemple ignorer les virgules qui peuvent être utilisées pour séparer les milliers. SMW traitera aussi les noms de page synonymes comme étant les mêmes, de la même manière que MediaWiki considère Semantic wiki, Semantic_wiki et semantic wiki comme étant une seule et même page.

Si vous utilisez fréquemment des modèles comportant les mêmes conditions, vous pouvez créer un Concept comme de la sténo. Les concepts forment une espèce de catégorie virtuelle et peuvent ainsi être utilisés de la même manière que les conditions de catégorie.

Requêtes distance
Un cas particulier de la syntaxe peut être utilisé pour trouver toutes les pages avec une valeur du type Coordonnée géographique à une certaine distance d'un lieu donné, si l'on dispose de l'extension Semantic Maps installée - Voir la page de la requête distance dans la documentation Semantic Maps pour plus d'information.

Valeurs de propriété : jokers et comparateurs
Dans les exemples donnés plus haut, nous avons donné des conditions de propriété concrètes, utilisant comme valeurs de propriété « Boston » et « 180cm ». Dans bien des cas, on ne cherchera pas une seule valeur, mais une étendue de valeurs, comme par exemple tous les acteurs qui font plus de 180 cm. Dans certains cas, on peut même seulement rechercher toutes les pages qui n'ont aucune des valeurs pour une propriété donnée. Par exemple, les personnes décédées pourraient être ceux qui ont une valeur dans la propriété « date de décès ». De telles conditions générales sont possibles avec l'aide de comparateurs et de jokers.

Jokers
Les jokers sont écrits sous forme de « + » et autorise n'importe quelle valeur pour une condition donnée. Par exemple, born in::+ renvoie toutes les pages qui ont une valeur entrée dans la propriété « born in » (né à en anglais).

Comparateurs
Les comparateurs sont des symboles spéciaux comme &lt; ou &gt;. Ils sont placés après :: dans les conditions de propriété.


 * >> et << : « supérieur à » et « inférieur à » ;
 * > et < : « supérieur ou égal à » et « inférieur ou égal à » par défaut, mais « supérieur à » et « inférieur à » dans le cas où $smwStrictComparators = true; ;
 * ≥ et ≤ : « supérieur ou égal à » et « inférieur ou égal à » ;
 * ! : « différent de » (« non égal à » ;
 * ~ : « comme » comparaison pour champs ;
 * !~: « non comme » comparaison pour champs.

Les comparateurs ne fonctionnent que pour les valeurs de propriété et non pour les conditions sur les catégories. Une installation wiki peut limiter la disponibilité des comparateurs, ceci étant fait par l'administrateur qui modifiera la valeur de $smwgQComparators comme expliqué dans Help:Configuration.

Selon la valeur de $smwStrictComparators</tt>, l'interprétation de &gt;</tt> et &lt;</tt> peut changer : les différents comportements sont documentés sur la page concernant les comparateurs stricts.

Quand on applique des comparateurs aux pages, alors le titre de la page (sans le préfixe espace de nom) est utilisé. Cependant, ceci peut être modifié en paramétrant une autre clé de tri MediaWiki pour cette page, par exemple  </tt>. Veuillez noter que ceci s'applique à tous les comparateurs, y compris ! et ~. Il n'est pas possible d'avoir des clés de tri multiples pour une page. En particulier, les pages de redirection ne sont pas prises en compte quand on applique des comparateurs.

Différent de
Vous pouvez sélectionner les pages qui ont une valeur de propriété qui est différente (non égale) de la valeur donnée. Par exemple, Area code::!415 sélectionnera les pages qui ont un indicatif téléphonique (area code en anglais) qui n'est pas le « 415 ». Veuillez noter que cette description de requête ne recherche pas les pages qui n'ont pas comme indicatif téléphonique 415. En fait, elle recherche toutes les pages qui ont (aussi) un code différent de 415. En particulier, les pages qui n'ont pas du tout d'indicatif téléphonique ne peuvent pas faire partie des résultats de la requête mentionnée précédemment.

Comme avec le comparateur d'égalité (par défaut), l'utilisation des unités personnalisées peut exiger à procéder des conversions numériques qui peuvent donner des résultats inattendus. Par exemple height::!6.00 ft peu malgré tout sélectionner quelqu'un dont sa taille affiche un « 6.00 feet » tout simplement parce que la véritable valeur numérique n'est pas réellement 6. Dans de telles situation, ils pourrait être plus utile de demander les pages qui ont une valeur de propriété en dehors d'une certaine fourchette, exprimée en utilisant une disjonction (voir plus bas) de conditions avec.

Supérieur ou égal à, inférieur ou égal à
Avec les valeurs numériques, vous avez la possibilité de sélectionner les pages avec les valeurs de propriété situées dans une fourchette de valeurs. Par exemple,

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

demande tous les acteurs qui ont une taille comprise entre 6 et 7 pieds (ft). Remarquez que cette caractéristique tire parti de la conversion automatique des unités de mesure : même si la hauteur de l'acteur a été renseignée avec height::195cm, celui-ci ferait partie des bonnes réponses (par le fait que le type de données pour la hauteur (height) comprend les deux unités, voir Help:Unités personnalisées). Veuillez noter que les comparateurs signifient supérieur/inférieur ou égal à – le symbole d'égalité =</tt> n'est pas nécessaire.

De telles fourchettes sur les valeurs de propriété ne sont pertinentes que si les valeurs peuvent être ordonnées de façon naturelle. Par exemple, c'est parlant de demander Date de début::>6 mai 2006 mais cela ne veut pas dire grand-chose de demander URL site::>http://www.quelquepart.org.

Si un type de donnée n'a pas d'ordre linéaire, Semantic MediaWiki appliquera simplement l'ordre alphabétique aux valeurs normalisée telles qu'elles sont utilisées dans l'export RDF. Vous pouvez ainsi utiliser supérieur à ou inférieur à pour sélectionner des chaînes de caractères d'une propriété champ. Par exemple, vous pourriez demander Nom::>Do Nom::<G pour sélectionner les noms compris entre « Do » et « G ». Dans les pages wiki, le comparateur tient compte du nom de la page donnée (sans le préfixe de l'espace de nom).

Dans ce cas et dans tous les autres concernant l'utilisation de comparateurs, il peut arriver que l'on cherche les valeurs qui débutent par le symbole &lt;</tt>. Dans ce cas, SMW peut être empêché d'interpréter le symbole comme un comparateur si un espace est inséré après ::</tt>. Par exemple, property:: &lt;br> recherche véritablement les pages qui ont la valeur « &lt;br> » pour la propriété donnée.

Supérieur à, inférieur à
Si vous souhaitez exclure la valeur de référence du résultat, par exemple pour trouver un acteur plus grand que Hugh Laurie (1,89 m), vous pouvez faire la requête en utilisant une combinaison entre les comparateurs &gt;</tt> et !</tt> :

height::>1.89m height::!1.89m

Comme, non comme
Les comparateurs ~</tt> et !~</tt> ne fonctionnent qu'avec des propriétés de type Champ. Dans une condition comme, on utilise les jokers '*</tt>' pour trouver n'importe quelle séquence de caractères et '?</tt>' pour trouver un seul caractère. Par exemple, on pourrait demander "Address::~*Park Place*" pour sélectionner les adresses contenant le champ « Park Place » ou bien "Honorific::~M?." pour sélectionner à la fois « Mr. » et « Ms. ».

Comparateurs stricts
Le comportement par défaut de SMW, où les comparateurs &lt;</tt> et &gt;</tt> veulent dire respectivement « inférieur ou égal à » et « supérieur ou égal à » peut être quelquefois sujet de confusion pour les personnes qui sont familières avec la signification mathématique de. Vous pouvez cependant décider de faire interpréter les signes de façon « stricte » par SMW comme expliqué ici.

Union de résultats de requête : disjonctions
Les disjonctions sont des conditions OU qui admettent plusieurs conditions alternatives sur les résultats de requête. SMW a deux façon d'écrire les disjonctions dans les requêtes :


 * L'opérateur OR</tt> est utilisé pour prendre l'union de deux requêtes.
 * L'opérateur <tt>||</tt> est utilisé pour des disjonctions dans les valeurs, les pages et les noms de catégorie.

Dans tous les cas, la disjonction nécessite à ce qu'au moins une (mais peut-être plus d'une) des alternatives possibles soit satisfaite (OU logique). Par exemple, la requête

born in::Boston OR born in::New York

décrit toutes les pages des personnes nées à Boston ou à New York. Ceci peut être aussi écrit avec <tt>||</tt> comme ceci : |New York. Dans ce dernier cas, « Boston||New York » décrit une valeur qui peut être soit l'une, soit l'autre valeur. Écrire des requêtes avec <tt>||</tt> est habituellement plus concis, mais les disjonctions ne peuvent pas être toutes écrites de cette façon. Ce qui suit est un exemple qui ne peut pas être exprimé avec <tt>||</tt> :

born in::Boston OR

La syntaxe <tt>||</tt> peut être utilisée non seulement dans les valeurs de propriété, mais aussi avec les catégories, comme dans la requête.

Description de pages simples
Jusqu'ici, toutes les conditions dépendaient des annotations données dans une page. Mais il y a aussi des conditions pour sélectionner directement certaines pages, ou des pages provenant d'un espace de nom donné.

Donner directement des titres de page (éventuellement en y incluant un préfixe d'espace de nom) ou une liste de titres de pages séparées par <tt>||</tt> sélectionne les pages avec les noms donnés. Comme exemple, Cette requête

|France||User:John Doe

qui a trois résultats (tout du moins si les pages existent). Veuillez noter que le résultat n'affiche pas les préfixes d'espace de nom : voyez la boite flottante ou la barre d'état du navigateur, ou bien suivez les liens pour déterminer l'espace de nom. <!--

Describing single pages
So far, all conditions depended on some or the other annotation given within an page. But there are also conditions to directly select some pages, or pages from a given namespace.

Directly giving some page title (possibly including a namespace prefix), or a list of such page titles separated by <tt>||</tt>, selects the pages with those names. An example is the query

|France||User:John Doe

which has three results (at least if the pages exist). Note that the result does not display any namespace prefixes; see the hover box or status bar of the browser, or follow the links to determine the namespace. Restricting the set based on an attribute value one could ask, e.g., «Who of Bill Murray, Dan Aykroyd, Harold Ramis and Ernie Hudson is taller than 6ft?». But direct selection of articles is most useful if further properties of those articles are asked for, e.g. to simply print the height of Bill Murray.

To select a category in this way, a <tt>:</tt> must be put before the category name. This avoids confusing (return all actors) and Category:Actor (return the category «Actor»).

Restricting results to a namespace
A less strict way of selecting given pages is via namespaces. The default is to return pages in every namespace. To return pages in a particular namespace, specify the namespace with a «wildcard», e.g. write Help:+ to return every page in the «Help» namespace. Since the main namespace usually has no prefix, write + to select only pages in the main namespace.

Disjunctions work again with the <tt>||</tt> syntax as above. For example, to return pages in either the main or «User» namespace, write |User:+. To return pages in the «Category» namespace, a <tt>:</tt> is again needed in front of the namespace label to prevent confusion, e.g. Category:+.

Subqueries and property chains
Enumerating multiple pages for a property is cumbersome and hard to maintain. For instance, to select all actors that are born in an Italian city one could write:

|Milan||Turin||Florence||...

To generate a list of all these Italian cities one could run another query

located in::Italy

and copy and paste the results into the first query. What one would like to do is to use the city query as a subquery within the actor query to obtain the desired result directly. Instead of a fixed list of page names for the property's value, a new query enclosed in and is inserted within the property condition. In this example, one can thus write:

born in:: [[located in::Italy ]]

Arbitrary levels of nesting are possible, though nesting might be restricted for a particular site to ensure performance. For another example, to select all cities of the European Union you could write:

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



In the above example, we essentially have constructed a chain of properties «located in» and «member of» to find things that are located in something which is a member of the EU. Queries can be written in a shorter form for this common case:

located in.member of::European Union

This query has the same meaning as above, but with much less special symbols required. In general, chains of properties are created by listing all properties separated by dots. In the rare case that a property should contain a dot in its name, one may start the query with a space to prevent SMW from interpreting this dot in a special way.

NOTE: It is not possible to use a subquery to obtain a list of properties that is then used in a query. See below.

Using templates and variables
Arbitrary templates and variables can be used in a query. An example is a selection criteria that displays all future events based on the current date: end date::>2024-August-28

Another particularly useful variable for inline queries is  for the current page with namespace, which allows you to reuse a generic query on many pages. For an example of this, see Property:Population. Read about inline queries for more information.

Sorting results
It is often helpful to present query results in a suitable order, for example to present a list of cities ordered by population. Special:Ask has a simple interface to add one or more sorting conditions to a query. The name of the property to sort by is entered into a text input, and ascending or descending order can be selected. SMW will usually attempt to sort results by the natural order that the values of the selected property may have: numbers are sorted numerically, strings are sorted alphabetically, dates are sorted chronologically. The order therefore is the same as in the case of the comparators in queries. If no specific sorting condition is provided, results will be ordered by their page name.

It is possible to provide more than one sorting condition. If multiple results turn out to be equal regarding the first sorting condition, the next condition is used to order them and so on. For example we could get a list of cities by their average number of rainy days per year, but grouped by the country they are in, with the following query:

resulting in

Sorting a query can also influence the result of a query, because it is only possible to sort by property values that a page actually has. Therefore, if a query is ordered by a property (say «Population») then SMW will usually restrict the query results to those pages that have at least one value for this property (i.e. only pages with specified population appear). Therefore, if the query does not require yet that the property is present in each query result, then SMW will silently add this condition. But SMW will always try to find the ordering property within the given query first, and it is even possible to order query results by subproperties. Some examples should illustrate this:


 * <tt> Population::+ </tt> ordered by  «Population» will present the cities with population in ascending order. The query result is the same as without the sorting.


 * <tt> </tt> ordered by  «Population» will again present the cities with population in ascending order. The query result may be modified due to the sorting condition: if there are cities without a population given, then these will no longer appear in the result.


 * <tt> has location country.population::+ </tt> ordered by  «Population» will present the cities ordered by the population of the countries they are located in. The query result is not changed, but «population» now refers to a property used in a subquery.

If a property that is used for sorting has more than one value for some page, then this page will still appear only once in the result list. The position that the page takes in this case is not defined by SMW and may correspond to either of the property values. In the above examples, this would occur if one city would have multiple population numbers specified, or if one city is located in multiple countries each of which has a population. It is suggested to avoid such situations.

Query results displayed in a result table can also be ordered dynamically by clicking on the small sort icons found in the table heading of each column. This function requires JavaScript to be enabled in the browser and will sort only the displayed results. So if, e.g., a query has retrieved the twenty world-largest cities by population, it is possible to sort these twenty cities alphabetically or in reverse order of population, but the query will certainly not show the twenty world-smallest cities when reversing the order of the population column. The dynamic sorting of tables attempts to use the same order as used in SMW queries, and in particular orders numbers and dates in a natural way. However, the alphabetical order of strings and page names may slightly vary from the wiki's alphabetic order, simply because there are many international alphabets that can be ordered in different ways depending on the language preference.

Linking to Semantic Search Results
Links to semantic query results on Special:Ask can be created by means of the inline query feature in SMW as explained in its documentation. It is not recommended to create links directly, since they are very lengthy and use a specific encoding. Developers who create extensions that link to Special:Ask should also use SMW's internal functions for building links. Understanding the details of SMW's encoding of queries in links is therefore not required for using SMW.

Subqueries for properties
It is not possible to use a subquery to obtain a list of properties that is then used in a query. One can, however, use a query that returns a list of properties, and copy and paste the result into another query. Alternatively, one can use the template results format to pass properties directly to another query.

Queries with special properties
SMW currently does not support queries for the values of any of SMW's built-in Special properties such as «Has type», «Allows value» or «Equivalent URI». -->