Modul:Queries: Unterschied zwischen den Versionen

Aus FürthWiki

(Aufteilung GetValues/getValues)
(ask anstelle getQueryResult)
Zeile 1: Zeile 1:
local p = {}
local p = {}
local c = require("Module:Common")


function p.GetValues(frame)
function p.GetValues(frame)
Zeile 5: Zeile 6:
local page = frame.args["page"] or ""
local page = frame.args["page"] or ""
local attr = frame.args["attr"] or ""
local attr = frame.args["attr"] or ""
local sep = frame.args["sep"]
local sep = frame.args["sep"] or ";"
local debug = frame.args["debug"] or false
 
local values = p.getValues(page, attr, debug)
local t = ""
if values ~= nil then
for i = 1, #values do
    t = t .. values[i]
    if i ~= #values then
    t = t .. sep
    end
end
end
 
if debug or false then
mw.log("")
mw.log("GetValues(frame)=" .. t)
end
return p.getValues(page, attr, sep)
return t
end
end


function p.getValues(page, attr, sep)
function p.getValues(page, attr, debug)
local sepl = sep or ";"
local askResult = mw.smw.ask("[[:" .. page .."]]|?#-=page|?" .. attr .."#-=" .. attr .. "|mainlabel=-|limit=1") -- ask selektiert nur die Seite selbst
local result = mw.smw.getQueryResult("[["..page.."]] |?"..attr)
-- If no results, return just nil
local values = nil
if #result.results == 0 then
if askResult ~= nil then
return
values = askResult[1][attr] -- Erste Ergebis-Zeile, attr-Spalte
end
end
 
local values = result.results[1].printouts[attr]
if debug or false then
local t = ""
mw.log("")
for i = 1, #values do
mw.log("getValues(" .. page .. "," .. attr .. ")=")
    t = t .. values[i]["fulltext"]
mw.logObject(values)
    if i ~= #values then
      t = t .. sepl .. " "
    end
end
end
return t
 
return values
end
end


return p
return p

Version vom 20. September 2025, 13:20 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}}- -Lua-Fehler in Zeile 16: attempt to concatenate field '?' (a nil value)-
getValues("Rathaus", "Seite", true) -{{#invoke:{{#replace:{{PAGENAME}}|/Doku|}}|GetValues|page=Rathaus|attr=Seite|plain=Ja}}- -Lua-Fehler in Zeile 16: attempt to concatenate field '?' (a nil value)-
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 c = require("Module:Common")

function p.GetValues(frame)
	-- Gets the values from an attribute on a page
	local page = frame.args["page"] or ""
	local attr = frame.args["attr"] or ""
	local sep = frame.args["sep"] or ";"
	local debug = frame.args["debug"] or false

	local values = p.getValues(page, attr, debug)
	
	local t = ""
	if values ~= nil then
		for i = 1, #values do
    		t = t .. values[i]
    		if i ~= #values then
    			t = t .. sep
	    	end
		end
	end

	if debug or false then
		mw.log("")
		mw.log("GetValues(frame)=" .. t)
	end
	
	return t
end

function p.getValues(page, attr, debug)
	local askResult = mw.smw.ask("[[:" .. page .."]]|?#-=page|?" .. attr .."#-=" .. attr .. "|mainlabel=-|limit=1") -- ask selektiert nur die Seite selbst
	
	local values = nil
	if askResult ~= nil then
		values = askResult[1][attr] -- Erste Ergebis-Zeile, attr-Spalte
	end

	if debug or false then
		mw.log("")
		mw.log("getValues(" .. page .. "," ..  attr .. ")=")
		mw.logObject(values)
	end

	return values
end

return p