Zum Inhalt springen

Modul:GetP856

Aus Wikivoyage
Version vom 24. September 2022, 13:02 Uhr von DerFussi (Diskussion | Beiträge) (+nilIf; +coalesce; +no show in quickbar, if there is nothing to show)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Dokumentation für das Modul GetP856[Ansicht] [Bearbeiten] [Versionsgeschichte] [Aktualisieren]

Funktion

Das Modul bietet einige Funktionen, um die Wikidata-Eigenschaft offizielle Website (P856) eines Objektes abzurufen. Es kann sowohl in anderen Modulen als auch in Vorlagen verwendet werden. Folgende Funktionen sind implementiert:

getUrl
  • getUrl(id,lang)
    • Aufruf in einer Vorlage: {{#invoke:GetP856|getUrl|id|lang}}
    • Aufruf in einem Modul: p856.GetP856().getUrl(id,lang)
    • Funktion: Liefert offizielle Webseite eines Objektes als einfache URL.
getUrlAsLinkWithHost
  • getUrlAsLinkWithHost(id,lang)
    • Aufruf in einer Vorlage: {{#invoke:GetP856|getUrlAsLinkWithHost|id|lang}}
    • Aufruf in einem Modul: p856.GetP856().getUrlAsLinkWithHost(id,lang)
    • Funktion: Liefert offizielle Webseite eines Objektes als Wiki-Markup. Als Linktext wird nur die Domain verwendet.
getUrlAsLinkWithHostAndLanguage
  • getUrlAsLinkWithHostAndLanguage(id,lang)
    • Aufruf in einer Vorlage: {{#invoke:GetP856|getUrlAsLinkWithHostAndLanguage|id|lang}}
    • Aufruf in einem Modul: p856.GetP856().getUrlAsLinkWithHostAndLanguage(id,lang)
    • Funktion: Liefert offizielle Webseite eines Objektes als Wiki-Markup. Als Linktext wird nur die Domain verwendet. Zusätzlich wird die Sprache der Webseite angezeigt (derzeit nicht, wenn der erstbeste Eintrag aus der Datenbank geliefert wird, siehe Prierität weiter unten).
getOfficialWebsite
  • getOfficialWebsite(id,lang, message)
    • Aufruf in einer Vorlage: {{#invoke:GetP856|getOfficialWebsite|id|lang|message}}
    • Aufruf in einem Modul: p856.GetP856().getOfficialWebsite(id,lang,message)
    • Funktion: Liefert alles komplett für die Vorlage {{Offizielle Webseite}}

Bei der Verwendung in anderen Modulen muss am Skriptanfang noch ein p856 = require( 'Module:GetP856' ) eingefügt werden.

Die Funktionen arbeiten mit den folgenden anonymen Parametern

  • |id= Wikidata-ID des Objektes, kann leer bleiben, wenn der eigene Artikel abgefragt werden soll.
  • |lang= Sprache der Homepage, ist keine angegeben oder die gesuchte nicht vorhanden, wird nach folgender Priorität abgefragt.
    1. Sprache des Wikis
    2. Englisch
    3. Amtssprache des Landes in dem der Ort des Artikels liegt
    4. Die erste, die von der Datenbank geliefert wird
  • |message= Dieser beschreibende Text wird hinter dem Link zusätzlich angezeigt. Ist nichts angegeben, wird der Standardtext „Offizielle Webseite von XY“ angezeigt, wobei für „XY“ die Bezeichnung aus Wikidata verwendet wird. Je nach Benennung auf Wikidata kann der Standardtext grammatikalisch falsch sein (wenn zum Beispiel das Wort „Provinz“ vorangestellt ist).
getUrlAsLinkWithHostQuickbar
Cottbus
Webseitewww.cottbus.de
  • getUrlAsLinkWithHostQuickbar ( id, wikiValue )
    • Aufruf in einer Vorlage: {{#invoke:GetP856|getUrlAsLinkWithHostQuickbar|id|wikiValue}}
    • Aufruf in einem Modul: p856.GetP856().getUrlAsLinkWithHostQuickbar(id,wikiValue)
    • Funktion: Liefert offizielle Webseite eines Objektes als Tabellenzeile zur Einbindung in einer Infobox (Quickbar). Diese Funktion wird im Regelfall nur in anderen Modulen, speziell denen für die Quickbars, benutzt. Der Einsatz in individuell zusammengestellten Infoboxen direkt in Artikeln ist aber trotzdem möglich.

Dieser Funktion kann auch ein „Sollwert“ für die Ausgabe übergeben werden. Das bewirkt eine Ausgabe dieses Wertes und keine Ausgabe des auf Wikidata gespeicherten Wertes. Ungeachet dessen wird der übergebene Wert mit Wikidata verglichen. Das Ergebnis des Abgleich finden sich in einer Wartungskategorie sowie in zusätzlichen CSS-Klassen. Für den Leser gibt es ein zusätzliches Tooltip mit dem Ergebnis des Vergleichs und dem Wert von Wikidata.

Wartungskategorien

HTML bei Nutzung in den Quickbars

Folgendes HTML wird erzeugt:

<!-- Eintrag für die Zeile -->
<tr class="voy-qb-item voy-qb-item-website">

   <!-- Eintrag für die erste Spalte -->
   <th class="voy-qb-item-key">Offizielle Webseite</th>
   
   <!-- 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="URL" title="Tooltip-Info">Offizielle Webseite</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="URL" title="Tooltip-Info">Offizielle Webseite</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="URL" title="Tooltip-Info">Offizielle Webseite</td>
   
   <!-- alle anderen Fälle -->
   <td class="voy-qb-item-value1 voy-wikidata-content" data-wikidata-id="Wikidata-ID, wenn vorhanden" data-wikidata-value="URL">Offizielle Webseite</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 Klasse qb. Über diese kann man jede Infobox beeinflussen.
  • voy-qb-ort - Alle Orts-Quickbars, die direkt oder indirekt über diese Vorlage eingebunden sind, besitzen diese Klasse
  • voy-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 Klasse voy-qb-de hinterlegt. Lässt sich keine TLD ermitteln, heißt die Klasse qb-unknown-tld.

Jede Zeile einer Quickbar besitzt eine allgemeine und eine eigene Klasse.

  • voy-qb-item – Klasse, die alle Zeilen einer Infobox-Tabelle besitzen.
  • voy-qb-item-website – Diese Zeile zeigt die offizielle Webseite an.

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 Spalte
  • voy-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:

Verwendung in Vorlagen

Dieses Modul wird in folgenden Vorlagen verwendet:

  • {{Offizielle Webseite}} – Die Vorlage erzeugt einen Eintrag mit der/den offiziellen Website(s) des Ortes und garantiert eine einheitliche Darstellung in allen Artikeln. Die Anwendung erfolgt als erster Eintrag im Abschnitt Weblinks eines Artikels.
  • {{Quickbar Fluggesellschaft}} – Quickbar für Fluggesellschaften
  • {{Quickbar Flughafen}} – Quickbar für Flughäfen
  • {{Quickbar Ort}} – Quickbar für Orte
  • {{Quickbar Region}} – Quickbar für Regionen

Benötigte weitere Module

Dieses Modul benötigt folgende weitere Module: URLutil • UrlCheck • Languages

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:

Verwandte Module

  • 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.
  • GetProvince – Ermittelt rekursiv die erste Verwaltungsstufe eines Ortes (Bundesland, Provinz usw.).

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.
Hinweise
--[=[ GetP856 2022-09-24
* local getUrlWithLanguange (internal use)
* getUrl()
* getUrlAsLinkWithHost()
* getUrlAsLinkWithHostAndLanguage()
* getOfficialWebsite()
]=]
local GetP856 = {}

-- importing modules
local uu = require( 'Module:URLutil' )
local uc = require( 'Module:UrlCheck' )
local lg = require( 'Module:Languages' )

-- categories for data evaluation
local wikidataCat = {
   ["equalData"]   = '[[Kategorie:Artikel mit identischer offizieller Webseite auf Wikidata]]',
   ["noEqualData"] = '[[Kategorie:Artikel mit abweichender offizieller Webseite auf Wikidata]]',
   ["noData"]      = '[[Kategorie:Artikel ohne offizielle Webseite 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


-- getting the language-ID to a given language code
local function getLngId( lng )
   
   -- checking, whether a code is given
   if not lng or lng == '' then
      return ''
   end

   -- getting the language entry
   local item = lg.lngProps[ lng ]
   
   -- if not got, testing for a hyphen and trying the first part
   if not item then
      local hyphen = lng:find( '-', 1, true )
      if hyphen and hyphen > 1 then
         item = lg.lngProps[ lng:sub( 1, hyphen - 1 ) ]
      end
   end
   
   -- getting the language-ID
   if item then
      item = item.q
   end

   return item or ''
end

-- getUrlWithLanguange() -> just for internal use. it delivers the url to the public functions
-- gets the official URL of an item in the requested langange
-- if more than one language for the website is provided, it follows the priority as stated below
--   the requested language
--   local wiki language (German)
--   Englisch
--   Local language (of the place, thats described in the article)
--   any other entry is provided
-- unlike the other GetXXX modules this internal basic function do not provide a table with all entries primarily,
-- the table is available as the fourth of the returned items
local getUrlWithLanguange = function ( id, lang )

   -- local variables
   -- ID of the item
   -- Determined, if not provided
   local localID = nilIf ( nilIf ( id, 'self' ), '' ) or mw.wikibase.getEntityIdForCurrentPage() or ''

   -- break, if there is no connection with Wikidata
   if localID == '' then
      return '', '', localID, {}
   end
   
   -- requested language by code ( e.g. 'ja' for Japanese)
   -- it is set to Wiki local language, if not provided, 
   -- lang can be nil or empty string
   local requestedLang = lang or ''                                -- code of the requested language
   if requestedLang == '' then 
      requestedLang = mw.getContentLanguage():getCode()
   end

   -- getting the wikidata-ID of the requested language
   local requestedLangID = getLngId ( requestedLang )               -- ID of the requested language

   -- if necessary, the locally spoken language will be determined later
   local localLang = ''                                             -- local official language
   local localLangID = 'Q'                                          -- ID of the local official language

   -- getting the websites
   local wdStatements = mw.wikibase.getBestStatements( localID, 'P856' )

   -- break, if nothing is provided
   if #wdStatements == 0 then
      return '', '', localID, {}
   end
   
   -- saving the language of a website temporarily
   local urlLanguage = ''

   -- saving all urls with language
   local urlList = {}

   -- running through the array and store it in a simple table
   for i, entry in ipairs ( wdStatements ) do
      if entry.mainsnak.datatype == 'url' and entry.mainsnak.datavalue ~= nil then

         -- getting the language, if given
         if entry.qualifiers ~= nil then
            if entry.qualifiers.P407 ~= nil then
               if entry.qualifiers.P407[1] ~= nil then
                  if entry.qualifiers.P407[1].datatype == 'wikibase-item' then
                     urlLanguage = entry.qualifiers.P407[1].datavalue.value.id or ''
                  end
               end
            end
         end

         -- setting to 'NO_LANGUAGE', if no qualifier is provided
         -- the last one will win, if more than one urls with no lanuage are provided
         if entry.mainsnak.datavalue.value ~= '' then
            if urlLanguage == '' then
               urlList.NO_LANGUAGE = entry.mainsnak.datavalue.value
            else 
               urlList[urlLanguage] = entry.mainsnak.datavalue.value
            end
         end

      end
   end

   -- break, if nothing was fetched, although property is available
   if getTableLength ( urlList ) == 0 then
      return '', '', localID, {}
   end


   -- determining the local language, not language is given, and english is not available
   if urlList[requestedLangID] == nil and urlList['Q1860'] == nil then

      -- determinig the country of the destination described in the article
      local wdCountry = mw.wikibase.getBestStatements( localID, 'P17' )
      if #wdCountry > 0 then
         if wdCountry[1].mainsnak.datatype == 'wikibase-item' then

            local countryID = wdCountry[1].mainsnak.datavalue.value.id

            -- determining the official language in that country
            -- it takes the first one that is delivered, not a possible list
            local wdLocalLang = mw.wikibase.getBestStatements( countryID, 'P37' )

            if #wdLocalLang > 0 then
               if wdLocalLang[1].mainsnak.datatype == 'wikibase-item' then
                    -- wdLocalLang[1].mainsnak.datavalue can be nil: 'no value'
                  localLangID = wdLocalLang[1].mainsnak.datavalue and wdLocalLang[1].mainsnak.datavalue.value.id
                  localLang = lg.id2code[localLangID] or 'unknown language'
               end
            end

         end
      end

   end

   -- providing the url in the priority as described above

   -- requested language, if available
   if urlList[requestedLangID] ~= nil then
      return urlList[requestedLangID], requestedLang, localID, urlList
   end

   -- english language
   if urlList['Q1860'] ~= nil then
      return urlList['Q1860'], 'en', localID, urlList
   end

   -- local language
   if urlList[localLangID] ~= nil then
      return urlList[localLangID], localLang, localID, urlList
   end

   -- anything
   return urlList[next( urlList, nil )], '', localID, urlList

end

-- displaying the table, fetched from Wikidata
-- can be used for debugging purposes
GetP856.dumpUrls = function ( id )
   
   local urlLink
   local urlLinkLanguage
   local urlID
   local urlList = {}
   urlLink, urlLinkLanguage, urlID, urlList = getUrlWithLanguange ( id, '' )
   return mw.dumpObject( urlList )

end

-- getting just the simple link
GetP856.getUrl = function ( id, lang )
   
   local urlLink
   local urlLinkLanguage
   urlLink, urlLinkLanguage = getUrlWithLanguange ( id, lang )
   
   -- providing the whole link (if determined)
   if urlLink == '' then
      return ''
   else
      return urlLink .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P856 benutzen]]'
   end
end

-- Get the link as wiki markup for external links 
-- includes the host to shorten the linktext (if its a long sub page)
GetP856.getUrlAsLinkWithHost = function ( id, lang )
   
   -- getting the link with the base function above
   local urlLink
   local urlLinkLanguage
   urlLink, urlLinkLanguage = getUrlWithLanguange ( id, lang )
   
   -- providing the whole link (if determined)
   if urlLink == '' then
      return ''
   else
      return '[' .. urlLink .. ' ' .. uu.URLutil().getHost( urlLink ) .. ']' .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P856 benutzen]]'
   end
   
end

-- Get the link as wiki markup for external links 
-- includes the host to shorten the linktext (if its a long sub page)
-- after the link, the site language is added
GetP856.getUrlAsLinkWithHostAndLanguage = function ( id, lang )
   
   -- getting the link with the function above
   local urlLink
   local urlLinkLanguage
   
   urlLink, urlLinkLanguage = getUrlWithLanguange ( id, lang )

   -- providing the whole link (if determined)
   if urlLink ~= '' and urlLinkLanguage ~= '' then
      -- link and site language are available
      return '[' .. urlLink .. ' ' .. uu.URLutil().getHost( urlLink ) .. '] (' .. urlLinkLanguage .. ')' .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P856 benutzen]]'
   elseif urlLink ~= '' and urlLinkLanguage == '' then
      -- no site language determined
      return '[' .. urlLink .. ' ' .. uu.URLutil().getHost( urlLink ) .. ']' .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P856 benutzen]]'
   else
      -- got nothing?
      return ''
   end
   
end

-- Same as above but shows a delivered message after the link
-- returning an automatic message with link to the Wikidata-item, if no website is available
-- used in Template: Vorlage:Offizielle Webseite
GetP856.getOfficialWebsite = function ( id, lang, message )

   -- getting the link with the function above
   local urlLink
   local urlLinkLanguage
   local wdID
   local wdLabel = ''
   
   urlLink, urlLinkLanguage, wdID = getUrlWithLanguange ( id, lang )

   -- creating the message text for the link   
   local urlMessage = message or ''
   if urlMessage == '' then
      local page = mw.title.getCurrentTitle()   
      urlMessage = 'Offizielle Webseite von ' .. page.text 
   end

   -- providing the whole link (if determined)
   if urlLink ~= '' and urlLinkLanguage ~= '' then
      -- link and site language are available
      return '<span class="wikidata-content">' .. '[' .. urlLink .. ' ' .. uu.URLutil().getHost( urlLink ) .. '] (' .. urlLinkLanguage .. ')' .. '</span>' .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P856 benutzen]]' .. ' – ' .. urlMessage
   elseif urlLink ~= '' and urlLinkLanguage == '' then
      -- no site language determined
      return '<span class="wikidata-content">' .. '[' .. urlLink .. ' ' .. uu.URLutil().getHost( urlLink ) .. ']' .. '</span>' .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P856 benutzen]]' .. ' – ' .. urlMessage
   else
      -- got nothing?
      if wdID ~= nil then
         return 'Eine offizielle Webseite ist nicht bekannt.<span class="wd-tools-message-inline"> Bitte auf [[:wikidata:' .. wdID .. '|Wikidata]] nachtragen.</span>[[Kategorie:Artikel ohne offizielle Webseite auf Wikidata]]'
      else 
         return 'Eine offizielle Webseite ist nicht bekannt.'         
      end
   end
   
