<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://gears.worldongames.it/quattrogatti/index.php?action=history&amp;feed=atom&amp;title=Modulo%3AWikidata</id>
	<title>Modulo:Wikidata - Cronologia</title>
	<link rel="self" type="application/atom+xml" href="https://gears.worldongames.it/quattrogatti/index.php?action=history&amp;feed=atom&amp;title=Modulo%3AWikidata"/>
	<link rel="alternate" type="text/html" href="https://gears.worldongames.it/quattrogatti/index.php?title=Modulo:Wikidata&amp;action=history"/>
	<updated>2026-05-19T06:33:01Z</updated>
	<subtitle>Cronologia della pagina su questo sito</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://gears.worldongames.it/quattrogatti/index.php?title=Modulo:Wikidata&amp;diff=26&amp;oldid=prev</id>
		<title>GughyXIV: una versione importata</title>
		<link rel="alternate" type="text/html" href="https://gears.worldongames.it/quattrogatti/index.php?title=Modulo:Wikidata&amp;diff=26&amp;oldid=prev"/>
		<updated>2022-10-04T12:56:54Z</updated>

		<summary type="html">&lt;p&gt;una versione importata&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;it&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Versione meno recente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versione delle 14:56, 4 ott 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;it&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Nessuna differenza)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>GughyXIV</name></author>
	</entry>
	<entry>
		<id>https://gears.worldongames.it/quattrogatti/index.php?title=Modulo:Wikidata&amp;diff=25&amp;oldid=prev</id>
		<title>wikipedia&gt;Sakretsu: aggiorno nome modulo</title>
		<link rel="alternate" type="text/html" href="https://gears.worldongames.it/quattrogatti/index.php?title=Modulo:Wikidata&amp;diff=25&amp;oldid=prev"/>
		<updated>2022-03-24T16:11:56Z</updated>

		<summary type="html">&lt;p&gt;aggiorno nome modulo&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nuova pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
