Zum Inhalt springen

Hilfe:Lua/Links

aus Wikipedia, der freien EnzyklopÀdie

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

Wie bei Wikisyntax können Wiki-Seiten sowohl ĂŒber URL wie auch ĂŒber den Seitenbezeichner adressiert werden.

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 | Quelltext 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.newBatch( { texts }, namespace )
Erschafft eine Sammelabfrage von Seitentiteln.
Das erste Argument vom Typ table enthĂ€lt ausschließlich strings als Seitentitel. Numerische Argumente wie bei title.new() sind unzulĂ€ssig.
Das zweite Argument vom Typ string enthĂ€lt optional einen Standard-Namensraumbezeichner fĂŒr die angegebenen Seitentitel. Wenn in einem Element von texts kein Namensraum enthalten ist, wird namespace benutzt. namespace kann alles sein, was unter mw.site.namespaces möglich ist.[1]
ZurĂŒckgegeben wird ein Objekt, das zwei Methoden unterstĂŒtzt:
  • lookupExistence() fĂŒllt die Eigenschaften exists, contentModel, id und isRedirect des title-Objekts der jeweiligen Seiten.
  • getTitles() gibt eine table der title-Objekte der abgefragten Seitentitel zurĂŒck. UngĂŒltige Seitentitel bekommen den Wert nil zugewiesen.
Diese Funktion ist „teuer“,[2] jedoch nur einmal je 25 abgefragter Seitentitel.
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.

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.

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)
.talkNsText
Namensraum-Name der Diskussionsseite (GegenstĂŒck zur Inhaltsseite)
.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.
.isDisambiguationPage
true – wenn die Seite als BegriffsklĂ€rungsseite deklariert 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.
.categories
sequence table mit Kategorietiteln
Diese Funktion ist „teuer“.[2]
.content
Zeichenkette mit dem unverÀnderten Quelltext (Wikitext oder andere Ressource) des title-Objekts; bzw. nil, wenn die Seite nicht existiert.
.contentModel
„Content Model“ fĂŒr diese Seite, als Zeichenkette: css, javascript, Scribunto (Modul), wikitext usw.
.protectionLevels
mRestrictions sequence table
Diese Funktion ist „teuer“.[2]
cascadingProtection
Kaskadierender Seitenschutz
Objekt mit Komponenten:
  • restrictions
  • sources
Ohne Kaskadenschutz sind beide Komponenten nil
Diese Funktion ist „teuer“.[2]
.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.
.redirectTarget
Ziel einer Weiterleitungsseite
title-Objekt
.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 | Quelltext 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; veraltet, seit Herbst 2024 .content

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, oder andere Mechanismen zum Abfangen von Fehlersituationen.

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.

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 von query-Zuweisungen 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 | Quelltext 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
  1. 1 2 3 4 5 Namensraum-Nummer .id oder einer der Namen; zurzeit aber nicht die table selbst.
  2. 1 2 3 4 5 6 7 8 Maximal 500 Abfragen pro Gesamt-Seite.