Modul:Wikidata utilities: Unterschied zwischen den Versionen
+ function fw.getValuesWithQualifiers( entity, p, qualifiers, count )
Keine Bearbeitungszusammenfassung |
(+ function fw.getValuesWithQualifiers( entity, p, qualifiers, count )) |
||
Zeile 168: | Zeile 168: | ||
end | end | ||
return result | |||
end | |||
local function getValueFromDatavalue( datavalue ) | |||
local v = datavalue.value | |||
local t = datavalue.type | |||
if type( v ) == 'table' then | |||
if t == 'wikibase-entityid' then v = v.id | |||
elseif t == 'time' then v = v.time | |||
elseif t == 'globecoordinate' then v = v.latitude .. ',' .. v.longitude | |||
elseif t == 'quantity' then v = v.amount .. ',' .. v.unit | |||
end | |||
end | |||
return v, t | |||
end | |||
function fw.getValuesWithQualifiers( entity, p, qualifiers, count ) | |||
local result = {} | |||
local statements = fw.getStatements( entity, p, count ) | |||
if #statements == 0 then return result end | |||
if qualifiers and ( type( qualifiers ) == 'string' ) then | |||
qualifiers = { qualifiers } | |||
end | |||
local array, key, value, i, j | |||
for i = 1, #statements, 1 do | |||
array = {} | |||
array[ 'value' ], array[ 'value-type' ] = | |||
getValueFromDatavalue( statements[i].mainsnak.datavalue ) | |||
if statements[i].qualifiers then | |||
if not qualifiers then -- all qualifier properties | |||
for key, value in pairs( statements[i].qualifiers ) do | |||
if #value > 0 then | |||
for j = 1, #value, 1 do | |||
if value[ j ].snaktype == 'value' then | |||
array[ key ], array[ key .. '-type' ] = | |||
getValueFromDatavalue( value[ j ].datavalue ) | |||
break | |||
end | |||
end | |||
end | |||
end | |||
else -- table of selected qualifier properties | |||
for key, value in pairs( qualifiers ) do | |||
if statements[i].qualifiers[ value ] and | |||
( #statements[i].qualifiers[ value ] > 0 ) then | |||
for j = 1, #statements[i].qualifiers[ value ], 1 do | |||
if statements[i].qualifiers[ value ][ j ].snaktype == 'value' then | |||
array[ value ], array[ value .. '-type' ] = | |||
getValueFromgetValueFromDatavalue( statements[i].qualifiers[ value ][ j ].datavalue ) | |||
break | |||
end | |||
end | |||
end | |||
end | |||
end | |||
end | |||
table.insert( result, array ) | |||
end | |||
return result | return result | ||
end | end |