词条 | 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 Q14865053p.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 thenif 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条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。