\chapter{Wiki-Text}
\label{ch:wikitext}
Wiki-Text ist die Hypertext-Markup-Sprache, die von Wikis im Allgemeinen und, im Kontext dieser Arbeit, von MediaWiki im Speziellen verwendet wird. Sie dient dazu, Text zu formatieren und zu strukturieren, Verknüpfungen herzustellen oder weitere spezielle Funktionen der Wiki-Software anzusprechen. Dabei soll sie leichter zu lesen und zu schreiben sein als zum Beispiel HTML.

Leider gibt es bislang keine formale Grammatik oder Spezifikation für das Wiki-Markup, das MediaWiki verwendet; einen Überblick bieten \q{MW:EDIT} und \q{MW:SPEC}. Die Syntax für Wiki-Text ist, soweit sie für WikiWord relevant ist, fest in \javaid{PlainTextAnalyzer} kodiert. Die wichtigsten Markup-Elemente, die von MediaWiki verwendet werden, sind im Folgenden kurz beschrieben. 

\section{HTML}
MediaWiki unterstützt neben den speziellen Konstrukten des Wiki-Markups auch HTML-Markup \q{W3C:HTML}, insbesondere Tags wie \wikitext{<span>}, \wikitext{<div>}, \wikitext{<p>} und \wikitext{<br>} sind erlaubt, mitsamt den möglichen Attributen, speziell auch \wikitext{class}, \wikitext{style}, \wikitext{id} und \wikitext{title}. Auch die in HTML definierten Zeichenreferenzen wie \wikitext{\&amul;} sowie die SGML-Syntax für Kommentare, \wikitext{<!--{}-- \ldots --{}-->}, werden unterstützt. 

Zusätzlich definiert MediaWiki eigene Tags, die derselben HTML- \bzw XML-artigen Syntax folgen, zum Beispiel das Tag \wikitext{<nowiki>}, das als Escape dient und für den eingeschlossenen Text die Interpretation von Wiki-Markup unterbindet. Diese Nebenwirkung hat übrigens auch \wikitext{<pre>} für vorformatierten Text. Erweiterungen (\lingo{Extensions}) für MediaWiki können beliebige zusätzliche Tags definieren, siehe \rr{sec:wikitext:extensions}.

\section{Einfache Textformatierung}
\label{sec:wikitext:format}

Ein leicht zu lesendes und zu schreibendes Markup für einfache Textformatierungen sind der Hauptgrund für die Existenz von Wiki-Text: die Verwendung von HTML wurde für zu wenig benutzerfreundlich befunden. So definiert MediaWiki, wie die meisten Wikis, spezielles Markup für die Formatierung von Text:

