Module:Propriétés
local p = { instance_de= "P31",
sous_classe_de = "P279", prenom = "P735", nomdefamille = "P734", isbn10 = "P957", publie_dans = "P1433", langue = "P407"
} -- this module gives solutions to get the Pnumber of a property by its name
-- could be automatized, but for now just defining a muanual mapping
p.p_from_name = {
["country"] = 17 ;
["gender"] = 21 ;
["instance of"] = 31 ;
["field"] = 101 ; ["occupation"] = 106 ;
["genre"] = 136 ;
["named after"] = 138 ;
["preceded by"] = 155;
["succeeded by"] = 156;
["collection"] = 195;
["subclass of"] = 279 ;
["category's topic"] = 301;
["list of"] = 360 ; ["part of"] = 361 ;
["commons category"] = 373;
["terminus"] = 559; ["direction"] = 560;
["start date"] = 580 ; ["begin date"] = 580 ;
["end date"] = 582 ;
["date"] = 585 ;
["of"] = 642 ;
["participant"] = 710 ;
["edition"] = 747 ; ["edition of"] = 629 ;
['key event'] = 793 ; ['significant event'] = 793 ;
["topic's category"] = 910; ["subject"] = 921; -- work subject ["inspired by"] = 941 ;
["fictional analog of"] = 1074 ;
["statement disputed by"] = 1310 ; ["disputed by"] = 1310 ;
["of"] = 642 ;
["history"] = 2184 ;
["property for this type"] = 1963 ;
["metasubclass of"] = 2445 ;
["number"] = 1114 ;
["union of"] = 2737; ["disjoint union of"] = 2738;
["has part of the type"] = 2670 ; }
local function string_to_propnumber(label) local res = p.p_from_name[label] ; if res ~= nil then return tostring( res) ; else res = mw.wikibase.resolvePropertyId(label) if res then return string.sub(res, 2) else return nil end
end
end
p.numberFromPropertylabel = function(frame) local label = frame.args[1] ; mw.log(label) return string_to_propnumber(label) end;
-- returns a pid of the form "Pnnn..." where n is a character in "123456789" --from either --* a number representing a property wikidata number --* a string number representing a property wikidata number --* a pid of the form "Pnnn" --* a "property name" corresponding to a property, where the names are listed in the array p.p_from_name -- or "nil" if the id does not match to any of the cases above p.normalize = function(input_pid) local input_pid = tostring(input_pid) if mw.ustring.match(input_pid, "P%d+") then return input_pid elseif mw.ustring.match(input_pid, "%d+") then return "P" .. input_pid else return "P" .. tostring(string_to_propnumber(input_pid)) end end
-- function that takes a string with a set of pids and returns an array of properties p.expandPropList = function(plist) local props = mw.text.split(plist,",") for ind, val in ipairs(props) do props[ind] = p.normalize(val) end return props end
function p.datatype(property) if type(property) ~= "table" then property = mw.wikibase.getEntityObject(p.normalize(property)) end return property.datatype end
-- wikitemplate interface
p.Pid = function(frame) local label = frame.args[1] ; return p.normalize(label) end;
p.Pdatatype = function(frame) return p.datatype(frame.args[1]) end;
p.of = p.normalize("of")
p.union_of = p.normalize("union of")
p.disjoint_union_of = p.normalize("disjoint union of")
return p