Diese Hilfeseite stellt für Lua-Programmierer die Unterstützung bei Weblinks und Wikilinks durch Scribunto-Standardbibliotheken dar.

Es sind

  • mw.title für Wikilinks und Analyse von Seiten
  • mw.uri für syntaktisch korrekte URL

mw.title Bearbeiten

Scribunto (englisch)
Quellcode

Das title-Objekt repräsentiert einen Seitennamen, vor allem aber die Eigenschaften der entsprechenden Wiki-Seite.

Es sind etliche Informationen über die aktuelle (oberste) Seite und auch jede andere im Projekt verfügbar: Titel, Namensraum, Existenz, bis zum Inhalt.

Bibliotheksfunktionen und Konstruktoren Bearbeiten

mw.title.getCurrentTitle()
title-Objekt für die aktuelle (oberste) Seite.
mw.title.makeTitle( namespace, title, fragment, interwiki )
title-Objekt für die spezifizierte Seite.
namespace kann alles sein, was unter mw.site.namespaces möglich ist.[1]
title ist natürlich eine Pflichtangabe.
Ein nachgestelltes Fragment und eine Interwiki-Präfix-Gruppe (Sprache, Projekt) sind optional.
Diese Funktion ist „teuer“.[2]
mw.title.new( text, namespace )
mw.title.new( id )
Erschafft ein neues title-Objekt.
Wenn das erste Argument vom Typ number ist und somit für die id entsprechend curid generiert wird, ist der Rückgabewert nil, wenn eine solche Seite nicht existiert.
Ein Seitenname text muss erlaubt sein; darf insbesondere kein Prozent-Encoding enthalten.
Diese Funktion ist „teuer“,[2] sofern es sich nicht um die aktuelle Seite im Sinne von .getCurrentTitle() handelt und diese Seite auch nicht bereits geladen wurde.
Wenn das erste Argument vom Typ string ist und somit ein text übergeben wurde, wird bei gültigem Wert selbst dann ein Objekt zurückgegeben, wenn diese Seite nicht existiert.
  • Wenn im text kein Namensraum enthalten ist, wird namespace benutzt. namespace kann alles sein, was unter mw.site.namespaces möglich ist.[1]
  • Wenn text kein syntaktisch gültiger Seitenname ist, ist der Rückgabewert nil.
mw.title.equals( a, b )
true – wenn beide title-Objekte die gleiche Seite darstellen.
Fragmente werden beim Vergleich ignoriert.
mw.title.compare( a, b )
Rückgabewerte sind -1, 0, oder 1, um anzuzeigen, ob title-Objekt a kleiner, gleich oder größer ist als title-Objekt b. Zunächst werden die Nummern der Namensräume verglichen, danach ggf. die (normalisierten) Seitentitel.

title-Objekt Bearbeiten

Wie bei jedem Objekt kann, nachdem es erstellt wurde, das von ihm repräsentierte Gebilde näher untersucht werden.

Mit relationalen Operatoren können title-Objekte verglichen werden.

Eigenschaften Bearbeiten

Die meisten Eigenschaften lassen sich nur lesen, falls nicht anders angegeben (fragment).

.id
curid oder 0, wenn die Seite nicht existiert.
.interwiki
Interwiki-Präfix-Gruppe (Sprache, Projekt), oder "".
.namespace
Namensraum-Nummer.
.fragment
Das fragment, oder "".
Kann gesetzt werden.
.nsText
Der kanonische Name des Namensraums
.subjectNsText
Namensraum-Name der Inhaltsseite (Gegenstück zur Diskussionsseite)
.text
Seitentitel, ohne Namensraum und Interwiki-Präfix
.prefixedText
Seitentitel, mit Namensraum und Interwiki-Präfix
.fullText
Seitentitel, mit Namensraum und Interwiki-Präfix und Fragment.
.rootText
Auf einer Unterseite der Titel der obersten Basis-Seite; .text ansonsten.
.baseText
Auf einer Unterseite der Titel der unmittelbar übergeordneten Basis-Seite; .text ansonsten.
.subpageText
Auf einer Unterseite der Titel des letzten Namens-Elementes; .text ansonsten.
.canTalk
true wenn diese Seite eine Diskussionsseite haben kann (NR≥0).
.exists
true – wenn diese Seite existiert.
Bei Dateien und Media: ist dies ein Alias für .file.exists und wird entsprechend bewertet.
Ansonsten geht dies nicht erneut in die Zählung „teurer“[2] Funktionen ein.
Bei Bildung durch .getCurrentTitle() existiert die Seite immer (es sei denn, sie würde soeben erst mit dem Speichern erstellt); bei mw.title.makeTitle() wird dies erst ermittelt.
.file
table, falls in den Namensräumen der Mediendateien, sonst false.
  • Dies ist doppelt teuer,[2] weil auch auf Commons nachgefragt werden könnte.
