
![]() | Dieses Modul ist getestet und für den projektweiten Gebrauch geeignet. Es kann in Vorlagen benutzt und auf Hilfeseiten erläutert werden. Entwicklungen an dem Modul sollten auf GetProvince/Test und die Anwendung auf der Spielwiese getestet werden, da wiederholte Trial-and-Error-Edits die Resourcen stark belasten können. |
![]() | Dieses Modul benutzt die Wikidata-Eigenschaften:
|
Funktion
Das Modul dient der Ermittlung der ersten Verwaltungseinheit eines Ortes innerhalb seines Staates (z. B. Bundesland, Provinz, Woiwodschaft usw.). Diese Information wird im Regelfall bei Orten in der Quickbar (Infobox) benötigt. Das Modul hangelt sich dabei auf Wikidata die Verwaltungsstruktur hinauf bis zur gewünschten Region. Basis für die Funktionalität ist das Modul GetProvince/Provinces. In ihm ist abgelegt, was in jedem Land als oberste Hierarchiestufe gilt. Verläuft die Suche nicht erfolgreich, wird der Artikel in eine der vier Wartungskategorien einsortiert. Auf Ihnen findest du auch Anmerkungen, wie du das Problem lösen kannst. Beispiele und Erklärungen findest du auch im zugehörigen Testmodul.
getProvince
getProvince ( id, output, delimiter )
- Aufruf in einer Vorlage:
{{#invoke:GetProvince|getProvince|id|output|delimiter}}
- Aufruf in einem Modul:
gp.GetProvince().getProvince(id,output,delimiter)
- Funktion: Liefert die oberste Verwaltungseiheit eines Ortes innerhalb des Staates
- Aufruf in einer Vorlage:
Bei der Verwendung in anderen Modulen muss am Skriptanfang noch ein gp = require( 'Module:GetProvince' )
eingefügt werden.
Die Funktion arbeitet mit den folgenden anonymen Parametern
|id=
Wikidata-ID des Objektes, kann leer bleiben, wenn der eigene Artikel abgefragt werden soll.|output=
gibt an, ob nur die gewünschte Region, oder der ganze Hierarchiepfad angezeigt werden soll.|output=province
nur die oberste Verwaltungseinheit (Standard)|output=path
ganzer Hierarchie-Pfad
|delimiter=
gibt die gewünschte Trennung zwischen den Werten an, wenn der Pfad angezeigt werden soll. Standardmäßig ist das ein Größer-Als-Zeichen angeführt und gefolgt von einem ungeschützten Leerzeichen.
Beispiele:
- Redcar and Cleveland (oberste Verwaltungseinheit):
{{#invoke:GetProvince/Test|getProvince|Q1434448}}
– England - Redcar and Cleveland (Hierarchiepfad):
{{#invoke:GetProvince/Test|getProvince|Q1434448|path}}
– Redcar and Cleveland > North Yorkshire > North East England > England - Weitere Beispiele findest du im zugehörigen Testmodul.
getProvinceQuickbar
Redcar and Cleveland | |
Land | England |
---|
getProvinceQuickbar ( id, wikiValue )
- Aufruf in einer Vorlage:
{{#invoke:GetProvince|getProvinceQuickbar|id|wikiValue}}
- Aufruf in einem Modul:
gp.GetProvince().getProvinceQuickbar(id, wikiValue)
- Funktion: Ermittelt die gewünschte erste Hierarchiestufe eines Ortes oder Region und fügt sie in eine Quickbar ein. Der zum Staat passende Titel der Zeile („Bundesland“, „Woiwodschaft“ usw.) wird dabei aus dem Submodul Modul:GetProvince/Provinces entnommen. Wird mit
|wikiValue=
ein Provinzname (oder Wikilink) übergeben, wird diese Provinz angezeigt. Trotzdem findet eine Suche auf Wikidata statt, beide Werte werden verglichen und der Artikel in eine passende Wartungskategorie sortiert. Für den Vergleich werden die eckigen Klammern vorher entfernt. Eine möglicher optionaler Anzeigename im Wikilink wird derzeit nicht weggefiltert und der Vergleich liefert immer eine Abweichung beider Werte.
- Aufruf in einer Vorlage:
Wartungskategorien
Die Provinzsuche sortiert Artikel beim Auftreten von Fehlern in verschiedenen Kategorien ein. Ausführlichere Beschreibungen der Fehler und wie du sie beheben kannst findest du in der Kategoerie selbst:
- Artikel ohne Verwaltungseinheit auf Wikidata (290)
- Wikidata:Provinz konnte nicht ermittelt werden (499)
- Wikidata:Provinzsuche endet bei einem Staat (31)
- Wikidata:Provinzsuche bildet eine Schleife (0)
HTML bei Nutzung in den Quickbars
Folgendes HTML wird erzeugt:
<!-- Eintrag für die Zeile: jeweils eine der folgenden Zeilen, je nach abgerufener Eigenschaft --> <tr class="voy-qb-item voy-qb-item-province"> <!-- Eintrag für die erste Spalte --> <th class="voy-qb-item-key">Provinzbezeichnung</th> <!-- Label aus: Modul:GetProvince/Provinces --> <!-- Je nach Auswertung der Daten wird eine der folgenden Zellen ausgegeben --> <!-- Ein Wikidata-Wert kann nicht ermittelt werden --> <td class="voy-qb-item-value1 voy-qb-item-value-nowikidata" data-wikidata-id="Wikidata-ID, wenn vorhanden" data-wikidata-value="Provinz" title="Tooltip-Info">Provinz</td> <!-- Wikidata-Wert und lokaler Wert sind identisch --> <td class="voy-qb-item-value1 voy-qb-item-value-wikidata-equal voy-wikidata-content" data-wikidata-id="Wikidata-ID" data-wikidata-value="Provinz" title="Tooltip-Info">Provinz</td> <!-- Wikidata-Wert und lokaler Wert unterscheiden sich --> <td class="voy-qb-item-value1 voy-qb-item-value-wikidata-noequal voy-wikidata-content" data-wikidata-id="Wikidata-ID" data-wikidata-value="Provinz" title="Tooltip-Info">Provinz</td> <!-- alle anderen Fälle --> <td class="voy-qb-item-value1 voy-wikidata-content" data-wikidata-id="Wikidata-ID, wenn vorhanden" data-wikidata-value="Provinz">Provinz</td> </tr>
CSS-Klassen bei Nutzung in den Quickbars
Jedes einzelne Informationsfeld der Quickbar lässt sich über CSS individuell gestalten, entweder zentral über die Systemdatei Mediawiki:common.css oder über benutzerspezifische Einstellungen Benutzer:<Dein Name>/common.css. Für Programmierer ist es damit auch möglich, an jedem Feld per Javascript Änderungen vorzunehmen und Werkzeuge zu programmieren.
Die gesamte Quickbar (<table>...</table>
) besitzt drei Klassen.
voy-qb
– Immer vorhanden ist die Klasseqb
. Über diese kann man jede Infobox beeinflussen.voy-qb-ort
- Alle Orts-Quickbars, die direkt oder indirekt über diese Vorlage eingebunden sind, besitzen diese Klassevoy-qb-<top-level-domain>
– Zusätzlich gibt es eine landesspezifische Klasse, die die Top-Level-Domain beinhaltet. Alle Artikel über Deutschland haben in ihrer Quickbar somit zusätzlich die Klassevoy-qb-de
hinterlegt. Lässt sich keine TLD ermitteln, heißt die Klasseqb-unknown-tld
.
Jede Zeile einer Quickbar besitzt eine allgemeine und eine eigene Klasse.
voy-qb-item
– Klasse, die alle Zeilen einer Infobox-Tabelle besitzen.
Jede Spalte einer Zeile der Quickbar (<tr>...</tr>
) hat eine individuelle Klasse, über die die Formatierungen angewendet werden können. Zusätzlich haben alle Spalten jeder Zeile eine individuelle Klasse:
voy-qb-item-key
– Erste Spalte mit der Eigenschaftsbezeichnung (standardmäßig fett geschrieben)voy-qb-item-value1
– Erste (und in der jetzigen Quickbar Ort im Regelfall einzige) Spalte mit einem Wert.voy-qb-item-value2
– weitere Spaltevoy-qb-item-value3
– weitere Spalte
Bei Bildern gibt es nur eine Tabellenzelle mit einem Div-Tag
voy-qb-item-image
– Klasse des<div>...</div>
. Die Positionierung der Bilder erfolgt dann über Flexboxen.
Die value-Spalten haben noch eine oder mehrere Klassen, wenn Daten aus Wikidata bezogen wurden.
voy-wikidata-content
– Zusätzliche Klasse, wenn die angezeigten Daten aus Wikidata stammen. Diese Klasse ist nicht auf die Quickbars beschränkt und kann überall im Artikel auftauchen.voy-qb-item-value-nowikidata
– Über Wikidata konnten keine Daten ermittelt werden. Es ist kein Objekt vorhanden, oder die gewünschte Information ist im Objekt nicht verfügbar.voy-qb-item-value-wikidata-equal
– Es gibt die Information auf Wikidata und es wirde ein lokaler Wert in der Quickbar angegeben (der auch angezeigt wird). Diese Klasse zeigt an, dass beide Werte identisch sind.voy-qb-item-value-wikidata-noequal
– Es gibt die Information auf Wikidata und es wirde ein lokaler Wert in der Quickbar angegeben (der auch angezeigt wird). Diese Klasse zeigt an, dass sich beide Werte unterscheiden.
Beispiele:
.voy-qb-item-population .voy-qb-item-value1 { color:blue; font-style:italic; }
– Die Einwohnerzahl wird blau und kursiv dargestellt..voy-qb-item-value-wikidata-equal { color:green; font-weight:bold; }
– Einträge werden grün und fett dargestellt, wenn sie lokal angegeben wurden und identisch mit Wikidata sind..voy-qb-item-value-wikidata-noequal { color:red; font-weight:bold; }
– Einträge werden rot und fett dargestellt, wenn sie lokal angegeben wurden sich von Wikidata unterscheiden.
Siehe auch:
- Wikivoyage:CSS-Klassen – Dokumentation der CSS-Klassen auf Wikivoyage
Verwendung in Vorlagen
Das Modul wird von folgenden Vorlagen verwendet:
- {{Quickbar Flughafen}} – Quickbar für Flughäfen
- {{Quickbar Ort}} – Quickbar für Orte
- {{Quickbar Region}} – Quickbar für Regionen
Submodule
- GetProvince/Provinces – enthält zu jedem Land die Wikidata-ID und den Namen der obersten Hierarchiestufe eines Landes. Schlägt die Suche nach einem Submodul fehl, kann es sein, dass in dieser Datei ein entsprechender Eintrag fehlt.
Benötigte weitere Module
Dieses Modul benötigt folgende weitere Module: Yesno • CountryData/Geography
- Yesno – Interpretation von Daten als Boolsche Werte
- CountryData/Geography – Wkidata-IDs der Staaten
Verwendung in anderen Modulen
Dieses Modul ist notwendig für die Ausführung folgender Module. Bei Anpassungen sollte die Funktionstüchtigkeit der folgenden Module geprüft werden. Benutze dazu auch diese Tracking-Kategorie um Fehler zu finden, die sich dann auf Artikel auswirken:
- Quickbar Flughafen • Quickbar Ort • Quickbar Region
- Modul benötigt das Modul GetProvince – Wartungskategorie, in der nochmals alle Module gelistet sind, die von diesem Modul abhängig sind.
Verwandte Module
- GetP856 – Liefert die Offizielle Webseite eines Objektes.
- GetNumber – Liefert numerische Eigenschaften eines Objektes, wie z. B. Fläche, geografische Höhe und Einwohnerzahl von Regionen bzw. Orten.
- GetString – Liefert alphanumerische Eigenschaften eines Objektes (Datentypen string und monolingualtext)
- GetImage – Liefert Dateinamen von Bildateien.
- GetItem – Liefert Eigenschaften, die als Wikidata-Objekt erfasst sind. Das Ergebnis können Links auf Wikivoyage oder Wikipedia-Artikel sein.
Trackingkategorien und Spezialseiten
- Seiten mit Skriptfehlern – Listet Seiten auf, bei denen Lua-Skripte Fehler verursachen.
- Gewünschte Kategorien – Gewünschte Kategorien. Hier tauche eine neue Kategorie der Art Seiten, die die Wikidata-Eigenschaft Pxxx benutzen auf, wenn eine bisher nicht genutzte Eigenschaft irgendwo verwendet wird.
- Die obige Dokumentation wurde aus der Seite Modul:GetProvince/Doku eingefügt. (bearbeiten | Versionsgeschichte) Die Kategorien für dieses Modul sollten in der Dokumentation eingetragen werden. Die Interwiki-Links sollten auf Wikidata eingepflegt werden.
- Liste der Unterseiten
--[=[ GetProvince 2025-04-08 * * Functions: they are described just before their declaration * * local nilIf ( value, equalValue ) > internal use * local coalesce ( value1, value2, value3 ) > internal use * local getTableLength ( tbl ) > internal use * local getAdminTerritory ( id ) > interna, use * local findProvince( id, output, delimiter ) > internal use * * getProvinceAndCode ( id ) > used in other modules (Quickbar Ort) * * dumpItem ( id ) * getProvince ( id, output, delimiter ) * getProvinceQuickbar ( id, wikiValue ) * ]=] local GetProvince = {} -- loading modules -- its used to check, whether an object is a country -- no Wikidata request is needed to test it local yesno = require( 'Modul:Yesno' ) local cg = mw.loadData( 'Module:CountryData/Geography' ) local provinces = mw.loadData( 'Modul:GetProvince/Provinces' ) -- categories for data evaluation local wikidataCat = { -- common wikidata categories ["equalData"] = '[[Kategorie:Artikel mit identischer Provinz auf Wikidata]]', ["noEqualData"] = '[[Kategorie:Artikel mit abweichender Provinz auf Wikidata]]', } -- returns nil, if both values are equal, otherwise the value -- similar to the SQL function nullif() local function nilIf ( value, equalValue ) if ( value == nil ) then return nil elseif ( tostring ( value ) == tostring ( equalValue ) ) then return nil else return value end end -- returns the first value that is not nil -- similar to the SQL function coalesce() local function coalesce ( value1, value2, value3 ) return value1 or value2 or value3 end -- determines the length of a key-value table -- the # operator does not work here local function getTableLength(tbl) local getN = 0 for n in pairs(tbl) do getN = getN + 1 end return getN end --[[ - getAdminTerritory() -> just for internal use. - it delivers the admin territory of an object including its qualifiers - it requests two properties - - P131: admin territory including qualifiers - - P10229: next level in hierarchy - - P580: Start date/time - - P582: End date/time - - P300: is normally set on an item of first hierarchy level within a country - - P297: fallback, if P300 is not available --]] local getAdminTerritory = function ( id ) -- local variables -- ID of the item -- Determined, if not provided -- compatibility to existing modules and templates: -- some use the keyword "self" for using the own entity-ID local localID = nilIf ( nilIf ( id, 'self' ), '' ) or mw.wikibase.getEntityIdForCurrentPage() or '' -- initialising returning table local wdValues = {} wdValues.label = '' wdValues.dewikivoyage = '' wdValues.P300 = '' wdValues.P297 = '' wdValues.P31 = {} wdValues.adminTerritory = {} -- no Wikidata object if localID == '' then return wdValues, '', '' end -- maintenance categories local maintenanceCategory = '' -- are preferred regions to be considered? local priorityP3680 = '' local preferredRegion = '' -- avoiding multiple category outputs when P10229 and P3831 qualifier are used local isP10229Used = false local isP3831Used = false local isP3680Used = false local isP580Used = false local isP582Used = false -- label wdValues.label = mw.wikibase.getLabel( localID ) or '' -- sitelink wdValues.dewikivoyage = mw.wikibase.getSitelink( localID, 'dewikivoyage' ) or '' -- getting the values -- Property: P31 local wdStatements = mw.wikibase.getBestStatements( localID, 'P31' ) -- running through the values for i, entry in ipairs ( wdStatements ) do -- check for WD-item if entry.mainsnak.datatype == 'wikibase-item' then if entry.mainsnak.datavalue ~= nil then wdValues.P31[i] = entry.mainsnak.datavalue.value.id end -- checking, if this type has a supported region entry if provinces["preferredProvinces"][entry.mainsnak.datavalue.value.id] ~= nil then priorityP3680 = provinces["preferredProvinces"][entry.mainsnak.datavalue.value.id] end end end -- setting the category if #wdStatements > 0 then maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P31 benutzen]]' end -- Property: P300 (ISO-3166-2) local wdStatements = mw.wikibase.getBestStatements( localID, 'P300' ) if #wdStatements > 0 then if wdStatements[1].mainsnak.datatype == 'external-id' then wdValues.P300 = ( wdStatements[1].mainsnak.datavalue and wdStatements[1].mainsnak.datavalue.value ) or '' maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P300 benutzen]]' end else maintenanceCategory = maintenanceCategory .. '[[Kategorie:Provinz ohne ISO 3166-2 Code auf Wikidata]]' -- Property: P297 (ISO 3166-1 alpha-2) wdStatements = mw.wikibase.getBestStatements( localID, 'P297' ) if #wdStatements > 0 then if wdStatements[1].mainsnak.datatype == 'external-id' then wdValues.P297 = ( wdStatements[1].mainsnak.datavalue and wdStatements[1].mainsnak.datavalue.value ) or '' maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P297 benutzen]]' end else maintenanceCategory = maintenanceCategory .. '[[Kategorie:Provinz ohne ISO 3166-1 Code auf Wikidata]]' end end -- Property: P131 local wdStatements = mw.wikibase.getBestStatements( localID, 'P131' ) -- running through the array and store it in a subtable local entryID local entryP10229 local entryP580 local entryP582 local entryP3831 local entryP3680 -- running through the values for i, entry in ipairs ( wdStatements ) do -- check for WD-item if entry.mainsnak.datatype == 'wikibase-item' then -- initialising the items and qualifiers entryID = 'X' entryP10229 = '' entryP580 = '' entryP582 = '' entryP3831 = '' -- getting the admin territory ID entryID = entry.mainsnak.datavalue.value.id -- read qualifiers if entry.qualifiers ~= nil then -- read the P10229-Qualifier (next level in hierarchy) if entry.qualifiers.P10229 ~= nil then if entry.qualifiers.P10229[1].datatype == 'wikibase-item' then entryP10229 = entry.qualifiers.P10229[1].datavalue.value.id isP10229Used = true end end -- read the P3831-Qualifier (object has role) if entry.qualifiers.P3831 ~= nil then if entry.qualifiers.P3831[1].datatype == 'wikibase-item' then entryP3831 = entry.qualifiers.P3831[1].datavalue.value.id isP3831Used = true end end -- read the P3680-Qualifier (statement supported by) if entry.qualifiers.P3680 ~= nil then if entry.qualifiers.P3680[1].datatype == 'wikibase-item' then entryP3680 = entry.qualifiers.P3680[1].datavalue.value.id isP3680Used = true -- checking for preferred regeion if priorityP3680 == entryP3680 then preferredRegion = entryID end end end -- read P580-Qualifiers (Start date/time) if entry.qualifiers.P580 ~= nil then if entry.qualifiers.P580[1] ~=nil then if entry.qualifiers.P580[1].datavalue ~=nil then if entry.qualifiers.P580[1].datavalue.value.precision == 9 then entryP580 = entry.qualifiers.P580[1].datavalue.value.time:sub( 2, 11 ) end if entry.qualifiers.P580[1].datavalue.value.precision == 10 then entryP580 = entry.qualifiers.P580[1].datavalue.value.time:sub( 2, 11 ) end if entry.qualifiers.P580[1].datavalue.value.precision == 11 then entryP580 = entry.qualifiers.P580[1].datavalue.value.time:sub( 2, 11 ) end isP580Used = true end end end -- read P582-Qualifiers (End date/time) if entry.qualifiers.P582 ~= nil then if entry.qualifiers.P582[1] ~=nil then if entry.qualifiers.P582[1].datavalue ~=nil then if entry.qualifiers.P582[1].datavalue.value.precision == 9 then entryP582 = entry.qualifiers.P582[1].datavalue.value.time:sub( 2, 11 ) end if entry.qualifiers.P582[1].datavalue.value.precision == 10 then entryP582 = entry.qualifiers.P582[1].datavalue.value.time:sub( 2, 11 ) end if entry.qualifiers.P582[1].datavalue.value.precision == 11 then entryP582 = entry.qualifiers.P582[1].datavalue.value.time:sub( 2, 11 ) end isP582Used = true end end end end -- as in the other modules as well, a given P582 qualifiers makes the value unvalid if entryP582 == '' then wdValues.preferredRegion = preferredRegion -- adding to the list wdValues.adminTerritory[entryID] = { ['label'] = mw.wikibase.getLabel( entryID ) or '', ['dewikivoyage'] = mw.wikibase.getSitelink( entryID, 'dewikivoyage' ) or '', ['P10229'] = entryP10229, ['P580'] = entryP580, ['P582'] = entryP582, ['P3831'] = entryP3831, ['P3680'] = entryP3680 } end end -- if entry.mainsnak.datatype == 'wikibase-item' end -- for i, entry in ipairs ( wdStatements ) -- adding category if #wdStatements > 0 then maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P131 benutzen]]' end if isP10229Used then maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P10229 benutzen]]' end if isP3831Used then maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P3831 benutzen]]' end if isP3680Used then maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P3680 benutzen]]' end if isP580Used then maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P580 benutzen]]' end if isP582Used then maintenanceCategory = maintenanceCategory .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P582 benutzen]]' end return wdValues, localID, maintenanceCategory or '' end --[[ function: findProvince( id, output, delimiter ) provides the province of a given destination the province is shown as text or Link, if the article exists returns three values: - province/path - maintaining categories - label of the province, the name, how ist the type called in that country Parameter: - id: Wikidata-ID - output: what is shown? - province: just the province (standard) - path: the hierarchy path up to the province - delimiter: delimiter in case of path (standard: " > ") - countryIsValid: set to "yes" if a country as parovince is acceptable (in case of province free cities) ]] local findProvince = function ( id, output, delimiter, countryIsValid ) -- local variables -- ID of the item -- Determined, if not provided -- compatibility to existing modules and templates: -- some use the keyword "self" for using the own entity-ID local localID = nilIf ( nilIf ( id, 'self' ), '' ) or mw.wikibase.getEntityIdForCurrentPage() or '' -- returning string local provinceString = '' local provinceLabel = '' local provinceCode = '' local categoryList = '' -- output local paramOutput = nilIf ( output, '' ) or 'province' -- check the values, and set to standard, if not valid local validOutput = { province=true, path=true } if validOutput.paramOutput ~= nil then paramOutput = 'province' end -- no delimiter in front of the first entry local stringDelimiter = '' -- is the item a country? > nothing to do, just returning an empty string if cg.countries[id] ~= nil and yesno ( coalesce ( countryIsValid, 'no' ), false ) then return '', localID, '', '', '' elseif cg.countries[id] ~= nil and not ( yesno ( coalesce ( countryIsValid, 'no' ), false ) ) then return '', localID, '[[Kategorie:Wikidata:Provinzsuche endet bei einem Staat]]', '', '' end -- WD-Values local territoryList = {} local wikidataID = '' local categories = '' territoryList, wikidataID, categories = getAdminTerritory ( id ) -- no admin territory defined if wikidataID == '' then return '', localID, '[[Kategorie:Artikel ohne Objekt auf Wikidata]]', '', '' end -- no admin territory defined if getTableLength ( territoryList.adminTerritory ) == 0 then return '', localID, '[[Kategorie:Artikel ohne Verwaltungseinheit auf Wikidata]]', '', '' end -- recursive search for the province local stopSearch = false -- Territory IDs local nextID = '' local nextButOneID = '' local saveID = '' -- array of IDs to detect self referencing hierarchies local hierarchyIDList = {} -- adding the own ID to the list hierarchyIDList[localID] = localID -- getting the next ID and -- actually obsolete but needed if its used on a province article itself for k, v in pairs ( territoryList.adminTerritory ) do nextID = k if hierarchyIDList[k] ~= nil then return '', localID, '[[Kategorie:Wikidata:Provinzsuche bildet eine Schleife]]', '', '' end end repeat -- no admin territory defined if getTableLength ( territoryList.adminTerritory ) == 0 then provinceString = '' categoryList = categoryList .. '[[Kategorie:Wikidata:Provinz konnte nicht ermittelt werden]]' break end -- self referencing hierarchy? then stop if hierarchyIDList[nextID] ~= nil then categoryList = categoryList .. '[[Kategorie:Wikidata:Provinzsuche bildet eine Schleife]]' nextID = '' break end -- is the item a country? Then break if cg.countries[nextID] ~= nil then if provinces.countriesWithNoProvince[nextID] ~= nil then -- small country that does not need a province level provinceString = '[[' .. cg.countries[nextID].country .. ']]' provinceLabel = 'Staat' elseif yesno ( coalesce ( nilIf ( countryIsValid, '' ), 'no' ), false ) then -- it's ok to find the country, like in Berlin provinceString = '[[' .. cg.countries[nextID].country .. ']]' provinceLabel = 'Staat' else -- search ended at the country level. -- maybe you should add an item to Modul:GetProvince/Provinces categoryList = categoryList .. '[[Kategorie:Wikidata:Provinzsuche endet bei einem Staat]]' provinceString = '' end nextID = '' break end -- show the province, if the path is requestes if paramOutput == 'path' then if territoryList.dewikivoyage ~= '' then provinceString = provinceString .. stringDelimiter .. '[[' .. territoryList.dewikivoyage .. ']]' else provinceString = provinceString .. stringDelimiter .. territoryList.label end stringDelimiter = nilIf ( delimiter, '' ) or ' > ' end -- got province? then stop searching for i, entry in ipairs ( territoryList.P31 ) do if provinces.provinces[entry] ~= nil then provinceLabel = provinces.provinces[entry] stopSearch = true end end -- getting the next ID and -- maybe it was given on last step by providing P10229 Qualifier... if nextButOneID ~= '' then saveID = nextButOneID -- checking, whether here is a new P10229 qualifier if territoryList.adminTerritory[nextButOneID].P10229 ~= '' then nextButOneID = territoryList.adminTerritory[nextButOneID].P10229 else nextButOneID = '' end nextID = saveID -- ...or it was not given else for k, v in pairs ( territoryList.adminTerritory ) do nextID = k if territoryList.adminTerritory[k].P10229 ~= '' then nextButOneID = territoryList.adminTerritory[k].P10229 break end end end -- was a preferred Region defined? take it, even if you got a different ID if territoryList.preferredRegion ~= '' then nextID = territoryList.preferredRegion end categoryList = categoryList .. categories -- next round, if necessary if not stopSearch then territoryList, wikidataID, categories = getAdminTerritory ( nextID ) end until stopSearch if ( nextID ~= '' ) and ( paramOutput == 'province' ) then if territoryList.dewikivoyage ~= '' then provinceString = stringDelimiter .. provinceString .. '[[' .. territoryList.dewikivoyage .. '|' .. mw.ustring.gsub( territoryList.dewikivoyage, '%s%(.*%)', '' ) .. ']]' else provinceString = stringDelimiter .. provinceString .. territoryList.label end provinceCode = nilIf ( territoryList.P300, '' ) or nilIf ( territoryList.P297, '' ) or '' end return provinceString, localID, categoryList, provinceLabel, provinceCode end -- Provides the province and its ISO3166-Code of a destination -- only used in other modules, not in templates GetProvince.getProvinceAndCode = function( id ) local province = '' local wikidataID = '' local categories = '' local label = '' local code = '' province, wikidataID, categories, label, code = findProvince( id ) return province, code end --[[ function: dumpItem( id, output, delimiter ) just dumps the object, returned by the function getAdminTerritory ( id ) ]] GetProvince.dumpItem = function ( id ) -- returning string local provinceString = '' -- WD-Values local territoryList = {} local wikidataID = '' local categories = '' territoryList, wikidataID, categories = getAdminTerritory ( id ) -- debugging info during the development provinceString = mw.dumpObject( territoryList ) .. '<br />' -- no admin territory defined if getTableLength ( territoryList.adminTerritory ) == 0 then return provinceString end return provinceString end -- Provides the province or the hierarchy path of a destination GetProvince.getProvince = function( id, output, delimiter, countryIsValid ) local province = '' local wikidataID = '' local categories = '' province, wikidataID, categories = findProvince( id, output, delimiter, countryIsValid ) return province .. categories end -- Gets the province as wiki markup for quickbars (infoboxes) GetProvince.getProvinceQuickbar = function( id, wikiValue, wikiLabel, countryIsValid ) -- getting the link with the base function above local wikidataString local wikidataID local wikidataCategories local wikidataLabel local wikidataCode wikidataString, wikidataID, wikidataCategories, wikidataLabel, wikidataCode = findProvince ( id, property, nil, countryIsValid ) -- text to be shown local provinceValue = wikidataString -- removing brackets and alias for later comparison with wikivalue and showing in data attribute wikidataString = mw.ustring.gsub ( mw.ustring.gsub ( wikidataString, '[%[%]]', '' ), '|.*', '' ) -- if it is taken from wikidata, this variable provides an additional class for: MediaWiki:Gadget-Wikidata-Content.css -- space is needed becaus its simply added to the existing class string local wikidataClass = ' voy-wikidata-content' -- comparing a possibly given value with Wikidata local category = '' -- is a wiki value defined? if ( nilIf ( wikiValue, '' ) ~= nil ) then -- wikivalues, that can be interpreted as "TRUE" are removed and Wikidata is used -- it's used to switch entries on and off in Quickbars if yesno ( coalesce ( wikiValue, 'no' ), false ) then wikiValue = '' else provinceValue = wikiValue wikidataClass = '' end -- wikivalues, that can be interpreted as "FALSE" suppress the whole row if not yesno ( coalesce ( wikiValue, 'yes' ), true ) then return wikidataCategories end wikiValue = mw.ustring.gsub ( wikiValue, '[%[%]]', '' ) if ( wikidataString ~= '' ) then -- are the values equal? if wikidataString == wikiValue then category = wikidataCat.equalData else -- mot marking different data, if a country is a valid value if not ( yesno ( coalesce ( nilIf ( countryIsValid, '' ), 'no' ), false ) ) then category = wikidataCat.noEqualData end end end end if provinceValue == '' then return category .. wikidataCategories, '' end -- creating the table row local tr = mw.html.create ( 'tr' ) -- first table cell (heading) local trLabel = coalesce ( nilIf ( wikiLabel, '' ), nilIf ( wikidataLabel, '' ), 'Provinz' ) tr:addClass('voy-qb-item voy-qb-item-province' ) :tag('th') :addClass('voy-qb-item-key') :wikitext(trLabel) -- second table cell (province) if category == wikidataCat.equalData then tr:tag('td') :addClass( 'voy-qb-item-value1 voy-qb-item-value-wikidata-equal' .. wikidataClass ) :attr('data-wikidata-id',wikidataID) :attr('data-wikidata-value',wikidataString) :attr('title','Daten identisch - Provinz auf Wikidata: ' .. wikidataString) :wikitext( provinceValue ) elseif category == wikidataCat.noEqualData then tr:tag('td') :addClass( 'voy-qb-item-value1 voy-qb-item-value-wikidata-noequal' .. wikidataClass ) :attr('data-wikidata-id',wikidataID) :attr('data-wikidata-value',wikidataString) :attr('title','Daten unterschiedlich - Provinz auf Wikidata: ' .. wikidataString) :wikitext( provinceValue ) else tr:tag('td') :addClass( 'voy-qb-item-value1' .. wikidataClass ) :attr('data-wikidata-id',wikidataID) :attr('data-wikidata-value',wikidataString) :wikitext( provinceValue ) end -- returning the row return tostring ( tr ) .. category .. wikidataCategories, wikidataCode end -- Providing template access local p = {} function p.dumpItem( frame ) return GetProvince.dumpItem( frame.args[ 1 ] ) or "" end function p.getProvince( frame ) return GetProvince.getProvince( frame.args[ 1 ], frame.args[ 2 ], frame.args[ 3 ], frame.args[ 4 ] ) or "" end function p.getProvinceQuickbar( frame ) return GetProvince.getProvinceQuickbar( frame.args[ 1 ], frame.args[ 2 ], frame.args[ 3 ], frame.args[ 4 ] ) or "" end -- for usage in other modules -- using it the following way: -- -- local getImage = require( 'Module:GetProvince' ) -- foo = getImage.GetProvince().xxx( id ) function p.GetProvince() return GetProvince end return p