C64-Wiki:C64-Wiki Kurs Expert
Hier der Teil des C64-Wiki-Kurses, der fortgeschrittenen User das "Expertenwissen" vermittelt...
Generelle Syntax und Funktionsweise einer Extension[Quelltext bearbeiten]
Grundsätzlich werden Extensions dadurch benutzt, indem man den entsprechenden Wiki-Code in einen Artikel einbaut:
<Name>Parameter</Name>
Für Name wird der Name der gewünschten Extension angegeben. Bei Parameter können Daten an die Extension übergeben werden. Der Parameterbereich kann auch leer sein oder sich über mehrere Zeilen erstrecken.
Wenn ein Artikel angezeigt wird, wird überall, wo sich der Wiki-Code einer Extension befindet, diese Extension aufgerufen. Die Extension erzeugt dann eine Ausgabe (normalerweise Text), die dann an der entsprechenden Stelle im Artikel erscheint. Dabei kann die Extension auch aufwendige Verarbeitungen durchführen (beispielsweise ist eine Extension im C64-Wiki zur automatisierten Änderung von Artikel gedacht).
Extensions und der Cache[Quelltext bearbeiten]
Damit ein Artikel angezeigt werden kann, muss der Server den Quelltext in HTML umwandeln. Um die Serverlast zu reduzieren, verfügt die MediaWiki-Software über einen Cache. Jedes Mal, wenn ein Artikelquelltext zur Anzeige umgewandelt wird, wird das Resultat der Umwandlung gespeichert. Wenn der Artikel danach noch öfter anzeigt wird, wird dabei die Umwandlung gespart. Der Cacheeintrag bleibt maximal 24 Stunden gültig (oder bis zur nächsten Änderung am entsprechenden Artikel). Auch die im Artikel verwendeten Extensions werden nicht aufgerufen.
Dieses Verhalten führt zu Problemen, wenn eine Extension bei jeder Anzeige etwas anderes anzeigen soll – beispielsweise, weil die angezeigten Daten möglichst aktuell sein sollen oder weil unterschiedliche Besucher unterschiedliche Texte sehen sollen. Daher sorgen einige Extensions dafür, dass bei den Artikeln, in denen sie aufgerufen werden, der Cache umgangen wird. Da dadurch natürlich die Serverlast ansteigt, sollten solche Extensions nicht auf stark frequentierten Seiten (wie z.B. der Hauptseite) verwendet werden.
Die SimpleVote-Extension[Quelltext bearbeiten]
Die SimpleVote-Extension war die erste Extension im C64-Wiki. Die Idee war, eine Abstimmungsfunktion für Spiele zu bieten, bei der jeder (angemeldete) Besucher jedes Spiel auf einer Skala von 1 bis 10 Punkten bewerten kann. Daher ist das „SimpleVote“ in jedem Spieleartikel (und dem entsprechenden Formartikel) enthalten. Der Aufruf erfolgt dabei ohne Parameter:
<SimpleVote></SimpleVote>
Die Extension ermittelt selbsttätig, in welchem Artikel (und von welchem Besucher) sie gerade aufgerufen wird und zeigt als Resultat den aktuellen Punktestand an sowie gegebenenfalls Links zur Stimmabgabe (oder zum Widerruf einer Stimmabgabe). Diese Extension schaltet den Cache für die aufrufenden Artikel ab. Zwar ergibt sich dadurch bei der Anzeige von Spieleartikeln eine erhöhte Serverlast, die sich bei Tests jedoch als vertretbar erwiesen hat. Neben der beschriebenen Grundfunktion bietet die Extension auch Auswertungen an:
<SimpleVote>highscore</SimpleVote> <SimpleVote>lowscore</SimpleVote>
Diese Parameter erzeugen eine List mit den 100 Spielen mit den besten (> 5,00 Punkte) bzw. schlechtesten (< 5,00 Punkte) Bewertungen. Ein Spiel muss mindestens 2 Stimmen haben, damit es berücksichtigt wird.
<SimpleVote>topten</SimpleVote> <SimpleVote>topten-cached</SimpleVote> <SimpleVote>topthree</SimpleVote> <SimpleVote>topthree-cached</SimpleVote>
Fast wie bei highscore, aber nur mit den 10 bzw. 3 besten Bewertungen und nur mit Spielen, die mindestens 5 Stimmen haben. Die Parameter, die auf „-cached“ enden, sorgen dafür, dass der Cache nicht abgeschaltet wird – somit sind die angezeigten Daten nicht unbedingt topaktuell (sondern können bis zu 24 Stunden alt sein), aber dafür ist auch ein Einsatz auf stark frequentierten Seiten möglich.
<SimpleVote>listall</SimpleVote>
Dieser Parameter erzeugt eine detaillierte Auflistung aller abgegebenen Stimmen (primär zu Testzwecken).
Die RandomArticleLink-Extension[Quelltext bearbeiten]
Diese Extension sucht sich per Zufallsgenerator irgend einen Artikel aus dem Bestand aus und zeigt dann einen Link auf diesen Artikel an. Diese Extension lässt den Cache eingeschaltet, so dass nicht bei jedem Besuch ein neuer Link angezeigt wird, sondern in der Regel erst nach dem Ablauf des Caching-Limits von 24 Stunden. Die Extension wird entsprechend eingesetzt für den „Zufallsartikel des Tages“.
<RandomArticleLink></RandomArticleLink>
Bei dieser Extension gibt es keine Parameter.
Die RandomImage-Extension[Quelltext bearbeiten]
Diese Extension ähnelt der RandomArticleLink-Extension. Hier wird jedoch kein Link auf den zufällig ausgewählten Artikel angezeigt, sondern ein Bild aus diesem Artikel. Entweder wird ein Titelbild, ein Cover oder ein Highscorebild aus-gewählt (auch per Zufallsgenerator).
<RandomImage></RandomImage>
Dieser Aufruf zeigt das Zufallsbild in seiner Ori-ginalgröße an. Dies lässt sich durch einen Para-meter ändern (Beispiel):
<RandomImage>thumb|300px|</RandomImage>
Der übergebene Parameter wird dabei einfach in einen Bild-Tag eingefügt. Es sind alle Angaben möglich, die auch bei einem normalen Bild-Verweis verwendet werden können. Man sollte lediglich darauf achten, dass der Parameter (wie im Beispiel) mit einem senkrechten Strich endet.
Die GuestBook-Extension[Quelltext bearbeiten]
Diese Extension zeigt einfach das C64-Wiki-Gästebuch an, inklusive Eingabemöglichkeit für neue Einträge.
<GuestBook></GuestBook>
Hier gibt es keine Parameter. Diese Extension schaltet den Cache ab.
Die ExpireCache-Extension[Quelltext bearbeiten]
Diese Extension dient dazu, Artikeleinträge aus dem Cache zu entfernen. Bei einem Aufruf ohne Parameter wird der Artikel, der den Aufruf enthält, aus dem Cache entfernt (und somit bei der nächsten Anzeige wieder frisch vom Wiki-Code in HTML übersetzt):
<ExpireCache></ExpireCache>
Man kann auch den Namen eines anderen Artikels mit übergeben (Beispiel):
<ExpireCache>Hauptseite</ExpireCache>
Hier wird z.B. der Cacheeintrag für die Hauptseite gelöscht. Zu beachten ist dabei, dass eine Extension nicht aufgerufen werden, wenn der Artikel, in dem die Extension aufgerufen wird, selbst aus dem Cache geholt wird! Diese Extension wird auf der „Cron-Seite“ des Wikis verwendet. Dazu gleich mehr.
Die LoadURL-Extension[Quelltext bearbeiten]
Diese Extension verlangt als Parameter eine URL („Webadresse“), die dann durch die Exten-sion aufgerufen wird. Dabei wird das Ergebnis dieses Aufrufs ignoriert:
<LoadURL>http://www.c64-wiki.de/index.php/Hauptseite</LoadURL>
Diese Extension wird dazu verwendet, in Verbindung mit der ExpireCache-Extension Artikel zu einem definierten Zeitpunkt in den Cache zu übernehmen. Durch ExpireCache wird der Artikel zuerst aus dem Cache entfernt, um ihn dann durch LoadURL neu übersetzen und in den Cache übernehmen zu lassen. Dies geschieht beim C64-Wiki auf der „Cron-Seite“ (http://www.c64-wiki.de/index.php/C64-Wiki:Cron), die jeden Tag automatisch um 5 Uhr morgens aufgerufen wird. Das Ergebnis ist, dass zu diesem Zeitpunkt die Highscore-Galerie und die Hauptseite neu aufgebaut werden (einschließlich solcher Sachen wie „Zufallsartikel des Tages“). Wer nicht bis 5 Uhr warten will, kann die Seite natürlich auch von Hand aufrufen. Das hat dann den selben Effekt.
Die HighscoreCollector-Extension[Quelltext bearbeiten]
Diese Extension durchsucht alle Spieleartikel nach Einträgen in der Sektion Highscore. Alle gefundenen Highscore-Einträge werden gesammelt und als Highscore-Galerie aufgelistet. Falls ein Highscore-Screenshot vorhanden ist, so wird er mit angezeigt (nur für den Top-Eintrag).
<HighscoreCollector></HighscoreCollector>
Bei dieser Extension gibt es keine Parameter. Da das Durchsuchen aller Spieleartikel recht aufwendig ist, wird hier der Cache nicht abgeschaltet. Es kann daher bis zu 24 Stunden dauern, bis ein neuer Highscoreeintrag in der Auflistung erscheint.
Die ACheck-Extension[Quelltext bearbeiten]
Diese Extension dient der Suche anhand bestimmter Suchkriterien im Artikelbestand. Dabei wird immer der Quelltext der Artikel durchsucht. Die Idee war dabei, durch Verwendung geeigneter Suchausdrücke solche Artikel zu finden, bei denen z.B. noch Angaben fehlen oder andere Probleme bestehen. Genauso gut lässt sich diese Funktionalität natürlich auch für andere Such-operationen verwenden. Ein Aufruf der ACheck-Extension kann einen ganzen Satz von Regeln enthalten. Als Ausgabe wird dann eine Liste aller Artikel erzeugt, bei denen mindestes eine Regel nicht zutrifft. Um die ACheck-Funktionalität zu nutzen, er-zeugt man sich typischerweise einen neuen Artikel (z.B. so wie „Prüfung Spiele-Artikel - Stufe 1“) und baut dort einen ACheck-Aufruf ein. ACheck erwartet die Parameter in folgender Form:
<ACheck>Kommando Kategorie Regel 1 - Regulärer Ausdruck Regel 1 - Meldungstext Regel 1 - Punktzahl Regel 2 - Regulärer Ausdruck Regel 2 - Meldungstext Regel 2 – Punktzahl (...noch mehr Regeln...) </ACheck>
Es gibt zur Zeit vier Kommandos, zwei davon sind: full für das normale Verhalten, und -full für eine umgekehrte Prüfung. Während bei der normalen Prüfung die Artikel mit mindestens einem Regelverstoß angezeigt werden, erscheinen bei der umgekehrten Prüfung die Artikel, bei denen alle regeln zutreffen. Zusätzlich gibt es noch die Kommandos list und –list, die prinzipiell genauso funktionieren wie die full-Kommandos. Mit dem Unterschied, dass bei full bei jeder fehlgeschlagenen Prüfung der Meldungstext ausgegeben wird, währen bei list nur eine kompakte Auflistung der betroffenen Artikel erfolgt. Für den Parameter Kategorie kann man eine Artikelkategorie angeben, auf welche die Prü-fungen dann beschränkt werden. Der Regelsatz kann aus einer oder mehreren Einzelregeln bestehen. Jede Regel besteht immer aus drei Zeilen (die Punktzahl wird aktuell noch nicht verwendet, muss aber trotzdem angegeben werden...). Der spannende Teil sind natürlich die Regulären Ausdrücke. In diesem Artikel werde ich aller-dings nur auf einige Grundlagen eingehen – sonst würde diese CeVi-aktuell sicher einige hundert Seiten dicker werden...
Aufbau eines Regulären Ausdrucks[Quelltext bearbeiten]
Der wichtigste Teil eines regulären Ausdrucks ist der Suchausdruck. Der Suchausdruck wird immer von Begrenzern eingeschlossen. Als Begrenzer können im Prinzip alle Zeichen außer Buchstaben, Ziffern und dem Backslash („\“) benutzt werden. Da der Begrenzer Anfang und Ende des Suchausdrucks markiert, sollte er im Suchausdruck selbst nicht vorkommen. Oft wird der normale Schrägstrich („/“) verwendet:
/blau/
In Fällen, wo nach einem Schrägstrich selbst gesucht wird, macht natürlich ein anderer Begrenzer Sinn (wie z.B. ein Ausrufungszeichen):
!gelb/grün!
Das erste Beispiel sucht dabei nach dem Text blau, das zweite nach dem Text gelb/grün. Hinter dem abschließenden Begrenzer können noch Modifikatoren folgen:
/rot/i
Der Modifikator „i“ hier im Beispiel bedeutet, dass bei der Suche nach dem Wort rot Groß- und Kleinschreibung nicht beachtet werden. Weitere Modifikatoren werden später noch vorgestellt. Als Spezialität im C64-Wiki gibt es auch noch einen Modifikator, der vor dem Anfangsbegrenzer auftauchen kann:
n/rot/
Hierdurch wird der komplette Ausdruck negiert. Im Beispiel würden also Artikeln als „Treffer“ verbucht, in denen das Textfragment „rot“ nicht auftaucht.
Platzhalter und Alternativen[Quelltext bearbeiten]
Nur nach festen Texten such zu lassen, könnte auf die Dauer langweilig werden. Glückweise gibt es da Möglichkeiten, um die Sache mit einfachen Mitteln komplizierter werden zu lassen. Als ersten gäbe es da den Punkt („.“), der für genau ein beliebiges Zeichen (ausgenommen einem Zeilevorschub) steht:
/Ma..e/
Das Beispiel würde z.B. „Matte“, „Mappe“, „Maike“ und „Masse“ finden. Wenn man will, dass der Punkt auch Zeilenvorschübe akzeptiert, so kann man dem Suchausdruck den Modifikator „s“ hinzufügen:
/blaues.Auto/s
Hier würde „blaues Auto“ auch dann gefunden, wenn ein Zeilenvorschub (an Stelle der üblichen Leerstelle) zwischen den beiden Wörtern wäre. Um Alternativen anzugeben, gibt es den senkrechten Strich:
/blau|gelb/
ergibt einen Sucherfolg bei blau oder gelb. Es ist auch möglich, Teile des Suchausdrucks zu klammern:
/Blau(bär|beer)pfannkuchen/
findet sowohl Blaubärpfannkuchen wie auch Blaubeerpfannkuchen. Man kann natürlich auch noch weitere Gebäckalternativen bieten:
/Blau(bär|beer)(pfannkuchen|kuchen|torte)/
Wiederholungen[Quelltext bearbeiten]
Ein Wiederholungszeichen bezieht sich immer auf das vorherige Zeichen (oder die vorherige Klammerung). Das erste Wiederholungszeichen ist der Stern („*“), welcher für „null oder mehr“ steht:
/Aa*rgh/
Hier darf also das kleine „a“ beliebig oft vorkommen oder fehlen. Der Ausdruck würde also z.B. bei „Argh“, „Aargh“ oder „Aaaaaargh“ zuschlagen. Wenn das Zeichen (oder die Klammerung) mindestens einmal vorkommen soll, so kann man das Plus („+“) verwenden:
/Aa+rgh/
würde beim bescheidenen „Argh“ keinen Treffer vermelden. Selbstverständlich funktioniert die Wiederholung auch bei Platzhaltern:
/gelb.*grün/s
ist erfolgreich, wenn gelb und grün im Artikeltext auftauchen, egal, wie viele Zeichen dazwischen sind (hier mit Modifikator „s“, um auch Zeilenvorschübe zu erlauben). Und jetzt noch ein Beispiel mit Klammerung:
/(ja)+/
findet „ja“, „jaja“, „jajaja“ usw. Weiterhin gibt es noch die geschweiften Klammern, mit denen sich die Anzahl der gewünsch-ten Wiederholungen genauer angeben lassen:
/blau.{10}grün/s
findet blau und grün nur dann, wenn genau 10 (beliebige) Zeichen dazwischen stehen.
/blau.{5,10}grün/s
findet blau und grün nur dann, wenn mindestens 5 und höchsten 10 Zeichen dazwischen stehen.
/== Hinweise ==.{60,}== Kritik ==/s
Und hier stellt genau dann Erfolg ein, wenn zwischen den beiden Sektionsüberschriften („== Hinweise ==“ und „== Kritik ==“) mindestens 60 Zeichen stehen. Diese Regel wird im C64-Wiki dazu benutzt, um Artikel zu finden, bei denen im Abschnitt „Hinweise“ verdächtig wenig Text steht.
Mehr Sonderzeichen...[Quelltext bearbeiten]
Bestimmte Zeichen haben spezielle Funktionen innerhalb der Regulären Ausdrücke. Neben den schon genannten sind dies:
^ $ [ ] ? \
Der wichtigste davon ist der Backslash („\“). Wenn dieser einem speziellen Zeichen vorangestellt wird, so wird daraus ein „normales Zeichen“. Zum Beispiel:
/Fi$tful/
funktioniert nicht wie erwartet, da das Dollarzeichen eine Sonderfunktion hat. Daher muss den Dollarzeichen der Backslash vorangestellt werden:
/Fi\$tful/
Dieser Ausdruck würde dann z.B. bei „For a Fi$tful of Buck$“ („Für eine Handvoll Dollars“) funktionieren.
Weiterführende Literatur[Quelltext bearbeiten]
Reguläre Ausdrücke können natürlich noch viel mehr, als ich hier in der kurzen Übersicht erläutern kann. Wer sich nicht direkt einen „dicken Wälzer“ über das Thema zulegen will, kann auf folgenden (englischsprachigen) Seiten etwas mehr erfahren:
- http://de2.php.net/manual/en/reference.pcre.pattern.modifiers.php
- http://de2.php.net/manual/en/reference.pcre.pattern.syntax.php
- http://gnosis.cx/publish/programming/regular_expressions.html
Zum Herumprobieren mit Regulären Ausdrücken gibt es kleines Programm namens RegexCoach (http://www.weitz.de/regex-coach/), das mittels der „Step“-Funktion auch schrittweise zeigen kann, wie Reguläre Ausdrücke intern verarbeitet werden.
Vordefinierte Regeln[Quelltext bearbeiten]
Und noch etwas spezielles gibt es im C64-Wiki: zentral definierte Regelsätze. Diese Regelsätze sind alle in einen speziellen Artikel (C64-Wiki:ACheck-Rules) untergebracht und können bei ACheck-Aufrufen in beliebigen Artikeln verwendet werden. An Stelle des Regulären Ausdrucks wird dann ein Verweis auf den zentral definierten Regelsatz verwendet:
<ACheck>full Spiel iArtikelstruktur (bindet Regelsatz "Artikelstruktur" ein) 1 iGunddaten (bindet Regelsatz "Grunddaten" ein) 1 </ACheck>
Ein solcher Verweis beginnt immer mit einem kleinen „i“, auf das dann (ohne Zwischenraum) der Name des Regelsatzes folgt. Im Beispiel wird also nach Artikeln gesucht, bei denen Probleme in der Artikelstruktur oder in den Grunddaten vorliegen. Ein zentral definierter Regelsatz kann selber auch wieder Verweise auf andere Regelsätze enthalten.
Die PregReplace-Extension[Quelltext bearbeiten]
Diese Extension stellt ein Eingabeformular mit einer globalen Suchen-und-Ersetzen-Funktion zur Verfügung. Zur Suche werden auch hier Re-guläre Ausdrücke verwendet. Die Ersetzung wird bei allen zutreffenden Artikeln im gesamten Artikelbestand durchgeführt. Auch Änderungen der Struktur bei bestehenden Artikeln sind möglich. Wie bei ACheck wird dabei der Artikel-Quelltext verarbeitet. Da diese Funktion gute Kenntnis hinsichtlich Regulärer Ausdrücke voraussetzt und potenziell den gesamten Artikelbestand mit einem falschen Mausklick vernichten kann, erscheint die Eingabemaske nur bei Benutzern, die gleichzeitig Administrator und Bürokrat sind.