Komponenten:
  • .exists
    Wenn nicht existent, sind alle weiteren Komponenten nil.
  • .height
    Höhe in Pixeln; falls paged media, dann der ersten Seite.
  • .mimeType
    MIME type.
  • .pages
    • table, falls paged media; darin eine table pro Seite, mit Höhe und Breite.
  • .size
    Größe in Bytes.
  • .width
    Breite in Pixeln; falls paged media, dann der ersten Seite.
.fileExists

. Obsolet; jetzt .file.exists

.getFileInfo()
abgelöst durch .file
.isContentPage
true – wenn es ein Inhalts-Namensraum ist.
.isExternal
true – wenn es einen Interwiki-Präfix gibt.
.isLocal
true – wenn es ein Projekt gleicher Art ist.
Für die deutschsprachige Wikipedia ist jede Wikipedia „lokal“, Wiktionary und Meta sind es nicht.
Mit einem lokalen Projekt kann über Interlanguage verbunden werden.
.isRedirect
true – wenn diese Seite als Weiterleitung gespeichert ist.
.isSpecialPage
true – wenn diese Seite eine Spezialseite sein kann (wenn sie im Namensraum Spezial: liegt und es ein gültiger Alias ist)
.isSubpage
true – wenn dies eine Unterseite einer anderen ist.
.isTalkPage
true – wenn dies eine Diskussionsseite ist.
.contentModel
Content Model“ für diese Seite, als Zeichenkette: css, javascript, Scribunto (Modul), wikitext.
.protectionLevels
mRestrictions array
.pageLang
mw.language-Objekt zur Seiteninhaltssprache.
In mehrsprachigen Wikis können bestimmten Seiten eigene Sprachen zugewiesen sein; ansonsten ist für alle Seiten deren Sprache zunächst gleich der Projektsprache.
Bei Seiten, deren „Content Model“ nicht wikitext ist, also insbesondere Programmiersprachen, ist meist en die Seitensprache. Dadurch wird ggf. lateinische Schrift von links nach rechts die Vorgabe.
.basePageTitle
Wirkungsgleich zu mw.title.makeTitle( title.namespace, title.baseText )
.rootPageTitle
Wirkungsgleich zu mw.title.makeTitle( title.namespace, title.rootText )
.talkPageTitle
Wirkungsgleich zu mw.title.makeTitle( mw.site.namespaces[title.namespace].talk.id, title.text )
nil wenn es zu diesem title keine Diskussionsseite geben kann.
.subjectPageTitle
Wirkungsgleich zu mw.title.makeTitle( mw.site.namespaces[title.namespace].subject.id, title.text )

Methoden (Funktionen) Bearbeiten

:isSubpageOf( title )
Parameter: title, ein title-Objekt
Rückgabe: true – wenn das aktuelle Objekt eine Unterseite von title ist.
:inNamespace( namespace )
Parameter: namespace. namespace kann alles sein, was unter mw.site.namespaces möglich ist.[1]
Rückgabe: true – wenn das aktuelle Objekt im angegebenen Namensraum liegt.
:inNamespaces( ns1, ns2, … )
Parameter: mehrere Namensräume
Rückgabe: true – wenn das aktuelle Objekt in einem der angegebenen Namensräume liegt.
:hasSubjectNamespace( namespace )
Parameter: namespace. namespace kann alles sein, was unter mw.site.namespaces möglich ist.[1]
Rückgabe: true – wenn diese Seite selbst oder ihre Diskussionsseite im Inhalts-Namensraum namespace liegt.
:subPageTitle(text)
Wirkungsgleich zu mw.title.makeTitle( title.namespace, title.text .. "/" .. text )
:partialUrl()
Parameter: keine
Rückgabe: Die Eigenschaft .text mit dem URL-Encoding wie in einer URL.
:localUrl( query )
Parameter: Die optionale query wie .fullUrl()
Rückgabe: URL des Objekts relativ zur Projekt-Domain
:fullUrl( query, proto )
Rückgabe: Volle URL zum aktuellen Objekt.
Parameter: Die optionale query gibt weitere URL-Parameter an und kann ein table k=v sein oder eine Zeichenkette.
proto kann einen der folgenden Werte annehmen:
  • "relative" (Vorgabe des optionalen Wertes)
  • "http"
  • "https"
  • "canonical"
:canonicalUrl( query )
Parameter: Die optionale query wie .fullUrl()
Rückgabe: Kanonische URL des Objekts (standardisiertes Format mit Protokoll)
:getContent()
Parameter: keine
Rückgabe: Zeichenkette mit dem unveränderten Quelltext (Wikitext oder andere Ressource) des title-Objekts oder nil, wenn die Seite nicht existiert.
Scribunto (englisch)
Quellcode

Diese Methoden sind gut geeignet zur Synthese von URL und zur Analyse formal korrekter URL.

Bei unbekannt im Wikitext vorgefundenen Zeichenketten, die eine URL sein sollen, empfiehlt sich vorher eine vorsichtige Analyse auf formale Zulässigkeit mit URLutil.

