Modul:Kemijski identifikatori

Izvor: Hrvatska internetska enciklopedija
Skoči na:orijentacija, traži
<templatestyles src="Modul:Dokumentacija/styles.css"></templatestyles>
Dokumentacija modula[vidi] [uredi] [povijest] [osvježi]

Modul radi kao dio predloška {{Infookvir kemijski spoj}}.

Modul ima jednu javnu funkciju imena glavna.

Funkcija dohvaća identifikator članka na Wikidati, te traži kemijske identifikatore povezane uz stavku na Wikidati. Kemijski identifikatori se uspoređuju sa 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 sa Wikidate u varijablama lokalnaval i WDval, respektivno.

Ovisno o podudarnosti, modul vraća:


local p = {}

local entityID = mw.wikibase.getEntityIdForCurrentPage()

local identifikatori = {
	[0] = { ime = "CAS", WDprop = "P231", lokalnaval = "",  WDval = "", link = "CAS registarski broj", vp = "https://chem.nlm.nih.gov/chemidplus/rn/$1"},
	[1] = { ime = "EC", WDprop = "P232", lokalnaval = "",  WDval = "", link = "EC registarski broj", vp = "https://echa.europa.eu/information-on-chemicals/ec-inventory"},
	[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 Wikidati"><b>✓</b></abbr>'
				.. "[[Kategorija:" .. catbase .. " isti kao na Wikidati]]"
			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 Wikidate (lokalni navodi '.. identifikatori[i].lokalnaval ..')><b>X</b></abbr>'
				.. "[[Kategorija:" .. catbase .. " različiti od Wikidate]]"
			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 Wikidate"><b>✓</b></abbr>'
				.. "[[Kategorija:" .. catbase .. " dohvaćeni s Wikidate]]"
				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 Wikidati"><b>?</b></abbr>'
				.. "[[Kategorija:" .. catbase .. " koji nisu prisutni na Wikidati]]"
				
				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 Wikidate"><b>✓</b></abbr>'
			.. '[[Kategorija:Kemijske formule dohvaćene s Wikidate]]'
	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 Wikidate"><b>✓</b></abbr>'
					.. '[[Kategorija:Kemijski identifikator NFPA 704 dohvaćen s Wikidate]]'
			end
			else ret = ''
		end
	end
	return ret
end

return p