end



-- Get the link as wiki markup for external links 
-- includes the host to shorten the linktext (if its a long sub page)
-- "label" is an optional text, shwon as key in the left side of the quickbar entry
GetP856.getUrlAsLinkWithHostQuickbar = function ( id, wikiValue, label )
   
   -- getting the link with the base function above
   local urlLink
   local urlLinkLanguage
   local wikidataID
   local wikidataURL = ''
   urlLink, urlLinkLanguage, wikidataID = getUrlWithLanguange ( id, nil )
   
   -- 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 Wikidata value not available?
   if urlLink == '' then
      category = wikidataCat.noData
      wikidataClass = ''
   else
      wikidataURL = urlLink
   end
   
   -- is a wiki value defined?
   if ( 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 wikiValue == 'yes'
         or wikiValue == 'y'
         or wikiValue == 'true'
         or wikiValue == 'wahr'
         or wikiValue == 'ja'
         or wikiValue == 'j'
      then
         wikiValue = ''
      end

      if ( wikiValue ~= '' ) and ( urlLink ~= '' ) then
         -- are the values equal?
         if tostring ( urlLink ) == wikiValue then
            category = wikidataCat.equalData
         else
            category = wikidataCat.noEqualData
         end
         
         -- showing the local given URL, if valid
         if uc.isUrl( wikiValue ) == 0 then
            urlLink = wikiValue
         end
         
      end
   end

   -- return nothing, if there is nothing to show
   if urlLink == '' then
      return category
   end

   -- creating the table row 
   local tr = mw.html.create ( 'tr' )
   
   -- first table cell (heading)
   local trLabel = label or 'Webseite'
   tr:addClass('voy-qb-item voy-qb-item-website' )
      :tag('th')
      :addClass('voy-qb-item-key')
      :wikitext(trLabel)
   
   -- second table cell (website)
   if category == wikidataCat.noData then
      tr:tag('td')
         :addClass( 'voy-qb-item-value1 voy-qb-item-value-nowikidata' .. wikidataClass )
            :attr('data-wikidata-id',wikidataID)
            :attr('title','Keine Webseite auf Wikidata')
         :wikitext( '&nbsp;' )
   elseif 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',wikidataURL)
            :attr('title','Daten identisch - URL auf Wikidata: ' .. wikidataURL)
            :wikitext( '[' .. urlLink .. ' ' .. uu.URLutil().getHost( urlLink ) .. ']' )
   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',wikidataURL)
            :attr('title','Daten unterschiedlich - URL auf Wikidata: ' .. wikidataURL)
            :wikitext( '[' .. urlLink .. ' ' .. uu.URLutil().getHost( urlLink ) .. ']' )
   else
      tr:tag('td')
            :addClass( 'voy-qb-item-value1' .. wikidataClass )
            :attr('data-wikidata-id',wikidataID)
            :attr('data-wikidata-value',wikidataURL)
            :wikitext( '[' .. urlLink .. ' ' .. uu.URLutil().getHost( urlLink ) .. ']' )
   end

   -- returning the row
   return tostring ( tr ) .. category .. '[[Kategorie:Seiten, die die Wikidata-Eigenschaft P856 benutzen]]' 
   
end

-- Providing template access
local p = {}


function p.dumpUrls( frame )
    return GetP856.dumpUrls( frame.args[ 1 ] ) or ""
end

function p.getUrl( frame )
    return GetP856.getUrl( frame.args[ 1 ], frame.args[ 2 ] ) or ""
end

function p.getUrlAsLinkWithHost( frame )
    return GetP856.getUrlAsLinkWithHost( frame.args[ 1 ], frame.args[ 2 ] ) or ""
end

function p.getUrlAsLinkWithHostAndLanguage( frame )
    return GetP856.getUrlAsLinkWithHostAndLanguage( frame.args[ 1 ], frame.args[ 2 ] ) or ""
end

function p.getOfficialWebsite( frame )
    return GetP856.getOfficialWebsite( frame.args[ 1 ], frame.args[ 2 ], frame.args[ 3 ] ) or ""
end

function p.getUrlAsLinkWithHostQuickbar( frame )
    return GetP856.getUrlAsLinkWithHostQuickbar( frame.args[ 1 ], frame.args[ 2 ] ) or ""
end

-- for usage in other modules
-- using it the following way:
--
-- local p856 = require( 'Module:GetP856' )
-- foo = p856.GetP856().getUrlAsLinkWithHost( id, lang )
function p.GetP856()
   return GetP856
end

return p