Przejdź do zawartości

Moduł:Wikidane

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [zobacz] [edytuj] [historia] [odśwież]

Moduł do odczytywania i prezentowania wartości cech z wikidanych powiązanych z bieżącym artykułem. Zobacz też: Moduł:Wikidata.

P

Funkcja do odczytu i prezentacji wartości cechy.

parametry

Pole Do czego służy? Jak wypełnić?
1 Numer cechy Np. 94 (herb) lub 395 (tablice rejestracyjne).
id Opcjonalny identyfikator danych z Wikidanych. Domyślnie odczytywane są cechy z danych powiązanych z bieżącą stroną. Np. Q42.
separator Separator wartości, gdy dostępna jest więcej niż jedna (zbiór):
i
przecinek oraz spójnik i przed ostatnią wartością
lub
przecinek oraz spójnik lub przed ostatnią wartością
inny
jawnie podany inny separator
brak
przecinek (wartość domyślna)
Np. lub aby wyświetlić więcej niż jedną datę urodzin.
linkuj Wartość logiczna do sterowania generowaniem linków:
tak
generuj link zawsze (jeśli możliwy)
nie
generuj tylko opis
brak
generuj w zależności od typu, tj. tak dla artykułów i koordynat, nie dla dat
Np. tak dla daty urodzin lub śmierci
procesor Wtyczka do formatowania wartości Pełna nazwa modułu, który w jest odpowiedzialny za formatowanie zawartości cechy.
bez wartości Treść wartości specjalnej oznaczająca brak danej cechy. Zaleca się podawanie odpowiedniej treści, gdyż zależy ona silnie od kontekstu cechy. Domyślna treść bez wartości raczej nie oddaje jasno informacji i dlatego artykuły, które korzystają z domyślnego tekstu umieszczane są w kategorii technicznej Kategoria:Cecha bez wartości.
ile Maksymalna liczba wartości do odczytania. Cecha może zawierać więcej niż jedną wartość oraz domyślnie zwracane są wszystkie najlepsze wyniki. Tym polem można ten zbiór dodatkowo ograniczyć. Pole musi mieć wartość nie mniejszą niż 1.
P518 Filtr kwalifikatora „odnosi się do części Lista akceptowanych wartości Qnnn. Dopuszczalne są też wartości specjalne novalue, somevalue i missing. Elementy należy oddzielać znakiem odstępu.
P625 Filtr kwalifikatora „współrzędne geograficzne Wartość globe oznacza, że wymagana jest obecność kwalifikatora z jakimikolwiek współrzędnymi.

T

Funkcja do sprawdzenia obecności cechy.

parametry

Pole Do czego służy? Jak wypełnić?
1 Numer cechy Np. 94 (herb) lub 395 (tablice rejestracyjne).
id Opcjonalny identyfikator danych z Wikidanych. Domyślnie odczytywane są cechy z danych powiązanych z bieżącą stroną. Np. Q42.
P518 Filtr kwalifikatora „odnosi się do części Lista akceptowanych wartości Qnnn. Dopuszczalne są też wartości specjalne novalue, somevalue i missing. Elementy należy oddzielać znakiem odstępu.
P625 Filtr kwalifikatora „współrzędne geograficzne Wartość globe oznacza, że wymagana jest obecność kwalifikatora z jakimikolwiek współrzędnymi.

etykieta

Funkcja do nazwy elementu (domyślnie z bieżącej strony). Jeśli nazwa nie istnieje to zwracana jest nazwa strony bez prefiksów.

parametry

Pole Do czego służy?
1..N Kod języka, w którym nazwę chcemy uzyskać. Jeśli podane jest więcej kodów niż jeden (w kolejnych parametrach) to zwracana jest pierwsza znaleziona nazwa. Brak parametrów oznacza domyślnie wybór nazwy w języku polskim.
id Opcjonalny identyfikator danych z Wikidanych. Domyślnie odczytywane są cechy z danych powiązanych z bieżącą stroną.

id

Funkcja do odczytu identyfikatora strony na wikidanych.

parametry

Pole Do czego służy?
1 Opcjonalny tytuł strony. Domyślnie brana jest strona bieżąca.
idwiki Globalny identyfikator danej wiki. Domyślnie ta wartość jest ustawiona na lokalną wiki.

label

Funkcja do odczytu nazwy elementu w Wikidanych.

parametry

Pole Do czego służy?
1 Identyfikator elementu w Wikidanych. Identyfikator musi się zaczynać na P lub Q, po których następuje ciąg cyfr dziesiętnych.

page

Funkcja do odczytu nazwy strony na Wikipedii.

parametry

Pole Do czego służy?
1 Identyfikator elementu w Wikidanych. Identyfikator musi się zaczynać na P lub Q, po których następuje ciąg cyfr dziesiętnych.

V i Dump

Funkcje techniczne do odczytu dowolnej gałęzi lub liścia z drzewa danych. V zwraca wartość liścia, jeśli istnieje. Dump robi zrzut diagnostyczny wybranej gałęzi.

parametry

