Este módulo está na categoria sujeitos a proteção de página. Ele é um módulo de alta visibilidade em uso por um grande número de páginas, ou é transcluído muito frequentemente. Por causa do vandalismo ou erros que podem afectar muitas páginas, e mesmo edições triviais podem causar cargas substanciais nos servidores, ele está protegido de editar.
retorna true se a instrução tiver qualificadores usando as propriedades acceptedqualifs com os valores acceptedvals e sem os valqualifiervalues. Se acceptedqualifs não for preenchido, todas as propriedades serão aceitas. Se acceptedvals não for preenchido, todos os valores serão aceitos.
getMainId
claim
retorna o identificador Qdd do elemento usado como o valor do "mainsnak" de uma declaração
getFormattedQualifiers
statement, qualifs, params
a partir de uma afirmação, retorna uma string contendo os qualificadores solicitados. A tabela params permite personalizar a exibição, veja #Settings.
getReferences
statement
recupera e exibe a parte de referências de uma instrução Wikidata.
addtrackingcat
property, cat
categoriza em [[Categoria:!Artigos que utilizam $property]]
Funções operando em um nível de entidade
Nome
Argumentos
Descrição
sortClaims
claims
Coloque uma série de valores em ordem. A ordem pode ser 'cronológica'ou'invertida' (ordem cronológica inversa). Nesse caso, as datas usadas são aquelas dadas como o valor handsnak ou nos qualificadores. O pedido também pode ser uma função (consulte a ajuda Lua para a classificação da tabela). Essa função é chamada pelo argumento sorttype de wd.formatGetClaims e, portanto, também wd.formatStatements
filterClaims
claims, params
Obtém uma tabela de instruções e exclui aquelas que não correspondem aos critérios fornecidos na tabela params </ code>. Para a lista desses argumentos, veja a ajuda abaixo
getClaims
params
entity = e |property = , e pode conter muitos outros parâmetros opcionais, consulte #Configuração.
getIds
params
Seleciona instruções da mesma forma que os conjuntos getClaims em vez de retornar instruções completas, apenas retorna o identificador de seu mainsnak (só funciona para dados do tipo elemento).
stringTable
Retorna as mesmas asserções que getClaims, exceto possivelmente aquelas suprimidas pelo parâmetro removedupes. Cada um é processado como uma string Wikitexto diretamente utilizável. Os parâmetros de formatação também estão contidos na tabela params.
formatStatements
params
Retorna os mesmos valores que stringTable, mas concatenados como uma única string. O método de concatenação é definido pelo parâmetro conjtype que usa Módulo:Linguística. Se linkback e addcat estiverem habilitados, um trackback e uma categoria de manutenção também podem ser adicionados.
formatAndCat
params
Mesma função que formatStatements, mas adicione um trackback ao Wikidata e uma categoria de manutenção
getTheDate
params
exibe uma data que está no valor principal ou como um qualificador da propriedade prop do elemento item
Recupera e formata uma data do elemento item. event deve ser um identificador de propriedade, caso em que a função recuperará os valores nessa propriedade, que é um identificador de elemento. Nesse caso, ele procurará esse elemento nos valores de P793 (« evento notável ») e retornará a data indicada como um qualificador. <Código>evento também pode ser uma lista de identificadores no formato de tabela, Nesse caso, o valor retornado será o do primeiro identificador para o qual algo é encontrado. Por exemplo, wd.keyDate ('Q1417098', 'P1690'} irá procurar o valor em P793 (« evento notável »)Q1417098 (« inauguração ») e se não encontrar nada, irá procurar em P1690 (« ICD-10-PCS »).
getLabel
entity, lang, labelformat
Retorna por padrão o rótulo Wikidata da entidade em, português ou no idioma especificado no segundo parâmetro. O parâmetro opcional labelformat é usado para definir uma exibição alternativa. Seu valor deve ser uma função tomando como argumento a entidade e retornando uma string.
siteLink
entity, lang, project
retorna um link para a página do projeto solicitada ('wikipédia', 'wikivoyage', 'commons') etc. vinculado à entidade Wikidata especificada, no idioma solicitado. Por padrão, o idioma é português e o projeto Wikipédia.
formatEntity
entity, params
Obtém o identificador (ou a tabela de dados) fornecido no parâmetro da entidade e o transforma, retornando-o na forma de um texto contendo um rótulo e, possivelmente, um link interno.
getDescription
entity, lang
exibe a descrição do Wikidata para uma determinada entidade, em um determinado idioma, ou "lang" (o padrão é o português)
getNumericId
snak
retorna o identificador numérico do elemento usado como o valor de um snack
getEntity
str
retorna a tabela de dados correspondente a um identificador (inverso de getEntityId)
getEntityId
str
retorna o identificador de uma entidade Wikidata passada na forma de uma tabela de dados (inversa de getEntity)
Funções recuperando dados em diversas entidades
Nome
Argumentos
Descrição
isSubclass
class, item, maxdepth
isinstance
class, item, maxdepth
inTransitiveVals
searchedval, sourceval, query, maxdepth, maxnodes
Diversos
Nome
Argumentos
Descrição
Dump
entity
exibir o conteúdo de uma entidade Wikidata
sourceStr
frameFun
(frame)
chama uma das funções anteriores do quadro. O nome da função é dado no argumento 1
addRefAnchor
addLinkback
adicionar um trackback (normalmente usado por formatStatements {arglinkback = true}, mas pode ser útil como uma função independente quando os dados necessários estão sujeitos a muitas manipulações antes de sua renderização final
isHere
searchset, val
retorna true se a string val estiver na tabela searchset
addNewValues
old, new
adiciona novos valores a uma tabela somente se eles ainda não estiverem lá
Configurações
Lista de chaves que podem ser usadas na tabela "params" mencionada abaixo..
Escolha de declarações
Parâmetros usados pela função filterclaims e, portanto, indiretamente pelas funções de chamada, como getClaims e formatStatements.
Nome
Mode de utilização
Descrição
claims
Lua
Lista de instruções a serem usadas. Quando esse parâmetro está ativado, os parâmetros property e entity não são usados para recuperação de dados.
entity
Lua e wikicode
O identificador da entidade Wikidata para usar. Por padrão, o link para a página. Em Lua, você pode passar uma entidade já ocupada em vez de seu identificador.
property
Lua e wikicode
O nome da propriedade a ser usada, no formato property = PXX. Em Lua, pode-se usar várias propriedades na forma de tabelas
excludespecial
Lua e wikicode
Remove declarações cujo valor principal (mainsnak) não é do tipo "value", ou seja, as declarações "valor desconhecido" ou "sem valor".
No wikicode: ativado por |excludespecial = true Em Lua, ativado por um booleano (excludespecial = true)
targetvalue
Lua e wikicode
Mantém apenas a(s) instrução(ões) onde o valor do snak principal corresponde ao valor (ou valores) indicado
excludevalues
Lua e wikicode
Exclui instruções em que o valor do snak principal corresponde ao valor indicado (ou valores)
qualifier
Lua e wikicode
Apenas declarações contendo este qualificador são retornadas. Para ativar a exibição do qualificador, consulte showqualifiers
qualifiervalue
Lua e wikicode
O qualificador usado pelo argumento qualifier deve ter esse valor (ou um desses valores, se for uma tabela de propriedade ou uma tabela separada por vírgula)
excludequalifier
Lua e wikicode
Declarações contendo este qualificador são excluídasLes déclarations contenant ce qualificatif sont exclues
excludequalifiervalue
Lua e wikicode
Se este parâmetro for preenchido, excludequalifier será ativado apenas quando o valor do qualificador estiver naqueles indicados.
withsource
Lua e wikicode
Retorna apenas os valores que contêm uma origem, usando a origem especificada na propriedade P248 (« afirmado em ») ou outra propriedade definida pelo parâmetro sourceproperty. Para aceitar qualquer fonte, desde que use a propriedade solicitada, defina o valor any. Para desabilitar esse parâmetro, defina o valor -.
sourceproperty
Lua e wikicode
Propriedade a ser usada para o parâmetro withsource
rank
Lua e wikicocde
Ranks aceites :
preferred
normal
deprecated
valid (= preferred + normal)
best (preferred, ou, se nenhum atende aos outros critérios da consulta, normal)
Valor por padrão : best
numval
Lua e wikicode
Número máximo de valores a serem retornados (os primeiros n valores da lista estabelecidos pelos outros parâmetros)
withlink
Lua e wikicode
Retorna apenas os valores que contêm um link para o site especificado. Se o valor do parâmetro for simplesmente true, o site usado será a Wikipédia em português.
Exclui valores cujos qualificadores P580 (« data inicial ») ou P582 (« data final ») indicam que ele era inválido para o período especificado. atdate talvez uma data no formato wikibase ou no formato ISO. Valores não ordenados não são excluídos (eles podem ser excluídos usando a função withdate). Para solicitar o valor na data de hoje, use: |atdate = today.
minprecision
Lua e Wikicode
Grau mínimo de precisão aceite para dados do tipo de data. Deve ser um valor numérico correspondente ao modelo Wikidata (por exemplo, ano = 9)
condition
Lua
Para definir uma função livre Se a função retornar true , a declaração será mantida
sorttype
Lua e wikicode
Como classificar declarações. Valores possíveis:* chronological
inverted (cronológica invertida
funções Lua (ver a função sortClaims)
Activação / desativação de Wikidata
Nome
Mode de utilização
Descrição
value
Lua e wikicode
Quando o parâmetro value não está vazio, o módulo não pesquisa dados do Wikidata, mas usa aqueles fornecidos localmente por esse parâmetro. A função formatAndCat em vez disso aplica linkback e addcat)
expl
Lua e wikicode
Quando o parâmetro expl estiver presente, a função formatStatements não fará nada se o parâmetro value não tiver o valor de resultado {{ WD}} (útil para dados atualizados, mas cuja utilidade em cada artigo é difícil) decidir automaticamente).
Formatação de dados
Nome
Nível de aplicação
Modo de utilização
Descrição
conjtype
lista das declarações
Lua e wikicode
Como coordenar declarações, usando a função conj do Módulo:Linguística. Valores possíveis:
and adicionando "ou" entre o penúltimo e último valor
or adicionando "ou" entre o penúltimo e último valor
comma vírgulas em todos os lugares
new line um retorno de linha
Qualquer outro valor dado ao parâmetro será inserido entre cada valor (|conjtype = e então também irá adicionar "e então também" entre cada valor)
linkback
lista das declarações
Lua e wikicode
Adicione um trackback ao Wikidata como um lápis « »
addcat
lista das declarações
Lua e wikicode
Coloque a página em uma categoria de rastreamento (veja Categoria:!Artigos que utilizam Wikidata por propriedade). O nome da categoria é o valor do parâmetro. Se este valor for simplesmente true, a categoria é uma função do parâmetro da propriedade.
Atenção, este parâmetro pode ser uma fonte de erros. Por exemplo, se a propriedade for usada em um URL ou link.
removedupes
escolha das declarações (no final, numa função diferente)
Lua e wikicode
Quando, após toda a formatação, duas declarações são renderizadas da mesma maneira, apenas uma é preservada.
lang
formatar os dados
Lua e Wikicode
Idioma em que o texto deve ser retornado.
snak (entidade)
Lua e wikicode
Código da Wikimedia da linguagem usada para exibir os rótulos (por padrão : português)
ucfirst
lista das declarações
Lua e Wikicode
ucfirst = - para desabilitar isso
statementformat
declaração
Lua
deve ser uma função function (statement) retornar XX retornando uma string. Será aplicado a cada afirmação (simplifica alguma infobox Lua)
showdate
declaração
Lua e wikicode
Para exibir a data entre parênteses em pequena para cada instrução usando os mesmos qualificadores como (withdate). Quando nenhuma data é encontrada, o valor é exibido sem qualquer data.
displayformat
snak
Lua e wikicode
Para alterar o formato padrão entre cada valor.
weblink transforma dados de string em um link da web
raw retorna um formato mais bruto, às vezes útil para codificação
Em lua, o valor do parâmetro também pode ser uma função.
qualifdisplayformat
snak
Lua e wikicode
Exibir formato dos qualificadores. O mesmo que displayformat. Quando este parâmetro é deixado vazio, os qualificadores usam o parâmetro displayformat como o valor principal.
showsource
declaração
Lua e wikicode
Identificador de uma fonte que alguém gostaria de ver exibido em referência se estiver presente. true mostrará todas as fontes usando a propriedade P248 (« afirmado em »).
linktopic
snak (temporada)
Lua e wikicode
Tipo de link para adicionar às datas (consulte Módulo: Data). Para não colocar nenhum link : linktopic = -
precision
snak (temporal)
Lua e wikicode
Precisão com quais datas devem ser exibidas. Valores possíveis:
day
month
year
Valor por padrão : day
textformat
snak (temporal)
Lua e wikicode
Exibir formato de intervalos de tempo, conforme definido por Módulo:Data complexa
minimum exibirá "1995" em vez de "de 1995".
speciallabels
snak (entidade)
Lua
Tabelas de valores especiais para usar em vez do rótulo Wikidata para o valor de alguns elementos, por exemplo Módulo:Wikidata/Dicionário profissões.
labelformat
snak (entidade)
Lua
Função de formatação de etiquetas
showlang
declaração
Lua e wikicode
Quando o valor principal é do tipo "texto monolíngua", o seu código de idioma é exibido (usado pelo Módulo:Website oficial)
showqualifiers
declaração
Lua e wikicode
Qualificador para retornar entre parênteses por trás do valor da propriedade principal solicitada. Em wikicode no formato |showqualifiers = P460 , em Lua como showqualifiers = "P460" ou showqualifiers = {"P460 "," P461 "}
showonlyqualifier
declaração
Lua e wikicode
Qualificador do mesmo, mas para retornar sozinho sem o valor da propriedade principal solicitada
link
snak (entité)
Lua e wikicode
Site ao qual os dados do tipo de item devem ser vinculados. Por padrão: Wikidata em português. Se igual a "-", nenhum link será criado.
defaultlink
snak (entidade)
Lua e wikicode
Quando o site solicitado pelo parâmetro link não retorna um link, exibe um link entre parênteses para o site solicitado. Padrão: Wikipédia em inglês ou, se não, Wikidata. O valor "-" desabilita o parâmetro.
defaultlinkquery
snak (entidade)
Lua
defaultlinkquery = {property = 'P279'} o link criado será aquele fornecido pelo elemento usado na propriedade P279 (« subclasse de »).
targetunit
snak (quantidade)
Lua e Wikicode
Unidade na qual os dados do tipo de quantidade devem ser convertidos. Os valores possíveis são visíveis no Módulo:Conversão/Dados, por exemplo, km ou km2.
showunit
snak (quantidade)
Lua e Wikicode
Como exibir a unidade solicitada. Valores possíveis:
'long': exibe o nome completo da unidade (por exemplo, "12,7 metros")
'short' exibe a abreviação usada convencionalmente ("12,7 m")
'-' : nenhuma unidade exibida
padrão: 'curto'
rounding
snak (quantidade) número de dígitos
Lua e Wikicode
Número de dígitos significativos a serem exibidos em dados de quantidade, após possível conversão (padrão: depende da precisão indicada no Wikidata)
urlpattern
snak (string)
Lua e wikicode
O valor do parâmetro é uma string representando uma URL, a expressão "$1" será substituída pelo valor Wikidata Com a propriedade P214 (« identificador VIAF ») e o valor do parâmetro http://viaf.org/viaf/$1, o valor do ID VIAF armazenado no Wikidata será usado para criar um link externo.
text
snak (string)
Lua e wikicode
Texto para exibir quando o valor cria um link externo, ou seja, para dados de string com displayformat = "weblink" ou com o parâmetro urlpattern preenchido . Padrão: o valor inicial da declaração. Usado no Módulo:Website oficialMódulo:Bases Archi.
novaluelabel
snak (novalue)
Lua e wikicode
Rótulo para retornar quando o valor é do tipo "novalue". Padrão: "-".
Em Lua, o valor pode ser uma função.
somevaluelabel
snak (somevalue)
Lua e wikicode
Rótulo para retornar quando o valor é do tipo "somevalue". Padrão: "desconhecido".
Em Lua, o valor pode ser uma função.
returnnumberofvalues
lista das declarações
Lua
retorna no segundo valor o número de valores recuperados por getClaims (se a função for chamada do Wikicode, o número será concatenado ao resto da string retornada
Existem três tipos de classificação no Wikidata: "normal", "preferido" e "obsoleto". A classificação descontinuada é reservada para dados que sabemos serem falsos, mas que mantemos para a memória, por exemplo, para documentar uma crença antiga que foi invalidada por estudos mais recentes.
Por padrão, apenas a classificação "preferida" é recuperada, mas o parâmetro "rank" permite que você altere isso.
rank = "valid" aceita valores de classificação "normal" e "preferencial" (por exemplo, o material de um quadro que foi adicionado posteriormente à Mona Lisa)
qualiervalue define o valor que o qualificador possui. Aqui, Q1737943 (« moldura ») especifica que o material da estrutura é obrigatório. Note que nenhum valor de classificação "preferido" é encontrado, um valor de classificação "normal" é retornado.
se os qualificadores que indicam a data forem fornecidos, eles serão exibidos
Mostrando fontes
Outras opções
getImageLegend: devolve uma legenda da imagem (imagem é a propriedade P18; a legenda da imagem é a propriedade P2096).
Faz a chamada como {{#invoke:Wikidata |getImageLegend | <PARAMETER> | lang=<ISO-639code> |id=<QID>}}
Devolve PARÂMETRO, a menos que seja igual a "FETCH_WIKIDATA", de Item QID (chamada cara). Se o QID for omitido ou vazio, o artigo corrente é usado (não é uma chamada cara). Se lang for omitido, ele usa a língua local, de outra modo ele usa o código de língua ISO-639.
A etiqueta é devolvida da primeira imagem com rank 'preferido'; ou da primeira imagem com rank 'normal' se nenhuma imagem tem rank preferido.
--script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lualocalwd={}localmodules={}localmodulesNames={reference='Módulo:Wikidata/Referências',i18n='Módulo:Wikidata/i18n',globes='Módulo:Wikidata/Globes',langcodes='Módulo:Dicionário Wikidata/Códigos língua',-- big, infrequently used datainvertedlangcodes='Módulo:Dicionário Wikidata/Códigos língua/inverso',linguistic='Módulo:Linguística',formatDate='Módulo:Data complexa',formatNum='Módulo:Conversão',langmodule='Módulo:Língua',cite='Módulo:Citação/CS1',weblink='Módulo:Weblink'}localfunctionloadModule(t,key)ifmodulesNames[key]thenlocalm=require(modulesNames[key])t[key]=mreturnmendendsetmetatable(modules,{__index=loadModule})localdatequalifiers={'P585','P571','P580','P582','P1319','P1326'}-- === I18n ===localdefaultlang=mw.getContentLanguage():getCode()functionwd.translate(str,rep1,rep2)str=modules.i18n[str]orstrifrep1and(type(rep1)=='string')thenstr=str:gsub('$1',rep1)endifrep2and(type(rep2)=='string')thenstr=str:gsub('$2',rep2)endreturnstrendlocalfunctionaddCat(cat,sortkey)ifsortkeythenreturn'[[Category:'..cat..'|'..sortkey..']]'endreturn'[[Category:'..cat..']]'endlocalfunctionformatError(key,category,debug)ifdebugthenreturnerror(modules.i18n[key]orkey)endifcategorythenreturnaddCat(category,key)-- else-- return addCat('cat-unsorted-issue', key)endend--functionwd.isSpecial(snak)return(snak.snaktype~='value')endfunctionwd.getId(snak)if(snak.snaktype=='value')thenreturn'Q'..snak.datavalue.value['numeric-id']endendfunctionwd.getNumericId(snak)if(snak.snaktype=='value')thenreturnsnak.datavalue.value['numeric-id']endendfunctionwd.getMainId(claim)returnwd.getId(claim.mainsnak)endfunctionwd.entityId(entity)iftype(entity)=='string'thenreturnentityendreturnentity.idend--[[This is used to return an image legend from Wikidataimage is property P18image legend is property P2096Call as {{#invoke:Infobox/Wikidata |getImageLegend | <PARAMETER> | lang=<ISO-639code> |id=<QID>}}Returns PARAMETER, unless it is equal to "FETCH_WIKIDATA", from Item QID (expensive call)If QID is omitted or blank, the current article is used (not an expensive call)If lang is omitted, it uses the local wiki language, otherwise it uses the provided ISO-639 language codeISO-639: https://docs.oracle.com/cd/E13214_01/wli/docs92/xref/xqisocodes.html#wp1252447Ranks are: 'preferred' > 'normal'This returns the label from the first image with 'preferred' rankOr the label from the first image with 'normal' rank if preferred returns nothingRanks: https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua]]wd.getImageLegend=function(frame)-- look for named parameter id; if it's blank make it nillocalid=frame.args.idifidand(#id==0)thenid=nilend-- look for named parameter lang-- it should contain a two-character ISO-639 language code-- if it's blank fetch the language of the local wikilocallang=frame.args.langif(notlang)or(#lang<2)thenlang=mw.language.getContentLanguage().codeend-- first unnamed parameter is the local parameter, if suppliedlocalinput_parm=mw.text.trim(frame.args[1]or"")ifinput_parm=="FETCH_WIKIDATA"thenlocalent=mw.wikibase.getEntityObject(id)localimgsifentandent.claimsthenimgs=ent.claims.P18endlocalimglblifimgsthen-- look for an image with 'preferred' rankfork1,v1inpairs(imgs)doifv1.rank=="preferred"andv1.qualifiersandv1.qualifiers.P2096thenlocalimglbls=v1.qualifiers.P2096fork2,v2inpairs(imglbls)doifv2.datavalue.value.language==langthenimglbl=v2.datavalue.value.textbreakendendendend-- if we don't find one, look for an image with 'normal' rankif(notimglbl)thenfork1,v1inpairs(imgs)doifv1.rank=="normal"andv1.qualifiersandv1.qualifiers.P2096thenlocalimglbls=v1.qualifiers.P2096fork2,v2inpairs(imglbls)doifv2.datavalue.value.language==langthenimglbl=v2.datavalue.value.textbreakendendendendendendreturnimglblelsereturninput_parmendendfunctionwd.getEntityIdForCurrentPage()returnmw.wikibase.getEntityIdForCurrentPage()end-- function that returns true if the "qid" parameter is the qid-- of the item that is linked to the calling pagefunctionwd.isPageOfQId(qid)localentity_on_its_page=falselocalself_entity=mw.wikibase.getEntity()ifself_entity~=nilandqid==wd.entityId(self_entity)thenentity_on_its_page=trueendreturnentity_on_its_pageendfunctionwd.getEntity(val)iftype(val)=='table'thenreturnvalendifval=='-'thenreturnnilendifval==''thenval=nilendreturnmw.wikibase.getEntity(val)endfunctionwd.splitStr(val)-- converte em strings strings do Wikitexto que usam vírgulas de separaçãoiftype(val)=='string'thenval=mw.text.split(val,",")endreturnvalendfunctionwd.isHere(searchset,val)fori,jinpairs(searchset)doifval==jthenreturntrueendendreturnfalseendlocalfunctionwikidataLink(entity)localname=':d:'iftype(entity)=='string'thenifentity:match("P[0-9+]")thenentity="Property:"..entityendreturnname..entityelseiftype(entity)=='table'thenifentity["type"]=="property"thenname=":d:Property:"endreturnname..entity.idelseiftype(entity)==nilthenreturnformatError('entity-not-found')endendfunctionwd.siteLink(entity,project,lang)-- returns 3 values: a sitelink (with the relevant prefix) a project name and a languagelang=langordefaultlangif(type(project)~='string')thenproject='wiki'endproject=project:lower()ifproject=='wikipedia'thenproject='wiki'endiftype(entity)=='string'and(project=='wiki')and((notlangorlang==defaultlang))then-- evite carregar o elemento inteiroreturnmw.wikibase.sitelink(entity),'wiki',defaultlangendifproject=='wikidata'thenreturnwikidataLink(entity),'wikidata'endlocalprojects={-- nome = {prefixo no Wikidata, prefixo de links na Wikipedia, adicionar prefixo de idioma}wiki={'wiki',nil,true},-- wikipediacommons={'commonswiki','commons',false},commonswiki={'commonswiki','commons',false},wikiquote={'wikiquote','q',true},wikivoyage={'wikivoyage','voy',true},wikibooks={'wikibooks','b',true},wikinews={'wikinews','n',true},wikiversity={'wikiversity','v',true},wikisource={'wikisource','s',true},wiktionary={'wiktionary','wikt',true},specieswiki={'specieswiki','species',false},metawiki={'metawiki','m',false},incubator={'incubator','incubator',false},outreach={'outreach','outreach',false},mediawiki={'mediawiki','mw',false}}entity=wd.getEntity(entity)ifnotentitythenreturnnilendlocalprojectdata=projects[project:lower()]ifnotprojectdatathen-- defaultlink might be in the form "dewiki" rather than "project: 'wiki', lang: 'de' "fork,vinpairs(projects)doifproject:match(k..'$')andmw.language.isKnownLanguageTag(project:sub(1,#project-#k))thenlang=project:sub(1,#project-#k)project=project:sub(#lang+1,#project)projectdata=projects[project]breakendendifnotmw.language.isKnownLanguageTag(lang)thenreturn--formatError('invalid-project-code', projet or 'nil')endendifnotprojectdatathenreturn-- formatError('invalid-project-code', projet or 'nil')endlocallinkcode=projectdata[1]localprefix=projectdata[2]localmultiversion=projectdata[3]ifmultiversionthenlinkcode=lang..linkcodeendlocallink=entity:getSitelink(linkcode)ifnotlinkthenreturnnilendifprefixthenlink=prefix..':'..linkendifmultiversionthenlink=':'..lang..':'..linkendreturnlink,project,langend-- add new values to a list, avoiding duplicatesfunctionwd.addNewValues(olditems,newitems,maxnum,stopval)ifnotnewitemsthenreturnolditemsendfor_,qidinpairs(newitems)doifstopvaland(qid==stopval)thentable.insert(olditems,qid)returnolditemsendifmaxnumand(#olditems>=maxnum)thenreturnolditemsendifnotwd.isHere(olditems,qid)thentable.insert(olditems,qid)endendreturnolditemsend--=== FILTER CLAIMS ACCORDING TO VARIOUS CRITERIA : FUNCTION GETCLAIMS et alii ===localfunctionnotSpecial(claim)localsnack=claim.mainsnakorsnackreturnsnack.snaktype=='value'endlocalfunctionhasTargetValue(claim,targets)-- retorna verdadeiro se o valor estiver na lista de destino ou se for um valor especial filtrado separadamente por excluiespeciallocalid=wd.getMainId(claim)localtargets=wd.splitStr(targets)returnwd.isHere(targets,id)orwd.isSpecial(claim.mainsnak)endlocalfunctionexcludeValues(claim,values)-- se o valor não estiver na lista ou se for um valor especial (filtrado separadamente por excludeespecial)returnwd.isSpecial(claim.mainsnak)ornot(hasTargetValue(claim,values))endlocalfunctionbestRanked(claims)ifnotclaimsthenreturnnilendlocalpreferred,normal={},{}fori,jinpairs(claims)doifj.rank=='preferred'thentable.insert(preferred,j)elseifj.rank=='normal'thentable.insert(normal,j)endendif#preferred>0thenreturnpreferredelsereturnnormalendendlocalfunctionwithRank(claims,target)iftarget=='best'thenreturnbestRanked(claims)endlocalnewclaims={}forpos,claiminpairs(claims)doiftarget=='valid'thenifclaim.rank~='deprecated'thentable.insert(newclaims,claim)endelseifclaim.rank==targetthentable.insert(newclaims,claim)endendreturnnewclaimsendfunctionwd.hasQualifier(claim,acceptedqualifs,acceptedvals,excludequalifiervalues)localclaimqualifs=claim.qualifiersif(notclaimqualifs)thenreturnfalseendacceptedqualifs=wd.splitStr(acceptedqualifs)acceptedvals=wd.splitStr(acceptedvals)localfunctionok(qualif)-- verificação para um qualificador individualifnotclaimqualifs[qualif]thenreturnfalseendifnot(acceptedvals)then-- se nenhum valor específico for solicitado, OKreturntrueendfori,wantedinpairs(acceptedvals)doforj,actualinpairs(claimqualifs[qualif])doifwd.getId(actual)==wantedthenreturntrueendendendendfori,qualifinpairs(acceptedqualifs)doifok(qualif)thenreturntrueendendreturnfalseendlocalfunctionhasSource(claim,targetsource,sourceproperty)sourceproperty=sourcepropertyor'P248'iftargetsource=="-"thenreturntrueendif(notclaim.references)thenreturnfalseendlocalcandidates=claim.references[1].snaks[sourceproperty]-- snaks usando a propriedade solicitadaif(notcandidates)thenreturnfalseendif(targetsource=="any")then-- se algum valor for aceite, desde que use a propriedade solicitadareturntrueendtargetsource=wd.splitStr(targetsource)for_,sourceinpairs(candidates)dolocals=wd.getId(source)fori,targetinpairs(targetsource)doifs==targetthenreturntrueendendendreturnfalseendlocalfunctionexcludeQualifier(claim,qualifier,qualifiervalues)returnnotwd.hasQualifier(claim,qualifier,qualifiervalues)endlocalfunctionhasDate(claim)localclaimqualifs=claims.qualifiersifnotclaimqualifsthenreturnfalseendfor_,qualifinpairs(claimqualifs)doifclaimsqualifs[qualif]andclaimsqualifs[qualif][1].snaktype=='value'thenreturntrueendendreturnfalseendlocalfunctionhasLink(claim,site,lang)if(claim.mainsnak.snaktype~='value')then-- não excluir valores especiais, há uma função dedicada para issoreturntrueendlocalid=wd.getMainId(claim)locallink=wd.siteLink(id,site,lang)iflinkthenreturntrueendendlocalfunctionisInLanguage(claim,lang)-- funciona apenas para texto monolingual / estender para outros tipos usando qualificadores?iftype(lang)=='table'then-- se é uma tabela de idiomas separada por vírgulas, aceitamos todasfori,linpairs(lang)dolocalv=isInLanguage(claim,l)ifvthenreturntrueendendendiftype(lang)~=('string')thenreturn--?endif(lang=='-')thenreturntrueendif(lang=='locallang')thenlang=mw.getContentLanguage():getCode()end-- pour les monolingual textlocalsnak=claim.mainsnakorclaimifsnak.snaktype=='value'andsnak.datavalue.type=='monolingualtext'thenifsnak.datavalue.value.language==langthenreturntrueendreturnfalseend-- para outros tipos de dados: pesquisa em qualificadoresif(lang=='pt')thenlang='Q5146'elseif(lang=='en')thenlang='Q1860'elselang=invertedlangcodes[lang]endifclaim.qualifiersandclaim.qualifiers.P407thenifwd.hasQualifier(claim,{'P407'},{lang})thenreturntrueelsereturnfalseendendreturntrue-- se não conhecemos a língua, condicção que é bomendlocalfunctionfirstVals(claims,numval)-- retornar os primeiros valores numéricos da tabela de declaraçõeslocalnumval=tonumber(numval)or0-- raise a error if numval is not a positive integer ?ifnotclaimsthenreturnnilendwhile(#claims>numval)dotable.remove(claims)endreturnclaimsendlocalfunctiontimeFromQualifs(claim,qualifs)localclaimqualifs=claim.qualifiersifnotclaimqualifsthenreturnnilendfori,qualifinpairs(qualifsortimequalifiers)dolocalvals=claimqualifs[qualif]ifvalsand(vals[1].snaktype=='value')thenreturnvals[1].datavalue.value.timeendendendlocalfunctionatDate(claim,mydate)ifmydate=="today"thenmydate=os.date("!%Y-%m-%dT%TZ")endlocalnewclaims={}localmindate=timeFromQualifs(claim,{'P580'})localmaxdate=timeFromQualifs(claim,{'P582'})ifmodules.formatDate.before(mydate,mindate)andmodules.formatDate.before(maxdate,mydate)thenreturntrueendendlocalfunctioncheck(claim,condition)iftype(condition)=='function'then-- cas standardreturncondition(claim)endreturnformatError('invalid type','function',type(condition))endlocalfunctionminPrecision(claim,minprecision)localsnackifclaim.qualifiersthen-- se uma data é dada como um qualificador, é aquela que é usada preferencialmente em handsnakfori,jinipairs(datequalifiers)doifclaim.qualifiers[j]thensnack=claim.qualifiers[j][1]breakendendendifnotsnackthensnack=claim.mainsnakorclaimendif(snack.snaktype=='value')and(snack.datatype=='time')and(snack.datavalue.value.precision<minprecision)thenreturnfalseendreturntrueendfunctionwd.sortClaims(claims,sorttype)ifnotclaimsthenreturnnilendifsorttype=='chronological'thenreturnwd.chronoSort(claims)elseifsorttype=='inverted'thenreturnwd.chronoSort(claims,true)elseifsorttype=='order'thenreturnwd.chronoSort(claims)elseiftype(sorttype)=='function'thentable.sort(claims,sorttype)returnclaimsendreturnclaimsendlocalalreadyFiltered=falsefunctionwd.filterClaims(claims,args)--remova das tabelas de reclamação aquelas removidas por um dos filtros na tabela de filtroslocalfunctionfilter(condition,filterfunction,funargs)ifnotargs[condition]thenreturnendfori=#claims,1,-1doifnot(filterfunction(claims[i],args[funargs[1]],args[funargs[2]],args[funargs[3]]))thentable.remove(claims,i)endendendfilter('isinlang',isInLanguage,{'isinlang'})filter('excludespecial',notSpecial,{})filter('condition',check,{'condition'})ifclaims[1]andclaims[1].mainsnakthenfilter('targetvalue',hasTargetValue,{'targetvalue'})filter('atdate',atDate,{'atdate'})filter('qualifier',wd.hasQualifier,{'qualifier','qualifiervalue'})filter('excludequalifier',excludeQualifier,{'excludequalifier','excludequalifiervalue'})filter('withsource',hasSource,{'withsource','sourceproperty'})filter('withdate',hasDate,{})filter('excludevalues',excludeValues,{'excludevalues'})filter('withlink',hasLink,{'withlink','linklang'})filter('minprecision',minPrecision,{'minprecision'})claims=withRank(claims,args.rankor'best')endifargs.sorttypethenclaims=wd.sortClaims(claims,args.sorttype)endif#claims==0thenreturnnilendifargs.numvalthenclaims=firstVals(claims,args.numval)endreturnclaimsendfunctionwd.loadEntity(entity,cache)iftype(entity)~='table'thenifcachethenifnotcache[entity]thencache[entity]=mw.wikibase.getEntity(entity)mw.log("cached")endreturncache[entity]elseifentity==''or(entity=='-')thenentity=nilendreturnmw.wikibase.getEntity(entity)endelsereturnentityendendfunctionwd.getClaims(args)-- returns a table of the claims matching some conditions given in argsifargs.claimsthen-- if claims have already been set, return themreturnargs.claimsendlocalproperties=args.propertyiftype(properties)=='string'thenproperties=wd.splitStr(string.upper(args.property))endifnotpropertiesthenreturnformatError('property-param-not-provided')end--Get entitylocalentity=args.entityiftype(entity)=='string'thenifentity==''thenentity=nilendelseiftype(entity)=='table'thenentity=entity.idendif(notentity)thenentity=mw.wikibase.getEntityIdForCurrentPage()endif(notentity)or(entity=='-')thenreturnnilendlocalclaims={}if#properties==1thenclaims=mw.wikibase.getAllStatements(entity,properties[1])-- do not use mw.wikibase.getBestStatements at this stage, as it may remove the best ranked values that match other criteria in the queryelsefori,propinipairs(properties)dolocalnewclaims=mw.wikibase.getAllStatements(entity,prop)ifnewclaimsand#newclaims>0thenforj,claiminipairs(newclaims)dotable.insert(claims,claim)endendendendif(notclaims)or(#claims==0)thenreturnnilendreturnwd.filterClaims(claims,args)end--=== ENTITY FORMATTING ===functionwd.getLabel(entity,lang,labelformat)if(notentity)thenreturnnil-- ou option de gestion des erreurs ?endlang=langordefaultlangiftype(labelformat)=='function'thenreturnlabelformat(entity)endif(type(entity)=='string')and(lang==defaultlang)then-- o mais economicolocalstr=mw.wikibase.label(entity)ifstrthen-- mw.wikibase.label() ne fonctionne pas avec les redirect https://phabricator.wikimedia.org/T157868returnstrendendiftype(entity)=='string'thenentity=mw.wikibase.getEntity(entity)endifentityandentity.labelsandentity.labels[lang]thenreturnentity.labels[lang].value,trueendendfunctionwd.formatEntity(entity,params)if(notentity)thenreturnnil--formatError('entity-not-found')endlocalid=entityiftype(id)=='table'thenid=id.idendparams=paramsor{}locallang=params.langorparams.idiomaordefaultlanglocalspeciallabels=params.speciallabelslocaldisplayformat=params.displayformatlocallabelformat=params.labelformatlocaldefaultlabel=params.defaultlabeloridlocallinktype=params.linklocaldefaultlink=params.defaultlinklocaldefaultlinkquery=params.defaultlinkqueryifspeciallabelsandspeciallabels[id]then--speciallabels override the standard label + link combinationreturnspeciallabels[id]endifparams.displayformat=='raw'thenreturnidendlocallink,labellocalstr=''-- o texto completo a devolver label=wd.getLabel(entity,lang,labelformat)-- determinar se o item está ou não sendo renderizado na página de seu artigolocalrendering_entity_on_its_page=wd.isPageOfQId(id)ifnotlabelthenif(defaultlabel=='-')thenreturnnilendlink=wd.siteLink(id,'wikidata')returnstr..'[['..link..'|'..id..']]'..addCat(modules.i18n['to translate'])-- se não houver rótulo, colocamos um link para o Wikidata para entender o que ele se refereendif(linktype=='-')orrendering_entity_on_its_pagethenreturnstr..labelendlocallink=wd.siteLink(entity,linktype,lang)-- defaultlinkquery will try to link to another page on this Wikiif(notlink)anddefaultlinkquerytheniftype(defaultlinkquery)=='string'thendefaultlinkquery={property=defaultlinkquery}enddefaultlinkquery.excludespecial=truedefaultlinkquery.entity=entitylocalclaims=wd.getClaims(defaultlinkquery)ifclaimsthenfori,jinpairs(claims)dolocalid=wd.getMainId(j)link=wd.siteLink(id,linktype,lang)iflinkthenbreakendendendendiflinkthenreturnstr..'[['..link..'|'..label..']]'end-- if not link, you can use defaultlink: a sidelink to another Wikimedia projectif(notdefaultlink)thendefaultlink={'enwiki'}endifdefaultlinkand(defaultlink~='-')thenlocallinktypelocalsidelink,site,langcodeiftype(defaultlink)=='string'thendefaultlink={defaultlink}endfori,jinipairs(defaultlink)dosidelink,site,langcode=wd.siteLink(entity,j,lang)ifsidelinkthenbreakendendifnotsidelinkthensidelink,site=wd.siteLink(entity,'wikidata')endlocalicon,class,title=site,nil,nil-- le texte affiché du lienifsite=='wiki'thenicon,class,title=langcode,"indicateur-langue",wd.translate('see-another-language',mw.language.fetchLanguageName(langcode,defaultlang))elseifsite=='wikidata'thenicon,class,title='d',"indicateur-langue",wd.translate('see-wikidata')elsetitle=wd.translate('see-another-project',site)endlocalval='[['..sidelink..'|'..'<span class = "'..(classor'')..'" title = "'..(titleor'')..'">'..icon..'</span>]]'returnstr..label..'<small> ('..val..')</small>'endreturnstr..labelendfunctionwd.addTrackingCat(prop,cat)-- às vezes deve ser chamado por outros módulosiftype(prop)=='table'thenprop=prop[1]-- deve logicamente adicioná-los todosendifnotpropandnotcatthenreturnformatError("property-param-not-provided")endifnotcatthencat=wd.translate('trackingcat',propor'P??')endreturnaddCat(cat)endlocalfunctionunknownValue(snak,label)localstr=labeliftype(str)=="function"thenstr=str(snak)endif(notstr)thenifsnak.datatype=='time'thenstr=wd.translate('sometime')elsestr=wd.translate('somevalue')endendiftype(str)~="string"thenreturnformatError(snak.datatype)endreturnstrendlocalfunctionnoValue(displayformat)ifnotdisplayformatthenreturnwd.translate('novalue')endiftype(displayformat)=='string'thenreturndisplayformatendreturnformatError()endlocalfunctiongetLangCode(entityid)returnmodules.langcodes[tonumber(entityid:sub(2))]endlocalfunctionshowLang(statement)-- retorna o código do idioma entre parênteses antes do valor (por exemplo, para bibliotecas e links externos)localmainsnak=statement.mainsnakifmainsnak.snaktype~='value'thenreturnnilendlocallanglist={}ifmainsnak.datavalue.type=='monolingualtext'thenlanglist={mainsnak.datavalue.value.language}elseif(notstatement.qualifiers)or(notstatement.qualifiers.P407)thenreturnelsefori,jinpairs(statement.qualifiers.P407)doifj.snaktype=='value'thenlocallangentity=wd.getId(j)locallangcode=getLangCode(langentity)table.insert(langlist,langcode)endendendif(#langlist>1)or(#langlist==1andlanglist[1]~=defaultlang)then-- se é em português, não precisa dizerreturnmodules.langmodule.indicationMultilingue(langlist)endend-- === DATE HANDLING ===functionwd.addStandardQualifs(str,statement)if(notstatement)or(notstatement.qualifiers)thenreturnstrendifnotstrthenreturnerror()-- what's that ?endifstatement.qualifiers.P1480thenfori,jinpairs(statement.qualifiers.P1480)dolocalv=wd.getId(j)if(v=="Q21818619")thenstr=wd.translate('approximate-place',str)elseif(v=="Q18122778")or(v=="Q18912752")thenstr=wd.translate('uncertain-information',str)elseif(v=="Q5727902")thenif(statement.mainsnak.datatype=='time')thenstr=modules.formatDate.fuzzydate(str)elsestr=wd.translate('approximate-value',str)endendendendreturnstrendlocalfunctionrangeObject(begin,ending,params)--[[ objeto com um timestamp para a classificação cronológica e dois objetos date (inicial e final) ]]--localtimestampifbeginthentimestamp=begin.timestampelsetimestamp=ending.timestampendreturn{begin=begin,ending=ending,timestamp=timestamp,type='rangeobject'}endlocalfunctiondateObject(orig,params)--[[ transforma um snak em um novo objeto utilizável pelo módulo: data complexa {type = 'dateobject', timestamp = str, era = '+' ou '-', year = number, month = number, day = number, calendar = calendar} ]]--ifnotparamsthenparams={}endlocalnewobj=modules.formatDate.splitDate(orig.time,orig.calendarmodel)newobj.precision=params.precisionororig.precisionnewobj.type='dateobject'returnnewobjendlocalfunctionobjectToText(obj,params)ifobj.type=='dateobject'thenreturnmodules.formatDate.simplestring(obj,params)elseifobj.type=='rangeobject'thenreturnmodules.formatDate.daterange(obj.begin,obj.ending,params)endendlocalfunctiongetDateFromQualif(statement,qualif)if(notstatement)or(notstatement.qualifiers)ornot(statement.qualifiers[qualif])thenreturnnilendlocalv=statement.qualifiers[qualif][1]ifv.snaktype~='value'then-- que fazer neste caso ?returnnilendreturndateObject(v.datavalue.value)endfunctionwd.getDate(statement)localperiod=getDateFromQualif(statement,'P585')-- devolver um dateobjectifperiodthenreturnperiodendlocalbegin,ending=getDateFromQualif(statement,'P580'),getDateFromQualif(statement,'P582')ifbeginorendingthenreturnrangeObject(begin,ending)-- retourne un rangeobject fait de deux dateobjectendendfunctionwd.getFormattedDate(statement,params)ifnotstatementthenreturnnilendlocalstr--procure a data com os qualificadores P580/P582localdatetable=wd.getDate(statement)ifdatetablethenstr=objectToText(datetable,params)end-- se estão no limite interno / superiorifnotstrthenlocalstart,ending=getDateFromQualif(statement,'P1319'),getDateFromQualif(statement,'P1326')str=modules.formatDate.between(start,ending,params)end-- caso contrário, o handsnak, para os dados do tipo de tempoif(notstr)and(statement.mainsnak.datatype=='time')thenlocalmainsnak=statement.mainsnakif(mainsnak.snaktype=='value')or(mainsnak.snaktype=='somevalue')thenstr=wd.formatSnak(mainsnak,params)endendifstrandparamsand(params.addstandardqualifs~='-')thenstr=wd.addStandardQualifs(str,statement)endreturnstrend-- Função que ordena as reivindicações de tempo em ordem cronológica-- Uma chave de classificação chamada "dateSortKey" é adicionada a cada declaração.-- Se as chaves de classificação desse nome já existirem, elas serão usadas sem modificação.functionwd.chronoSort(claims,inverted)for_,claiminipairs(claims)doifnotclaim.dateSortKeythenlocalsnack=claim.mainsnakorclaimlocalisoif(snack.snaktype=='value')and(snack.datatype=='time')theniso=snack.datavalue.value.timeelseiso=timeFromQualifs(claim,datequalifiers)or'0'end-- transformação em número (indicação da base porque gsub retorna dois valores)iso=tonumber(iso:gsub('(%d)%D','%1'),10)claim.dateSortKey=isoendendtable.sort(claims,function(c1,c2)ifinvertedthenreturnc2.dateSortKey<c1.dateSortKeyendreturnc1.dateSortKey<c2.dateSortKeyend)returnclaimsend-- ===================functionwd.getReferences(statement)localrefdata=statement.referencesifnotrefdatathenreturnnilendlocalrefs={}fori,refinpairs(refdata)dolocalslocalfunctionhasValue(prop)-- checks that the prop is here with valid valueifref.snaks[prop]andref.snaks[prop][1].snaktype=='value'thenreturntrueendreturnfalseendifref.snaks.P248thenforj,sourceinpairs(ref.snaks.P248)doifsource.snaktype=='value'thenlocalpage,accessdateifhasValue('P304')thenpage=wd.formatSnak(ref.snaks.P304[1])endifhasValue('P813')thenaccessdate=wd.formatSnak(ref.snaks.P813[1])ends=modules.reference.citeitem(wd.getId(source),{['page']=page,['accessdate']=accessdate})table.insert(refs,s)endendelseifhasValue('P854')then-- P854: reference urllocalurl,title,author,publisher,accessdate,publishdate,publishlangurl=wd.formatSnak(ref.snaks.P854[1],{text="-"})ifhasValue('P1476')thentitle=wd.formatSnak(ref.snaks.P1476[1])elsetitle=mw.ustring.gsub(url,'^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])','http%1://%3')end--todo : handle multiple values for author, etc.ifhasValue('P813')thenaccessdate=wd.formatSnak(ref.snaks.P813[1])endifhasValue('P50')then-- author (item type)author=wd.formatSnak(ref.snaks.P50[1])elseifhasValue('P2093')then-- author (string type)author=wd.formatSnak(ref.snaks.P2093[1])endifhasValue('P123')thenpublisher=wd.formatSnak(ref.snaks.P123[1])end-- publishdate avec P577 ? (ne semble pas vraiment correspondre)ifhasValue('P407')thenlocalid=wd.getId(ref.snaks.P407[1])publishlang=getLangCode(id)ends=''--modules.reference.citeitem(wd.getId(source))table.insert(refs,s)elseifref.snaks.P854andref.snaks.P854[1].snaktype=='value'thens=wd.formatSnak(ref.snaks.P854[1],{text="-"})table.insert(refs,s)endendif#refs>0thenreturnrefsendendfunctionwd.sourceStr(sources)ifnotsourcesor(#sources==0)thenreturnnilendfori,jinpairs(sources)dosources[i]=mw.getCurrentFrame():extensionTag("ref",j)endreturntable.concat(sources,'<sup class="reference" style= "padding-left: 0; padding-right: 1px;">,</sup>')endfunctionwd.getDataValue(snak,params)ifnotparamsthenparams={}endlocalspeciallabels=params.speciallabels-- às vezes precisamos fazer uma lista de elementos para os quais o rótulo deve ser alterado, não é muito prático usar uma função para issoifsnak.snaktype~='value'thenreturnnilendlocaldatatype=snak.datatypelocalvalue=snak.datavalue.valuelocaldisplayformat=params.displayformatiftype(displayformat)=='function'thenreturndisplayformat(snak,params)endifdatatype=='wikibase-item'thenreturnwd.formatEntity(wd.getId(snak),params)endifdatatype=='url'thenreturnmodules.weblink.makelink(value,params.text)endifdatatype=='math'thenreturnmw.getCurrentFrame():extensionTag("math",value)endif(datatype=='string')or(datatype=='external-id')or(datatype=='commonsMedia')then-- todos os dados da string, exceto "math"ifparams.urlpatternthenlocalurlpattern=params.urlpatterniftype(urlpattern)=='function'thenurlpattern=urlpattern(value)endlocalurl=mw.ustring.gsub(urlpattern,'$1',(value:gsub('%%','%%%%'))):gsub(' ','%%20')value='['..url..' '..(params.textoorvalue)..']'endreturnvalueendifdatatype=='time'then-- format example: +00000001809-02-12T00:00:00Zifdisplayformat=='raw'thenreturnvalue.timeelselocaldateobject=dateObject(value,{precision=params.precision})returnobjectToText(dateobject,params)endendifdatatype=='globe-coordinate'then-- retorna uma tabela com as chaves latitude, longitude, precisão e globo para formatar por outro módulo (para alterar?)ifdisplayformat=='latitude'thenreturnvalue.latitudeelseifdisplayformat=='longitude'thenreturnvalue.longitudeelselocalcoordvalue=mw.clone(value)coordvalue.globe=modules.globes[value.globe]-- transforma o globo ID em nome inglês utilizável por geohackreturncoordvalue--nota : As coordenadas do Wikidata podem ser usadas em Módulo:Coordenadas. Devemos também permitir chamar Módulo:Coordenadores aqui?endendifdatatype=='quantity'then-- todo : gerenciar os parâmetros precisãolocalamount,unit=value.amount,value.unitifunitthenunit=unit:match('Q%d+')endlocalrawifdisplayformat=="raw"thenraw=trueendreturnmodules.formatNum.displayvalue(amount,unit,{targetunit=params.targetunit,raw=raw,rounding=params.rounding,showunit=params.showunitor'short',showlink=params.showlink})endifdatatype=='monolingualtext'thenifvalue.language==defaultlangthenreturnvalue.textelsereturnmodules.langmodule.lingua({value.language,value.text})endendreturnformatError('unknown-datavalue-type')endfunctionwd.stringTable(args)-- like getClaims, but get a list of string rather than a list of snaks, for easier manipulationlocalclaims=args.claimsifnotclaimsthenclaims=wd.getClaims(args)endifnotclaimsorclaims=={}thenreturnnilendlocalprops={}-- lista de propriedades associadas a cada string para categorização e linkbackfori,jinpairs(claims)doclaims[i]=wd.formatStatement(j,args)table.insert(props,j.mainsnak.property)endifargs.removedupesand(args.removedupes~='-')thenclaims=wd.addNewValues({},claims)-- também deve remover dos adereços aqueles que não são usadosendreturnclaims,propsendfunctionwd.getQualifiers(statement,qualifs,params)ifnotstatement.qualifiersthenreturnnilendlocalvals={}iftype(qualifs)=='string'thenqualifs=wd.splitStr(qualifs)endfori,jinpairs(qualifs)doifstatement.qualifiers[j]thenfork,linpairs(statement.qualifiers[j])dotable.insert(vals,l)endendendif#vals==0thenreturnnilendreturnvalsendfunctionwd.getFormattedQualifiers(statement,qualifs,params)ifnotparamsthenparams={}endlocalqualiftable=wd.getQualifiers(statement,qualifs)ifnotqualiftablethenreturnnilendqualiftable=wd.filterClaims(qualiftable,params)or{}fori,jinpairs(qualiftable)doqualiftable[i]=wd.formatSnak(j,params)endreturnmodules.linguistic.conj(qualiftable,params.conjtype)endfunctionwd.showQualifiers(str,statement,args)localqualifs=args.showqualifiersifnotqualifsthenreturnstr-- or error ?endiftype(qualifs)=='string'thenqualifs=wd.splitStr(qualifs)endlocalqualifargs=args.qualifargsor{}-- qualificadores de formatação = args começando com "qual", ou alternativamente, o mesmo que para o valor principalqualifargs.displayformat=args.qualifdisplayformatorargs.displayformatqualifargs.labelformat=args.qualiflabelformatorargs.labelformatqualifargs.link=args.qualiflinkorargs.linkqualifargs.conjtype=args.qualifconjtypelocalformattedqualifs=wd.getFormattedQualifiers(statement,qualifs,qualifargs)ifformattedqualifsandstrthenstr=str..modules.linguistic.inparentheses(formattedqualifs,defaultlang)endreturnstrendfunctionwd.formatSnak(snak,params)ifnotparamsthenparams={}end-- para facilitar a chamada de outros módulosifsnak.snaktype=='somevalue'thenreturnunknownValue(snak,params.unknownlabel)elseifsnak.snaktype=='novalue'thenreturnnoValue(params.novaluelabel)elseifsnak.snaktype=='value'thenreturnwd.getDataValue(snak,params)elsereturnformatError('unknown-snak-type')endendfunctionwd.formatStatement(statement,args)ifnotargsthenargs={}endifnotstatement.typeorstatement.type~='statement'thenreturnformatError('unknown-claim-type')endlocalprop=statement.mainsnak.propertylocalstr-- special displayformat fifargs.statementformatand(type(args.statementformat)=='function')thenstr=args.statementformat(statement,args)elseif(statement.mainsnak.datatype=='time')and(statement.mainsnak.dateformat~='-')thenifargs.displayformat=='raw'andstatement.mainsnak.snaktype=='value'thenstr=statement.mainsnak.datavalue.value.timeelsestr=wd.getFormattedDate(statement,args)endelseifargs.showonlyqualifierand(args.showonlyqualifier~='')thenstr=wd.getFormattedQualifiers(statement,args.showonlyqualifier,args)ifnotstrthenreturnnilendifargs.addstandardqualifs~='-'thenstr=wd.addStandardQualifs(str,statement)endelsestr=wd.formatSnak(statement.mainsnak,args)ifargs.addstandardqualifs~='-'thenstr=wd.addStandardQualifs(str,statement)endend-- ajouts divers ifargs.showlang==truethenlocalindicateur=showLang(statement)ifindicateurthenstr=indicateur..' '..strendendifargs.showqualifiersthenstr=wd.showQualifiers(str,statement,args)endifargs.showdatethen-- when "showdate and chronosort are both set, date retrieval is performed twicelocalperiod=wd.getFormattedDate(statement,args,"-")-- 3 arguments indicate the we should not use additional qualifiers, alrady added by wd.formatStatementifperiodthenstr=str.." <small>("..period..")</small>"endendifargs.showsourcethenlocalsources=wd.getReferences(statement)ifsourcesthenlocalsource=wd.sourceStr(sources)str=str..(sourceor"")endendreturnstrendfunctionwd.addLinkBack(str,id,property)ifnotidthenid=wd.getEntity()endifnotidthenreturnstrendiftype(property)=='table'thenproperty=property[1]endiftype(id)=='table'thenid=id.idendlocalclass=''ifpropertythenclass='wd_'..string.lower(property)endlocalicon='[[File:Blue pencil.svg|%s|10px|baseline|class=noviewer|link=%s]]'localtitle=wd.translate('see-wikidata-value')localurl=mw.uri.fullUrl('d:'..id,'uselang=pt')url.fragment=property-- adicionar um parâmetro #âncora if "property" definidourl=tostring(url)localv=mw.html.create('span'):addClass(class):wikitext(str):tag('span'):addClass('noprint wikidata-linkback'):css('padding-left','0.5em'):wikitext(icon:format(title,url)):allDone()returntostring(v)endfunctionwd.addRefAnchor(str,id)--[[ Insere uma âncora para uma referência gerada a partir de um elemento wd. O id Wikidata serve como um identificador para a âncora, para usar em modelos como "harvsp"--]]returntostring(mw.html.create('span'):attr('id',id):attr('class',"livro"):wikitext(str))end--=== FUNCTIONS USING AN ENTITY AS ARGUMENT ===localfunctionformatStatementsGrouped(args,type)-- grupos afirmações com o mesmo valor em handsnak, mas diferentes qualificadores-- (somente para propriedades de tipo de elemento)localclaims=wd.getClaims(args)ifnotclaimsthenreturnnilendlocalgroupedClaims={}-- afirmações de grupo pelo valor mainsnaklocalfunctionaddClaim(claim)localid=wd.getMainId(claim)fori,jinpairs(groupedClaims)doif(j.id==id)thentable.insert(groupedClaims[i].claims,claim)returnendendtable.insert(groupedClaims,{id=id,claims={claim}})endfori,claiminpairs(claims)doaddClaim(claim)endlocalstringTable={}-- instruções ad hoc para configurações para formatar um retorno individuallocalfuns={{param="showqualifiers",fun=function(str,claims)localqualifs={}fori,claiminpairs(claims)dolocalnews=wd.getFormattedQualifiers(claim,args.showqualifiers,args)ifnewsthentable.insert(qualifs,news)endendlocalqualifstr=modules.linguistic.conj(qualifs,"qualif-separator")ifnotqualifstrthenreturnstrendreturnstr.." "..modules.linguistic.inparentheses(qualifstr)end},{param="showdate",fun=function(str,claims)-- todas as datas são agrupadas dentro dos mesmos parênteses ex "medalha de ouro (1922, 1924)"localdates={}fori,statementinpairs(claims)dolocals=wd.getFormattedDate(statement,args,true)ifstatementthentable.insert(dates,s)endendlocaldatestr=modules.linguistic.conj(dates)ifnotdatestrthenreturnstrendreturnstr.."<small>"..modules.linguistic.inparentheses(datestr).."</small>"end},{param="showsource",fun=function(str,claims)-- as fontes são todas exibidas no mesmo lugar, no final-- se duas instruções tiverem a mesma fonte, ela será exibida apenas uma vezlocalsources={}localfunctiondupeRef(old,new)fori,jinpairs(old)doifj==newthenreturntrueendendendfori,claiminpairs(claims)dolocalrefs=wd.getReferences(claim)ifrefsthenfori,jinpairs(refs)doifnotdupeRef(sources,j)thentable.insert(sources,j)endendendendreturnstr..(wd.sourceStr(sources)or"")end}}fori,groupinpairs(groupedClaims)do-- bricolage para usar os argumentos de formatStatementslocalstr=wd.formatEntity(group.id,args)fori,funinpairs(funs)doifargs[fun.param]thenstr=fun.fun(str,group.claims,args)endendtable.insert(stringTable,str)endargs.valuetable=stringTablereturnwd.formatStatements(args)endfunctionwd.formatStatements(args)--Format statement and concat them cleanlyifargs.value=='-'thenreturnnilendlocalvalueexpl=wd.translate("activate-query")--If a value is already set, use itifargs.valueand(args.value~='')and(args.value~=valueexpl)thenreturnargs.valueend-- if args.expl: return something only one if explicitly required in Wikitextifargs.expland(args.value~=valueexpl)thenreturnnilendargs.entity=wd.getEntity(args.entity)ifargs.groupedandargs.grouped~=''thenargs.grouped=falsereturnformatStatementsGrouped(args)endlocalvaluetable=args.valuetable-- dans le cas où les valeurs sont déjà formtéeslocalprops-- as propriedades realmente usadas (em alguns casos, nem todas de args.propertyifnotvaluetablethen-- cas le plus courantvaluetable,props=wd.stringTable(args)endlocalstr=modules.linguistic.conj(valuetable,args.conjtype)ifnotstrthenreturnnilendifnotpropsthenprops=wd.splitStr(args.property)[1]endifargs.ucfirst=='-'thenstr=modules.linguistic.lcfirst(str)endifargs.addcatand(args.addcat~='-')thenstr=str..wd.addTrackingCat(props)end--if args.linkback and (args.linkback ~= '-') then-- str = wd.addLinkBack(str, args.entity, props)--endifargs.returnnumberofvaluesthenreturnstr,#valuetableendreturnstrendfunctionwd.formatAndCat(args)ifnotargsthenreturnnilend--args.linkback = args.linkback or trueargs.addcat=trueifargs.valuethen-- do not ignore linkback and addcat, as formatStatements doifargs.value=='-'thenreturnnilendlocalval=args.value..wd.addTrackingCat(args.property)--val = wd.addLinkBack(val, args.entity, args.property)returnvalendreturnwd.formatStatements(args)endfunctionwd.getTheDate(args)localclaims=wd.getClaims(args)ifnotclaimsthenreturnnilendlocalformattedvalues={}fori,jinpairs(claims)dolocalv=wd.getFormattedDate(j,args)ifvthentable.insert(formattedvalues,v)endendlocalval=modules.linguistic.conj(formattedvalues)ifnotvalthenreturnnilendifargs.addcat==truethenval=val..wd.addTrackingCat(args.property)endval=wd.addLinkBack(val,args.entity,args.property)returnvalendfunctionwd.keyDate(event,item,params)params=paramsor{}params.entity=itemiftype(event)=='table'thenfori,jinpairs(event)doparams.targetvalue=nil-- reinicialização bárbara dos parâmetros modificadoslocals=wd.keyDate(j,item,params)ifsthenreturnsendendelseiftype(event)~='string'thenreturnformatError('invalid-datatype',type(event),'string')elseifstring.sub(event,1,1)=='Q'then-- pedimos um elemento usado em P: P793 (evento chave)params.property='P793'params.targetvalue=eventparams.addcat=params.addcatortruereturnwd.getTheDate(params)elseifstring.sub(event,1,1)=='P'then-- pedimos uma propriedadeparams.property=eventreturnwd.formatAndCat(params)elsereturnformatError('invalid-entity-id',event)endendfunctionwd.mainDate(entity)-- essaye P580/P582localargs={entity=entity,addcat=true}args.property='P580'localstartpoint=wd.formatStatements(args)args.property='P582'localendpoint=wd.formatStatements(args)localstrif(startpointorendpoint)thenstr=modules.formatDate.daterange(startpoint,endpoint,params)str=wd.addLinkBack(str,entity,'P582')returnstrend-- défaut : P585args.property={'P585','P571'}args.linkback=truereturnwd.formatStatements(args)end-- === FUNCTIONS FOR TRANSITIVE PROPERTIES ===functionwd.getIds(item,query)query.excludespecial=truequery.displayformat='raw'query.entity=itemquery.addstandardqualifs='-'returnwd.stringTable(query)end-- recursively adds a list of qid to an existing list, based on the results of a queryfunctionwd.addVals(list,query,maxdepth,maxnodes,stopval)maxdepth=tonumber(maxdepth)or10maxnodes=tonumber(maxnodes)or100if(maxdepth<0)thenreturnlistendifstopvalandwd.isHere(list,stopval)thenreturnlistendlocalorigsize=#listfori=1,origsizedo-- tried a "checkpos" param instead of starting to 1 each time, but no impact on performancelocalcandidates=wd.getIds(list[i],query)list=wd.addNewValues(list,candidates,maxnodes,stopval)iflist[#list]==stopvalthenreturnlistendif#list>=maxnodesthenreturnlistendendif(#list==origsize)thenreturnlistendreturnwd.addVals(list,query,maxdepth-1,maxnodes,stopval,origsize+1)end-- returns a list of items transitively matching a query (orig item is not included in the list)functionwd.transitiveVals(item,query,maxdepth,maxnodes,stopval)maxdepth=tonumber(maxdepth)or5iftype(query)=="string"thenquery={property=query}end-- récupération des valeurslocalvals=wd.getIds(item,query)ifnotvalsthenreturnnilendlocalv=wd.addVals(vals,query,maxdepth-1,maxnodes,stopval)ifnotvthenreturnnilend-- réarrangement des valeursifquery.valorder=="inverted"thenlocala={}fori,jinpairs(v)dotable.insert(a,1,j)endv=aendreturnvend-- returns true if an item is the value of a query, transitivelyfunctionwd.inTransitiveVals(searchedval,sourceval,query,maxdepth,maxnodes)localvals=wd.transitiveVals(sourceval,query,maxdepth,maxnodes,searchedval)if(notvals)thenreturnfalseendfor_,valinipairs(vals)doif(val==searchedval)thenreturntrueendendreturnfalseend-- returns true if an item is a superclass of another, based on P279functionwd.isSubclass(class,item,maxdepth)localquery={property='P279'}ifclass==itemthen-- item is a subclass of itself iff it is a classifwd.getIds(item,query)thenreturntrueendreturnfalseendreturnwd.inTransitiveVals(class,item,query,maxdepth)end-- returns true if one of the best ranked P31 values of an item is the target or a subclass of the target-- rank = 'valid' would seem to make sense, but it would need to check for date qualifiers as some P31 values have begin or end datefunctionwd.isInstance(targetclass,item,maxdepth)maxdepth=maxdepthor10localdirectclasses=wd.transitiveVals(item,{property='P31'},1)ifnotdirectclassesthenreturnfalseendfori,classinpairs(directclasses)doifwd.isSubclass(targetclass,class,maxdepth-1)thenreturntrueendendreturnfalseend-- return the first value in a transitive query that belongs to a particular class. For instance find a value of P131 that is a province of Canadafunctionwd.findVal(sourceitem,targetclass,query,recursion,instancedepth)iftype(query)=="string"thenquery={property=query}endlocalcandidates=wd.getIds(sourceitem,query)ifcandidatesthenfori,jinpairs(candidates)doifwd.isInstance(targetclass,j,instancedepth)thenreturnjendendifnotrecursionthenrecursion=3elserecursion=recursion-1endifrecursion<0thenreturnnilendfori,candidateinpairs(candidates)doreturnwd.findVal(candidate,targetclass,query,recursion,instancedepth)endendend-- === VARIA ===functionwd.getDescription(entity,lang)lang=langordefaultlanglocaldescriptioniflang==defaultlangthenreturnmw.wikibase.descriptionl(qid)endifnotentity.descriptionsthenreturnwd.translate('no description')endlocaldescriptions=entity.descriptionsifnotdescriptionsthenreturnnilendifdescriptions[lang]thenreturndescriptions[delang].valueendreturnentity.idendfunctionwd.Dump(entity)entity=wd.getEntity(entity)ifnotentitythenreturnformatError("entity-param-not-provided")endreturn"<pre>"..mw.dumpObject(entity).."</pre>"endfunctionwd.frameFun(frame)localargs=frame.argslocalfunname=args[1]table.remove(args,1)returnwd[funname](args)endreturnwd