Open Source im professionellen Einsatz
Linux-Magazin 07/2009
663

Semantische Suche

Durch die Anpassung der Vorlagen stehen nun alle Daten für die semantische Suche zur Verfügung. Das Interface für die Suche findet sich unter »http://example.org/index.php/Spezial:Semantische_Suche« - eine Wiki-typisch einfache Seite mit einer Eingabebox für die Suche, einer für (optionale) zusätzliche Parameter und dem Knopf, der die Suche startet. Eine Beispiel-Abfrage soll alle Personen finden, die am 26.12.1791 geboren sind. Dazu muss man das Wiki nach dem Attribut »attGeburtsdatum« durchsuchen. Die Abfrage »[[attGeburtsdatum:: 26.12.1791]]« im Suche-Feld liefert das Gewünschte, nämlich die Seite von Charles Babbage. Die Datumsnotation ist übrigens recht anpassungsfähig: Die Form »1791-12-26« funktioniert ebenfalls.

Für eine Suche nach allen Datensätzen, die über das Attribut »attGeburtsdatum::« verfügen, kommt eine Wildcard zum Einsatz. Der Platzhalter ist bei der semantischen Suche nicht das Sternchen, sondern das Pluszeichen: »[[attGeburtsdatum:: +]]«. Etwas komplexer ist folgende Abfrage:

[[attGeburtsdatum:: > 1700-01-01]]
[[attGeburtsdatum:: < 1800-01-01]]

Sie findet alle Seiten, auf denen das Geburtsdatum in einem bestimmten Zeitintervall liegt.

Tests auf größer oder kleiner sind also explizit anzugeben, ohne einen Operator prüft die Abfrage auf Gleichheit. Daneben gibt es nur noch den Test auf Ungleichheit, der mit dem Rufzeichen kodiert wird, und einen Like-Operator, als Tilde geschrieben. Letzterer funktioniert nur bei Strings und ist aus Performancegründen normalerweise ausgeschaltet.

Das Ergebnis dieser Suche zeigt, dass die beiden Bedingungen implizit mit einem »AND« verknüpft wurden. Aber auch eine Disjunktion ist möglich, entweder mit dem Operator »OR« oder mit »||«. Die Abfrage »[[attVorname:: Pablo || David]]« oder alternativ »[[attVorname:: Pablo]] || [[attVorname:: David]]« findet also alle Pablos und Davids.

Häufig wünscht sich der Wiki-Benutzer nicht nur eine Liste der Seiten, sondern eine Liste mit anderen Attributen, die auf der jeweiligen Seite vorkommen. In unserem Fall also Vor- und Nachname. Wer das will, trägt Folgendes ins Feld »Zusätzlichen Ausgaben« ein:

?AttVorname
?AttNachname
?AttGeburtsdatum

Abbildung 2 zeigt die gesamte Abfrage ergänzt um eine Sortierung nach dem Geburtstag und dem Ergebnis.

Abbildung 2: Eine semantische Suche mit Ergebnissen, Bedingungen und anzuzeigenden Attributen.

Listing 3: Semantische
Vorlage

01 {|
02 ! Vorname
03 | [[attVorname::{{{vorname}}}]]
04 |-
05 ! Nachname
06 | [[attNachname::{{{nachname}}}]]
07 |-
08 ! Geburtsdatum
09 | [[attGeburtsdatum::{{{geburtsdatum}}}]]
10 |-
11 ! Geburtsstadt
12 | [[attGeburtsstadt::{{{geburtsstadt}}}]]
13 |}

Die gespeicherte Suche

Niemand möchte für Standardabfragen jedes Mal die Boxen neu füllen, das Ergebnis sollte immer auf Klick verfügbar sein. Dafür gibt es die Parserfunktion »#ask«. Das Format ist:

{{#ask: Argument1 | Argument2 | ... }}

Die Argumente sind die Inhalte der beiden Eingabeboxen von eben, garniert mit zusätzlichen Steuerparametern für die Ausgabe, wie Listing 4 zeigt.

Listing 4: Komplexere Abfrage
mit Formatierung

01 {{#ask: [[attVorname::David]]
02 | ?attVorname
03 |  ?attNachname
04 | sort=attNachname,attVorname
05 }}

Ein Blick auf die Hilfeseite des SMW [2] lohnt sich dabei, denn es steht eine ganze Reihe leistungsstarker Funktionen für die Abfrage und die Ergebnisformatierung zur Verfügung. Allerdings lauern auch einige Tücken. So kann es leicht geschehen, dass als Ergebnis der Suche gar nichts erscheint. Das liegt meistens an einem Tippfehler in den Attributnamen. In hartnäckigen Fällen hilft es, die Abfrage und die Spalten erst einmal zu reduzieren und dann Stück für Stück wieder zu ergänzen.

Etwas überraschend reagiert eine Abfrage auch, wenn sie nach Attributen sortieren soll, die nicht in der Ergebnismenge vorhanden sind. Befände sich in der Philosophenliste auch noch Aristoteles, so wäre zwar das Feld »attNachname« gefüllt, aber das Feld »attVorname« wäre wohl gar nicht vorhanden. Damit verschwände der Philosoph aus jeder Liste, in der nach »attVorname« sortiert wird. Verzichtet man auf diese Sortierung und belässt es dabei, den Vornamen nur in den Ergebnisspalten aufzuführen, so taucht er wieder auf.

Ein letztes Problem hat mit dem Caching-Mechanismus von Mediawiki zu tun: Gibt es neue Daten, so finden sie sich auf einer Abfrageseite erst dann, wenn diese frisch abgespeichert oder der Link »aktualisieren« angeklickt wird. Die Alternative dazu ist, mit einem beherzten »$wgEnableParserCache = false;« in der Datei »LocalSettings.php« den Parser-Cache gleich ganz auszuschalten. Das empfiehlt sich aber nur für wenig frequentierte Wikis.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.