<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3AWikidata%2Fnew</id>
	<title>وحدة:Wikidata/new - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3AWikidata%2Fnew"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Wikidata/new&amp;action=history"/>
	<updated>2026-06-05T18:08:18Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.43.7</generator>
	<entry>
		<id>https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Wikidata/new&amp;diff=325&amp;oldid=prev</id>
		<title>عبد العزيز في 00:39، 3 أغسطس 2022</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Wikidata/new&amp;diff=325&amp;oldid=prev"/>
		<updated>2022-08-03T00:39:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحة جديدة&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}},&lt;br /&gt;
* {{WikidataLabel}}, {{WikidataLink}}, {{WikidataTipo}} e {{WikidataId}}.&lt;br /&gt;
* Permette di accedere a Wikidata in modo più avanzato rispetto a {{#property}}.&lt;br /&gt;
&lt;br /&gt;
* Il modulo è stato importato inizialmente da:&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;
require(&amp;#039;Module:No globals&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&amp;#039;وحدة:Arguments&amp;#039;).getArgs&lt;br /&gt;
local mConvert = require(&amp;#039;وحدة:Convert&amp;#039;)&lt;br /&gt;
local mLanguages = require(&amp;#039;وحدة:languages&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- Categoria per le pagine con errori&lt;br /&gt;
local errorCategory = &amp;#039;[[Categoria:Voci con errori del modulo Wikidata]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Messaggi di errore&lt;br /&gt;
local i18n = {&lt;br /&gt;
	[&amp;quot;errors&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;entityid-param-not-provided&amp;quot;] = &amp;quot;Parametro &amp;#039;&amp;#039;entityid&amp;#039;&amp;#039; non fornito&amp;quot;,&lt;br /&gt;
		[&amp;quot;property-param-not-provided&amp;quot;] = &amp;quot;Parametro &amp;#039;&amp;#039;property&amp;#039;&amp;#039; non fornito&amp;quot;,&lt;br /&gt;
		[&amp;quot;qualifier-param-not-provided&amp;quot;] = &amp;quot;Parametro &amp;#039;&amp;#039;qualifier&amp;#039;&amp;#039; non fornito&amp;quot;,&lt;br /&gt;
		[&amp;quot;value-param-not-provided&amp;quot;] = &amp;quot;Parametro &amp;#039;&amp;#039;valore&amp;#039;&amp;#039; da ricercare non fornito&amp;quot;,&lt;br /&gt;
		[&amp;quot;entity-not-found&amp;quot;] = &amp;quot;Entità non trovata&amp;quot;,&lt;br /&gt;
		[&amp;quot;unknown-claim-type&amp;quot;] = &amp;quot;Tipo asserzione sconosciuta&amp;quot;,&lt;br /&gt;
		[&amp;quot;unknown-snak-type&amp;quot;] = &amp;quot;Tipo di snak sconosciuto&amp;quot;,&lt;br /&gt;
		[&amp;quot;unknown-datavalue-type&amp;quot;] = &amp;quot;Tipo di dato sconosciuto&amp;quot;,&lt;br /&gt;
		[&amp;quot;unknown-entity-type&amp;quot;] = &amp;quot;Tipo di entità sconosciuta&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;quot;somevalue&amp;quot;] = &amp;quot;&amp;#039;&amp;#039;valore sconosciuto&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
	[&amp;quot;novalue&amp;quot;] = &amp;quot;&amp;#039;&amp;#039;nessun valore&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
}&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 &amp;#039;&amp;#039;&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;%s&amp;#039;, msg, cat)&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;#039;[%s %s]&amp;#039;, dest, dest:gsub(uri.protocol .. &amp;#039;://&amp;#039;, &amp;#039;&amp;#039;))	&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.label(entityId)&lt;br /&gt;
	local link = mw.wikibase.sitelink(entityId)&lt;br /&gt;
	if link then&lt;br /&gt;
		if label and label ~= link then&lt;br /&gt;
			return &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;#039; .. label .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;[[&amp;#039; .. link .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return label or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatMonolingualtext(value, args)&lt;br /&gt;
	local ret = &amp;#039;&amp;#039;&lt;br /&gt;
	if not (args.langit == &amp;#039;no&amp;#039; and value.language == &amp;#039;it&amp;#039;) then&lt;br /&gt;
		ret = value.text&lt;br /&gt;
		if args.showlang then&lt;br /&gt;
			ret = mLanguages.lingue( { value.language } ) .. &amp;#039;&amp;amp;nbsp;&amp;#039; .. ret&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 formatTime(value, args)&lt;br /&gt;
	local year, month, day&lt;br /&gt;
	local ret = &amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
	year, month, day = value.time:match(&amp;#039;(%d+)%-(%d%d)%-(%d%d).+&amp;#039;)&lt;br /&gt;
	if value.precision == 9 then&lt;br /&gt;
		ret = tonumber(year)&lt;br /&gt;
	elseif value.precision == 10 then&lt;br /&gt;
		ret = mw.getLanguage(&amp;#039;it&amp;#039;):formatDate(&amp;#039;F Y&amp;#039;, tonumber(year) .. &amp;#039;-&amp;#039; .. month)&lt;br /&gt;
	elseif value.precision == 11 then&lt;br /&gt;
		ret = mw.getLanguage(&amp;#039;it&amp;#039;):formatDate(&amp;#039;j F Y&amp;#039;, tonumber(year) .. &amp;#039;-&amp;#039; .. month .. &amp;#039;-&amp;#039; .. day)&lt;br /&gt;
		ret = ret:gsub(&amp;#039;^1%s&amp;#039;, &amp;#039;1º &amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if value.precision &amp;gt;= 9 and value.precision &amp;lt;= 11 then&lt;br /&gt;
		ret = ret .. (value.time:sub(1, 1) == &amp;#039;-&amp;#039; and &amp;#039; a.C.&amp;#039; or &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&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 == &amp;#039;latitude&amp;#039; then&lt;br /&gt;
		ret = value.latitude&lt;br /&gt;
	elseif args.coord == &amp;#039;longitude&amp;#039; then&lt;br /&gt;
		ret = value.longitude&lt;br /&gt;
	else&lt;br /&gt;
		ret = value.latitude .. &amp;#039;, &amp;#039; .. 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, &amp;#039;\\{&amp;#039;, &amp;#039;{&amp;#039;)&lt;br /&gt;
	pattern = mw.ustring.gsub(pattern, &amp;#039;\\}&amp;#039;, &amp;#039;}&amp;#039;)&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 getEntityIdFromValue(value)&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	if value[&amp;#039;entity-type&amp;#039;] == &amp;#039;item&amp;#039; then&lt;br /&gt;
		prefix = &amp;#039;Q&amp;#039;&lt;br /&gt;
	elseif value[&amp;#039;entity-type&amp;#039;] == &amp;#039;property&amp;#039; then&lt;br /&gt;
		prefix = &amp;#039;P&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		error(i18n.errors[&amp;#039;unknown-entity-type&amp;#039;])&lt;br /&gt;
	end&lt;br /&gt;
	return prefix .. value[&amp;#039;numeric-id&amp;#039;]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatUnitSymbol(entityId, args)&lt;br /&gt;
	local ret = p._getProperty( { &amp;#039;P558&amp;#039;, n = 1, from = entityId } )&lt;br /&gt;
	if ret and args.showunitlink then&lt;br /&gt;
		local link = mw.wikibase.sitelink(entityId)&lt;br /&gt;
		if link then&lt;br /&gt;
			ret = string.format(&amp;#039;[[%s|%s]]&amp;#039;, link, ret)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret and (&amp;#039; &amp;#039; .. ret) or &amp;#039;&amp;#039;&lt;br /&gt;
end&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 ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		local unitId = mw.ustring.match(value.unit, &amp;#039;Q%d+&amp;#039;)&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;
			}&lt;br /&gt;
			ret = mConvert._main(ret, unitId, args.unit, opts)&lt;br /&gt;
		else&lt;br /&gt;
			-- se è richiesto solo il simbolo dell&amp;#039;unità&lt;br /&gt;
			-- senza la conversione lo ottiene da P558&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 = mw.language.getContentLanguage():formatNum(ret)&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 == &amp;#039;wikibase-entityid&amp;#039; then&lt;br /&gt;
		local entityId = datavalue.value.id&lt;br /&gt;
		if args.showprop then&lt;br /&gt;
			ret = p._getProperty( { args.showprop, n = 1, from = entityId } )&lt;br /&gt;
		else&lt;br /&gt;
			ret = args.formatting == &amp;#039;raw&amp;#039; and entityId or formatEntityId(entityId)&lt;br /&gt;
		end&lt;br /&gt;
	elseif datavalue.type == &amp;#039;string&amp;#039; then&lt;br /&gt;
		ret = datavalue.value&lt;br /&gt;
		if args.extlink and snakdatatype == &amp;#039;url&amp;#039; then&lt;br /&gt;
			ret = formatExtLink(ret)&lt;br /&gt;
		end&lt;br /&gt;
	elseif datavalue.type == &amp;#039;monolingualtext&amp;#039; then&lt;br /&gt;
		ret = formatMonolingualtext(datavalue.value, args)&lt;br /&gt;
	elseif datavalue.type == &amp;#039;time&amp;#039; then&lt;br /&gt;
		if args.formatting == &amp;#039;raw&amp;#039; 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 == &amp;#039;globecoordinate&amp;#039; then&lt;br /&gt;
		ret = formatGlobecoordinate(datavalue.value, args)&lt;br /&gt;
	elseif datavalue.type == &amp;#039;quantity&amp;#039; then&lt;br /&gt;
		ret = formatQuantity(datavalue.value, args)&lt;br /&gt;
	else&lt;br /&gt;
		error(i18n.errors[&amp;#039;unknown-datavalue-type&amp;#039;])&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 == &amp;#039;somevalue&amp;#039; then&lt;br /&gt;
		return i18n[&amp;#039;somevalue&amp;#039;]&lt;br /&gt;
	elseif snak.snaktype == &amp;#039;novalue&amp;#039; then&lt;br /&gt;
		return i18n[&amp;#039;novalue&amp;#039;]&lt;br /&gt;
	elseif snak.snaktype == &amp;#039;value&amp;#039; then&lt;br /&gt;
		return formatDatavalue(snak.datavalue, snak.datatype, args)&lt;br /&gt;
	else&lt;br /&gt;
		error(i18n.errors[&amp;#039;unknown-snak-type&amp;#039;])&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, qualifier, args, rawTable, retTable)&lt;br /&gt;
	local formattedQualifiers = retTable or {}&lt;br /&gt;
&lt;br /&gt;
	if claim.qualifiers and claim.qualifiers[qualifier] then&lt;br /&gt;
		for _, q in pairs(claim.qualifiers[qualifier]) do&lt;br /&gt;
			local formattedQualifier = formatSnak(q, args)&lt;br /&gt;
			if formattedQualifier ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				if args.pattern then&lt;br /&gt;
					formattedQualifier = formatFromPattern(formattedQualifier, args)&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(formattedQualifiers, formattedQualifier)&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 qualifiers = mw.text.split(args.showqualifiers, &amp;#039;,&amp;#039;)&lt;br /&gt;
	for _, qualifier in ipairs(qualifiers) do&lt;br /&gt;
		if statement.qualifiers[qualifier] then&lt;br /&gt;
			local formattedQualifier = formatQualifiers(statement, qualifier, 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(&amp;#039;%s (%s)&amp;#039;, text, mw.text.listToText(formattedQualifiers, &amp;#039;, &amp;#039;, &amp;#039;, &amp;#039;))&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 ~= &amp;#039;statement&amp;#039; then&lt;br /&gt;
		error(i18n.errors[&amp;#039;unknown-claim-type&amp;#039;])&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 i, claim in pairs(claims) do&lt;br /&gt;
		local formattedStatement = formatStatement(claim, args)&lt;br /&gt;
		if formattedStatement ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			-- eventuale pattern&lt;br /&gt;
			if args.pattern then&lt;br /&gt;
				formattedStatement = formatFromPattern(formattedStatement, args)&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(formattedStatements, formattedStatement)&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;
	if args.list or args.orderedlist then&lt;br /&gt;
		table.insert(formattedStatements, 1, args.list and &amp;#039;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;&amp;#039; or &amp;#039;&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;&amp;#039;);&lt;br /&gt;
		table.insert(formattedStatements, args.list and &amp;#039;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;#039; or &amp;#039;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&amp;#039;); &lt;br /&gt;
		args.separator = &amp;#039;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;#039;&lt;br /&gt;
		args.conjunction = args.separator&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return 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;
-- Ritorna true se lo statement contiene il qualifier richiesto con un dato valore&lt;br /&gt;
local function hasQualifierValue(statement, args)&lt;br /&gt;
	local ret = false&lt;br /&gt;
	for i, qualifier in pairs(statement.qualifiers[args.qualifier]) do&lt;br /&gt;
		local isItem = qualifier.snaktype == &amp;#039;value&amp;#039; and&lt;br /&gt;
					   qualifier.datavalue.type == &amp;#039;wikibase-entityid&amp;#039;&lt;br /&gt;
		-- per le proprietà di tipo item il confronto è eseguito sull&amp;#039;id&lt;br /&gt;
		if formatSnak(qualifier, isItem and { formatting = &amp;#039;raw&amp;#039; } or {} ) == args.qualifiervalue then&lt;br /&gt;
			ret = true&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ritorna i claim con il rank richiesto&lt;br /&gt;
local function filterRankValue(claims, rank)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for i, claim in pairs(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;
-- Ritorna una table contenente gli statement per la property richiesta,&lt;br /&gt;
-- oppure nil se l&amp;#039;entity o la proprietà non esistono.&lt;br /&gt;
-- Gli statement ritornati sono eventualmente filtrati in base ai parametri:&lt;br /&gt;
-- &amp;quot;rank&amp;quot;, &amp;quot;qualifier&amp;quot;, &amp;quot;qualifiertype&amp;quot; e &amp;quot;n&amp;quot;&lt;br /&gt;
local function getClaims(property, args)&lt;br /&gt;
	local entity, claims, filteredClaims&lt;br /&gt;
	&lt;br /&gt;
	-- get entity&lt;br /&gt;
	entity = mw.wikibase.getEntityObject(args.from)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if property and entity.claims and entity.claims[property] and&lt;br /&gt;
	   #entity.claims[property] &amp;gt; 0 then&lt;br /&gt;
	   claims = entity.claims[property]&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- statements filtrati per rank&lt;br /&gt;
	if args.rank then&lt;br /&gt;
		if args.rank == &amp;#039;best&amp;#039; then&lt;br /&gt;
			filteredClaims = filterRankValue(claims, &amp;#039;preferred&amp;#039;)&lt;br /&gt;
			if #filteredClaims == 0 then&lt;br /&gt;
				filteredClaims = filterRankValue(claims, &amp;#039;normal&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			filteredClaims = filterRankValue(claims, args.rank)&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 i, claim in pairs(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) 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;
	-- con args.qualifiertype=latest ritorna solo il più recente&lt;br /&gt;
	if args.qualifier and args.qualifiertype == &amp;#039;latest&amp;#039; then&lt;br /&gt;
		local latest, latestTime&lt;br /&gt;
		for i, claim in pairs(claims) do&lt;br /&gt;
			if claim.qualifiers and claim.qualifiers[args.qualifier] then&lt;br /&gt;
				for j, qualifier in pairs(claim.qualifiers[args.qualifier]) do&lt;br /&gt;
					if qualifier.datavalue.type == &amp;#039;time&amp;#039; 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 ritorna solo l&amp;#039;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;
--                               API&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p._getClaims(property, args)&lt;br /&gt;
	return getClaims(property, 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, qualifier, args, rawTable, retTable)&lt;br /&gt;
	return formatQualifiers(claim, qualifier, args or {}, rawTable, retTable)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ritorna il valore di una proprietà di Wikidata oppure nil se l&amp;#039;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 property, value, claims&lt;br /&gt;
&lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	property = args[1] and string.upper(args[1]) or nil&lt;br /&gt;
	if not property then&lt;br /&gt;
		error(i18n.errors[&amp;#039;property-param-not-provided&amp;#039;], 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) or nil&lt;br /&gt;
	&lt;br /&gt;
	-- if parameter value is already set, use it&lt;br /&gt;
	if value then&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;
	-- default rank&lt;br /&gt;
	args.rank = args.rank or &amp;#039;best&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- get claims&lt;br /&gt;
	claims = getClaims(property, args)&lt;br /&gt;
&lt;br /&gt;
	return (claims and #claims &amp;gt; 0) and formatStatements(claims, args, rawTable) or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ritorna il valore di un qualifier di una proprietà di Wikidata,&lt;br /&gt;
-- o nil se l&amp;#039;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 property, qualifier, value, claims&lt;br /&gt;
	&lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	property = args[1] and string.upper(args[1]) or nil&lt;br /&gt;
	if not property then&lt;br /&gt;
		error(i18n.errors[&amp;#039;property-param-not-provided&amp;#039;], 2)&lt;br /&gt;
	end&lt;br /&gt;
	qualifier = args[2] and string.upper(args[2]) or nil&lt;br /&gt;
	if not qualifier then&lt;br /&gt;
		error(i18n.errors[&amp;#039;qualifier-param-not-provided&amp;#039;], 2)&lt;br /&gt;
	end&lt;br /&gt;
	value = args[3]&lt;br /&gt;
	&lt;br /&gt;
	-- if parameter value is already set, use it&lt;br /&gt;
	if value then&lt;br /&gt;
		return args.pattern and formatFromPattern(value, args) or value &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- default rank&lt;br /&gt;
	args.rank = args.rank or &amp;#039;best&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- get claims&lt;br /&gt;
	claims = getClaims(property, args)&lt;br /&gt;
	if not claims or #claims == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local formattedQualifiers = {}&lt;br /&gt;
	for _, claim in pairs(claims) do&lt;br /&gt;
		formattedQualifiers = formatQualifiers(claim, qualifier, args, true, 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;
-- Ritorna l&amp;#039;indice dello statement con il valore richiesto, o -1 se non trovato.&lt;br /&gt;
function p._indexOf(args)&lt;br /&gt;
	local ret, property, value, claims&lt;br /&gt;
&lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	property = args[1] and string.upper(args[1]) or nil&lt;br /&gt;
	if not property then&lt;br /&gt;
		error(i18n.errors[&amp;#039;property-param-not-provided&amp;#039;], 2)&lt;br /&gt;
	end&lt;br /&gt;
	value = args[2]&lt;br /&gt;
	if not value then&lt;br /&gt;
		error(i18n.errors[&amp;#039;value-param-not-provided&amp;#039;], 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- default rank&lt;br /&gt;
	args.rank = args.rank or &amp;#039;best&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- get claims&lt;br /&gt;
	claims = getClaims(property, args)&lt;br /&gt;
	if not claims or #claims == 0 then&lt;br /&gt;
		return -1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	args.formatting = &amp;#039;raw&amp;#039;&lt;br /&gt;
	for i, claim in pairs(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;
&lt;br /&gt;
	return ret or -1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ritorna il numero di statement di una proprietà di Wikidata.&lt;br /&gt;
function p._N(args) &lt;br /&gt;
	local entity, property, count&lt;br /&gt;
&lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	property = args[1] and string.upper(args[1]) or nil&lt;br /&gt;
	if not property then&lt;br /&gt;
		error(i18n.errors[&amp;#039;property-param-not-provided&amp;#039;], 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	entity = mw.wikibase.getEntityObject(args.from)&lt;br /&gt;
	if entity and entity.claims and entity.claims[property] then&lt;br /&gt;
		count = #entity.claims[property]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return count or 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ritorna 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;
	local statements = p._getProperty( { &amp;#039;P31&amp;#039;, from = args.from, formatting = &amp;#039;raw&amp;#039; }, 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;
	end&lt;br /&gt;
&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ritorna l&amp;#039;etichetta di un item o di una proprietà Wikidata.&lt;br /&gt;
function p._getLabel(args) &lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	local entityId = args[1] and string.upper(args[1]) or nil&lt;br /&gt;
	if not entityId then&lt;br /&gt;
		error(i18n.errors[&amp;#039;entityid-param-not-provided&amp;#039;], 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.wikibase.label(entityId)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ritorna 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]) or nil&lt;br /&gt;
	if not entityId then&lt;br /&gt;
		error(i18n.errors[&amp;#039;entityid-param-not-provided&amp;#039;], 2)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return entityId:sub(1, 1) == &amp;#039;Q&amp;#039; and formatEntityId(entityId) or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ritorna il datatype di una proprietà Wikidata.&lt;br /&gt;
function p._getDatatype(args) &lt;br /&gt;
	local ret, property, entity, datatype&lt;br /&gt;
&lt;br /&gt;
	-- parametri posizionali&lt;br /&gt;
	property = args[1] and string.upper(args[1]) or nil&lt;br /&gt;
	if not property then&lt;br /&gt;
		error(i18n.errors[&amp;#039;property-param-not-provided&amp;#039;], 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	entity = mw.wikibase.getEntityObject(property)&lt;br /&gt;
	if not entity then&lt;br /&gt;
		error(i18n.errors[&amp;#039;entity-not-found&amp;#039;], 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	datatype = entity.datatype&lt;br /&gt;
	if datatype == &amp;#039;commonsMedia&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;file multimediale su Commons&amp;#039;&lt;br /&gt;
	elseif datatype == &amp;#039;globe-coordinate&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;coordinate geografiche&amp;#039;&lt;br /&gt;
	elseif datatype == &amp;#039;monolingualtext&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;testo monolingua&amp;#039;&lt;br /&gt;
	elseif datatype == &amp;#039;quantity&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;quantità&amp;#039;&lt;br /&gt;
	elseif datatype == &amp;#039;string&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;stringa&amp;#039;&lt;br /&gt;
	elseif datatype == &amp;#039;time&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;data e ora&amp;#039;&lt;br /&gt;
	elseif datatype == &amp;#039;url&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;URL&amp;#039;&lt;br /&gt;
	elseif datatype == &amp;#039;external-id&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;identificatore esterno&amp;#039;&lt;br /&gt;
	elseif datatype == &amp;#039;wikibase-item&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;elemento&amp;#039;&lt;br /&gt;
	elseif datatype == &amp;#039;wikibase-property&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;proprietà&amp;#039;&lt;br /&gt;
	elseif datatype == &amp;#039;math&amp;#039; then&lt;br /&gt;
		ret = &amp;#039;espressione matematica&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		error(i18n.errors[&amp;#039;unknown-datavalue-type&amp;#039;], 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ritorna l&amp;#039;ID dell&amp;#039;item Wikidata collegato alla pagina corrente.&lt;br /&gt;
function p._getId() &lt;br /&gt;
	local entity = mw.wikibase.getEntityObject()&lt;br /&gt;
	return entity and entity.id or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Entry-point per {{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;
-- Entry-point per {{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;
-- Entry-point per {{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;
-- Entry-point per {{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;
-- Entry-point per {{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;
-- Entry-point per {{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;
-- Entry-point per {{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 0&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Entry-point per {{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;
-- Entry-point per {{WikidataId}}&lt;br /&gt;
function p.getId(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._getId()&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>