Difference between revisions of "Module:PrevalenceData"

From blackwiki
Jump to navigation Jump to search
blackwiki>Yair rand
m (10 revisions imported)
 
(8 intermediate revisions by 4 users not shown)
Line 1: Line 1:
-- This module is specifically the Wikidata property "prevalence" (P1193), due
 
-- to its particular need for ranges and area-based qualifiers, and the lack of
 
-- support for these in the main Wikidata module.
 
 
-- Completely untested.
 
 
local p = {}
 
local p = {}
 
--local wikidata = require( 'Module:Wikidata' )
 
  
 
p.main = function ( frame )
 
p.main = function ( frame )
--local entity = mw.wikibase.getEntity( 'Q133087' )
+
local qid = frame.args.qId or ""
local entity = mw.wikibase.getEntity( frame.args.qId or nil )
+
if qid == "" then qid = mw.wikibase.getEntityIdForCurrentPage() end
if entity then
+
if not qid then return nil end
local prevalenceClaims = entity.claims.P1193
+
local prevalenceClaims = mw.wikibase.getBestStatements(qid, "P1193")
-- TODO: Get best claim, not always just the first one.
+
local pRange = ''
-- Probably use getBestStatements.
+
-- Run through all prevalence claims - the table prevalenceClaims always exists but may be empty
local prevalenceClaim = prevalenceClaims and prevalenceClaims[ 1 ]
+
for i, prevalenceClaim in ipairs( prevalenceClaims ) do
if prevalenceClaim then
+
local prevalenceValue = prevalenceClaim.mainsnak.datavalue and prevalenceClaim.mainsnak.datavalue.value
local prevalenceValue = prevalenceClaim.mainsnak.datavalue.value
+
if prevalenceValue then
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 lowerBound = prevalenceValue.lowerBound * 100
 
local upperBound = prevalenceValue.upperBound * 100
 
local upperBound = prevalenceValue.upperBound * 100
local pRange = lowerBound
+
pRange = pRange .. lowerBound
 
if lowerBound ~= upperBound then
 
if lowerBound ~= upperBound then
pRange = pRange .. ' to ' .. upperBound
+
pRange = pRange .. '' .. upperBound
 
end
 
end
+
else
pRange = pRange .. '%'
+
local amount = prevalenceValue.amount * 100
if prevalenceClaim.qualifiers then
+
pRange = pRange .. amount
-- Qualifiers for prevalence are currently unstandardized.
+
end
-- Keep guessing until the right one is found.
+
pRange = pRange .. '%'
local quals = prevalenceClaim.qualifiers.P276 or -- location
+
if prevalenceClaim.qualifiers then
prevalenceClaim.qualifiers.P1001 or          -- applies to jurisdiction
+
-- Qualifiers for prevalence are currently unstandardized.
prevalenceClaim.qualifiers.P17              -- country
+
-- Keep guessing until the right one is found.
if quals then
+
local quals = prevalenceClaim.qualifiers.P276 or -- location
pRange = pRange .. ' ('
+
prevalenceClaim.qualifiers.P1001 or          -- applies to jurisdiction
for k, qual in pairs(quals) do
+
prevalenceClaim.qualifiers.P17              -- country
if k > 1 then
+
if quals then
pRange = pRange .. ', '
+
pRange = pRange .. ' ('
end
+
for k, qual in pairs(quals) do
local qualId = qual.datavalue.value[ 'numeric-id' ]
+
if k > 1 then
local link = mw.wikibase.sitelink( 'Q' .. qualId )
+
pRange = pRange .. ', '
local label = ({
 
-- Certain geographic locales might need a
 
-- manual-ish override for labels.
 
[ 132453 ] = 'developed world'
 
})[ qualId ] or mw.wikibase.label( 'Q' .. qualId )
 
if link then
 
label = '[[' .. link .. '|' .. label .. ']]'
 
end
 
pRange = pRange .. label
 
 
 
end
 
end
pRange = pRange .. ')'
+
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 ] = 'developed world'
 +
})[ qualId ] or mw.wikibase.label( 'Q' .. qualId )
 +
if link then
 +
label = '[[' .. link .. '|' .. label .. ']]'
 +
end
 +
pRange = pRange .. label
 
end
 
end
 +
pRange = pRange .. ')'
 
end
 
end
 
--[[
 
-- Todo: References
 
if prevalenceClaim.references then
 
 
end
 
]]--
 
 
return pRange
 
 
end
 
end
 
end
 
end
 +
--[[ Todo: References
 +
if prevalenceClaim.references then
 +
end
 +
--]]
 
end
 
end
return ''
+
return pRange
 
end
 
end
  
 
return p
 
return p

Latest revision as of 08:25, 27 September 2020

This module is specifically for the Wikidata property Template:Wikidata property link, due to its particular need for ranges and area-based qualifiers and the lack of support for these in the main Wikidata module. It is used by Template:infobox medical condition.


local p = {}

p.main = function ( frame )
	local qid = frame.args.qId or ""
	if qid == "" then qid = mw.wikibase.getEntityIdForCurrentPage() end
	if not qid then return nil end
	local prevalenceClaims = mw.wikibase.getBestStatements(qid, "P1193")
	local pRange = ''
	-- Run through all prevalence claims - the table prevalenceClaims always exists but may be empty
	for i, prevalenceClaim in ipairs( prevalenceClaims ) do
		local prevalenceValue = prevalenceClaim.mainsnak.datavalue and 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 ] = 'developed world'
						})[ 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

return p