Wikiup Diskussion:Lua/Modul/Wikidata

aus Wikipedia, der freien Enzyklopädie
Vorlagenprogrammierung Diskussionen Lua Test Unterseiten
Modul Deutsch

Modul: Dokumentation

Daten aus einem verknüpften Datenobjekt auslesen

Hallo, wie kann man Daten aus einem mit dem originären Datenobjekt verknüpften Datenobjekt auslesen, also eine mehrstufige Anfrage durchführen? --Poutlaked (Diskussion) 11:31, 26. Feb. 2021 (CET)

Modul/Wikidata: Mehr Formatierungsoptionen für Listen

Hi, auf Wikipedia:Lua/Modul/Wikidata/de steht: Mehrere Aussagen können mit einem Separator getrennt zurückgegeben werden, in vielen Fällen ist jedoch eine besser formatierte Lösung bevorzugt. Daher wird vermutlich eine templatebasierte Rückgabe implementiert werden. Seit 2014. Kommt da noch was? Ich habe Bedarf, Ergebnisse mit mehreren Werten (Listen) zu verlinken. Wenn das nicht umgesetzt wird, wie soll ich vorgehen?

Ideen zur Umsetzung:

1)

{{#invoke:Wikidata|claim|P4219|id=Q38105803|list=, |parameter=link}}

->

könnte (P1630) zur Formatierung der einzelnen Werte verwenden. Das wäre eine Erweiterung der Implementierung von parameter=link. Alternativ auch ein neuer Wert für parameter=.

2)

{{#invoke:Wikidata|claim|P4219|id=Q38105803|list=, |template=name}}

Erweiterung, Übergabe einer Vorlage mit der festdefinierter Signatur {{<name>|<par>}}, für jeden Wert in der Liste wird diese Vorlage (mit einem unbenannten Parameter) aufgerufen. Diese Vorlage ist vom Aufrufer zur Verfügung zu stellen.

3) a poor man's solution habe ich in c:Template:IDs of Austria und c:Template:IDs of Austria/list realisiert:

{{IDs of Austria/list|template=Tiroler Kunstkataster|list={{Data|item=Q38105803|property=P4219|conjtype=/}}|qid=Q38105803 }}

-> c:Template talk:IDs of Austria

4) Was nicht funktioniert, aber ohne Änderung gehen würde:

[https://gis.tirol.gv.at/kunstkatasterpdf/pdf/{{#invoke:Wikidata|claim|P4219|id=Q38105803|list=.pdf], [https://gis.tirol.gv.at/kunstkatasterpdf/pdf/}}.pdf]
{{Tiroler Kunstkataster|typ=pdf|id={{#invoke:Wikidata|claim|P4219|id=Q38105803|list=}}, {{Tiroler Kunstkataster{{!}}typ=pdf{{!}}id=}}}}

Im ersten Fall kann ich zwar einen externen Link setzen, aber nicht formatieren. Im zweiten Fall werden nach Expansion des Lua-Calls keine Vorlagenauswertungen mehr gemacht (ev. kann man das hinbiegen, und ich bin nicht wiff genug für von hinten durch die Brust ins Aug)

Was ich mindestens als Ergebnis will: -> 33400, 115568, 33401. Flexibler ist der Aufruf einer zwischengeschaltete Vorlage. lg --Herzi Pinki (Diskussion) 15:18, 8. Jun. 2021 (CEST)

@PerfektesChaos: Kannst du dazu eine Aussage machen? lg --Herzi Pinki (Diskussion) 10:57, 19. Jun. 2021 (CEST)

Wikidata-Angelegenheiten sind Angelegenheiten der Wikidata-Maintainer.
Ich habe dutzende akuter Programmieraufgaben zu bereinigen, hunderte offener Baustellen, bin in Schweiß gebadet und bekomme kaum noch Luft.
VG --PerfektesChaos 18:29, 19. Jun. 2021 (CEST)
ich kenne das, danke für deine Antwort. lg --Herzi Pinki (Diskussion) 00:34, 20. Jun. 2021 (CEST)
ehrenamtliche Arbeit kann genausogut zu Burnout führen, pass auf. Wir müssen gar nichts, die Welt dreht sich ohne uns, ohne WP und ohne Menschheit insgesamt auch weiter. lg --Herzi Pinki (Diskussion) 12:09, 20. Jun. 2021 (CEST)

Module:WikidataIB

Gibt es in der deutschen Wikipedia etwas Vergleichbares zu en:Module:WikidataIB? Also eine einfache, extra auf Infoboxen abgestimmte Möglichkeit Wikidata einzufügen? Sonst wäre das ein großer Wunsch, falls man sich hier irgendwo für nächste Weihnachten anstellen kann. Das einfache Wikipedia:Lua/Modul/Wikidata/de macht es hier deutlich komplizierter, gerade wenn Einheiten und Properties auch angezeigt und formatiert werden sollen. --Newt713 (Diskussion) 21:47, 29. Dez. 2021 (CET)

@Newt713: So etwas existiert meines Wissens nicht. Modul:WikidataIB wurde wieder gelöscht wegen fehlendem Interesse, es zu warten. Im Januar 2022 gab es einen erneuten Versuch, das Modul zu übersetzen.
Ich finde es schade, dass wir mit Modul:Wikidata unser eigenes Süppchen kochen. Ob das Importieren von en:Module:WikidataIB oder en:Module:Wd aber eine gute Lösung ist, weiß ich nicht. --Dexxor (Diskussion) 15:27, 27. Mär. 2022 (CEST)
Das en:Module:WikidataIB ist auch ein "eigenes Süppchen", hier halt von den Kollegen auf der en.wp. Das ist alles gleichermaßen Mist, für so eine wichtige Funktion braucht es dringend ein zentral maintaintes Modul. Das vorgenannte Modul ist in vielen Teilen recht haarsträubend programmiert, noch viel mehr als es bei unserem Modul:Wikidata der Fall ist. Zudem ist es abhängig von sehr vielen weiteren Modulen der en.wp mit demselben Problem. Mal eben rüberkopieren und übersetzen ist also gar nicht möglich.
Also: Gut ist der Status Quo keineswegs. Aber das en.wp-Modul (dessen genaue Funktionen ich gar nicht kenne, und auch nicht weiß, was das Modul im Vergleich zu unserem alles an zusätzlichen Möglichkeiten bietet) kann man nicht einfach herholen und übersetzen. --Yellowcard (D.) 21:56, 27. Mär. 2022 (CEST)
Ein zentrales Modul wäre der Traum. Wie käme so etwas zustande? Es ist ja schon schade, so viel Energie in Wikidata zu stecken und dann am zentralen Einsatzfeld von Infoboxen so wenig gute Legosteine zur Verfügung zu haben. Mir wären vor allem Funktionen zum zentralen Einschalten/Ausschalten der Wikidata Funktion + Änderung der QID, zum Black und Whitelisting und zu Formatierungen wichtig (z.B. nach Schweizer oder Deutscher Art). --Newt713 (Diskussion) 23:04, 6. Apr. 2022 (CEST)

ODER-Verknüpfung für Qualifikatoren

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:

Patch für das vorgeschlagene Feature

-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)

Hallo Dexxor, der Patch scheint mir technisch sinnvoll zu sein, bleibt die Frage nach dieser Erweiterung an sich. Ist das wirklich ein Szenario, das allgemein von Interesse wäre? (Ich halte das für sehr speziell: Du möchtest einen konkreten Qualifikator ( (P548)) mit einem konkreten Wert ( (Q2804309)) verlangen, aber auch Werte durchlassen, die gar keinen Qualifikator aufweisen. Ist das wirklich ein Anwendungsszenario über den konkreten Anwedungsfall hinausgehend?) Wenn nein, wäre es vielleicht ein besserer Ansatz, das in einem Modul:Vorlage:Infobox Software zu implementieren, analog wie das beispielsweise in Modul:Vorlage:Infobox Fußballspieler realisieret wurde, oder?
Mehrere zugelassene Werte über eine or-Verknüpfung zuzulassen, klingt allerdings sinnvoll und allgemein anwendbar.
Wir sollten das nur alles mal vernünftig dokumentieren, damit mehr Leute dieses Modul produktiv nutzen können. Viele Grüße --Yellowcard (D.) 21:53, 27. Mär. 2022 (CEST)
@Yellowcard: Das Szenario ist vermutlich recht speziell. Mir ist aber ein Weg eingefallen, meinen Anwendungsfall ohne NO_QUAILFIER zu lösen. Dafür müsste es nur möglich sein, nach Qualifikatoren zu filtern, die einen bestimmten Wert nicht enthalten. Ich möchte schreiben können: {{#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
Wir sollten außerdem dokumentieren, dass die unbenannten Parameter keine Leerzeichen enthalten dürfen. Alternativ können wir mw.text.trim() benutzen, damit Weißraum hinten und vorne ignoriert wird. —Dexxor (Diskussion) 10:22, 28. Mär. 2022 (CEST)
@Dexxor: Gefällt mir gut. Das Trimmen der unbenannten Parameter ist ebenfalls ein sinnvoller Vorschlag; ich wüsste gerade gar nicht, ob das nicht durch MediaWiki ohnehin passiert, wenn der Aufruf über #invoke geschieht, aber ein zusätzliches Trimmen im Modul hat keine Nachteile, die mir einfallen würden.
Auf die Funktionalität des Schlüsselworts "or" würdest Du dann verzichten zugunsten der doppelten Angabe der Eigenschaft (also in deinem konkreten Beispiel zweimal P548, jeweils mit unterschiedlichem Wert)? Fände ich auch sinnvoll, dann bräuchten wir die "or"-Konstruktion gar nicht mehr, richtig? Grüße --Yellowcard (D.) 11:28, 28. Mär. 2022 (CEST)
@Yellowcard: Mit #invoke ist es wie bei Vorlagen: Benannte Argumente werden getrimmt, unbenannte nicht. Auf das Schlüsselwort "or" kann ich verzichten. Durch das Angeben von zwei P548-Bedingungen werden diese übrigens mit UND verknüpft. --Dexxor (Diskussion) 11:41, 28. Mär. 2022 (CEST)
@Dexxor: Stimmt (zu beidem). Von dem her wäre es doch interessant, Deinen am 26.03. vorgeschlagenen Patch hinsichtlich des or-Schlüsselwortes ebenfalls mit aufzunehmen, dann hätten wir da eine recht große Bandbreite an Anwendungsszenarien abgedeckt, oder? (Also or-Verknüpfung und und-Verknüpfung mit beliebig vielen Werten zu einer Eigenschaft, dabei jeder Wert beliebig ein- und ausschließbar.) --Yellowcard (D.) 12:21, 28. Mär. 2022 (CEST)
@Yellowcard Ich habe beide Funktionen dem Testmodul hinzugefügt und das Interface etwas geändert, da es nicht sinnvoll ist, wenn man ODER und Ausrufezeichen beliebig verknüpfen kann; zum Beispiel akzeptiert !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
Wert des Qualifikators ist entweder Q12, Q23 oder Q45.
!Q12,Q23,Q45
Wert des Qualifikators ist weder Q12, Q23 noch Q45. --Dexxor (Diskussion) 08:27, 29. Mär. 2022 (CEST)
Hallo Dexxor, das finde ich super, vielen Dank. Hinsichtlich der und-Verknüpfung bleibt es dann bei {{#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)
@Yellowcard In dem Beispiel werden die Aussagen zuerst nach P548≠Q3295609 gefiltert. Die gefilterte Liste wird dann nach P548≠Q51930650 gefiltert, was einer UND-Verknüpfung beider Bedingungen entspricht. Das Beispiel ließe sich jetzt aber auch kürzer schreiben mit P548|!Q3295609,Q51930650. --Dexxor (Diskussion) 12:45, 29. Mär. 2022 (CEST)
@Dexxor: Spricht etwas dagegen, den von Dir vorgeschlagenen Patch ins Produktivmodul zu übernehmen? Gruß --Yellowcard (D.) 09:09, 7. Apr. 2022 (CEST)
@Yellowcard Von mir spricht nichts dagegen. Ich werde die Änderung am Produktivmodul um 16 Uhr vornehmen. --Dexxor (Diskussion) 10:42, 7. Apr. 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)

@Yellowcard Reicht das, was ich mit dieser Bearbeitung hinzugefügt habe, nicht aus als Dokumentation? --Dexxor (Diskussion) 07:36, 6. Mai 2022 (CEST)
@Dexxor, das hatte ich völlig übersehen. Das sollte - im Rahmen der ohnehin nicht ganz idealen Doku umseitig - erstmal reichen. Danke Dir, das ist wirklich eine praktische Erweiterung des Moduls. Viele Grüße, Yellowcard (D.) 08:00, 6. Mai 2022 (CEST)

Probleme mit Speicher / Performance

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)