请输入您要查询的百科知识:

 

词条 Module:Sandbox/genewiki/experimental
释义 --uncomment and add this to the debug console to run code.--frame = mw.getCurrentFrame()--frame.args = {"a", "b", from ="Q14865053"}--print(p.hello(frame))---require('Module:Wikidata') -- All Lua modules on Wikipedia must begin by defining a variable that will hold their-- externally accessible functions. They can have any name and may also hold data.

p = {

devmode = false

}

p.getQualifierID = function(frame)

local propertyID = mw.text.trim(frame.args[1] or "")

local qualifierID = mw.text.trim(frame.args[2] or "")

local input_parm = mw.text.trim(frame.args[3] or "")

local itemID = mw.text.trim(frame.args[4] or "") --if direct link from wikidata item

if input_parm == "FETCH_WIKIDATA" then

local entity = ""

if itemID ~= "" then

entity = mw.wikibase.getEntityObject(itemID)

else

entity = mw.wikibase.getEntityObject()

end

if entity.claims[propertyID] ~= nil then

local out = {}

for k, v in pairs(entity.claims[propertyID]) do

for k2, v2 in pairs(v.qualifiers[qualifierID]) do

if v2.snaktype == 'value' then

out[#out + 1] = "Q" .. v2.datavalue.value["numeric-id"]

end

end

end

return table.concat(out, ", ")

else

return ""

end

else

return input_parm

end

end

--- Try to replace this with one function that fails gracefully--- Get the image URL associated the current article---{{#invoke:Wikidata|getValueFromID|{{#invoke:Sandbox/genewiki/geneboxdev |getQIDFromID |{{#invoke:Wikidata|pageId}} |P688}}|P18|FETCH_WIKIDATA}}--- breaks apart to be---{{#invoke:Wikidata|getValueFromID|--- {{#invoke:Sandbox/genewiki/geneboxdev |getQIDFromID |--- {{#invoke:Wikidata|pageId}}--- |P688}}---|P18|FETCH_WIKIDATA}}--- testing on ARF6 Q14865053

p.testEntityId = function(wikidata_qid)

--pcall pattern does not not work for this..

--local entity = mw.wikibase.getEntity(wikidata_qid)

--but it does for locally generated errors like this

local entity = 2+"error"

return entity

end

-- test entry point-- local qid = mw.text.trim(frame.args['from'])

p.hello = function( frame )

local qid = "1Q14865053"

local out = ""

--this is like a try statement

local worked,value = pcall(p.testEntityId, qid)

if(worked)

then out = value

else out = "error! "..value

end

end

--gets an image for a qif, doesn't die if no qid is given to it.--frame = mw.getCurrentFrame()--frame.args = {QID="Q14865053"}--print(p.getDefaultImage(frame))

p.getDefaultImage = function(frame)

local wikidata_id = mw.text.trim(frame.args['QID'] or "")

-- "nil" (a string, not the value nil), "number", "string", "boolean", "table", "function", "thread", and "userdata".

if wikidata_id == nil

then return ""

elseif string.len(wikidata_id) < 3

then return ""

end

local propertyID = "P18"

local sep = mw.text.trim(" ")

local imgsize = mw.text.trim("220px")

local entity = mw.wikibase.getEntity(wikidata_id)

local claims

if entity and entity.claims then

claims = entity.claims[propertyID]

end

if claims then

if (claims[1] and claims[1].mainsnak.datatype == "commonsMedia") then

local out = {}

for k, v in pairs(claims) do

local filename = v.mainsnak.datavalue.value

out[#out + 1] = ""

end

return table.concat(out, sep)

else

return ""

end

else

return input_parm

end

end

function p.ViewSomething(frame)

local itemID ="Q14865053"

local data = mw.wikibase.getEntityObject(itemID)

if not data then

return nil

end

--- local f = frame.args[1] and frame or frame:getParent()

local i = 1

while true do

--- local index = f.args[i]--- if not index then

if type(data) == "table" then

return mw.text.jsonEncode(data, mw.text.JSON_PRESERVE_KEYS + mw.text.JSON_PRETTY)

else

return tostring(data)

end

--- end

data = data[index] or data[tonumber(index)]

if not data then

return

end

i = i + 1

end

end

p.getChromosomeLocJulia = function(frame)

local propertyID = mw.text.trim(frame.args[1] or "")

local qualifierID = mw.text.trim(frame.args[2] or "")

local input_parm = mw.text.trim(frame.args[3] or "")

local qualifierIds = p.getQualifierID(frame)

local newest_build = ""

local preferred_value = "not set"

if qualifierIds then

local list_itemID = mw.text.split(qualifierIds,",")

for index,value in ipairs(list_itemID) do

local alias = ""

if entity['aliases'] ~= nil then

for key, value in ipairs(test) do

if string.match(value['value'], '^hg') then

alias = value['value']

end

end

local build_no = alias:gsub("hg", "")

if newest_build < build_no or newest_build == "" then

newest_build = build_no

preferred_value = "path here"

end

end

end

return preferred_value

else

return "nnn"

end

return "mmm"

end

---getChromosomeLoc---input propertyID ie(Genomic start) P644--- qualifierID (ie GenLoc Assembly) P659--- input_parm (ie FETCH_WIKIDATA)--- {{#invoke:Sandbox/genewiki/geneboxdev|getChromosomeLoc|P644|P659|FETCH_WIKIDATA}}---output preferred chromosome location start value in this case it would be 49893092--for debug window -- Q14865053--frame = mw.getCurrentFrame()--frame.args = {"P644","P659","FETCH_WIKIDATA","Q14865053"}--print(p.getChromosomeLoc(frame))

p.getChromosomeLoc = function(frame)

-- will contain the numeric value for the requested coordinate

local output = ""

local sep = " "

-- can only be P644 (genomic start) or P645 (genomic end) for this to work

-- should probably try to catch that. Might also increase legibility to use specific variable names when possible

local propertyID = mw.text.trim(frame.args[1] or "")

-- this can really only be P659 right now. I'm not sure of the value of including it as a parameter as other values will likely break this function

local qualifierID = mw.text.trim(frame.args[2] or "")

-- Why do we include this here? What should happen if FETCH_WIKIDATA is not included?

local input_parm = mw.text.trim(frame.args[3] or "")

-- this can needs to be fed to the function either by a call to {{#invoke:Wikidata|pageId}} or by setting it directly (e.g. if the function was applied on a page other than the targeted gene)

--alert if this id is not a valid thing in wikidata, a Lua error will occur that says

--The ID entered is unknown to the system. Please use a valid entity ID.

local itemID = mw.text.trim(frame.args[4] or "")

-- will track the different builds pulled from the qualifiers

local newest_build = "0"

-- starts the process

local entity = mw.wikibase.getEntityObject(itemID)

local claims

--gets a table of claims on the (genomic start or end) property Q19847637

if entity and entity.claims then

claims = entity.claims[propertyID]

end

--will return nothing if no claims are found

if claims then

--checking to be sure claims is populated, not sure it its needed

if (claims[1] ) then

--useful for debugging

--local out = {}

--pulls the genome location from the claim

for k, v in pairs(claims) do

local location = v.mainsnak.datavalue.value

--debugging

--out[#out + 1] = k.." location:" .. location.. " || "

--gets the qualifiers linked to the current claim

local quals = v.qualifiers.P659

--if there are any

if quals then

for qk, qv in pairs(quals) do

local qual_obj_id = "Q"..qv.datavalue.value["numeric-id"]

--get to the entity targeted by the qualifier property. Genome builds are Items in wikidata

local qual_obj = mw.wikibase.getEntityObject(qual_obj_id)

local alias = ""

--this uses the aliases to pull out version numbers

--seems like there ought to be a better way to do this, but likely would need to change the data added by the bot

if qual_obj["aliases"] ~= nil then

local test = qual_obj["aliases"]["en"]

for key, value in ipairs(test) do

if string.match(value['value'], '^hg') then

alias = value['value']

local build_no = alias:gsub("hg","")

--report only the most location associated with the most recent build

--if there is more than one location per build, just give one back as that is not our problem right now.

if build_no > newest_build then

output = location

newest_build = build_no

end

end

end

end

end

--in case there are no qualifiers, but there is a location, might as well return it

else output = location

end

end

return output

else

return ""

end

else

return ""

--debug

--"no claims for "..itemID.." prop "..propertyID

end

end

-- All modules end by returning the variable containing its functions to Wikipedia.

return p

-- We can now use this module by calling {{#invoke: HelloWorld | hello }}.-- The #invoke command begins with the module's name, in this case "HelloWorld",-- then takes the name of one of its functions as an argument, in this case "hello".
随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/10 23:07:03