mw.uri.encode( s, enctype )
Encoding der Zeichenkette s (Prozent).
Der optionale enctype (Vorgabe: "QUERY") kann folgende Werte haben:
  • "QUERY" – Leerzeichen als + für query-Komponenten.
  • "PATH" – Leerzeichen als %20
  • "WIKI" – Leerzeichen als _ (dies ist nicht vollständig umkehrbar, weil auch vorhandene _ ununterscheidbar werden)
mw.uri.decode( s, enctype )
Prozent-Dekodierung von s
Der optionale enctype (Vorgabe: "QUERY") kann folgende Werte haben:
  • "QUERY" – ersetze + durch Leerzeichen
  • "PATH" – Keine besondere Behandlung potentieller Leerzeichen.
  • "WIKI" – ersetze _ durch Leerzeichen
mw.uri.anchorEncode( s )
Encoding von s, so dass dieser als Fragment in einer Wiki-URL benutzt werden kann (Punkt statt Prozent).
mw.uri.buildQueryString( table )
Wandle den Inhalt einer table in eine Folge von Zuweisungen k=v und verkette durch & zu einer Zeichenkette.
Die k in table sollen Zeichenketten sein.
Die v in table können sein: string, number, sequence table für mehrfaches Auftreten, false für „leer“.
mw.uri.parseQueryString( s )
Wandle eine Zeichenkette s um in eine table und löse die &k=v in Elemente der table.
  • Leere Zuweisungen &k= erhalten den Wert false.
  • Wiederholte Zuweisungen mit gleichem k werden als sequence table abgelegt.
  • Alle anderen v werden Zeichenketten.
mw.uri.localUrl( page, query )
uri-Objekt für die lokale URL (bezogen auf die Domain) einer Wiki-Seite page oder einfache Zeichenkette.
  • Optional mit query als fertige Zeichenkette oder table mit Spezifikationen k=v.
mw.uri.fullUrl( page, query )
uri-Objekt für die vollständige URL (aber ohne Protokoll) einer Wiki-Seite page oder einfache Zeichenkette.
  • Optional mit query als fertige Zeichenkette oder table mit Spezifikationen k=v.
mw.uri.canonicalUrl( page, query )
uri-Objekt für die kanonische URL (mit aktuellem Protokoll) einer Wiki-Seite page oder einfache Zeichenkette.
  • Optional mit query als fertige Zeichenkette oder table mit Spezifikationen k=v.
mw.uri.new( s )
mw.uri.new( table )
uri-Objekt bilden durch Parsen einer Zeichenkette s oder Befüllen der Felder in table.
mw.uri.validate( s )
mw.uri.validate( table )
Überprüfe die Verwendbarkeit einer Zeichenkette s oder der Felder in table für mw.uri.new().
boolean für Verwendbarkeit, Zeichenkette mit Fehlermeldung sonst.

uri-Objekt Bearbeiten

Wie bei jedem Objekt kann, nachdem es erstellt wurde, das von ihm repräsentierte Gebilde näher untersucht werden.

Felder, von denen einige oder alle nil sein können:

.protocol
(string) protocol/scheme
.user
(string) user
.password
(string) password
.host
(string) host name
.port
(number) port
.path
(string) path
.query
(table) wie aus mw.uri.parseQueryString
.fragment
(string) fragment.

Außerdem sind die nachstehenden Eigenschaften vorhanden:

.userInfo
(string) user and password
.hostPort
(string) host and port
.authority
(string) user, password, host, and port
.queryString
(string) version of the query table
.relativePath
(string) path, query string, and fragment
  • tostring() ergibt den (kanonischen) Text der URI.

An Methoden sind vorhanden:

:parse( s )
Werte aus der Zeichenkette s in das Objekt einfügen.
Bestehende Werte, die nicht in s vorkommen, bleiben erhalten.
:clone()
Kopie des Objekts
:extend( parameters )
parameters ist eine table, deren Wertzuweisungen den bestehenden in der Query-Komponente hinzugefügt werden oder sie überschreiben.

Anwendungsbeispiel Bearbeiten

Die nachstehende Funktion versucht ein Link auf die Versionsgeschichte zurückzugeben, wobei die Seite über die Seitenkennnummer curid definiert ist. Programmierfehler und ungültige Zahlenwerte werden erkannt. Beide auf dieser Seite dargestellten Bibliotheken/Objekte werden verwendet.

function versionen( curid )
    local r
    if type( curid ) == "number" and curid > 0 then
        local page = mw.title.new( curid )
        if page then
            local uri = mw.uri.fullUrl( page.prefixedText, 
                                        { action = "history" } )
            r = string.format( "[%s Versionen]", tostring( uri ) )
        else
            r = string.format( "Seite %d fehlt", curid )
        end
    else
        r = "*BAD curid*"
    end
    return r
end

Anmerkungen Bearbeiten

  1. a b c d Namensraum-Nummer .id oder einer der Namen; zurzeit aber nicht die table selbst.
  2. a b c d Maximal 500 Abfragen pro Gesamt-Seite.