Vorlagenprogrammierung | Diskussionen | Lua | Test | Unterseiten | ||
Modul | Deutsch
|
Modul: | Dokumentation |
Ich brauche eure Zustimmung für ein Feature, von dem die Infobox Software profitieren würde. Die Infobox bezieht die aktuelle Versionsnummer einer Software aus Wikidata mithilfe ((#invoke:Wikidata|claim|P348))
. Dabei werden leider auch Beta-Versionen zurückgegeben. Dies könnte man verhindern, indem man eine Qualifikatorbedingung ergänzt: ((#invoke:Wikidata|claim|P348|P548|Q2804309))
. Allerdings sind viele stabile Versionen nicht mit dem Qualifikator P548=Q2804309 versehen. Ich wünsche mir daher, ((#invoke:Wikidata|claim|P348|P548|Q2804309 or NO_QUALIFIER))
schreiben zu können.
Um das Feature zu implementieren, müssen lediglich vier Zeilen Code ergänzt werden:
-local function qualifierhasvalue(claim, property, value)
- -- TODO: not yet documented!
- if not claim.qualifiers then return false end
- if not claim.qualifiers[property] then return false end
+local function qualifierhasvalue(claim, property, values)
+ if not claim.qualifiers then return values["NO_QUALIFIER"] end
+ if not claim.qualifiers[property] then return values["NO_QUALIFIER"] end
for key, snak in pairs(claim.qualifiers[property]) do
if snak.snaktype == "value" then
if snak.datavalue.type == "wikibase-entityid" then
- if snak.datavalue.value.id == value then
+ if values[snak.datavalue.value.id] then
return true
end
--TODO: elseif other types
end
end
end
return false
end
@@ -594,14 +593,16 @@ function filterClaims(frame, claims)
-- use additional unnamed parameters as qualifier conditions (in pairs)
- -- not yet documented!
- -- TODO: not sure if this is good approach. Maybe use named parameter that has pairs split by semicolon
for key, val in pairs(frame.args) do
if type(key) == "number" and key > 2 and key % 2 == 1 then
-- key = 3, 5, 7 and so on
local newclaims = {}
+ local values = {} -- set of allowed values for the qualifier
+ for _, v in pairs(mw.text.split(frame.args[key], '%sor%s')) do
+ values[mw.text.trim(v)] = true
+ end
for i, claim in pairs(claims) do
- if qualifierhasvalue(claim, frame.args[key - 1], frame.args[key]) then
+ if qualifierhasvalue(claim, frame.args[key - 1], values) then
table.insert(newclaims, claim)
end
end
Gruß —Dexxor (Diskussion) 17:18, 26. Mär. 2022 (CET)
((#invoke:Wikidata|claim|P348|P548|!Q3295609|P548|!Q51930650))
. Das ließe sich mit nur wenigen Änderungen realisieren: (Das Ungleichzeichen in negated ~= qualifierhasvalue()
kannst du dir als XOR vorstellen: Der rechte Teil wird nur invertiert, wenn negated==true
)
for key, val in pairs(frame.args) do
if type(key) == "number" and key > 2 and key % 2 == 1 then
-- key = 3, 5, 7 and so on
local newclaims = {}
+ local value = frame.args[key]
+ local negated = string.sub(value, 1, 1) == "!"
+ if negated then value = string.sub(value, 2) end
for i, claim in pairs(claims) do
- if qualifierhasvalue(claim, frame.args[key - 1], frame.args[key]) then
+ if negated ~= qualifierhasvalue(claim, frame.args[key - 1], value) then
table.insert(newclaims, claim)
end
end
mw.text.trim()
benutzen, damit Weißraum hinten und vorne ignoriert wird. —Dexxor (Diskussion) 10:22, 28. Mär. 2022 (CEST)!Q12
bereits jeden Wert außer Q12, der rechte Teil in !Q12 or Q23
wäre also unnötig. Es gibt jetzt zwei Arten, eine Liste von erlaubten Qualifikatoren anzugeben:
Q12,Q23,Q45
!Q12,Q23,Q45
((#invoke:Wikidata|claim|P348|P548|!Q3295609|P548|!Q51930650))
, also der doppelten Angabe der Eigenschaft, korrekt? Viele Grüße, Yellowcard (D.) 09:17, 29. Mär. 2022 (CEST)
P548|!Q3295609,Q51930650
. --Dexxor (Diskussion) 12:45, 29. Mär. 2022 (CEST)
Ich habe hier mal die "nicht archvieren"-Vorlage reingesetzt, bis wir diese doch sehr gute Funktionalität zumindest einigermaßen dokumentiert haben. Ich hoffe, ich komme zeitnah dazu. Yellowcard (D.) 13:46, 5. Mai 2022 (CEST)
Siehe Wikipedia_Diskussion:WikiProjekt_Wikidata_in_Wikipedia#Regionalcode_für_Koordinaten. Kann es sein, dass die Verwendung von ((#property:…)) immer deutlich performanter als ((#invoke:Wikidata|claim)) ist? --Sinuhe20 (Diskussion) 08:35, 24. Mai 2022 (CEST)
Mit dem derzeitigen Wikidata-Modul kann man keine Listenseparatoren vor den Fußnoten angeben (z.B. Komma oder Semikolon); dadurch kann die typografische Einheitlichkeit nicht bewahrt werden. Natürlich habe ich vergeblich versucht, dies ohne Änderungen am Modul zu bewerkstelligen; dies ist mir aber nicht gelungen. Daher schlage ich vor, folgendes Testmodul zu übernehmen: Modul:Wikidata/Test (Demonstration: Benutzer:CyberOne25/Test)
Ich wäre sehr dankbar. --CyberOne25 (Diskussion) 13:10, 27. Apr. 2023 (CEST)
Hallo zusammen, kann ich mir mit diesem Module den Sitelink zu einem bestimmten Projekt holen (z. B. dewikisource)? Wenn ja, wie genau? Ausprobiert hatte ich ((#invoke:Wikidata|sitelinkOf|Q92545)). Das liefert aber nur den Sitelink zu dewiki. Im Gegensatz dazu liefert ((#invoke:Wikidata|sitelinkCount|dewikisource|Q92545)) nur eine Zahl. --Arnd 🇺🇦 (Diskussion) 17:52, 24. Okt. 2023 (CEST)
Mein Vorschlag wäre eine Variante von sitelinkOf:
function p.certainSitelinkOf(frame)
local filter = frame.args[1]
local id = frame.args[2]
local entity = mw.wikibase.getEntity(id)
if entity and entity.sitelinks then
for project, sitelink in pairs(entity.sitelinks) do
if project == filter then
return sitelink.title
end
end
end
return ""
end
Testen kann man das leicht, z. B. so ((#invoke:Wikidata|certainSitelinkOf|dewikisource|Q798194)). Da es sich um eine additive Änderung handelt, besteht keine Gefahr, dass vorhandene Funktionen beeinflusst werden. Könntet das mal jemand einbauen? Gruß, --Arnd 🇺🇦 (Diskussion) 10:42, 17. Mär. 2024 (CET)
Siehe auch Vorlage Diskussion:Wikidata-Registrierung:
Wie kann man feststellen, ob eine deutschsprachige Beschreibung vorhanden ist oder nicht?
Die aktuelle Version
function p.descriptionIn(frame) [...] -- return description of a Wikidata entity in the given language or the default language of this Wikipedia site.''
dürfte auf die englischsprachige Beschreibung als Fallback zurückgegreifen, falls keine deutschsprachige Beschreibung defniert ist. --M2k~dewiki (Diskussion) 17:12, 21. Feb. 2024 (CET)