Modulo:Software

Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Software/man (modifica · cronologia)
Sandbox: Modulo:Software/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Software/test (modifica · cronologia · Esegui)
Modulo Lua per integrare le informazioni espresse nel Template:Software con le informazioni provenienti da Wikidata.
Se alcuni linguaggi sono assenti è un problema di configurazione.
In seguito l'uso di alcune sotto-funzioni.
Uso
isFreeSoftware
{{#invoke:Software|isFreeSoftware}}
Valori di ritorno:
sì
: è software liberono
: è software proprietarionil
: nessuna informazione per determinarlo
isFreeSoftware e Wikidata
A livello implementativo questa funzione cerca di uniformare alcune delle molte modalità con cui si può esprimere questa informazione in Wikidata.
Per quanto riguarda essere software libero:
- Il template {{Software}} ha
SoftwareLibero=sì
? - La voce è istanza di (P31) software libero (Q341) / software open-source (Q1130645)?
- Fra le licenze di questa voce espresse in licenza (P275) ce n'è una istanza di (P31) di licenza di software libero (Q3943414)? (funzione parser dispendiosa, vedi #Albero licenze Wikidata)
Per quanto riguarda essere software proprietario:
- Il template {{Software}} ha
SoftwareLibero=no
? - La voce è istanza di (P31) software proprietario (Q218616) / freeware (Q178285)?
- Fra le licenze di questa voce espresse in licenza (P275) ce n'è una sottoclasse di (P279) di licenza proprietaria (Q3238057)? (funzione parser dispendiosa, vedi #Albero licenze Wikidata)
specifiesALanguage
{{#invoke:Software|specifiesALanguage}}
sì
: vi sono linguaggi espressi da Wikidata o specificati da {{Software|Linguaggio}}no
: in caso contrario
shouldHaveALanguage
{{#invoke:Software|shouldHaveALanguage}}
Valori di ritorno:
sì
: questa voce dovrebbe (o potrebbe) mostrare l'etichetta dei linguaggi di programmazione. Vale per i software liberi o se vi sono linguaggi specificati.no
: la voce non dovrebbe (o non potrebbe) mostrare l'etichetta dei linguaggi di programmazione. Capita per software proprietario senza linguaggi noti.
- TODO
- Da novembre 2018 questa funzione è inutilizzata e potrebbe essere rimossa.
languages
{{#invoke:Software|languages}}
Stampa i linguaggi di programmazione unendo i valori dal template con i valori da Wikidata dalla proprietà linguaggio di programmazione (P277) e categorizzando:
- Categoria:Software libero senza linguaggio
- La voce dovrebbe mostrare linguaggi perché è un software libero, ma non lo fa.
- Categoria:P277 uguale su Wikidata
- I linguaggi specificati nel template sono presenti identici in Wikidata.
- Categoria:P277 letta da Wikidata
- Il template mostra linguaggi esclusivamente grazie a Wikidata.
- Categoria:P277 differente su Wikidata
- Il template ha linguaggi che Wikidata non ha (o viceversa).
- Categoria:P277 assente su Wikidata
- Il template ha linguaggi, Wikidata no.
- Categoria:Linguaggio di programmazione da Wikidata non previsto
- Capita quando in Wikidata c'è un linguaggio assente nella configurazione.
languageCategories
{{#invoke:Software|languageCategories}}
Categorizza la voce in base ai suoi linguaggi di programmazione espressi in Wikidata (usata internamente in #languages
).
licenseCategories
{{#invoke:Software|licenseCategories}}
Categorizza la voce in base alle licenze con cui è distribuito il software.
Considerazioni implementative
Albero licenze Wikidata
Ricostruzione dell'albero inverso delle licenze presenti in Wikidata:
- licenza (Q207621)
Albero GNU GPL
Notare che GNU General Public License (Q7603) è reputato con i medesimi valori sia per istanza di (P31) che per sottoclasse di (P279), in quanto per alcuni è considerata una vera e propria licenza, mentre per altri una sottoclasse di licenze. d:Talk:Q308915.
- GNU General Public License (Q7603)
- istanza di (P31)
Albero BSD
Albero caso peggiore
Attualmente il "caso peggiore" per identificare un'istanza di (P31) licenza di software libero (Q3943414) sembra essere il seguente (albero in cascata):
GNU Affero General Public License, versione 3 (o successive) (Q27020062) :
- istanza di (P31)
- GNU Affero General Public License, versione 3 (Q27017232)
- 1ª sotto-richiesta:
- istanza di (P31)
- GNU Affero General Public License (Q1131681)
- 2ª sotto-richiesta:
- istanza di (P31)
- GNU General Public License (Q7603)
- 3ª sotto-richiesta:
- istanza di (P31)
- licenza di software libero (Q3943414)
È perciò possibile limitare un massimo livello di ricorsione a 3 fintanto che questa struttura rimane invariata.
Configurazione
Per cambiare il modo in cui è mostrato un linguaggio o una licenza, prova a guardare in Wikidata tale linguaggio o tale licenza. Considera anche che se il nome in Wikidata è troppo lungo, è scelto il nome in breve (P1813).
Per aggiungere una categoria di un linguaggio, o una licenza, vedi Modulo:Software/Configurazione.
Fino a marzo 2017 per cambiare il wikilink alla voce del linguaggio o mostrare banalmente "C" al posto di "C (linguaggio)" occorreva modificare il Template:Software/Linguaggio considerando complesse sotto-inclusioni del Template:Software/L. Inoltre ora non occorre più mantenere parallelamente la documentazione in Template:Software#Linguaggi perchè è generata. Prima era Template:Software/Linguaggio/man.
Risoluzione dei problemi
Se il template {{Software}} ha l'errore «non in lista» significa che:
- Potrebbe essere un errore di battitura, si veda quella lista.
- Se non è un errore di battitura ma manca un linguaggio rilevante, vedere Modulo:Software/Configurazione.
Pagine correlate
local mWikidata = require('Modulo:Wikidata')
local getArgs = require('Module:Arguments').getArgs
local conf = mw.loadData('Modulo:Software/Configurazione')
local p = {}
--[[
* La voce è software libero?
*
* @return true|false|nil
]]
function p._isFreeSoftware(frame)
local args = frame and getArgs(frame)
local localIsFreeSoftware = args['SoftwareLibero']
if localIsFreeSoftware then
local yep = {['sì'] = true, ['si'] = true, ['no'] = false}
localIsFreeSoftware = mw.ustring.lower(localIsFreeSoftware)
localIsFreeSoftware = yep[localIsFreeSoftware]
end
local wikidataIsFreeSoftware = mWikidata._instanceOf('Q341')
return localIsFreeSoftware or wikidataIsFreeSoftware
end
function p._specifiesALanguage(frame)
local args = frame and getArgs(frame)
return args['Linguaggio'] or mWikidata._getClaims('P277')
end
return p