Pole Do czego służy?
1..N Nazwa lub indeks coraz bardziej zagnieżdżonej gałęzi danych. Interesujące identyfikatory dla pierwszego poziomu to:
  • id z identyfikatorem Qid
  • claims ze zbiorem cech
  • labels ze zbiorem etykiet w różnych językach
  • sitelinks z interwiki i „medalami”
  • bestclaims ze zbiorem odfiltrowanych cech, który można zawęzić parametrami opisanymi w funkcji P
id Opcjonalny identyfikator danych z Wikidanych. Domyślnie odczytywane są cechy z danych powiązanych z bieżącą stroną.

przykłady

  • {{#invoke:Wikidane|V|sitelinks|plwikivoyage|title}} – tytuł strony w Wikipodróżach
  • {{#invoke:Wikidane|V|sitelinks|commonswiki|title}} – tytuł strony w repozytorium multimediów
  • {{#invoke:Wikidane|V|bestclaims|P18|1|mainsnak|datavalue|value}} – nazwa pierwszego pliku z ilustracją w repozytorium multimediów
  • {{#invoke:Wikidane|V|bestclaims|P625|1|mainsnak|datavalue|value|latitude}} – szerokość geograficzna z pierwszych dostępnych współrzędnych
  • {{#invoke:Wikidane|V|bestclaims|P159|P625=globe|1|qualifiers|P625|1|datavalue|value|latitude}} – szerokość geograficzna z pierwszych dostępnych współrzędnych podanych jako kwalifikator dla siedziby przedsiębiorstwa

uwagi

Błędy

Błędy należy zgłaszać na stronie Wikibooks:Kwestie techniczne.
local moduleData = mw.loadData("Module:Wikidane/data")

local function loadArg(frame,id)
	local result = frame.args[id]
	if not result or (#result == 0) then
		result = frame.getParent and frame:getParent().args[id] or nil;
		if not result or (#result == 0) then
			return nil
		end
	end
 
	return result
end

local function getEntityData(frame)
	local qid = loadArg(frame, "id")
	local data = mw.wikibase.getEntityObject(qid)
	if not data then
		return
	end

	local f = frame.args[1] and frame or frame:getParent()
	local i = 1
	if f.args[1] == "bestclaims" then
		local pid = f.args[2]
		if not pid then
			return f, {}, 2
		end
		
		local sd = require("Module:Wikidane/select")
		local _, qid, prop = sd.selectProperty(pid, sd.prepareFilters(frame), qid)
		if not qid then
			return nil
		end
		
		data = prop
		i = 3
	end

	return f, data, i
end

return {

	T = function(frame)
		local qid = loadArg(frame, "id")
		local pid = loadArg(frame, 1)
		if not pid then
			return moduleData.errorMissingPropertyId
		end
		
		local sd = require("Module:Wikidane/select")
		local pid, qid, prop = sd.selectProperty(pid, sd.prepareFilters(frame), qid)
		if qid then
			return #prop
		end
	end,
	
	P = function(frame)
		local qid = loadArg(frame, "id")
		local pid = loadArg(frame, 1)
		if not pid then
			return moduleData.errorMissingPropertyId
		end
		
		local sd = require("Module:Wikidane/select")
		local pid, qid, prop = sd.selectProperty(pid, sd.prepareFilters(frame), qid, tonumber(loadArg(frame, "ile")))
		if qid then
			return require("Moduł:Wikidane/format").run(frame, pid, prop)
		end
	end,
	
	etykieta = function(frame)
		local qid = loadArg(frame, "id")
		local entity = mw.wikibase.getEntityObject(qid)
		if entity then
			local i = 1
			local lang = true
			while lang do
				lang = frame.args[i]
				local result = entity:getLabel(lang)
				if result and (#result > 0) then
					return result
				end
				
				i = i + 1
			end
		end
	
		return mw.title.getCurrentTitle().text .. moduleData.itemWithoutLabelCat
	end,

	id = function(frame)
		local title = loadArg(frame, 1)
		if(title)then
			return mw.wikibase.getEntityIdForTitle(mw.getContentLanguage():ucfirst(title), loadArg(frame, "idwiki") or mw.wikibase.getGlobalSiteId())
		else
			return mw.wikibase.getEntityIdForCurrentPage()
		end;
	end,
	
	label = function(frame)
		local id = loadArg(frame, 1)
		if id and string.match(id, "^[PQ]%d+$") then
			return mw.wikibase.label(id)
		end
	end,
	
	page = function(frame)
		local id = loadArg(frame, 1)
		if id then
			return mw.wikibase.sitelink(id)
		else
			return nil
		end
	end,

	V = function(frame)
		local f, data, i = getEntityData(frame)
		if not data then
			return nil
		end

		while true do
			local index = f.args[i]
			if not index then
				return tostring(data)
			end

			data = data[index] or data[tonumber(index)]
			if not data then
				return
			end

			i = i + 1
		end
	end,

	Dump = function(frame)
		local f, data, i = getEntityData(frame)
		if not data then
			return moduleData.warnDump
		end

		while true do
			local index = f.args[i]
			if not index then
				return "<pre>"..mw.dumpObject(data).."</pre>"..moduleData.warnDump
			end

			data = data[index] or data[tonumber(index)]
			if not data then
				return moduleData.warnDump
			end

			i = i + 1
		end
	end,
}