Modul:Quelleninformationen: Unterschied zwischen den Versionen

Aus Splitterwiki
Zur Navigation springen Zur Suche springen
(Quelleninformationen)
Keine Bearbeitungszusammenfassung
 
(3 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
--[[
--[[
Lua Modul zum zuverlässigen darstellen von Artikelquellen
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.


local p = {} --local p = {} -- p steht für Paket (engl. package)
Verwendung:
  local QuellenModul = require('Modul:Quelleninformationen')
  QuellenModul.getQuellen({ args = { Pagename = "Diamantpfeil" } })


function p.getQuellen( frame )
Gibt einen HTML-String mit aufbereiteten Quelleninformationen zurück.
--teste ob argument ungleich nichts
--]]
 
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']
local arg = frame.args['Pagename']
if arg == nil then return nil end
if arg == nil then return nil end -- Falls kein Artikeltitel angegeben ist, abbrechen
local returnString = ""
 
local queryResult = mw.smw.ask('[[Subobject Type::Quellenverzeichnis]][[-Hat Unterobjekt::'.. arg .. ']]|?=#|limit=1999|format=array|')
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
local i = 1
while i <= table.getn(queryResult)
while i <= #queryResult do
do
local subobjectTitle = queryResult[i][1] -- Name des Unterobjekts (z. B. „Diamantpfeil#Quellenverzeichnis zu X“)
local queryQuelle = mw.smw.ask('[[' .. queryResult[i][1] ..']]|?Quelleninformationen|?Publikation|mainlabel=-')
 
returnString = returnString .. queryQuelle[1]['Publikation'] .. ":"
-- Zweite Abfrage: Holen der Properties des Unterobjekts selbst
if (queryQuelle[1]['Quelleninformationen']) == nil then -- fehlende Angaben in der Quelle
local queryQuelle = mw.smw.ask(
returnString = returnString .."(ohne Angaben)"
string.format('[[%s]]|?Quelleninformationen|?Publikation|mainlabel=-', subobjectTitle)
elseif(type(queryQuelle[1]['Quelleninformationen']) == "table") then -- Tabelle ein loop mehr
)
local n = 1
 
returnString = returnString .. " : "  
-- Sicherheit: Nur verarbeiten, wenn tatsächlich etwas zurückkam
while n <= table.getn(queryQuelle[1]['Quelleninformationen'])
if queryQuelle and queryQuelle[1] then
do
-- Ausgabe beginnt mit dem Publikationstitel
returnString = returnString .. queryQuelle[1]['Quelleninformationen'][n] ..","
returnString = returnString .. (queryQuelle[1]['Publikation'] or "Unbekannt") .. ":"
n = n +1
 
end
-- Seitenangaben verarbeiten
else -- einfach nur text
local seiten = queryQuelle[1]['Quelleninformationen']
returnString = returnString .. " Seite: " .. 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 .. "&#32;" .. seiten
end
end
returnString = returnString .. "<br>"
returnString = returnString .. "<br>"
i = i +1
end
end
    return returnString
 
i = i + 1
end
 
return returnString -- HTML-Ausgabe fertig
end
end


return p
return p

Aktuelle Version vom 16. Mai 2025, 09:39 Uhr

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 .. "&#32;" .. seiten
			end

			returnString = returnString .. "<br>"
		end

		i = i + 1
	end

	return returnString -- HTML-Ausgabe fertig
end

return p