Modul:Wikidata utilities: Unterschied zwischen den Versionen
überarbeitet
KKeine Bearbeitungszusammenfassung |
(überarbeitet) |
||
Zeile 67: | Zeile 67: | ||
function fw.getBestStatements( entity, p ) | function fw.getBestStatements( entity, p ) | ||
if type( entity ) == 'string' then | if type( entity ) == 'string' then | ||
return mw.wikibase.getBestStatements( entity, p ) | |||
else | else | ||
return entity:getBestStatements( p ) | |||
end | end | ||
end | end | ||
Zeile 102: | Zeile 100: | ||
function fw.getValue( entity, p, catArray ) | function fw.getValue( entity, p, catArray ) | ||
if | local value = '' | ||
if entity and entity ~= '' and p and p ~= '' then | |||
value = getFirstValue( fw.getBestStatements( entity, p ) ) | |||
if value and catArray then | |||
catArray[ p ] = '' | |||
end | |||
value = value or '' | |||
value = '' | |||
end | end | ||
if catArray then | if catArray then | ||
Zeile 120: | Zeile 116: | ||
function fw.getId( entity, p, catArray ) | function fw.getId( entity, p, catArray ) | ||
if | local value = '' | ||
if entity and entity ~= '' and p and p ~= '' then | |||
value = getFirstValue( fw.getBestStatements( entity, p ) ) | |||
if value then | |||
if catArray then catArray[ p ] = '' end | |||
value = value.id | |||
else | |||
value = '' | |||
end | |||
end | end | ||
if catArray then | if catArray then | ||
Zeile 139: | Zeile 134: | ||
function fw.getValues( entity, p, count, catArray ) | function fw.getValues( entity, p, count, catArray ) | ||
if | local values = '', statements | ||
if entity and entity ~= '' and p and p ~= '' then | |||
statements = fw.getBestStatements( entity, p ) | |||
values = getNValues( statements, count or #statements ) | |||
if catArray and #values > 0 then catArray[ p ] = '' end | |||
end | end | ||
if catArray then | if catArray then | ||
return values, catArray | return values, catArray | ||
else | else | ||
Zeile 154: | Zeile 147: | ||
end | end | ||
function fw.getValuesByLang( entity, p, count, lang ) | function fw.getValuesByLang( entity, p, count, lang, catArray ) | ||
if ( | local ar = '', statements, i, value | ||
if entity and entity ~= '' and p and p ~= '' then | |||
statements = fw.getBestStatements( entity, p ) | |||
ar = {} | |||
count = count or #statements | |||
if #statements > 0 and count > 0 then | |||
i = 0 | |||
repeat | |||
i = i + 1 | |||
if statements[ i ].mainsnak.snaktype == 'value' then | |||
value = statements[ i ].mainsnak.datavalue.value | |||
if value.language and lang == value.language then | |||
table.insert( ar, statements[ i ].mainsnak.datavalue.value.text ) | |||
end | |||
end | |||
until ( i >= #statements ) or ( #ar >= count ) | |||
end | |||
if catArray and #ar > 0 then catArray[ p ] = '' end | |||
end | end | ||
if catArray then | |||
return ar, catArray | |||
else | |||
return ar | return ar | ||
end | end | ||
end | end | ||
function fw.getValuesWithQualifierIds( entity, p, qualifierP, defaultId ) | function fw.getValuesWithQualifierIds( entity, p, qualifierP, defaultId, catArray ) | ||
local result = {} | local result = {}, statements, value, id, i, j | ||
if entity and entity ~= '' and p and p ~= '' and qualifierP and qualifierP ~= '' then | |||
statements = fw.getStatements( entity, p, nil ) | |||
if #statements > 0 then | |||
-- defaultId is used if a qualifier is missing | |||
if not defaultId or defaultId == '' or type( defaultId ) ~= 'string' then | |||
defaultId = 'unknown' | |||
end | |||
for i = 1, #statements, 1 do | |||
value = statements[ i ].mainsnak.datavalue.value | |||
id = defaultId | |||
if statements[ i ].qualifiers and statements[ i ].qualifiers[ qualifierP ] | |||
and ( #statements[ i ].qualifiers[ qualifierP ] > 0 ) then | |||
for j = 1, #statements[ i ].qualifiers[ qualifierP ], 1 do | |||
if statements[ i ].qualifiers[ qualifierP ][ j ].snaktype == 'value' then | |||
id = statements[ i ].qualifiers[ qualifierP ][ j ].datavalue.value.id | |||
if catArray then catArray[ p ] = '' end | |||
break | |||
end | |||
end | |||
end | end | ||
result[ id ] = value | |||
end | end | ||
end | end | ||
end | end | ||
if catArray then | |||
return result | return result, catArray | ||
else | |||
return result | |||
end | |||
end | end | ||
-- get values array for monolingual text | -- get values array for monolingual text | ||
function fw.getValuesWithLanguages( entity, p ) | function fw.getValuesWithLanguages( entity, p, catArray ) | ||
local result = {} | local result = {}, statements, hyphen, i, lng, value | ||
if entity and entity ~= '' and p and p ~= '' then | |||
statements = fw.getStatements( entity, p, nil ) | |||
if #statements > 0 and statements[ 1 ].mainsnak.datatype == 'monolingualtext' then | |||
if catArray then catArray[ p ] = '' end | |||
for i = 1, #statements, 1 do | |||
value = statements[i].mainsnak.datavalue.value | |||
lng = value.language | |||
hyphen = lng:find( '-' ) | |||
if hyphen then | |||
lng = lng:sub( 1, hyphen - 1 ) | |||
end | |||
if not result[ lng ] then result[ lng ] = value.text end | |||
end | |||
end | end | ||
end | end | ||
if catArray then | |||
return result | return result, catArray | ||
else | |||
return result | |||
end | |||
end | end | ||
Zeile 317: | Zeile 321: | ||
function fw.getCategories( catArray, formatStr ) | function fw.getCategories( catArray, formatStr ) | ||
result = '' | result = '' | ||
if not catArray then return result end | |||
if | if not formatStr or formatStr == '' then | ||
for key, value in pairs( catArray ) do | formatStr = '[[Category:%s]]' | ||
end | |||
for key, value in pairs( catArray ) do | |||
result = result .. string.format( formatStr, key ) | |||
end | end | ||
return result | return result | ||
end | end | ||
return fw | return fw |