* Modulo per implementare le funzionalità dei template:&lt;br /&gt;
* {{Wikidata}}, {{WikidataQ}}, {{WikidataIdx}}, {{WikidataN}}, {{WikidataLabel}}, {{WikidataDescription}}&lt;br /&gt;
* {{WikidataLink}}, {{WikidataId}}, {{WikidataTipo}} e {{WikidataIstanza}}.&lt;br /&gt;
* Permette di accedere a Wikidata in modo più avanzato rispetto a {{#property}}.&lt;br /&gt;
&lt;br /&gt;
* Per la maggior parte riscritto e ampliato a partire dalla versione iniziale a:&lt;br /&gt;
* http://test2.wikipedia.org/w/index.php?title=Module:Wikidata&amp;amp;oldid=52322&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
-- Non utilizzare mai mw.wikibase.getEntity, per esempio un solo utilizzo di&lt;br /&gt;
-- mw.wikibase.getEntity('Q183') fa aumentare di 7 MB l'utilizzo di memoria&lt;br /&gt;
-- per Lua ed è molto lenta se ripetuta (unico utilizzo in getDatatype,&lt;br /&gt;
-- solo per proprietà, non essendoci alternative).&lt;br /&gt;
-- =============================================================================&lt;br /&gt;
&lt;br /&gt;
require('Module:No globals')&lt;br /&gt;
&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local mConvert = require('Module:Conversione')&lt;br /&gt;
local mLanguages = require('Module:Lingue')&lt;br /&gt;
&lt;br /&gt;
-- Categoria per le pagine con errori&lt;br /&gt;
local errorCategory = '[[Categoria:Voci con errori del modulo Wikidata]]'&lt;br /&gt;
&lt;br /&gt;
-- Messaggi&lt;br /&gt;
local i18n = {&lt;br /&gt;
	errors = {&lt;br /&gt;
		['entityid-param-not-provided'] = &amp;quot;Parametro ''entityid'' non fornito&amp;quot;,&lt;br /&gt;
		['property-param-not-provided'] = &amp;quot;Parametro ''property'' non fornito&amp;quot;,&lt;br /&gt;
		['qualifier-param-not-provided'] = &amp;quot;Parametro ''qualifier'' non fornito&amp;quot;,&lt;br /&gt;
		['value-param-not-provided'] = &amp;quot;Parametro ''valore'' da ricercare non fornito&amp;quot;,&lt;br /&gt;
		['entity-not-found'] = 'Entità non trovata',&lt;br /&gt;
		['unknown-claim-type'] = 'Tipo asserzione sconosciuta',&lt;br /&gt;
		['unknown-snak-type'] = 'Tipo di snak sconosciuto',&lt;br /&gt;
		['unknown-datavalue-type'] = 'Tipo di dato sconosciuto',&lt;br /&gt;
		['unknown-entity-type'] = 'Tipo di entità sconosciuta'&lt;br /&gt;
	},&lt;br /&gt;
	somevalue = &amp;quot;''valore sconosciuto''&amp;quot;,&lt;br /&gt;
	novalue = &amp;quot;''nessun valore''&amp;quot;,&lt;br /&gt;
	datatypes = {&lt;br /&gt;
		['commonsMedia'] = 'file multimediale su Commons',&lt;br /&gt;
		['external-id'] = 'identificativo esterno',&lt;br /&gt;
		['geo-shape'] = 'forma geografica',&lt;br /&gt;
		['globe-coordinate'] = 'coordinate geografiche',&lt;br /&gt;
		['math'] = 'espressione matematica',&lt;br /&gt;
		['monolingualtext'] = 'testo monolingua',&lt;br /&gt;
		['quantity'] = 'quantità',&lt;br /&gt;
		['string'] = 'stringa',&lt;br /&gt;
		['tabular-data'] = 'tabular data',&lt;br /&gt;
		['time'] = 'data e ora',&lt;br /&gt;
		['url'] = 'URL',&lt;br /&gt;
		['wikibase-item'] = 'elemento',&lt;br /&gt;
		['wikibase-property'] = 'proprietà'&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
--                             Formatters&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function errhandler(msg)&lt;br /&gt;
	local cat = mw.title.getCurrentTitle().namespace == 0 and errorCategory or ''&lt;br /&gt;
	return string.format('&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;%s', msg, cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatList(values, ordered)&lt;br /&gt;
	local fmt = ordered and '&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;%s&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;' or '&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;%s&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;'&lt;br /&gt;
	return #values &amp;gt; 0 and string.format(fmt, mw.text.listToText(values, '&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;', '&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;')) or ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatExtLink(url)&lt;br /&gt;
	local protocols = { ftp = true, http = true, https = true }&lt;br /&gt;
&lt;br /&gt;
	local success, uri = pcall(function() return mw.uri.new(url) end)&lt;br /&gt;
	if success and uri.protocol and protocols[uri.protocol] then&lt;br /&gt;
		local dest = tostring(uri)&lt;br /&gt;
		return string.format('&amp;lt;span style=&amp;quot;word-break: break-all;&amp;quot;&amp;gt;[%s %s]&amp;lt;/span&amp;gt;', dest, dest:gsub(uri.protocol .. '://', ''))	&lt;br /&gt;
	else&lt;br /&gt;
		return url&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatEntityId(entityId)&lt;br /&gt;
	local label = mw.wikibase.getLabel(entityId)&lt;br /&gt;
	local siteLink = mw.wikibase.getSitelink(entityId)&lt;br /&gt;
	local ret&lt;br /&gt;
	if entityId == mw.wikibase.getEntityIdForCurrentPage() then&lt;br /&gt;
		ret = siteLink&lt;br /&gt;
	elseif siteLink and label then&lt;br /&gt;
		ret = mw.getContentLanguage():ucfirst(label) == siteLink and&lt;br /&gt;
			  string.format('[[%s]]', label) or&lt;br /&gt;
			  string.format('[[%s|%s]]', siteLink, label)&lt;br /&gt;
	elseif siteLink then&lt;br /&gt;
		ret = string.format('[[%s]]', siteLink)&lt;br /&gt;
	elseif label then&lt;br /&gt;
		ret = label&lt;br /&gt;
	else&lt;br /&gt;
		ret = ''&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatMonolingualtext(value, args)&lt;br /&gt;
	local ret = ''&lt;br /&gt;
	if not args.includelang or args.includelang:match('%f[a-z]' .. value.language .. '%f[^a-z]') then&lt;br /&gt;
		if not args.excludelang or not args.excludelang:match('%f[a-z]' .. value.language .. '%f[^a-z]') then&lt;br /&gt;
			ret = value.text&lt;br /&gt;
			if args.showlang then&lt;br /&gt;
				ret = mLanguages.lingue({ value.language }) .. '&amp;amp;nbsp;' .. ret&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatTimeWithPrecision(time, precision)&lt;br /&gt;
	local months = {&lt;br /&gt;
		'gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno',&lt;br /&gt;
		'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre'&lt;br /&gt;
	}&lt;br /&gt;
	local ret, year, month, day&lt;br /&gt;
 &lt;br /&gt;
	year, month, day = time:match('(%d+)%-(%d%d)%-(%d%d).+')&lt;br /&gt;
	year, month, day = tonumber(year), tonumber(month), tonumber(day)&lt;br /&gt;
	if precision == 9 then&lt;br /&gt;
		ret = year&lt;br /&gt;
	elseif precision == 10 then&lt;br /&gt;
		ret = months[month] .. ' ' .. year&lt;br /&gt;
	elseif precision == 11 then&lt;br /&gt;
		ret = day .. ' ' .. months[month] .. ' ' .. year&lt;br /&gt;
		ret = ret:gsub('^1%s', '1º ')&lt;br /&gt;
	end&lt;br /&gt;
	if precision &amp;gt;= 9 and precision &amp;lt;= 11 then&lt;br /&gt;
		ret = ret .. (time:sub(1, 1) == '-' and ' a.C.' or '')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatTime(value, args)&lt;br /&gt;
	local ret&lt;br /&gt;
 &lt;br /&gt;
	if args.time == 'precision' then&lt;br /&gt;
		ret = value.precision&lt;br /&gt;
	elseif args.time == 'calendarmodel' then&lt;br /&gt;
		ret = value.calendarmodel&lt;br /&gt;
	elseif args.time == 'year' and value.precision &amp;gt;= 9 then&lt;br /&gt;
		ret = formatTimeWithPrecision(value.time, 9)&lt;br /&gt;
	elseif args.time == 'month' and value.precision &amp;gt;= 10 then&lt;br /&gt;
		ret = formatTimeWithPrecision(value.time, 10)&lt;br /&gt;
	elseif args.time == 'day' and value.precision &amp;gt;= 11 then&lt;br /&gt;
		ret = formatTimeWithPrecision(value.time, 11)&lt;br /&gt;
	elseif not args.time then&lt;br /&gt;
		ret = formatTimeWithPrecision(value.time, value.precision)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret or ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatGlobecoordinate(value, args)&lt;br /&gt;
	local ret&lt;br /&gt;
	if args.coord == 'latitude' then&lt;br /&gt;
		ret = value.latitude&lt;br /&gt;
	elseif args.coord == 'longitude' then&lt;br /&gt;
		ret = value.longitude&lt;br /&gt;
	elseif args.coord == 'globe' then&lt;br /&gt;
		ret = value.globe&lt;br /&gt;
	else&lt;br /&gt;
		ret = string.format('%s, %s', value.latitude, value.longitude)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatFromPattern(str, args)&lt;br /&gt;
	local pattern = args.pattern&lt;br /&gt;
	pattern = mw.ustring.gsub(pattern, '\\{', '{')&lt;br /&gt;
	pattern = mw.ustring.gsub(pattern, '\\}', '}')&lt;br /&gt;
	return mw.getCurrentFrame():preprocess(mw.message.newRawMessage(pattern, str):plain())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatUserValue(value, args)&lt;br /&gt;
	if args.extlink then&lt;br /&gt;
		value = formatExtLink(value)&lt;br /&gt;
	end&lt;br /&gt;
	return args.pattern and formatFromPattern(value, args) or value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getEntityIdFromValue(value)&lt;br /&gt;
	local prefix = ''&lt;br /&gt;
	if value['entity-type'] == 'item' then&lt;br /&gt;
		prefix = 'Q'&lt;br /&gt;
	elseif value['entity-type'] == 'property' then&lt;br /&gt;
		prefix = 'P'&lt;br /&gt;
	else&lt;br /&gt;
		error(i18n.errors['unknown-entity-type'])&lt;br /&gt;
	end&lt;br /&gt;
	return prefix .. value['numeric-id']&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatUnitSymbol(entityId, args)&lt;br /&gt;
	local ret&lt;br /&gt;
	for _, lang in ipairs({ 'mul', 'it', 'en' }) do&lt;br /&gt;
		ret = p._getProperty({ 'P5061', includelang = lang, from = entityId })&lt;br /&gt;
		if ret and ret ~= '' then&lt;br /&gt;
			break&lt;br /&gt;
		else&lt;br /&gt;
			ret = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local space = ret == '°' and '' or ' '&lt;br /&gt;
	if ret and args.showunitlink then&lt;br /&gt;
		local link = mw.wikibase.getSitelink(entityId)&lt;br /&gt;
		if link then&lt;br /&gt;
			ret = string.format('[[%s|%s]]', link, ret)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret and (space .. ret) or ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- http://lua-users.org/wiki/SimpleRound&lt;br /&gt;
local function round(num, idp)&lt;br /&gt;
	local mult = 10 ^ (idp or 0)&lt;br /&gt;
	return math.floor(num * mult + 0.5) / mult&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function formatQuantity(value, args)&lt;br /&gt;
	local ret = tonumber(value.amount)&lt;br /&gt;
&lt;br /&gt;
	if (args.unit or args.showunit) and value.unit ~= '1' then&lt;br /&gt;
		local unitId = mw.ustring.match(value.unit, 'Q%d+')&lt;br /&gt;
		if args.unit then&lt;br /&gt;
			local opts = {&lt;br /&gt;
				showunit = args.showunit,&lt;br /&gt;
				showunitlink = args.showunitlink,&lt;br /&gt;
				formatnum = args.formatnum,&lt;br /&gt;
				rounding = args.rounding&lt;br /&gt;
			}&lt;br /&gt;
			ret = mConvert._main(ret, unitId, args.unit, opts)&lt;br /&gt;
		else&lt;br /&gt;
			-- se è richiesto solo il simbolo dell'unità&lt;br /&gt;
			-- senza la conversione lo ottiene da P5061&lt;br /&gt;
			ret = args.rounding and round(ret, args.rounding) or ret&lt;br /&gt;
			if args.formatnum then&lt;br /&gt;
				ret = mw.language.getContentLanguage():formatNum(ret)&lt;br /&gt;
			end&lt;br /&gt;
			ret = ret .. formatUnitSymbol(unitId, args)&lt;br /&gt;
		end&lt;br /&gt;
	elseif args.formatnum then&lt;br /&gt;
		ret = args.rounding and round(ret, args.rounding) or ret&lt;br /&gt;
		ret = mw.language.getContentLanguage():formatNum(ret)&lt;br /&gt;
	elseif args.formatduration and value.unit ~= '1' then&lt;br /&gt;
		local unitId = mw.ustring.match(value.unit, 'Q%d+')&lt;br /&gt;
		ret = mConvert._main(ret, unitId, 'second')&lt;br /&gt;
		ret = ret and mw.language.getContentLanguage()&lt;br /&gt;
				:formatDuration(tonumber(ret), { 'days', 'hours', 'minutes', 'seconds' })&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatDatavalue(datavalue, snakdatatype, args)&lt;br /&gt;
	local ret&lt;br /&gt;
&lt;br /&gt;
	if datavalue.type == 'wikibase-entityid' then&lt;br /&gt;
		local entityId = getEntityIdFromValue(datavalue.value)&lt;br /&gt;
		if args.showprop then&lt;br /&gt;
			ret = p._getProperty({ args.showprop, n = 1, from = entityId }) or ''&lt;br /&gt;
		else&lt;br /&gt;
			ret = args.formatting == 'raw' and entityId or formatEntityId(entityId)&lt;br /&gt;
		end&lt;br /&gt;
	elseif datavalue.type == 'string' then&lt;br /&gt;
		ret = datavalue.value&lt;br /&gt;
		if args.extlink and snakdatatype == 'url' then&lt;br /&gt;
			ret = formatExtLink(ret)&lt;br /&gt;
		elseif args.urlencode then&lt;br /&gt;
			ret = mw.uri.encode(ret)&lt;br /&gt;
		end&lt;br /&gt;
	elseif datavalue.type == 'monolingualtext' then&lt;br /&gt;
		ret = formatMonolingualtext(datavalue.value, args)&lt;br /&gt;
	elseif datavalue.type == 'time' then&lt;br /&gt;
		if args.formatting == 'raw' then&lt;br /&gt;
			ret = datavalue.value.time&lt;br /&gt;
		else&lt;br /&gt;
			ret = formatTime(datavalue.value, args)&lt;br /&gt;
		end&lt;br /&gt;
	elseif datavalue.type == 'globecoordinate' then&lt;br /&gt;
		ret = formatGlobecoordinate(datavalue.value, args)&lt;br /&gt;
	elseif datavalue.type == 'quantity' then&lt;br /&gt;
		ret = formatQuantity(datavalue.value, args)&lt;br /&gt;
	else&lt;br /&gt;
		error(i18n.errors['unknown-datavalue-type'])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatSnak(snak, args)&lt;br /&gt;
	if snak.snaktype == 'somevalue' then&lt;br /&gt;
		return i18n['somevalue']&lt;br /&gt;
	elseif snak.snaktype == 'novalue' then&lt;br /&gt;
		return i18n['novalue']&lt;br /&gt;
	elseif snak.snaktype == 'value' then&lt;br /&gt;
		return formatDatavalue(snak.datavalue, snak.datatype, args)&lt;br /&gt;
	else&lt;br /&gt;
		error(i18n.errors['unknown-snak-type'])&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- È al plurale perché anche i qualifier possono avere più di un valore&lt;br /&gt;
-- (si ottiene inserendo due volte lo stesso qualifier)&lt;br /&gt;
local function formatQualifiers(claim, qualifierId, args, rawTable, retTable)&lt;br /&gt;
	local formattedQualifiers = retTable or {}&lt;br /&gt;
&lt;br /&gt;
	if claim.qualifiers and claim.qualifiers[qualifierId] then&lt;br /&gt;
		local qualifiers = claim.qualifiers[qualifierId]&lt;br /&gt;
		-- con args.nq seleziona solo l'n-esimo qualifier&lt;br /&gt;
		if args.nq then&lt;br /&gt;
			local n = tonumber(args.nq)&lt;br /&gt;
			qualifiers = (n and n &amp;lt;= #qualifiers) and { qualifiers[n] } or {}&lt;br /&gt;
		end&lt;br /&gt;
		-- qualifier filtrati per snaktype, default &amp;quot;value&amp;quot;&lt;br /&gt;
		args.snaktype = args.snaktype or 'value'&lt;br /&gt;
		for _, qualifier in ipairs(qualifiers) do&lt;br /&gt;
			if qualifier.snaktype == args.snaktype or args.snaktype == 'all' then&lt;br /&gt;
				local formattedQualifier = formatSnak(qualifier, args)&lt;br /&gt;
				if formattedQualifier ~= '' then&lt;br /&gt;
					if args.pattern then&lt;br /&gt;
						formattedQualifier = formatFromPattern(formattedQualifier, args)&lt;br /&gt;
						if formattedQualifier ~= '' then&lt;br /&gt;
							table.insert(formattedQualifiers, formattedQualifier)&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						table.insert(formattedQualifiers, formattedQualifier)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if rawTable then&lt;br /&gt;
		return formattedQualifiers&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return #formattedQualifiers &amp;gt; 0 and&lt;br /&gt;
		   mw.text.listToText(formattedQualifiers, args.separator, args.conjunction) or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function appendQualifiers(statement, text, args)&lt;br /&gt;
	local formattedQualifiers = {}&lt;br /&gt;
	local qualifierIds = mw.text.split(args.showqualifiers, ',')&lt;br /&gt;
	for _, qualifierId in ipairs(qualifierIds) do&lt;br /&gt;
		if statement.qualifiers[qualifierId] then&lt;br /&gt;
			local formattedQualifier = formatQualifiers(statement, qualifierId, args)&lt;br /&gt;
			table.insert(formattedQualifiers, formattedQualifier)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #formattedQualifiers &amp;gt; 0 then&lt;br /&gt;
		text = string.format('%s (%s)', text, mw.text.listToText(formattedQualifiers, ', ', ', '))&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatStatement(statement, args)&lt;br /&gt;
	if not statement.type or statement.type ~= 'statement' then&lt;br /&gt;
		error(i18n.errors['unknown-claim-type'])&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	local ret = formatSnak(statement.mainsnak, args)&lt;br /&gt;
	-- eventuale showqualifiers&lt;br /&gt;
	if args.showqualifiers and statement.qualifiers then&lt;br /&gt;
		ret = appendQualifiers(statement, ret, args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatStatements(claims, args, rawTable)&lt;br /&gt;
	local formattedStatements = {}&lt;br /&gt;
&lt;br /&gt;
	for _, claim in ipairs(claims) do&lt;br /&gt;
		local formattedStatement = formatStatement(claim, args)&lt;br /&gt;
		if formattedStatement ~= '' then&lt;br /&gt;
			-- eventuale pattern&lt;br /&gt;
			if args.pattern then&lt;br /&gt;
				formattedStatement = formatFromPattern(formattedStatement, args)&lt;br /&gt;
				if formattedStatement ~= '' then&lt;br /&gt;
					table.insert(formattedStatements, formattedStatement)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(formattedStatements, formattedStatement)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if rawTable then&lt;br /&gt;
		return formattedStatements&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ((args.list or args.orderedlist) and #formattedStatements &amp;gt; 1) and&lt;br /&gt;
		   formatList(formattedStatements, args.orderedlist ~= nil) or &lt;br /&gt;
		   mw.text.listToText(formattedStatements, args.separator, args.conjunction)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
--                      Lettura e selezione statement&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Restituisce true se lo statement contiene il qualifier richiesto con un dato valore (o uno tra più valori separati da virgola)&lt;br /&gt;
local function hasQualifierValue(statement, qualifierId, qualifierValue)&lt;br /&gt;
	local ret = false&lt;br /&gt;
	for _, qualifier in ipairs(statement.qualifiers[qualifierId]) do&lt;br /&gt;
		local isItem = qualifier.snaktype == 'value' and&lt;br /&gt;
					   qualifier.datavalue.type == 'wikibase-entityid'&lt;br /&gt;
		local qualifierValues = mw.text.split(qualifierValue, ',')&lt;br /&gt;
		for _, qualifierHas in ipairs(qualifierValues) do&lt;br /&gt;
			-- per le proprietà di tipo item il confronto è eseguito sull'id&lt;br /&gt;
			if formatSnak(qualifier, isItem and { formatting = 'raw' } or {}) == qualifierHas then&lt;br /&gt;
				ret = true&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce i claim con il rank richiesto&lt;br /&gt;
local function filterRankValue(claims, rank)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for _, claim in ipairs(claims) do&lt;br /&gt;
		if claim.rank == rank then&lt;br /&gt;
			table.insert(ret, claim)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce una sequence Lua contenente gli statement per la property richiesta,&lt;br /&gt;
-- anche vuota se la proprietà non esiste, o non ci sono valori che soddisfano i criteri&lt;br /&gt;
-- (&amp;quot;rank&amp;quot;, &amp;quot;qualifier&amp;quot;, &amp;quot;qualifiertype&amp;quot;, &amp;quot;noqualifier&amp;quot;, ...).&lt;br /&gt;
-- Restituisce nil solo se la pagina non è collegata a un elemento Wikidata e non è indicato il from.&lt;br /&gt;
local function getClaims(propertyId, args)&lt;br /&gt;
	local entityId, claims, filteredClaims&lt;br /&gt;
	&lt;br /&gt;
	entityId = args.from or mw.wikibase.getEntityIdForCurrentPage()&lt;br /&gt;
	if not entityId then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- il default rank è 'best'&lt;br /&gt;
	args.rank = args.rank or 'best'&lt;br /&gt;
	if args.rank == 'best' then&lt;br /&gt;
		claims = mw.wikibase.getBestStatements(entityId, propertyId)&lt;br /&gt;
	else&lt;br /&gt;
		-- statements filtrati per rank&lt;br /&gt;
		claims = mw.wikibase.getAllStatements(entityId, propertyId)&lt;br /&gt;
		claims = filterRankValue(claims, args.rank)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- statements filtrati per snaktype, default &amp;quot;value&amp;quot;&lt;br /&gt;
	args.snaktype = args.snaktype or 'value'&lt;br /&gt;
	if args.snaktype and args.snaktype ~= 'all' then&lt;br /&gt;
		filteredClaims = {}&lt;br /&gt;
		for _, claim in ipairs(claims) do&lt;br /&gt;
			if claim.mainsnak.snaktype == args.snaktype then&lt;br /&gt;
				table.insert(filteredClaims, claim)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		claims = filteredClaims&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- statements filtrati per qualifier&lt;br /&gt;
	if args.qualifier then&lt;br /&gt;
		filteredClaims = {}&lt;br /&gt;
		for _, claim in ipairs(claims) do&lt;br /&gt;
			if claim.qualifiers and claim.qualifiers[args.qualifier] then&lt;br /&gt;
				if args.qualifiervalue then&lt;br /&gt;
					if hasQualifierValue(claim, args.qualifier, args.qualifiervalue) then&lt;br /&gt;
						table.insert(filteredClaims, claim)&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					table.insert(filteredClaims, claim)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		claims = filteredClaims&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- statements filtrati per essere senza un qualifier&lt;br /&gt;
	if args.noqualifier then&lt;br /&gt;
		filteredClaims = {}&lt;br /&gt;
		for _, claim in ipairs(claims) do&lt;br /&gt;
			if not (claim.qualifiers and claim.qualifiers[args.noqualifier]) then&lt;br /&gt;
				table.insert(filteredClaims, claim)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		claims = filteredClaims&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- statements filtrati per non avere un certo valore a un certo qualifier opzionale&lt;br /&gt;
	if args.qualifieroptnovalue and args.qualifiervalue then&lt;br /&gt;
		filteredClaims = {}&lt;br /&gt;
		for _, claim in ipairs(claims) do&lt;br /&gt;
			if claim.qualifiers and claim.qualifiers[args.qualifieroptnovalue] then&lt;br /&gt;
				if not hasQualifierValue(claim, args.qualifieroptnovalue, args.qualifiervalue) then&lt;br /&gt;
					table.insert(filteredClaims, claim)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(filteredClaims, claim)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		claims = filteredClaims&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- con args.qualifiertype=latest restituisce solo il più recente&lt;br /&gt;
	if args.qualifier and args.qualifiertype == 'latest' then&lt;br /&gt;
		local latest, latestTime&lt;br /&gt;
		for _, claim in ipairs(claims) do&lt;br /&gt;
			if claim.qualifiers and claim.qualifiers[args.qualifier] then&lt;br /&gt;
				for _, qualifier in ipairs(claim.qualifiers[args.qualifier]) do&lt;br /&gt;
					if qualifier.datavalue.type == 'time' then&lt;br /&gt;
						if not latestTime or qualifier.datavalue.value.time &amp;gt; latestTime then&lt;br /&gt;
							latest = claim&lt;br /&gt;
							latestTime = qualifier.datavalue.value.time&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		claims = latest and { latest } or {}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- con args.n restituisce solo l'n-esimo elemento&lt;br /&gt;
	if args.n then&lt;br /&gt;
		local n = tonumber(args.n)&lt;br /&gt;
		claims = (n and n &amp;lt;= #claims) and { claims[n] } or {}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return claims&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
--                  Funzioni esportate per altri moduli&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p._getClaims(propertyId, args)&lt;br /&gt;
	return getClaims(propertyId, args or {})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatStatement(statement, args)&lt;br /&gt;
	return formatStatement(statement, args or {})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._formatQualifiers(claim, qualifierId, args, rawTable, retTable)&lt;br /&gt;
	return formatQualifiers(claim, qualifierId, args or {}, rawTable, retTable)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce il valore di una proprietà di Wikidata oppure nil se l'entity o&lt;br /&gt;
-- la proprietà non esistono, o se per parametri di selezione gli statement sono zero.&lt;br /&gt;
function p._getProperty(args, rawTable)&lt;br /&gt;
	local propertyId, value, claims, ret&lt;br /&gt;
&lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	propertyId = args[1] and string.upper(args[1])&lt;br /&gt;
	if not propertyId then&lt;br /&gt;
		error(i18n.errors['property-param-not-provided'], 2)&lt;br /&gt;
	end&lt;br /&gt;
	value = args[2]&lt;br /&gt;
	-- fix uppercase&lt;br /&gt;
	args.qualifier = args.qualifier and string.upper(args.qualifier)&lt;br /&gt;
&lt;br /&gt;
	if value then&lt;br /&gt;
		ret = formatUserValue(value, args)&lt;br /&gt;
	elseif args.wd ~= 'no' then&lt;br /&gt;
		claims = getClaims(propertyId, args)&lt;br /&gt;
		ret = (claims and #claims &amp;gt; 0) and formatStatements(claims, args, rawTable) or nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce il valore di un qualifier di una proprietà di Wikidata,&lt;br /&gt;
-- o nil se l'entity o la proprietà non esistono, o se per parametri di selezione non ci sono risultati.&lt;br /&gt;
function p._getQualifier(args)&lt;br /&gt;
	local propertyId, qualifierId, value, claims, ret&lt;br /&gt;
&lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	propertyId = args[1] and string.upper(args[1])&lt;br /&gt;
	if not propertyId then&lt;br /&gt;
		error(i18n.errors['property-param-not-provided'], 2)&lt;br /&gt;
	end&lt;br /&gt;
	qualifierId = args[2] and string.upper(args[2])&lt;br /&gt;
	if not qualifierId then&lt;br /&gt;
		error(i18n.errors['qualifier-param-not-provided'], 2)&lt;br /&gt;
	end&lt;br /&gt;
	value = args[3]&lt;br /&gt;
&lt;br /&gt;
	if value then&lt;br /&gt;
		ret = formatUserValue(value, args)&lt;br /&gt;
	elseif args.wd ~= 'no' then&lt;br /&gt;
		claims = getClaims(propertyId, args)&lt;br /&gt;
		if claims and #claims &amp;gt; 0 then&lt;br /&gt;
			local formattedQualifiers = {}&lt;br /&gt;
			for _, claim in ipairs(claims) do&lt;br /&gt;
				formattedQualifiers = formatQualifiers(claim, qualifierId, args, true, formattedQualifiers)&lt;br /&gt;
			end&lt;br /&gt;
			ret = #formattedQualifiers &amp;gt; 0 and&lt;br /&gt;
				  mw.text.listToText(formattedQualifiers, args.separator, args.conjunction) or nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce l'indice dello statement con il valore richiesto, o nil se non trovato.&lt;br /&gt;
function p._indexOf(args)&lt;br /&gt;
	local ret, propertyId, value, claims&lt;br /&gt;
&lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	propertyId = args[1] and string.upper(args[1])&lt;br /&gt;
	if not propertyId then&lt;br /&gt;
		error(i18n.errors['property-param-not-provided'], 2)&lt;br /&gt;
	end&lt;br /&gt;
	value = args[2]&lt;br /&gt;
	if not value then&lt;br /&gt;
		error(i18n.errors['value-param-not-provided'], 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	claims = getClaims(propertyId, args)&lt;br /&gt;
	if claims and #claims &amp;gt; 0 then&lt;br /&gt;
		args.formatting = 'raw'&lt;br /&gt;
		for i, claim in ipairs(claims) do&lt;br /&gt;
			if formatStatement(claim, args) == value then&lt;br /&gt;
				ret = i&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce il numero di statement di una proprietà di Wikidata.&lt;br /&gt;
function p._N(args)&lt;br /&gt;
	local propertyId, claims&lt;br /&gt;
&lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	propertyId = args[1] and string.upper(args[1])&lt;br /&gt;
	if not propertyId then&lt;br /&gt;
		error(i18n.errors['property-param-not-provided'], 2)&lt;br /&gt;
	end&lt;br /&gt;
	-- get claims&lt;br /&gt;
	claims = getClaims(propertyId, args)&lt;br /&gt;
&lt;br /&gt;
	return claims and #claims or 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce true se la propriertà specificata ha come valore&lt;br /&gt;
-- almeno uno tra gli entityId passati come argomento.&lt;br /&gt;
function p._propertyHasEntity(propertyId, args)&lt;br /&gt;
	local statements = p._getProperty({ propertyId, from = args.from, formatting = 'raw' }, true)&lt;br /&gt;
	if statements then&lt;br /&gt;
		for _, statement in ipairs(statements) do&lt;br /&gt;
			for _, entityId in ipairs(args) do&lt;br /&gt;
				if statement == entityId then&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Se non è stato trovato alcun valore, controlla se questo sia ereditato&lt;br /&gt;
		-- tramite la proprietà &amp;quot;sottoclasse di&amp;quot; (P279) scavando in profondità&lt;br /&gt;
		-- fino all'esaurirsi del numero specificato in args.recursion.&lt;br /&gt;
		--[[ TODO: Valutare se sia opportuna una ricerca ricorsiva potenzialmente infinita.&lt;br /&gt;
			Per farlo si può aggiungere un parametro (opzionale) maxDepth&lt;br /&gt;
			che svolga l'attuale funzione di recursion e cambiare quest'ultimo&lt;br /&gt;
			in un parametro booleano.&lt;br /&gt;
		]]&lt;br /&gt;
		args.recursion = tonumber(args.recursion) or 0&lt;br /&gt;
		if args.recursion &amp;gt; 0 then&lt;br /&gt;
			local recursion = args.recursion&lt;br /&gt;
			if type(args.loadedEntities) ~= 'table' then&lt;br /&gt;
				args.loadedEntities = setmetatable({}, {&lt;br /&gt;
					__newindex = function(t, k, v)&lt;br /&gt;
						rawset(t, k, v)&lt;br /&gt;
						rawset(t, #t+1, k)&lt;br /&gt;
					end })&lt;br /&gt;
				args.loadedEntities[args.from or mw.wikibase.getEntityIdForCurrentPage()] = true&lt;br /&gt;
			end&lt;br /&gt;
			for _, statement in ipairs(statements) do&lt;br /&gt;
				if not args.loadedEntities[statement] then&lt;br /&gt;
					args.loadedEntities[statement] = true&lt;br /&gt;
					args.recursion = args.recursion - 1&lt;br /&gt;
					args.from = statement&lt;br /&gt;
					if p._propertyHasEntity('P279', args) then&lt;br /&gt;
						return true, args.loadedEntities&lt;br /&gt;
					end&lt;br /&gt;
					args.recursion = recursion&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return false, args.loadedEntities&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce true se la proprietà P31 (instance of) ha come valore almeno uno tra gli entityId specificati&lt;br /&gt;
function p._instanceOf(args)&lt;br /&gt;
	return p._propertyHasEntity('P31', args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce true se la proprietà P279 (subclass of) ha come valore almeno uno tra gli entityId specificati&lt;br /&gt;
function p._subclassOf(args)&lt;br /&gt;
	return p._propertyHasEntity('P279', args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce l'etichetta di un item o di una proprietà Wikidata.&lt;br /&gt;
function p._getLabel(args)&lt;br /&gt;
	local entityId = args[1] and string.upper(args[1])&lt;br /&gt;
	local ret&lt;br /&gt;
	if args[2] then&lt;br /&gt;
		ret = mw.wikibase.getLabelByLang(entityId, args[2])&lt;br /&gt;
	else&lt;br /&gt;
		ret = mw.wikibase.getLabel(entityId)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce la descrizione di un item o di una proprietà Wikidata.&lt;br /&gt;
function p._getDescription(args)&lt;br /&gt;
	local entityId = args[1] and string.upper(args[1])&lt;br /&gt;
	local ret = mw.wikibase.getDescription(entityId)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce il titolo della pagina collegata a un dato item Wikidata.&lt;br /&gt;
function p._getLink(args) &lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	local entityId = args[1] and string.upper(args[1])&lt;br /&gt;
	if not entityId then&lt;br /&gt;
		error(i18n.errors['entityid-param-not-provided'], 2)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return entityId:sub(1, 1) == 'Q' and formatEntityId(entityId) or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce il datatype di una proprietà Wikidata.&lt;br /&gt;
function p._getDatatype(args) &lt;br /&gt;
	local propertyId, entity&lt;br /&gt;
&lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	propertyId = args[1] and string.upper(args[1])&lt;br /&gt;
	if not propertyId then&lt;br /&gt;
		error(i18n.errors['property-param-not-provided'], 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	entity = mw.wikibase.getEntity(propertyId)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		error(i18n.errors['entity-not-found'], 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not i18n.datatypes[entity.datatype] then&lt;br /&gt;
		error(i18n.errors['unknown-datavalue-type'], 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return i18n.datatypes[entity.datatype]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Restituisce l'ID dell'item Wikidata collegato alla pagina corrente o a una pagina specificata&lt;br /&gt;
-- (nota: segue i redirect fermandosi al primo redirect collegato a un elemento)&lt;br /&gt;
function p._getId(args)&lt;br /&gt;
	local ret&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		local title = mw.title.new(args[1])&lt;br /&gt;
		while title do&lt;br /&gt;
			local id = mw.wikibase.getEntityIdForTitle(title.prefixedText)&lt;br /&gt;
			if id then&lt;br /&gt;
				ret = id&lt;br /&gt;
				break&lt;br /&gt;
			else&lt;br /&gt;
				title = title.redirectTarget&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		ret = mw.wikibase.getEntityIdForCurrentPage()&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
--                  Funzioni esportate per i template&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{Wikidata}}&lt;br /&gt;
function p.getProperty(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._getProperty(getArgs(frame, { parentOnly = true }))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataQ}}&lt;br /&gt;
function p.getQualifier(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._getQualifier(getArgs(frame, { parentOnly = true }))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataIdx}}&lt;br /&gt;
function p.indexOf(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._indexOf(getArgs(frame, { parentOnly = true }))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataN}}&lt;br /&gt;
function p.N(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._N(getArgs(frame, { parentOnly = true }))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataLabel}}&lt;br /&gt;
function p.getLabel(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._getLabel(getArgs(frame, { parentOnly = true }))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataDescription}}&lt;br /&gt;
function p.getDescription(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._getDescription(getArgs(frame, { parentOnly = true }))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataLink}}&lt;br /&gt;
function p.getLink(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._getLink(getArgs(frame, { parentOnly = true }))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataIstanza}}&lt;br /&gt;
function p.instanceOf(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._instanceOf(getArgs(frame, { parentOnly = true })) and 1 or ''&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataTipo}}&lt;br /&gt;
function p.getDatatype(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._getDatatype(getArgs(frame, { parentOnly = true }))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataId}}&lt;br /&gt;
function p.getId(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._getId(getArgs(frame, { parentOnly = true }))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataValido}}&lt;br /&gt;
function p.checkProperty(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._N(getArgs(frame, { parentOnly = true })) &amp;gt; 0 and 1 or ''&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Funzione per il template {{WikidataClasse}}&lt;br /&gt;
function p.propertyHasEntity(frame)&lt;br /&gt;
	local args = getArgs(frame, { parentOnly = true })&lt;br /&gt;
	local propertyId = args[1]&lt;br /&gt;
	args.recursion = tonumber(args.prof) or 8&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._propertyHasEntity(propertyId, args) and 1 or ''&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wikipedia&gt;Sakretsu</name></author>
	</entry>
</feed>