Module:Theorems: Difference between revisions
From MaRDI portal
Created page with "local sparql = require('SPARQL') -- Load the SPARQL binding local p = {} function p.showFirstValue(frame) local sparqlQuery = frame.args[1] local queryResults = sparql.runQuery(sparqlQuery) -- Use the runQuery method local firstColName = queryResults['head']['vars'][0] return queryResults['results']['bindings'][0][firstColName]['value'] end return p" |
No edit summary |
||
Line 1: | Line 1: | ||
local | -- Required module containing helper methods | ||
local helper = require('Module:HelperMethods') | |||
-- Required modules for SPARQL queries and HTML table generation | |||
local sparql = require('SPARQL') | |||
local mwHtml = require('mw.html') | |||
-- Main table to hold all functions | |||
local p = {} | local p = {} | ||
function p. | -- Function to build a HTML table from SPARQL query results | ||
function p.buildTableFromSparql(frame) | |||
-- Retrieve target1 from frame arguments or return error message if not set | |||
local target1 = frame.args[1] | |||
if not target1 or target1 == '' then | |||
return "No records found" | |||
end | |||
local height = frame.args[2] or '400px' -- Default height if not specified | |||
local width = frame.args[3] or '800px' -- Default width if not specified | |||
-- Get the current URL | |||
local baseUrl = mw.site.server | |||
-- Constructing the SPARQL query with dynamic entity target1 | |||
local sparqlQuery = [[ | |||
SELECT ?item ?description ?label { | |||
{ | |||
SELECT ?item { | |||
?item wdt:P37 wd:Q6480413 . | |||
} | |||
} | |||
SERVICE wikibase:label { | |||
bd:serviceParam wikibase:language "en" . | |||
?item rdfs:label ?label . ?item schema:description ?description | |||
} | |||
} | |||
]] | |||
-- Executing the SPARQL query and retrieving results in JSON format | |||
-- mw.log( sparqlQuery ) | |||
local jsonResults = sparql.runQuery(sparqlQuery) | |||
-- mw.logObject(jsonResults) | |||
-- Handle error in SPARQL query execution | |||
if jsonResults and jsonResults.error then | |||
mw.log("Error in SPARQL query: " .. tostring(jsonResults.error)) | |||
return nil | |||
end | |||
if not jsonResults then | |||
return "Could not fetch data." | |||
end | |||
if helper.countElementsInBindings(jsonResults.results.bindings) == 0 then | |||
return "No records found." | |||
end | |||
-- Extracting headers from the SPARQL query results | |||
-- local headers = {} | |||
-- if jsonResults and jsonResults.head and jsonResults.head.vars then | |||
-- headers = jsonResults.head.vars | |||
-- end | |||
-- Convert the JSON results into a Lua table | |||
local fieldOrder = {"item", "description", "label" } | |||
local dataTable = helper.convertJsonToTableOrdered(jsonResults, fieldOrder) | |||
-- Create and return HTML table from the data | |||
local headers = {"Publication", "Date of Publication", "Type"} | |||
local htmlTable = helper.createHtmlTableWithMergedCols(dataTable, headers, {{1, 3}, {2}}) | |||
-- Generate histogram data | |||
-- local histogramChart = helper.generateHistogramChartFromTable(dataTable, 4) | |||
-- local histogramChartJson = mw.text.jsonEncode(histogramChart) | |||
-- mw.log(histogramDataJson) | |||
-- Create a parent container for both the table and the chart | |||
local parentContainer = mw.html.create('div') | |||
:addClass('parent-container') | |||
:css('width', width) -- Set the width as needed | |||
-- Create chart container | |||
local chartContainer = mw.html.create('div') | |||
:addClass('wikiChartContainer') | |||
:css('height', height) | |||
:css('width', width) | |||
:attr('data-chartdata', histogramChartJson) | |||
local heading = mw.html.create('h2') | |||
:wikitext('Research outcomes over time') | |||
-- Add the table and chart to the parent container | |||
parentContainer | |||
:node(htmlTable) | |||
:node(heading) | |||
:node(chartContainer) | |||
return tostring(parentContainer) | |||
end | end | ||
-- Return the created html table | |||
return p | return p |
Revision as of 17:03, 1 August 2024
Documentation for this module may be created at Module:Theorems/doc
-- Required module containing helper methods
local helper = require('Module:HelperMethods')
-- Required modules for SPARQL queries and HTML table generation
local sparql = require('SPARQL')
local mwHtml = require('mw.html')
-- Main table to hold all functions
local p = {}
-- Function to build a HTML table from SPARQL query results
function p.buildTableFromSparql(frame)
-- Retrieve target1 from frame arguments or return error message if not set
local target1 = frame.args[1]
if not target1 or target1 == '' then
return "No records found"
end
local height = frame.args[2] or '400px' -- Default height if not specified
local width = frame.args[3] or '800px' -- Default width if not specified
-- Get the current URL
local baseUrl = mw.site.server
-- Constructing the SPARQL query with dynamic entity target1
local sparqlQuery = [[
SELECT ?item ?description ?label {
{
SELECT ?item {
?item wdt:P37 wd:Q6480413 .
}
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
?item rdfs:label ?label . ?item schema:description ?description
}
}
]]
-- Executing the SPARQL query and retrieving results in JSON format
-- mw.log( sparqlQuery )
local jsonResults = sparql.runQuery(sparqlQuery)
-- mw.logObject(jsonResults)
-- Handle error in SPARQL query execution
if jsonResults and jsonResults.error then
mw.log("Error in SPARQL query: " .. tostring(jsonResults.error))
return nil
end
if not jsonResults then
return "Could not fetch data."
end
if helper.countElementsInBindings(jsonResults.results.bindings) == 0 then
return "No records found."
end
-- Extracting headers from the SPARQL query results
-- local headers = {}
-- if jsonResults and jsonResults.head and jsonResults.head.vars then
-- headers = jsonResults.head.vars
-- end
-- Convert the JSON results into a Lua table
local fieldOrder = {"item", "description", "label" }
local dataTable = helper.convertJsonToTableOrdered(jsonResults, fieldOrder)
-- Create and return HTML table from the data
local headers = {"Publication", "Date of Publication", "Type"}
local htmlTable = helper.createHtmlTableWithMergedCols(dataTable, headers, {{1, 3}, {2}})
-- Generate histogram data
-- local histogramChart = helper.generateHistogramChartFromTable(dataTable, 4)
-- local histogramChartJson = mw.text.jsonEncode(histogramChart)
-- mw.log(histogramDataJson)
-- Create a parent container for both the table and the chart
local parentContainer = mw.html.create('div')
:addClass('parent-container')
:css('width', width) -- Set the width as needed
-- Create chart container
local chartContainer = mw.html.create('div')
:addClass('wikiChartContainer')
:css('height', height)
:css('width', width)
:attr('data-chartdata', histogramChartJson)
local heading = mw.html.create('h2')
:wikitext('Research outcomes over time')
-- Add the table and chart to the parent container
parentContainer
:node(htmlTable)
:node(heading)
:node(chartContainer)
return tostring(parentContainer)
end
-- Return the created html table
return p