Modul:StandardWikidataIntro
Aspect
Modulul implementează {{Introducere așezare}}. El poate fi folosit pentru a genera, pe baza datelor prezente în Wikidata, o introducere standard în articolele despre sate, orașe sau regiuni.
Modulul este extensibil și poate fi folosit teoretic pentru orice tip de entitate, dar proprietățile de interes pentru respectivul tip și însemnătatea lor trebuie configurată. Formatul trebuie să apeleze modulul cu parametrul enttype egal cu un șir care constituie un tabel separat de date. De exemplu, tipul folosit de {{introducere așezare}} este settlement, ceea ce face ca modulul să-și caute configurația în Modul:StandardWikidataIntro/settlementData.
local p = {}
local Wikidata = require ('Modul:Wikidata') --- used for wikidata access and wikidata claim formatting
local StringUtils = require ('Modul:StringUtils') --- used for capitalization of phrases
local TableTools = require ('Modul:TableTools') --- used for array manipulation
local join = require ('Modul:Separated entries').main --- used for conjunction-join
local getArgs = require ('Modul:Arguments').getArgs --- used for argument manipulation
local function createPhraseForChapter(chapter, q)
if not chapter['props'] then return nil end
local sentences = {}
for _,eachProp in ipairs(chapter['props']) do
local propValueClaims = Wikidata.findBestClaimsForProperty(q, eachProp)
if propValueClaims then
local propValues = {}
local qualifiersValues = {}
for _,eachPropValueClaim in ipairs(propValueClaims) do
if eachPropValueClaim.type == 'statement' and eachPropValueClaim.mainsnak and eachPropValueClaim.mainsnak.snaktype == 'value' then
local commaSeparatedStatementParts = {}
if eachPropValueClaim.qualifiers and chapter['qualifiers'] and chapter['qualifiers'][eachProp] then for _,eachSupportedQual in ipairs(chapter['qualifiers'][eachProp]) do
if eachPropValueClaim.qualifiers[eachSupportedQual] then
mw.logObject(eachSupportedQual, '[StandardWikidataIntro] checking supported qual')
local qualValues = {}
for __,eachQualifierValueInstance in ipairs(eachPropValueClaim.qualifiers[eachSupportedQual]) do
if eachQualifierValueInstance.snaktype == 'value' then
table.insert(qualValues, Wikidata.printSnak(eachQualifierValueInstance))
end
end
if #qualValues > 0 then
local substedQualifierSentencePart = mw.ustring.gsub(chapter['qualifiers']['intro_props'] and chapter['qualifiers']['intro_props'][eachSupportedQual] or '$1', '$1', table.concat(qualValues, ', '))
table.insert(commaSeparatedStatementParts, substedQualifierSentencePart)
end
end
end end
local qualifierSummary = nil
if #commaSeparatedStatementParts > 0 then
qualifierSummary = mw.ustring.gsub(chapter['qualifiers']['intro'] or '$1', '$1', table.concat(commaSeparatedStatementParts, ', '))
end
table.insert(propValues, Wikidata.printSnak(eachPropValueClaim.mainsnak))
table.insert(qualifiersValues, qualifierSummary)
end
end
if #propValues > 0 then
local mainPropStatement
if chapter['intro_props'] and chapter['unique_value_prop'][eachProp] then
mainPropStatement = mw.ustring.gsub(chapter['intro_props'] and chapter['intro_props'][eachProp] or '$1', '$1', propValues[1])
table.insert(sentences, table.concat(TableTools.compressSparseArray({mainPropStatement, qualifiersValues[1]}), ', '))
else
local propQualifierPairs = {}
for idx = 1,#propValues do
local thisPropQualifierPair = propValues[idx]
if qualifiersValues[idx] then
thisPropQualifierPair = thisPropQualifierPair .. ', ' .. qualifiersValues[idx]
end
table.insert(propQualifierPairs, thisPropQualifierPair)
end
propQualifierPairs.separator = ', '
propQualifierPairs.conjunction = ' și '
mainPropStatement = mw.ustring.gsub(chapter['intro_props'] and chapter['intro_props'][eachProp] or '$1', '$1', join(propQualifierPairs))
table.insert(sentences, mainPropStatement)
end
end
end
end
if #sentences > 0 then
if #sentences > 2 then
sentences.separator = '; '
sentences.conjunction = '; și '
else
sentences.separator = ', '
end
return mw.ustring.gsub(chapter['intro'] or '$1', '$1', join(sentences))
end
return nil
end
local function display(frame)
local args = getArgs(frame)
local q = args['q'] or mw.wikibase.getEntityIdForCurrentPage()
local entityType = args['enttype'] or 'settlement'
local propDescriptions = mw.loadData('Modul:StandardWikidataIntro/' .. entityType .. 'Data').propDescriptions
local outphrases = {}
for _,eachChapter in pairs(propDescriptions) do
local crtPhrase = createPhraseForChapter(eachChapter, q)
if crtPhrase then
table.insert(outphrases, crtPhrase)
end
end
local capitalizedOutphrases = {}
for _,eachoutphrase in ipairs(outphrases) do
table.insert(capitalizedOutphrases, StringUtils._capitalize({eachoutphrase}))
end
return StringUtils._appendToString({StringUtils._emptyToNil({table.concat(capitalizedOutphrases, '. ')}), '.'})
end
p.display = display
return p