Module:SPARQLMentions
Jump to navigation
Jump to search
This module is for better display of SPARQL queries to Wikidata.
It has three functions:
getItems( SPARQL )
[edit]- Produces the list of links to items mentioned in the query
getProperties( SPARQL )
[edit]- Produces the list of links to properties mentioned in the query
getTitle( SPARQL )
[edit]- Extracts the title of the query
Code
local p = {}
-- Return the label of a given data item, formatted for linking
local function getLabel(frame, id, prefix)
if prefix == nil then prefix = '' end
if id == "defaultView:BubbleChart" then id = "Q24515280" end
if id == "defaultView:Graph" then id = "Q24515287" end
if id == "defaultView:Map" then id = "Q24515275" end
if id == "defaultView:ImageGrid" then id = "Q24515278" end
if id == "wikibase:box" then id = "Q26211169" end
if id == "wikibase:cornerWest" then id = "Q26211177" end
label = mw.wikibase.label( id )
if label == nil then
linktext = id
extra = ''
else
linktext = label .. " (" .. id .. ")"
extra = ' ' .. frame:expandTemplate({ title="Reasonator", args= { [1] = id}})
.. ' ' .. frame:expandTemplate({ title="SQID", args= { [1] = id}})
end
link = mw.wikibase.getEntityUrl( id )
return '[' .. link .. ' ' .. linktext .. ']' .. extra;
end
local function map(func, array)
local new_array = {}
for i,v in ipairs(array) do
new_array[i] = func(v)
end
return new_array
end
local function getAll(text, regexp, seen, items)
if items == nil then items = {} end
if seen == nil then seen = {} end
for item in string.gmatch(text, regexp) do
if seen[item] == nil then
seen[item] = 1
table.insert(items, item)
end
end
return items
end
-- Produce list of items mentioned in the query
function p.getItems(frame)
if not mw.wikibase then
return "no mw.wikibase"
end
items = getAll(frame.args[1], 'wd:(Q%d+)')
return table.concat(map(function(it) return getLabel(frame, it) end, items), ", ")
end
-- Produce list of properties mentioned in the query
function p.getProperties(frame)
if not mw.wikibase then
return "no mw.wikibase"
end
seen = {}
items = {}
prefixes = {'wdt', 'p', 'ps', 'pr', 'pq', 'psv', 'pv', 'prv', 'pqv', 'wdtn', 'psn', 'pqn', 'prn', 'wdno' }
for _, pr in ipairs(prefixes) do
items = getAll(frame.args[1], pr .. ':(P%d+)', seen, items)
end
return table.concat(map(function(it) return getLabel(frame, it, 'Property:') end, items), ", ")
end
function p.getFunctions(frame)
if not mw.wikibase then
return "no mw.wikibase"
end
seen = {}
items = {}
func = {'defaultView:BubbleChart', 'defaultView:Graph', 'defaultView:Map', 'defaultView:ImageGrid', 'wikibase:box', "wikibase:cornerWest" }
for _, pr in ipairs(func) do
items = getAll(frame.args[1], pr, seen, items)
end
return table.concat(map(function(it) return getLabel(frame, it) end, items), ", ")
end
function p.getTitle(frame)
if not mw.wikibase then
return "no mw.wikibase"
end
for line in string.gmatch(frame.args[1], "[^%c]+%c?") do
local title = string.match(line, '^#title:%s*([^%c]+)')
if not (title == nil) then
return title
end
end
end
return p