Модуль:PrevalenceData

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Використання

Цей модуль призначений спеціально для властивості Вікіданих P1193: поширеність, оскільки вона має особливі потреби у діапазонах та area-based кваліфікаторах, чого немає в основному модулі Вікіданих. Використовується у шаблоні {{infobox medical condition}}.

local p = {}

p.main = function ( frame )
	local entity = mw.wikibase.getEntity( frame.args.qId or nil )
	if entity then
		local prevalenceClaims = entity.claims and entity.claims.P1193
		-- TODO: Get best claim, not always just the first one.
		-- Probably use getBestStatements.
		if prevalenceClaims then
			local pRange = ''
			-- Run through all prevalence claims
			for i, prevalenceClaim in pairs( prevalenceClaims ) do
				local prevalenceValue = prevalenceClaim.mainsnak.datavalue.value
				if prevalenceValue then
					if string.len( pRange ) > 0 then
						-- Split multiple claims
						-- Maybe line break instead?
						pRange = pRange .. ', '
					end
					if prevalenceValue.lowerBound and prevalenceValue.upperBound then
						local lowerBound = prevalenceValue.lowerBound * 100
						local upperBound = prevalenceValue.upperBound * 100
						pRange = pRange .. lowerBound
						if lowerBound ~= upperBound then
							pRange = pRange .. '—' .. upperBound
						end
					else
						local amount = prevalenceValue.amount * 100
						pRange = pRange .. amount
					end
					
					pRange = pRange .. '%'
					if prevalenceClaim.qualifiers then
						-- Qualifiers for prevalence are currently unstandardized.
						-- Keep guessing until the right one is found.
						local quals = prevalenceClaim.qualifiers.P276 or -- location
							prevalenceClaim.qualifiers.P1001 or          -- applies to jurisdiction
							prevalenceClaim.qualifiers.P17               -- country
						if quals then
							pRange = pRange .. ' ('
							for k, qual in pairs(quals) do
								if k > 1 then
									pRange = pRange .. ', '
								end
								local qualId = qual.datavalue.value[ 'numeric-id' ]
								local link = mw.wikibase.sitelink( 'Q' .. qualId )
								local label = ({
									-- Certain geographic locales might need a
									-- manual-ish override for labels. 
									[ 132453 ] = 'розвинені країни'
								})[ qualId ] or mw.wikibase.label( 'Q' .. qualId )
								if link then
									label = '[[' .. link .. '|' .. label .. ']]'
								end
								pRange = pRange .. label
								
							end
							pRange = pRange .. ')'
						end
					end
				end
				--[[
				-- Todo: References
				if prevalenceClaim.references then 
					
				end
				]]--
				
			end
			return pRange
		end
	end
	return ''
end

return p