Modul:Queries: Unterschied zwischen den Versionen

Aus FürthWiki

(query anstelle queryl)
(Kleinkram)
Zeile 1: Zeile 1:
local p = {}
local p = {}
local c = require("Module:Common")
local com = require("Module:Common")
local s = require("Module:String")


function p.GetValues(frame)
function p.GetValues(frame)
-- Gets the values from an attribute on a page to be called from Wikitext by #invoke
-- Gets the values from an attribute on a page to be called from Wikitext by #invoke
-- mw.log("GetValues(frame)")
-- mw.logObject(frame)
local page = frame.args.page or ""
local page = frame.args.page or ""
local attr = frame.args.attr or ""
local attr = frame.args.attr or ""
Zeile 11: Zeile 12:


local values = p.getValues(page, attr, plain)
local values = p.getValues(page, attr, plain)
local vallist = s.list(values, sep)
local vallist = table.concat(values, sep)
-- mw.log("GetValues(frame)=" .. vallist)
-- mw.logObject(vallist)
-- mw.log("frame=")
-- mw.logObject(frame)
return vallist
return vallist
end
end
Zeile 20: Zeile 19:
function p.getValues(page, attr, plain)
function p.getValues(page, attr, plain)
-- Gets the values from an attribute on a page to be called inside lua
-- Gets the values from an attribute on a page to be called inside lua
-- mw.log("getValues(" .. page .. ", " ..  attr .. ", " ..  tostring(plain) .. ")")
local query = "[[:" .. page .."]]|?" .. attr -- selektiert nur die Seite selbst
local query = "[[:" .. page .."]]|?" .. attr -- selektiert nur die Seite selbst
if plain then
if plain then
Zeile 28: Zeile 28:
local askResult = mw.smw.ask(query)
local askResult = mw.smw.ask(query)
local values = {}
local values = {}
if not c.isEmpty(askResult) then
if not com.isEmpty(askResult) then
values = askResult[1][attr] -- Erste Ergebnis-Zeile, attr-Spalte
values = askResult[1][attr] -- Erste Ergebnis-Zeile, attr-Spalte
if type(values) ~= "table" then -- Immer als table rückgeben, auch wenn keine (dann umformen)
if type(values) ~= "table" then -- Immer als table rückgeben, auch wenn keine (dann umformen)
Zeile 34: Zeile 34:
end
end
end
end
-- mw.log("getValues(" .. page .. "," ..  attr .. ")=")
-- mw.logObject(values)
-- mw.log("query=" .. query)
-- mw.log("askResult=")
-- mw.logObject(askResult)
-- mw.log("values=")
-- mw.logObject(values)
-- mw.logObject(values)
-- mw.log("type(values[1])=" .. type(values[1]))
return values
return values
end
end


function p.getPages(query, plain)
function p.getPages(query, plain)
-- mw.log("getPages(" .. query .. ", " ..  tostring(plain) .. ")")
if plain then
if plain then
query = query .. "|?#-"
query = query .. "|?#-"
Zeile 52: Zeile 46:


local askResult = mw.smw.ask(query)
local askResult = mw.smw.ask(query)
local table = {}
local values = {}
if not c.isEmpty(askResult) then
if not com.isEmpty(askResult) then
for i = 1, #askResult do
for _, v  in pairs(askResult) do
table[i] = askResult[i][1] -- i-te Zeile, 1. Spalte
table.insert(values, v[1]) -- jede Zeile, 1. Spalte
end
end
end
end
-- mw.log("getPages()=")
-- mw.logObject(values)
-- mw.logObject(table)
return values
-- mw.log("queryl=")
-- mw.logObject(queryl)
-- mw.log("askResult=")
-- mw.logObject(askResult)
return table
end
end


return p
return p

Version vom 6. Oktober 2025, 09:11 Uhr

Dieses Modul enthält Abfragen für semantic Mediawiki, welche nicht oder nur sehr umständlich mit {{#show}} oder {{#ask}} realisiert werden können.

getValues() / GetValues()

  • lua: getValues(page, attr, plain) gibt Werte des Attributs attr der Seite page (immer) als table mit Strings zurück.
  • Wikitext: GetValues(frame) gibt Werte des Attributs attr der Seite page als durch Semikolon (optional anderen Wert) getrennte Werte als String zurück.

Die Funktion GetValues() ist ähnlich {{#show}}, welches aber leider nur durch Komma getrennte Werte zurückgibt. Das ist ein Problem, denn in diesem Wiki werden Werte durch Semikolon getrennt da das Komma in allen Formularen als Satzzeichen gehandhabt wird.

Parameter

Variable Beschreibung Typ Required/Optional Default
page Seite, auf welcher sich das Attribut befindet string required
attr Name des Attributs, welches ausgelesen werden soll string required
sep Separator (nur bei GetValues()) string optional, default=";"
plain Nur-Text-Flag. Rückgabe-Wert ohne HTML. boolean optional, default=false

Test

lua Wikitext Ergebnis
getValues("Rathaus", "StraßeHnr") -{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|GetValues|page=Rathaus|attr=StraßeHnr}}- -Königstraße 86;Königstraße 88-
getValues("Rathaus", "BlaBla") -{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|GetValues|page=Rathaus|attr=BlaBla}}- -- (lua:nil bzw. Wiki:"nix")
getValues("Rathaus", "Bahnlinie") -{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|GetValues|page=Rathaus|attr=Bahnlinie}}- -- (lua:nil bzw. Wiki:"nix")
getValues("RathausBlaBla", "StraßeHnr") -{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|GetValues|page=RathausBlaBla|attr=StraßeHnr}}- -- (lua:nil bzw. Wiki:"nix")
getValues("Rathaus", "Hausnummer") -{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|GetValues|page=Rathaus|attr=Hausnummer}}- -86;88-
getValues("Rathaus", "Seite") -{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|GetValues|page=Rathaus|attr=Seite}}- -Rathaus-
getValues("Rathaus", "Seite", true) -{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|GetValues|page=Rathaus|attr=Seite|plain=Ja}}- -Rathaus-
getValues("Rathaus", "StraßeHnr") -{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|GetValues|page=Rathaus|attr=StraßeHnr}}- -Königstraße 86;Königstraße 88-

