Difference between revisions of "Module:PrevalenceData"
Jump to navigation
Jump to search
blackwiki>Pppery (Remove commented-out code, comments at top (moved to doc page), and "untested" warning (it's used in a high-risk template. Does that not count as "tested" enought?)) |
blackwiki>RexxS (sync from sandbox) |
||
| Line 2: | Line 2: | ||
p.main = function ( frame ) | p.main = function ( frame ) | ||
| − | local | + | local qid = frame.args.qId |
| − | if | + | if qid == "" then qid = 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 | end | ||
| + | pRange = pRange .. label | ||
end | end | ||
| + | pRange = pRange .. ')' | ||
end | end | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| − | |||
end | end | ||
| + | --[[ Todo: References | ||
| + | if prevalenceClaim.references then | ||
| + | end | ||
| + | --]] | ||
end | end | ||
| − | return | + | return pRange |
end | end | ||
return p | return p | ||
Revision as of 18:29, 24 May 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
if qid == "" then qid = 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