Module:ResearchProblem: Difference between revisions

From MaRDI portal
TA4Shehu (talk | contribs)
No edit summary
TA4Shehu (talk | contribs)
No edit summary
 
Line 63: Line 63:
end
end


-- Function to get specialized Research Problems
function p.getSpecializedResearchProblems(frame)
local entityId = frame.args[1]
   
    -- Validate input parameter
    if not entityId or entityId == '' then
        return "Error: No entity ID provided"
    end
   
    -- Constructing the SPARQL query with dynamic entity entityId
    -- P1684: specialized by property id
    local sparqlQuery = [[
PREFIX entityId: <https://portal.mardi4nfdi.de/entity/]] .. entityId .. [[>
SELECT ?URL ?Label 
WHERE {
entityId: wdt:P1684 ?URL.
?URL rdfs:label ?Label
}
]]
-- Executing the SPARQL query and retrieving results in JSON format
local jsonResults = sparql.runQuery(sparqlQuery)
-- Validate results
if not jsonResults or not jsonResults.results or not jsonResults.results.bindings then
      return "No specialized research fields found"
    end
local specializedResearchProblems = {}
    -- Get the number of specialized research fields
local totalSpecResProblems = #jsonResults.results.bindings
-- Loop through the bindings
for index = 0, totalSpecResProblems  do
    local item = jsonResults.results.bindings[index]
    if not item.Label.value then
        return "Error: Missing item.Label.value"
    elseif not item.URL.value then
        return "Error: Missing item.URL.value"
    else
    local label = item.Label.value
        local url = item.URL.value
        local numericId = url:match("Q(%d+)")
        local urlRendered = "https://portal.mardi4nfdi.de/wiki/Research_problem:" .. numericId
        local labelWithUrl = string.format('[%s %s]', tostring(urlRendered), tostring(label))
        table.insert(specializedResearchProblems, "| " .. labelWithUrl)
    end
end
-- Construct the Wikitext table
local wikitextTable = "{| class='wikitable'\n" .. table.concat(specializedResearchProblems, "\n|-\n") .. "\n|}"
return wikitextTable
end




return p
return p

Latest revision as of 09:59, 2 July 2025

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

-- Required modules for SPARQL queries and HTML table generation
-- Module for executing SPARQL queries
local sparql = require('SPARQL')
-- MediaWiki library for logging and utilities
local mw = require('mw')
local json = require("mw.text") 

-- Main table to hold all functions
local p = {}


-- Function to get models used to model the research problem
function p.getModelsUsedForResearchProblem(frame)
	local entityId = frame.args[1]
    
    -- Validate input parameter
    if not entityId or entityId == '' then
        return "Error: No entity ID provided"
    end
    
    -- Constructing the SPARQL query with dynamic entity entityId
    -- P1513: modelled by property id
    local sparqlQuery = [[
PREFIX entityId: <https://portal.mardi4nfdi.de/entity/]] .. entityId .. [[>
	SELECT ?URL ?Label  
	WHERE {
		entityId: wdt:P1513 ?URL.
		?URL rdfs:label ?Label
	}
	]]

	-- Executing the SPARQL query and retrieving results in JSON format
	local jsonResults = sparql.runQuery(sparqlQuery)
	-- Validate results
	if not jsonResults or not jsonResults.results or not jsonResults.results.bindings then
       	return "No specialized research fields found"
    end
	
	local modelsUsedForResearchProblem = {}
    -- Get the number of specialized research fields
	local totalModels = #jsonResults.results.bindings
	-- Loop through the bindings
	for index = 0, totalModels  do
    	local item = jsonResults.results.bindings[index]
    	if not item.Label.value then
        	return "Error: Missing item.Label.value"
    	elseif not item.URL.value then
        	return "Error: Missing item.URL.value"
    	else
        	local label = item.Label.value
        	local url = item.URL.value
        	local numericId = url:match("Q(%d+)")
    		local urlRendered = "https://portal.mardi4nfdi.de/wiki/Model:" .. numericId
        	local labelWithUrl = string.format('[%s %s]', tostring(urlRendered), tostring(label))
        	table.insert(modelsUsedForResearchProblem, "| " .. labelWithUrl)
    	end
	end

	-- Construct the Wikitext table
	local wikitextTable = "{| class='wikitable'\n" .. table.concat(modelsUsedForResearchProblem, "\n|-\n") .. "\n|}"
	return wikitextTable

end


-- Function to get specialized Research Problems
function p.getSpecializedResearchProblems(frame)
	local entityId = frame.args[1]
    
    -- Validate input parameter
    if not entityId or entityId == '' then
        return "Error: No entity ID provided"
    end
    
    -- Constructing the SPARQL query with dynamic entity entityId
    -- P1684: specialized by property id
    local sparqlQuery = [[
PREFIX entityId: <https://portal.mardi4nfdi.de/entity/]] .. entityId .. [[>
	SELECT ?URL ?Label  
	WHERE {
		entityId: wdt:P1684 ?URL.
		?URL rdfs:label ?Label
	}
	]]

	-- Executing the SPARQL query and retrieving results in JSON format
	local jsonResults = sparql.runQuery(sparqlQuery)
	-- Validate results
	if not jsonResults or not jsonResults.results or not jsonResults.results.bindings then
       	return "No specialized research fields found"
    end
	
	local specializedResearchProblems = {}
    -- Get the number of specialized research fields
	local totalSpecResProblems = #jsonResults.results.bindings
	-- Loop through the bindings
	for index = 0, totalSpecResProblems  do
    	local item = jsonResults.results.bindings[index]
    	if not item.Label.value then
        	return "Error: Missing item.Label.value"
    	elseif not item.URL.value then
        	return "Error: Missing item.URL.value"
    	else
    		local label = item.Label.value
        	local url = item.URL.value
        	local numericId = url:match("Q(%d+)")
        	local urlRendered = "https://portal.mardi4nfdi.de/wiki/Research_problem:" .. numericId
        	local labelWithUrl = string.format('[%s %s]', tostring(urlRendered), tostring(label))
        	table.insert(specializedResearchProblems, "| " .. labelWithUrl)
    	end
	end

	-- Construct the Wikitext table
	local wikitextTable = "{| class='wikitable'\n" .. table.concat(specializedResearchProblems, "\n|-\n") .. "\n|}"
	return wikitextTable

end


return p