getPages()

Gibt Seiten von der Query query als table zurück.

Parameter

Variable Beschreibung Typ Required/Optional Default
query Abfrage string required
plain Nur-Text-Flag. Rückgabe-Wert ohne HTML. boolean optional, default=false

uniFilter() / UniFilter()

Gibt für eine Attribut-Query einen universellen Filter zurück. Der Suchbegriff wird gesucht:

  1. als Ganzes
  2. als Volltextsuche
  3. wenn Semikolons vorhanden, dann außerdem als Liste von Einzelbegriffen
  4. wenn Suchtext leer, Vorhandensein irgendeines Wortes

Beispiele:

  • {{#invoke:Queries|UniFilter|Wort1}} bzw. uniFilter("Wort1") ergibt Skriptfehler: Die Funktion „UniFilter“ ist nicht vorhanden.
  • {{#invoke:Queries|UniFilter|Wort1 Wort2 Wort3}} bzw. uniFilter("Wort1 Wort2 Wort3") ergibt Skriptfehler: Die Funktion „UniFilter“ ist nicht vorhanden.
  • {{#invoke:Queries|UniFilter|Wort1;Wort2;Wort3}} bzw. uniFilter("Wort1;Wort2;Wort3") ergibt Skriptfehler: Die Funktion „UniFilter“ ist nicht vorhanden.
  • {{#invoke:Queries|UniFilter|Wort1;Wort2;}} bzw. uniFilter("Wort1;Wort2;") ergibt Skriptfehler: Die Funktion „UniFilter“ ist nicht vorhanden.
  • {{#invoke:Queries|UniFilter|Wort1;;Wort3}} bzw. uniFilter("Wort1;;Wort3") ergibt Skriptfehler: Die Funktion „UniFilter“ ist nicht vorhanden.
  • {{#invoke:Queries|UniFilter|Wort1; ;Wort3}} bzw. uniFilter("Wort1; ;Wort3") ergibt Skriptfehler: Die Funktion „UniFilter“ ist nicht vorhanden.
  • {{#invoke:Queries|UniFilter|Wort1;Wort2 Wort3}} bzw. uniFilter("Wort1;Wort2 Wort3") ergibt Skriptfehler: Die Funktion „UniFilter“ ist nicht vorhanden.
  • {{#invoke:Queries|UniFilter| Wort1 ; Wort2 ; Wort3 }} bzw. uniFilter(" Wort1 ; Wort2 ; Wort3 ") ergibt Skriptfehler: Die Funktion „UniFilter“ ist nicht vorhanden.
  • {{#invoke:Queries|UniFilter|}} bzw. uniFilter("") ergibt Skriptfehler: Die Funktion „UniFilter“ ist nicht vorhanden.
  • {{#invoke:Queries|UniFilter}} ergibt Skriptfehler: Die Funktion „UniFilter“ ist nicht vorhanden.

dateLastDayCompleter()

Vervollständigt ein unvollständiges Abfrage-bis-Datum zu entweder dem letzten des Monats oder des Jahres.

Anwendung: Wenn man im Formular z.B. von 2020 bis 2020 einträgt, dann wird bis 31.12.2020 gesucht.

Unterseiten

Siehe auch


local p = {}
local com = require("Module:Common")

function p.GetValues(frame)
	-- Gets the values from an attribute on a page to be called from Wikitext by #invoke
--	mw.log("GetValues(frame)")
--	mw.logObject(frame)
	local page = frame.args.page or ""
	local attr = frame.args.attr or ""
	local sep = frame.args.sep or ";"
	local plain = frame.args.plain or false

	local values = p.getValues(page, attr, plain)
	local vallist = table.concat(values, sep)
--	mw.logObject(vallist)
	return vallist
end

function p.getValues(page, attr, plain)
	-- Gets the values from an attribute on a page to be called inside lua
--	mw.log("getValues(" .. page .. ", " ..  attr .. ", " ..  tostring(plain) .. ")")
	local query = "[[:" .. page .."]]|?" .. attr -- selektiert nur die Seite selbst
	if plain then
		query = query .. "#-"
	end
	query = query  .. "|mainlabel=-|limit=1"
	
	local askResult = mw.smw.ask(query)
	local values = {}
	if not com.isEmpty(askResult) then
		values = askResult[1][attr] -- Erste Ergebnis-Zeile, attr-Spalte
		if type(values) ~= "table" then -- Immer als table rückgeben, auch wenn keine (dann umformen)
			values = { [1]=values }
		end
	end
--	mw.logObject(values)
	return values
end

function p.getPages(query, plain)
--	mw.log("getPages(" .. query .. ", " ..  tostring(plain) .. ")")
	if plain then
		query = query .. "|?#-"
	end
	query = query .. "|mainlabel=-"

	local askResult = mw.smw.ask(query)
	local values = {}
	if not com.isEmpty(askResult) then
		for _, v  in pairs(askResult) do
			table.insert(values, v[1]) -- jede Zeile, 1. Spalte
		end
	end
--	mw.logObject(values)
	return values
end

return p