Module:RootFinder: Difference between revisions

From The Seven Sages of Rome
No edit summary
No edit summary
Line 7: Line 7:
     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 result = mw.smw.ask{ "[[" .. title .. "]]|?" .. prop }
         local queryResult = mw.smw.ask{"[[" .. title .. "]]|?" .. prop}


         -- Extract the first available parent
         -- Ensure queryResult is valid and extract the first parent
         local parent = nil
         local parent = nil
         for _, data in pairs(result) do
         if queryResult and type(queryResult) == "table" then
            if type(data[prop]) == "table" then
            for _, row in pairs(queryResult) do
                parent = data[prop][1] -- Take the first parent if multiple values exist
                if row[prop] then
            else
                    if type(row[prop]) == "table" then
                parent = data[prop]
                        parent = row[prop][1] -- Take the first value if it's a list
                    else
                        parent = row[prop]
                    end
                end
                break -- Only need the first row
             end
             end
            break -- Only need the first result
         end
         end


         -- If no parent is found, return the current language as root
         -- If no parent is found, return the current title as root
         if not parent or parent == "" then
         if not parent or parent == "" then
             return title
             return title
         end
         end


         -- Move up the hierarchy
         -- Move up to the parent language
         title = parent
         title = parent
     end
     end

Revision as of 08:09, 26 March 2025

Documentation for this module may be created at Module:RootFinder/doc

local p = {}

function p.getRootLanguage(frame)
    local title = mw.title.getCurrentTitle().fullText
    local prop = "Is Variety Of"

    while true do
        -- Perform a semantic query to get the parent language
        local queryResult = mw.smw.ask{"[[" .. title .. "]]|?" .. prop}

        -- Ensure queryResult is valid and extract the first parent
        local parent = nil
        if queryResult and type(queryResult) == "table" then
            for _, row in pairs(queryResult) do
                if row[prop] then
                    if type(row[prop]) == "table" then
                        parent = row[prop][1] -- Take the first value if it's a list
                    else
                        parent = row[prop]
                    end
                end
                break -- Only need the first row
            end
        end

        -- If no parent is found, return the current title as root
        if not parent or parent == "" then
            return title
        end

        -- Move up to the parent language
        title = parent
    end
end

return p