Module:RootFinder: Difference between revisions
From The Seven Sages of Rome
No edit summary |
No edit summary |
||
| Line 14: | Line 14: | ||
while true do | while true do | ||
-- Perform a semantic query to get the parent language | -- Perform a semantic query to get the parent language | ||
local | local queryString = string.format('[[%s]]|?%s', title, prop) | ||
mw.log(queryString) | |||
local queryResult = mw.smw.getQueryResult(queryString) | |||
-- Log the query result | -- Log the query result | ||
| Line 22: | Line 24: | ||
local parent = nil | local parent = nil | ||
if queryResult and type(queryResult) == "table" then | if queryResult and type(queryResult) == "table" then | ||
for k,v in pairs( queryResult.results ) do | |||
mw.log(mw.text.jsonEncode(v)) | |||
if v.printouts then | |||
mw.log("Printout: " .. mw.text.jsonEncode(v.printouts)) | |||
if v.printouts["Is Variety Of"] and #v.printouts["Is Variety Of"] > 0 and v.printouts["Is Variety Of"][1].fulltext then | |||
parent = v.printouts["Is Variety Of"][1].fulltext | |||
end | |||
end | |||
end | |||
end | end | ||
Revision as of 11:08, 26 March 2025
Documentation for this module may be created at Module:RootFinder/doc
local p = {}
function p.getRootLanguage(frame)
local startTitle = frame.args[1] -- Expect a plain string as input (e.g., via {{PAGENAME}})
if not startTitle or startTitle == "" then
return "Error: No start title provided"
end
local title = startTitle
local prop = "Is Variety Of"
mw.log("Starting root language search for: " .. title)
while true do
-- Perform a semantic query to get the parent language
local queryString = string.format('[[%s]]|?%s', title, prop)
mw.log(queryString)
local queryResult = mw.smw.getQueryResult(queryString)
-- Log the query result
mw.log("Query result for " .. title .. ": " .. mw.text.jsonEncode(queryResult))
-- Ensure queryResult is valid and extract the first parent
local parent = nil
if queryResult and type(queryResult) == "table" then
for k,v in pairs( queryResult.results ) do
mw.log(mw.text.jsonEncode(v))
if v.printouts then
mw.log("Printout: " .. mw.text.jsonEncode(v.printouts))
if v.printouts["Is Variety Of"] and #v.printouts["Is Variety Of"] > 0 and v.printouts["Is Variety Of"][1].fulltext then
parent = v.printouts["Is Variety Of"][1].fulltext
end
end
end
end
-- If no parent is found, return the current title as root
if not parent or parent == "" then
mw.log("Root language found: " .. title)
return title
end
-- Move up to the parent language
title = parent
end
end
return p