Module:Propriétés : Différence entre versions

De Lagny-sur-Marne Wiki
Aller à : navigation, rechercher
(+langue)
(Synchro avec d:Module:Properties pour pouvoir utiliser les fonctions de normalisation à partir du nom en français (entre autre))
 
(Une révision intermédiaire par un autre utilisateur non affichée)
Ligne 1 : Ligne 1 :
local proprietes = {instance_de= "P31",
+
local p = {
                    sous_classe_de = "P279",
+
instance_de= "P31",
                    prenom = "P735",
+
    sous_classe_de = "P279",
                    nomdefamille = "P734",  
+
    prenom = "P735",
                    isbn10 = "P957",
+
    nomdefamille = "P734",  
                    publie_dans = "P1433",
+
    isbn10 = "P957",
                    langue = "P407" }
+
    publie_dans = "P1433",
 +
    langue = "P407"  
 +
}
 +
-- this module gives solutions to get the Pnumber of a property by its name
  
  
return proprietes
+
-- 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