Kategorie-Metadaten (strukturierte Darstellung) Bearbeiten

Diese Seite dokumentiert den Aufbau und die Verwendung von Kategorie-Metadaten im Wikonia-System. Die Informationen basieren auf einer zentralen JSON-Datei, die über ein Lua-Modul verarbeitet und auf Kategorieseiten angezeigt wird.

Ziel Bearbeiten

Kategorien sollen mit einer konsistenten Infobox versehen werden, die Beschreibung, Zugehörigkeit und verwandte Themen enthält. Die Daten werden zentral gepflegt, um Redundanz und manuelle Formatierungen zu vermeiden.

Bestandteile Bearbeiten

Modul:KategorieDaten.json Bearbeiten

Diese Datei enthält alle Kategoriedaten in strukturierter, maschinenlesbarer Form.

Pflichtfelder
  • description_de: Beschreibung der Kategorie auf Deutsch
  • description_en: Beschreibung der Kategorie auf Englisch
Optionale Felder
  • icon: Dateiname eines Icons, z. B. Wrench.svg
  • parent: Name einer übergeordneten Kategorie
  • related: Liste verwandter Kategorien (als Array)
  • namespace: Zugehöriger Namensraum (z. B. Help) oder false
  • status: Status der Kategorie, z. B. active, deprecated, draft
  • visible: Sichtbarkeit für Benutzer (Standard: true)
  • note_de: Redaktioneller Hinweis (Deutsch)
  • note_en: Redaktioneller Hinweis (Englisch)

Modul:KategorieInfo Bearbeiten

Das Lua-Modul erzeugt automatisch eine Infobox auf Basis der obigen JSON-Daten.

Funktionen:

  • Erkennt die aktuelle Kategorieseite automatisch
  • Ermittelt die Sprache des Benutzers (oder nutzt die Seiteninhaltssprache)
  • Lädt die passenden Texte aus der JSON-Datei
  • Erzeugt eine formatierte Box mit:
    • Titel (inkl. Icon)
    • Beschreibung
    • Übergeordnete Kategorie (falls definiert)
    • Verwandte Kategorien (falls vorhanden)
    • Hinweise (optional)

Einbindung Bearbeiten

Auf Kategorieseiten reicht folgende Zeile ganz oben:

{{#invoke:KategorieInfo|show}}

Pflege Bearbeiten

  • Die Datei Modul:KategorieDaten.json darf nur gültiges JSON enthalten.
  • Änderungen an der Datei wirken sofort auf alle betroffenen Kategorieseiten.
  • Die Bearbeitung ist nur für Administratoren (bzw. Interface-Admins) erlaubt.
  • Das Modul ist bewusst so gestaltet, dass fehlende Felder toleriert werden.

Erweiterungsmöglichkeiten Bearbeiten

  • Lokalisierung weiterer Felder (z. B. status_de, status_en)
  • Redaktionelles Gadget zum Editieren der JSON über ein Formular
  • Spezialseite mit tabellarischer Übersicht aller Kategorien
  • Visuelle Icons oder Farbcodes je nach Status

local jsonLoader = require('Modul:JsonLoader')
local p = {}

function p.show(frame)
	-- JSON laden
	local data, err = jsonLoader.load('Modul:KategorieDaten.json')
	if not data then
		return '<div class="kategoriebox fehler">' .. err .. '</div>'
	end

	-- aktuelle Seite ermitteln
	local title = mw.title.getCurrentTitle()
	local name = title.text

	-- Sprachwahl
	local lang = mw.language.getContentLanguage().code
	local userLang = frame:callParserFunction("int", "lang") or lang

	-- passenden Datensatz holen
	local info = data[name]
	if not info then
		local fallbackMessage = {
			de = "⚠️ Diese Kategorie ist derzeit nicht im zentralen Kategoriedaten-Modul ([[Modul:KategorieDaten.json]]) erfasst.<br>Bitte ergänze sie, um hier eine Beschreibung anzeigen zu lassen.",
			en = "⚠️ This category is not yet listed in the central category metadata module ([[Module:KategorieDaten.json]]).<br>Please add it to display information here."
		}
		local msg = fallbackMessage[userLang] or fallbackMessage[lang] or fallbackMessage["en"]
		return '<div class="kategoriebox fehler">' .. msg .. '</div>'
	end

	-- Hilfsfunktion für Sprachfelder
	local function getField(key)
		return info[key .. "_" .. userLang] or info[key .. "_" .. lang] or info[key .. "_en"] or ""
	end

	-- Darstellung vorbereiten
	local icon = info.icon and string.format('[[File:%s|32px|class=icon]] ', info.icon) or ""
	local description = getField("description")
	local note = getField("note")
	local parent = info.parent and ("→ [[:Kategorie:" .. info.parent .. "|" .. info.parent .. "]]") or ""
	local related = ""

	if info.related and type(info.related) == "table" then
		local links = {}
		for _, r in ipairs(info.related) do
			table.insert(links, "[[" .. r .. "]]")
		end
		related = "<div class='kategorie-verwandt'><b>See also:</b> " .. table.concat(links, ", ") .. "</div>"
	end

	-- HTML-Box zusammenbauen
	local box = "<div class='kategoriebox'>"
	box = box .. "<div class='kategorie-title'>" .. icon .. "'''" .. name .. "'''</div>"
	box = box .. "<div class='kategorie-desc'>" .. description .. "</div>"
	if parent ~= "" then
		box = box .. "<div class='kategorie-parent'>" .. parent .. "</div>"
	end
	if related ~= "" then
		box = box .. related
	end
	if note ~= "" then
		box = box .. "<div class='kategorie-hinweis'>" .. note .. "</div>"
	end
	box = box .. "</div>"

	return box
end

return p