Module:Propriétés : Différence entre versions
(+ publié dans) |
(Synchro avec d:Module:Properties pour pouvoir utiliser les fonctions de normalisation à partir du nom en français (entre autre)) |
||
(2 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | local | + | 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 | ||
− | return | + | -- 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 |
Version actuelle datée du 30 octobre 2016 à 09:34
La documentation pour ce module peut être créée à Module:Propriétés/doc
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