Module:ResearchProblem: Difference between revisions
From MaRDI portal
No edit summary |
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