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)
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 ?proof ?proofLabel ?software ?softwareLabel{
{
SELECT ?item ?proof ?software {
?item wdt:P37 wd:Q6480413 .
?item p:P1603 ?proof_statement .
?proof_statement ps:P1603 ?proof .
?proof_statement pq:P114 ?software
}
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
?item rdfs:label ?label .
?item schema:description ?description .
?proof rdfs:label ?proofLabel .
?software rdfs:label ?softwareLabel
}
}
]]
-- 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
-- Convert the JSON results into a Lua table
local fieldOrder = {"item", "description", "label", "proof", "proofLabel", "software", "softwareLabel" }
local dataTable = helper.convertJsonToTableOrdered(jsonResults, fieldOrder)
-- Create and return HTML table from the data
local headers = {"Theorem", "Software", "Paper"}
local htmlTable = helper.createHtmlTableWithMergedCols(dataTable, headers, {{1, 3}, {6,7}, {4,5} })
-- 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
-- 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