Saltar para o conteúdo

Módulo:Propriedades

Origem: Wikipédia, a enciclopédia livre.
local p = {
    instance_de= "P31",
    sub_classe_de = "P279",
    primeiro_nome = "P735",
    sobrenome = "P734",
    isbn10 = "P957",
    publicado_em = "P1433",
    ['língua'] = "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