Modul:Kemijski identifikatori
Modul radi kao dio predloška {{Infookvir kemijski spoj}}.
Modul ima tri javne funkcije:
dohvatiIdentifikatore
urediFunkcija dohvaća identifikator članka na Wikipodatcima, te traži kemijske identifikatore (CAS, EC, UN, RTECS, PubChem) povezane uz stavku na Wikipodatcima. Kemijski identifikatori se uspoređuju s lokalnim vrijednostima, te se označavaju ovisno o poklapanjima.
Popis identifikatora i broj njihovog svojstva nalazi se u tablici imena identifikatori na početku modula. Tablica popisuje i sprema lokalnu vrijednost i vrijednost s Wikipodataka u varijablama lokalnaval i WDval, respektivno.
Ovisno o podudarnosti, modul vraća:
- ako obje vrijednosti postoje i jednake su, vraća se lokalna vrijednost, znak ✓ i članak se svrstava u Kategorija:Kemijski identifikatori isti kao na Wikipodatcima
- ako obje vrijednosti postoje ali nisu jednake, vraća se Wikidata vrijednost, znak X i Kategorija:Kemijski identifikatori različiti od Wikipodataka
- ako lokalni identifikator ne postoji, vraća se Wikidata vrijednost, znak ✓ i Kategorija:Kemijski identifikatori dohvaćeni s Wikipodataka
- ako Wikidata identifikator ne postoji, vraća se lokalna vrijednost, znak ? i Kategorija:Kemijski identifikatori koji nisu prisutni na Wikipodatcima
dohvatiFormulu
urediFunkcija dohvaća formulu kemijskog spoja i svrstava članak u Kategorija:Kemijske formule dohvaćene s Wikipodataka.
dohvatiNFPA
urediFunkcija dohvaća NFPA identifikatore s Wikipodataka i popunjava predložak {{NFPA 704}}. Dodaje stranicu u Kategorija:Kemijski identifikator NFPA 704 dohvaćen s Wikipodataka
local p = {}
local entityID = mw.wikibase.getEntityIdForCurrentPage()
local identifikatori = {
[0] = { ime = "CAS", WDprop = "P231", lokalnaval = "", WDval = "", link = "CAS registarski broj", vp = "https://commonchemistry.cas.org/detail?cas_rn=$1"},
[1] = { ime = "EC", WDprop = "P232", lokalnaval = "", WDval = "", link = "EC registarski broj", vp = "https://echa.europa.eu/information-on-chemicals/"},
[2] = { ime = "UN", WDprop = "P695", lokalnaval = "", WDval = "", link = "UN broj", vp = "http://www.unece.org/fileadmin/DAM/trans/danger/publi/adr/adr2011/English/VolumeI.pdf"},
[3] = { ime = "RTECS", WDprop = "P657", lokalnaval = "", WDval = "", link = "RTECS broj", vp = "https://www.cdc.gov/niosh/npg/npgdrtec.html"},
[4] = { ime = "PubChem", WDprop = "P662", lokalnaval = "", WDval = "", link = "PubChem", vp = "https://pubchem.ncbi.nlm.nih.gov/compound/$1"},
}
function dohvatiLokalneID(frame)
local args = mw.getCurrentFrame():getParent().args
for i,v in pairs(identifikatori) do
identifikatori[i].lokalnaval = args[identifikatori[i].ime] or ''
end
end
function dohvatiWikidataID(frame, entityID)
if (entityID) then
--ako je trenutna stranica povezana s wikidatom
local entity = mw.wikibase.getEntity( entityID )
for i,v in pairs(identifikatori) do
identifikatori[i].WDval = entity:formatPropertyValues( identifikatori[i].WDprop )["value"]
end
end
end
function p.dohvatiIdentifikatore(frame)
dohvatiLokalneID(frame)
dohvatiWikidataID(frame, entityID)
local retval = ''
local catbase = "Kemijski identifikatori"
for i,v in pairs(identifikatori) do
if (identifikatori[i].lokalnaval ~= '' and identifikatori[i].lokalnaval ~= '-' ) and identifikatori[i].WDval ~= '' then
-- obje vrijednosti postoje
if identifikatori[i].lokalnaval == identifikatori[i].WDval then
--obje vrijednosti postoje i iste su
retval = retval.. "\n|-\n| <b>[[" .. identifikatori[i].link ..'|'.. identifikatori[i].ime .. ' broj]]</b>'
.. '\n| ['.. identifikatori[i].vp:gsub("$1", identifikatori[i].lokalnaval) .. ' ' .. identifikatori[i].lokalnaval .. ']'
.. ' <abbr style="color:limegreen;" title="Podatak je isti kao na Wikipodatcima"><b>✓</b></abbr>'
.. "[[Kategorija:" .. catbase .. " isti kao na Wikipodatcima]]"
else -- obje vrijednosti postoje no nisu iste
retval = retval.. "\n|-\n| <b>[[" .. identifikatori[i].link ..'|'.. identifikatori[i].ime .. ' broj]]</b>'
.. '\n| ['.. identifikatori[i].vp:gsub("$1", identifikatori[i].WDval) .. " " .. identifikatori[i].WDval .. "]"
.. ' <abbr style="color:red;" title="Podatak je različit od Wikipodataka (lokalni navodi '.. mw.text.encode(identifikatori[i].lokalnaval) ..')"><b>X</b></abbr>'
.. "[[Kategorija:" .. catbase .. " različiti od Wikipodataka]]"
end --obje jednake
else -- ako jedan od podataka ne postoji
if identifikatori[i].WDval ~= '' then
-- WD postoji a lokalna ne postoji
retval = retval.. "\n|-\n| <b>[[" .. identifikatori[i].link ..'|'.. identifikatori[i].ime .. ' broj]]</b>'
.. '\n| ['.. identifikatori[i].vp:gsub("$1", identifikatori[i].WDval) .. " " .. identifikatori[i].WDval .. "]"
.. ' <abbr style="color:darkgreen;" title="Podatak je dohvaćen s Wikipodataka"><b>✓</b></abbr>'
.. "[[Kategorija:" .. catbase .. " dohvaćeni s Wikipodataka]]"
else
if identifikatori[i].lokalnaval ~= '' and identifikatori[i].lokalnaval ~= '-' then
-- lokalna postoji a WD ne postoji
retval = retval.. "\n|-\n| <b>[[" .. identifikatori[i].link ..'|'.. identifikatori[i].ime .. ' broj]]</b>'
.. '\n| ['.. identifikatori[i].vp:gsub("$1", identifikatori[i].lokalnaval) .. " " .. identifikatori[i].lokalnaval .. "]"
.. ' <abbr style="color:darkgrey;" title="Nije moguće potvrditi; podatak nije prisutan na Wikipodatcima"><b>?</b></abbr>'
.. "[[Kategorija:" .. catbase .. " koji nisu prisutni na Wikipodatcima]]"
else
retval = retval..''
end --WD postoji
end --lokalna postoji
end -- obje postoje
end -- end do
return retval
end
function p.dohvatiFormulu(frame)
if (entityID) then
--ako je trenutna stranica povezana s wikidatom
return mw.wikibase
.getEntity(entityID)
:formatPropertyValues( 'P274')['value']
.. ' <abbr style="color:darkgreen; position: absolute;" title="Podatak je dohvaćen s Wikipodataka"><b>✓</b></abbr>'
.. '[[Kategorija:Kemijske formule dohvaćene s Wikipodataka]]'
end
end
function p.dohvatiNFPA(frame)
local ret = '\n|-\n| <b>[[NFPA 704]]</b>\n|'
if (frame:getParent().args['NFPA 704'] ~= nil
and frame:getParent().args['NFPA 704'] ~= '' ) then
-- provjera - baza
-- TODO dodati logiku usporedbe
--mw.log(frame:getParent().args['NFPA 704'])
local check = {}
for capture in frame:getParent().args['NFPA 704']:gmatch('%a+ [012345]%.') do
table.insert(check, capture)
end
mw.logObject(check)
ret = ret .. frame:getParent().args['NFPA 704']
return ret
else
local WDprop = {
['property'] = 'P4952',
['pval'] = 'Q51139288',
['props'] = {
['H'] = { p = 'P993', val = '', wdval = ''},
['F'] = { p = 'P994', val = '', wdval = ''},
['R'] = { p = 'P995', val = '', wdval = ''},
['O'] = { p = 'P877', val = '', wdval = ''},
}
}
if (entityID and mw.wikibase.getEntity( entityID )['claims'][WDprop['property']] ~= nil) then
--ako je trenutna stranica povezana s wikidatom
local entity = mw.wikibase.getEntity( entityID )['claims'][WDprop['property']][1]
-- provjera valjanosti
if (entity['mainsnak']['datavalue']['value']['id'] == WDprop.pval
and entity['mainsnak']['property'] == WDprop.property) then
mw.log('Provjera prolaz')
for k, v in pairs(WDprop['props']) do
if entity['qualifiers'][v['p']][1]['datavalue'] == nil then
v['wdval'] = "0"
else
v['wdval'] = entity['qualifiers'][v['p']][1]['datavalue']['value']
end
end
ret = ret .. '\n'.. frame:expandTemplate{ title = 'NFPA 704', args = {
H = WDprop['props']['H']['wdval'],
F = WDprop['props']['F']['wdval'],
R = WDprop['props']['R']['wdval'],
O = WDprop['props']['O']['wdval'],
} }
ret = ret ..' <abbr style="color:darkgreen; position: absolute; line-height: 110px; padding-left: 10px;" title="Podatak je dohvaćen s Wikipodataka"><b>✓</b></abbr>'
.. '[[Kategorija:Kemijski identifikator NFPA 704 dohvaćen s Wikipodataka]]'
end
else ret = ''
end
end
return ret
end
return p