Modul:Queries
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 Attributsattrder Seitepage(immer) alstablemit Strings zurück. - Wikitext:
GetValues(frame)gibt Werte des Attributsattrder Seitepageals 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:
- als Ganzes
- als Volltextsuche
- wenn Semikolons vorhanden, dann außerdem als Liste von Einzelbegriffen
- wenn Suchtext leer, Vorhandensein irgendeines Wortes
Beispiele:
{{#invoke:Queries|UniFilter|Wort1}}bzw.uniFilter("Wort1")ergibtWort1||~*Wort1*{{#invoke:Queries|UniFilter|Wort1 Wort2 Wort3}}bzw.uniFilter("Wort1 Wort2 Wort3")ergibtWort1 Wort2 Wort3||~*Wort1 Wort2 Wort3*{{#invoke:Queries|UniFilter|Wort1;Wort2;Wort3}}bzw.uniFilter("Wort1;Wort2;Wort3")ergibtWort1;Wort2;Wort3||~*Wort1;Wort2;Wort3*||~*Wort1*||Wort1||~*Wort2*||Wort2||~*Wort3*||Wort3{{#invoke:Queries|UniFilter|Wort1;Wort2;}}bzw.uniFilter("Wort1;Wort2;")ergibtWort1;Wort2;||~*Wort1;Wort2;*||~*Wort1*||Wort1||~*Wort2*||Wort2{{#invoke:Queries|UniFilter|Wort1;;Wort3}}bzw.uniFilter("Wort1;;Wort3")ergibtWort1;;Wort3||~*Wort1;;Wort3*||~*Wort1*||Wort1||~*Wort3*||Wort3{{#invoke:Queries|UniFilter|Wort1; ;Wort3}}bzw.uniFilter("Wort1; ;Wort3")ergibtWort1; ;Wort3||~*Wort1; ;Wort3*||~*Wort1*||Wort1||~*Wort3*||Wort3{{#invoke:Queries|UniFilter|Wort1;Wort2 Wort3}}bzw.uniFilter("Wort1;Wort2 Wort3")ergibtWort1;Wort2 Wort3||~*Wort1;Wort2 Wort3*||~*Wort1*||Wort1||~*Wort2 Wort3*||Wort2 Wort3{{#invoke:Queries|UniFilter| Wort1 ; Wort2 ; Wort3 }}bzw.uniFilter(" Wort1 ; Wort2 ; Wort3 ")ergibtWort1 ; Wort2 ; Wort3||~*Wort1 ; Wort2 ; Wort3*||~*Wort1*||Wort1||~*Wort2*||Wort2||~*Wort3*||Wort3{{#invoke:Queries|UniFilter|}}bzw.uniFilter("")ergibt+{{#invoke:Queries|UniFilter}}ergibt+
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("Modul:Common")
local str = require("Modul:String")
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 ask_result = mw.smw.ask(query)
local values = {}
if not com.isEmpty(ask_result) then
values = ask_result[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 ask_result = mw.smw.ask(query)
local values = {}
if not com.isEmpty(ask_result) then
for _, v in pairs(ask_result) do
table.insert(values, v[1]) -- jede Zeile, 1. Spalte
end
end
-- mw.logObject(values)
return values
end
function p.UniFilter(frame)
-- mw.log("UniFilter(frame)")
-- mw.logObject(frame)
local suchtext = frame.args[1] or ""
local filter = p.uniFilter(suchtext)
-- mw.log(filter)
return filter
end
function p.uniFilter(suchtext)
-- mw.log("uniFilter(" .. suchtext .. ")")
local filter = ""
suchtext = str.strip(tostring(suchtext or ""))
if suchtext == "" or suchtext == "*" then
filter = "+"
else
suchtext = string.gsub(suchtext, "%[", "")
suchtext = string.gsub(suchtext, "%]", "")
filter = filter .. suchtext -- exakte Suche (immer)
filter = filter .. "||~*" .. suchtext .. "*" -- Wildcard-Suche des ganzen Suchtextes (immer)
semikolonVorhanden = (string.find(suchtext, ";") ~= nil)
if semikolonVorhanden then
suchtextSplit = str.split2(suchtext, ";") -- Einzelwort-Suche
if #suchtextSplit > 1 then
for _, ft in ipairs(suchtextSplit) do
ft = str.strip(ft)
if ft ~= "" then
filter = filter .. "||~*" .. ft .. "*" .. "||" .. ft
end
end
end
end
end
-- mw.log(filter)
return filter
end
function p.dateLastDayCompleter(date)
local last_date
if #date == 4 then -- nur "Jahr" vorhanden
last_date = date .. "/12/31"
elseif #date ~= 10 then -- "Monat Jahr" vorhanden
local days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
local month = string.sub(date, 1, string.find(date, " ") - 1)
month = com.getMonthnr(month)
local year = string.sub(date, string.find(date, " ") + 1)
last_date = year .. "/" .. month .. "/"
if month == 2 and year % 4 == 0 then -- Sonderfall Feb. Schaltjahr
last_date = last_date .. "29"
else
last_date = last_date .. days[month]
end
else
last_date = date
end
return last_date
end
return p