\begin{itemize}
  \item Eine leere Zeile beginnt einen neuen Absatz (einzelne Zeilenumbrüche haben im Fließtext keine Bedeutung).
  \item Blöcke von Zeilen, die jeweils mit mindestens einem Leerzeichen beginnen, werden als vorformatierter Text behandelt (ähnlich wie bei \wikitext{<pre>}, nur dass die Interpretation von Wiki-Markup nicht vollständig unterdrückt wird).
  \item Zwei Apostrophe markieren kursiven Text: \wikitext{''kursiv''} wird zu \textit{kursiv}; drei Apostrophe markieren fetten Text: \wikitext{'''fett'''} wird zu \textbf{fett}.
  \item Kursiv- und Fettdruck lassen sich kombinieren: \wikitext{'''fett ''kursiv'''''} wird zu \textbf{fett \textit{kursiv}}.
  \item Hoch- und Tiefstellung werden mit HTML-Markup realisiert, also mit \wikitext{<sup>} und \wikitext{<sub>}. Das gleiche gilt für unterstrichenen und durchgestrichenen Text mit \wikitext{<u>} und \wikitext{<s>}.
  \item Überschriften (Abschnitte) werden mit Gleichheitszeichen markiert: \wikitext{= Überschrift =} erzeugt, wenn es für sich auf einer eigenen Zeile steht, eine Überschrift erster Ordnung, \wikitext{== Überschrift ==} eine Überschrift zweiter Ordnung, und so weiter. Das HTML-Äquivalent, \wikitext{<h1>}, \wikitext{<h2>} usw. wird ebenfalls akzeptiert. Überschriften dienen automatisch als Anker, also als mögliche Sprungziele, die über Wiki-Links adressiert werden können.
  \item Einrückung des Textes erfolgt durch vorangestellte Doppelpunkte: \wikitext{:} ergibt eine Einrückung um einen Schritt, \wikitext{::} um zwei Schritte \wikitext{:::}  um drei, und so weiter.
  \item Unnummerierte Listen werden durch einen Asterisk (\wikitext{*}), nummerierte durch ein Gitterkreuz (\wikitext{\#}) am Zeilenanfang markiert. Listen und Einrückungen können beliebig kombiniert und verschachtelt werden: \wikitext{:*\#\#} am Zeilenanfang markiert ein Element einer nummerierten Liste, die ein Element einer nummerierten Liste ist, die ein Element einer unnummerierten Liste ist, die eingerückt ist.
  \item Definitionslisten können mit \wikitext{;Wort: Definition} erzeugt werden, sind aber in der Praxis eher ungebräuchlich.
\end{itemize}

\section{Wiki-Links und Bilder}
\label{sec:wikitext:links}

Die Wiki-Links werden als Name des Zielartikels in doppelten eckigen Klammern geschrieben: \wikitext{[[Sprache]]} erzeugt einen Hyperlink auf die Seite \wikipage{Sprache}. Der \nom{Link-Text}\index{Link-Text} (auch \nom{Anker-Text} oder \nom{Label} genannt) kann dabei optional als von dem Namen des Ziels abweichend angegeben werden, \zB  \wikitext{[[Linguistik|linguistischen]]} erzeugt einen Hyperlink auf die Seite \wikipage{Linguistik} mit dem sichtbaren Text \wwterm{linguistischen}. Eine weitere Form, den Link-Text anzupassen, ist der so genannte \nom{Link-Trail}\index{Link-Trail}: \wikitext{[[Sprache]]n} erzeugt einen Hyperlink auf den Artikel \wikipage{Sprache} mit dem sichtbaren Text \wwterm{Sprachen} \qq{WP:LINKS}{WP:V}. 

MediaWiki erlaubt (genau wie HTML) Verknüpfungen auf "`Anker"' \q{W3C:HTML}, also auf bestimmte Stellen \emph{innerhalb} eines Artikels \bzw, in URI-Terminologie, auf Dokument-Fragmente \q{RFC:3986}. In MediaWiki erzeugt jede Überschrift  einen Anker, es ist also möglich, Wiki-Links direkt auf einzelne Abschnitte von Artikeln zu setzen: \wikitext{[[Myanmar\#Geschichte]]} würde auf den Abschnitt \wikipage{Geschichte} im Artikel \wikipage{Myanmar} verweisen. Für Verweise auf einen Abschnitt im selben Artikel reicht die Angabe des Ankers aus: innerhalb der Seite \wikipage{Myanmar} wäre also zum Beispiel der Link \wikitext{[[\#Geschichte]]} möglich.

Bei der Angabe des Link-Zieles kann ein Präfix verwendet werden, das durch einen Doppelpunkt von eigentlichen Namen der Zielseite getrennt ist. Ein solcher Präfix kann unterschiedliche Bedeutungen haben:

Der Präfix kann einen \textbf{Namensraum} angeben (\rr{p:features:namensraum}): Der Link \wikitext{[[Hilfe:Formatieren]]} verweist auf eine Seite im Namensraum \wikipage{Hilfe}, die sich mit Textformatierung befasst. Links in einige spezielle Namensräume ändern allerdings das Verhalten des Wiki-Links grundlegend: Wiki-Links, die in den Namensraum für \textbf{Bilder} zeigen, binden das entsprechende Bild in den Artikel ein, \zB: \wikitext{[[Bild:Baum.jpg]]} würde das Bild \someid{Baum.jpg} dort einbinden, wo der Link im Text definiert wurde. Wiki-Links in den \textbf{Kategorienamensraum} ordnen die Seite einer Kategorie zu: der Link \wikitext{[[Kategorie:Semantik]]} auf der Seite \wikipage{Unsinn} ordnet diese Seite der Kategorie \wikipage{Semantik} zu sorgt dafür, dass sie auf der Seite \wikipage{Kategorie:Semantik} aufgeführt wird \q{WP:KAT}. Der Link würde auch nicht dort angezeigt, wo er im Text definiert ist, sondern in einem besonderen Bereich für Kategorien ganz am Ende der Seite. Die Sonderbehandlung von Wiki-Links in den Bild- und Kategorienamensraum lässt sich umgehen, indem man dem Kategorienamen einen Doppelpunkt voranstellt: \wikitext{[[:Bild:Baum.jpg]]} und \wikitext{[[:Kategorie:Semantik]]} erzeugt "`normale"' Wiki-Links.
 
Bei der Kategorisierung einer Seite lässt sich ein sogenannter \lingo{Sort-Key} (\nom{Sortierschlüssel}) angeben, der bestimmt, an welcher Stelle eine Seite in der Kategorie gelistet wird: So ist \wikipage{Albert Einstein} mittels \wikitext{[[Kategorie:Pazifist|Einstein, Albert]]} so der  \wikipage{Kategorie:Pazifist} zugeordnet, dass er unter "`E"', nicht unter "`A"' gelistet wird. Um einen \lingo{Sort-Key} für alle Kategorien einer Seite gemeinsam anzugeben kann das \lingo{Magic Word} \wikitext{\{\{DEFAULTSORT:\ldots\}\}} verwendet werden (siehe unten).

Der Präfix kann auf ein anderes Wiki verweisen, so dass sich ein \textbf{Interwiki-Link} ergibt. dazu wird einem Präfix eine Basis-URL zugeordnet, die zusammen mit dem angegebenen Seitentitel einen Hyperlink auf eine Seite in einem anderen Wiki ergibt. Zum Beispiel erzeugt der Link \wikitext{[[mw:Installation]]} in der Wikipedia einen Hyperlink auf \uref{http://www.mediawiki.org/wiki/Installation}, weil dem Präfix "`\nospell{MW}"' das URL-Muster "`\url{http://www.mediawiki.org/wiki/$1}"' zugeordnet wurde \q{WP:INTERWIKI}.

Wenn der Präfix für einen Interwiki-Link gleichzeitig als Sprach-Code definiert ist, ändert sich das Verhalten des Links grundsätzlich: er wird als \textbf{Language-Link} interpretiert, der auf einen Artikel mit gleichem oder ähnlichem Inhalt in einer anderen Sprache verweist \q{WP:INTERLANG}. Solche Links werden nicht inline an der Stelle angezeigt, an der sie im Text definiert wurden, sondern sie werden in einem speziellen Teil der Navigationsleiste dargestellt, unter dem Namen der Sprache, die dem Sprachcode entspricht, der als Präfix des Links verwendet wurde. Diese Sprach-Codes folgen im Wesentlichen der ISO 639-1 Norm \q{ISO:639-1} und entsprechen im Fall der Wikipedia den Subdomains, die für die Wikipedia-Projekte in den einzelnen Sprachen verwendet werden \q{M:SITES}. So würde \zB der Link \wikitext{[[en:Language]]} im Artikel \wikipage{Sprache} in der deutschsprachigen Wikipedia (\domain{de.wikipedia.org}) eine Verknüpfung auf den Artikel \wikipage{Language} in der englischsprachigen Wikipedia (\domain{en.wikipedia.org}) erzeugen, die im Artikel \wikipage{Sprache} in der Navigationsleiste unter dem Label \txt{\nospell{English}} angezeigt wird. Auch dieser Mechanismus kann umgangen werden, indem dem Sprachcode ein Doppelpunkt vorangestellt wird: \wikitext{[[:en:Language]]} funktioniert als "`normaler"' Interwiki-Link, der direkt im Artikeltext angezeigt wird.

\section{Tabellen}
\label{sec:wikitext:tabellen}

Tabellen beginnen mit \wikitext{\{|} und enden mit \wikitext{|\}}, jeweils in einer eigenen Zeile; hinter dem \wikitext{|} am Tabellenanfang können HTML-Attribute wie \wikitext{class} oder \wikitext{style} angegeben werden. Zeilen der Tabelle werden mit \wikitext{|--} getrennt (ebenfalls in einer eigenen Zeile, das \wikitext{--} kann beliebig wiederholt werden, \wikitext{|--{}--{}--{}--{}--{}--{}--} ist also auch zulässig). Jede Zelle beginnt entweder mit \wikitext{|} an einem Zeilenanfang, oder mit \wikitext{||} irgendwo in einer Zeile. Zellen im Tabellenkopf können mit \wikitext{!} am Zeilenanfang oder \wikitext{!!} in der Zeile markiert werden. Ein Beispiel:

\begin{verbatim}
{| class="wikitable"
|-
! header 1
! header 2
! header 3
|-
| row 1, cell 1
| row 1, cell 2
| row 1, cell 3
|-
| row 2, cell 1
| row 2, cell 2
| row 2, cell 3
|}
\end{verbatim}

Neben der Wiki-Syntax für Tabellen wird auch die HTML-Syntax unterstützt, mit \wikitext{<table>}, \wikitext{<tr>}, \wikitext{<td>}, und so weiter.

\section{Vorlagen}
\label{sec:wikitext:vorlagen}
MediaWiki unterstützt sogenannte \nom{Vorlagen} (\nom{Templates}) als eine Methode, den Inhalt einer Wiki-Seite in eine andere einzubinden: Dafür wird der Name des Vorlage in doppelten geschweiften Klammern benutzt \q{WP:VOR}. Vorlagen befinden sich typischerweise (aber nicht notwendigerweise) im Vorlagen-Namensraum. 

Beim Einbinden von Vorlagen können sogenannte \nom{Vorlagen-Parameter} verwendet werden: Sie erlauben es, beim Einbinden konkrete Werte anzugeben, die dann für Platzhalter eingesetzt werden, die im Wiki-Text der Vorlage verwendet wurden. Zum Beispiel: Wenn auf der Seite \wikipage{Vorlage:Hallo} der Wiki-Text \wikitext{Hallo Welt} steht, kann dieser auf einer anderen Seite eingefügt werden, indem man dort \wikitext{\{\{Hallo\}\}} schreibt. Steht in \wikipage{Vorlage:Hallo} \wikitext{Hallo \{\{\{1\}\}\}}, so würde \wikitext{\{Hallo|Mond\}\}} den Text \txt{Hallo Mond} erzeugen  (positionaler Parameter); steht dort \wikitext{Hallo \{\{\{was\}\}\}}, so würde \wikitext{\{\{Hallo|was=Mond\}\}} den Text \txt{Hallo Mond} erzeugen (benannter Parameter).

\section{Magic Words}
\label{sec:wikitext:magicwords}
MediaWiki definiert \nom{Magic Words}\index{Magic Words} im Wesentlichen in zwei Varianten: die eine ("`Variablen"') folgt der Syntax für Vorlagen und bietet Zugriff auf \nospell{kontext}- oder projektspezifische Werte, zum Beispiel den Titel der Seite selbst (\wikitext{\{\{PAGENAME\}\}} \bzw \wikitext{\{\{FULLPAGENAME\}\}}) oder die Anzahl der Seiten im Wiki (\wikitext{\{\{NUMBEROFPAGES\}\}}); die andere ("`Optionen"') beeinflusst die Verarbeitung der Seite, zum Beispiel schaltet \wikitext{\_\_NOTOC\_\_} das automatisch erzeugte Inhaltsverzeichnis aus \q{MW:MAGIC}. 

Die meisten \nom{Magic Words} werden von WikiWord ignoriert. Einige, die von WikiWord verwendet werden, sind die folgenden:

\begin{description}
  \item[\wikitext{\#REDIRECT}] definiert eine Weiterleitungsseite\label{sec:wikitext:weiterleitung} \q{WP:WL}. Beginnt die erste nicht-leere Zeile der Seite mit dieser Markierung, so ist die Seite eine Weiterleitungsseite und dient als Alias für eine andere Seite (siehe \rr{p:features:weiterleitung}); Das Ziel des Alias wird als Wiki-Link unmittelbar hinter dem \nom{Magic Word} angegeben; Zum Beispiel könnte die Seite \wikipage{USA} den Text \wikitext{\#REDIRECT [[Vereinigte Staaten von Amerika]]} enthalten und so als Weiterleitung auf \wikipage{Vereinigte\_Staaten\_von\_Amerika} dienen.
  
  Neben \wikitext{\#REDIRECT} wird auch \wikitext{\#REDIRECTION} unterstützt, sowie in einigen Wikis auch eine übersetzte Version dieses \nom{Magic Words}, zum Beispiel \wikitext{\#DOORVERWIJZING} in der niederländischsprachigen Wikipedia. Solche Übersetzungen sind in der entsprechenden Implementation von \javaid{WikiConfiguration} berücksichtigt (\rr{transform:analyse}). 
  
  \item[\wikitext{\{\{DISPLAYTITLE:\\ldots\}\}}] definiert einen alternative Form des Titels zur Anzeige. MediaWiki lässt solche alternativen Titel nur sehr eingeschränkt zu, zum Beispiel um Titel mit einem Kleinbuchstaben am Anfang zu erlauben, wie zum Beispiel \wwterm{iPod}\footnote{iPod ist ein eingetragenes Markenzeichen der Apple Computer, Inc.} für die Seite \wikipage{IPod} oder \wwterm{c't} für die Seite \wikipage{C't}. Dies ist notwendig, da MediaWiki für den ersten Buchstaben des Seitennamens Großschreibung erzwingt. Auch dieses \nom{Magic Word} kann lokalisiert werden, zum Beispiel als \wikitext{\{\{AFFICHERTITRE:\\ldots\}\}} im Französischen.
  
  \item[\wikitext{\{\{DEFAULTSORT:\ldots\}\}}] gibt an, welcher \lingo{Sort-Key} bei der Einordnung der Seite in Kategorien verwendet werden soll, wenn im Kategorisierungslink kein \lingo{Sort-Key} angegeben ist. Alternative Formen sind \wikitext{\{\{DEFAULTSORTKEY:\ldots\}\}} und \wikitext{\{\{DEFAULTCATEGORYSORT:\ldots\}\}}, Lokalisierungen sind zum Beispiel \wikitext{\{\{STANDAARDSORTERING:\ldots\}\}} im Niederländischen und \wikitext{\{\{CLEFDETRI:\ldots\}\}} im Französischen.
\end{description}

Zur Nutzung dieser \nom{Magic Words} siehe \rr{sec:analyzer:terme}.

\section{\nospell{Parser-Functions und Extension-Tags}}
\label{sec:wikitext:extensions}
MediaWiki bietet Schnittstellen, über die das Wiki-Text Markup erweitert werden kann. Es gibt im Wesentlichen zwei Arten von solchen Erweiterungen: \lingo{Extension-Tags}\index{Extension-Tags} definieren XML-artige Tag-Strukturen der Form \wikitext{<mytag>...</mytag>}, \lingo{Parser-Functions} definieren Vorlagen-artige Strukturen der Form \wikitext{\{\{\#mytag:argument\}\}}. 

Solche speziellen Syntax-Erweiterungen werden in der Regel von Erweiterungen verwendet, die dynamische Inhalte zum Beispiel aus einer Datenbank in einem Wiki-Artikel anzeigen.

