Modul:Quelleninformationen
Die Dokumentation für dieses Modul kann unter Modul:Quelleninformationen/Doku erstellt werden
--[[
Lua-Modul zur Darstellung von Quellenangaben eines Artikels
-----------------------------------------------
Dieses Modul fragt alle *Unterobjekte* des aktuellen Artikels ab, die dem Typ „Quellenverzeichnis“ entsprechen.
Diese enthalten strukturierte Informationen wie:
- Publikation (z. B. ein Quellenbuch)
- Seitenzahl(en) innerhalb dieser Publikation
Voraussetzung ist, dass für einen Artikel Unterobjekte vom Typ `Quellenverzeichnis` existieren,
die über `-Hat Unterobjekt::Seitentitel` mit dem Hauptartikel verknüpft sind.
Verwendung:
local QuellenModul = require('Modul:Quelleninformationen')
QuellenModul.getQuellen({ args = { Pagename = "Diamantpfeil" } })
Gibt einen HTML-String mit aufbereiteten Quelleninformationen zurück.
--]]
local p = {} -- p steht für das Lua-"package", in dem alle Funktionen gespeichert werden
function p.getQuellen(frame)
-- Schritt 1: Hole den Artikelnamen aus dem Frame-Argument
local arg = frame.args['Pagename']
if arg == nil then return nil end -- Falls kein Artikeltitel angegeben ist, abbrechen
local returnString = "" -- Ergebnis-String für Ausgabe
-- Schritt 2: Finde alle Unterobjekte vom Typ „Quellenverzeichnis“, die zu diesem Artikel gehören
-- Dazu verwenden wir zwei semantische Bedingungen:
-- * [[Subobject Type::Quellenverzeichnis]] → nur Quellen-Unterobjekte
-- * [[-Hat Unterobjekt::Artikelname]] → die zugehörig zum angegebenen Artikel sind
-- `|?=#|format=array` → liefert nur die Seitennamen als Array, keine weiteren Daten
local queryResult = mw.smw.ask(
'[[Subobject Type::Quellenverzeichnis]][[-Hat Unterobjekt::' .. arg .. ']]' ..
'|?=#|limit=1999|format=array|'
)
-- Falls keine Treffer, Rückgabe bleibt leer
if not queryResult then return nil end
-- Schritt 3: Für jedes gefundene Unterobjekt Details abfragen
local i = 1
while i <= #queryResult do
local subobjectTitle = queryResult[i][1] -- Name des Unterobjekts (z. B. „Diamantpfeil#Quellenverzeichnis zu X“)
-- Zweite Abfrage: Holen der Properties des Unterobjekts selbst
local queryQuelle = mw.smw.ask(
string.format('[[%s]]|?Quelleninformationen|?Publikation|mainlabel=-', subobjectTitle)
)
-- Sicherheit: Nur verarbeiten, wenn tatsächlich etwas zurückkam
if queryQuelle and queryQuelle[1] then
-- Ausgabe beginnt mit dem Publikationstitel
returnString = returnString .. (queryQuelle[1]['Publikation'] or "Unbekannt") .. ":"
-- Seitenangaben verarbeiten
local seiten = queryQuelle[1]['Quelleninformationen']
if not seiten then
returnString = returnString .. "(ohne Angaben)" -- Wenn keine Seitenzahl vorhanden
elseif type(seiten) == "table" then
-- Falls mehrere Seiten (z. B. durch Mehrfachzuweisung)
returnString = returnString .. " : "
for _, seite in ipairs(seiten) do
returnString = returnString .. seite .. ","
end
else
-- Einzelne Seitenzahl
returnString = returnString .. " " .. seiten
end
returnString = returnString .. "<br>"
end
i = i + 1
end
return returnString -- HTML-Ausgabe fertig
end
return p