Module:Theorems: Difference between revisions
From MaRDI portal
No edit summary |
No edit summary Tag: Reverted |
||
Line 23: | Line 23: | ||
-- Constructing the SPARQL query with dynamic entity target1 | -- Constructing the SPARQL query with dynamic entity target1 | ||
local sparqlQuery = [[ | local sparqlQuery = [[ | ||
SELECT ?item ?description ?label { | SELECT ?item ?description ?label ?proof { | ||
{ | { | ||
SELECT ?item { | SELECT ?item { | ||
?item wdt:P37 wd:Q6480413 . | ?item wdt:P37 wd:Q6480413 . | ||
?item wdt:P1576 ?proof | |||
} | } | ||
} | } | ||
Line 64: | Line 65: | ||
-- Convert the JSON results into a Lua table | -- Convert the JSON results into a Lua table | ||
local fieldOrder = {"item", "description", "label" } | local fieldOrder = {"item", "description", "label", "proof" } | ||
local dataTable = helper.convertJsonToTableOrdered(jsonResults, fieldOrder) | local dataTable = helper.convertJsonToTableOrdered(jsonResults, fieldOrder) | ||
-- Create and return HTML table from the data | -- Create and return HTML table from the data | ||
local headers = {"Name", "Description"} | local headers = {"Name", "Description"} | ||
local htmlTable = helper.createHtmlTableWithMergedCols(dataTable, headers, {{1, 3}, {2}}) | local htmlTable = helper.createHtmlTableWithMergedCols(dataTable, headers, {{1, 3}, {2}, {4}}) | ||
Revision as of 19:43, 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)
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 {
{
SELECT ?item {
?item wdt:P37 wd:Q6480413 .
?item wdt:P1576 ?proof
}
}
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", "proof" }
local dataTable = helper.convertJsonToTableOrdered(jsonResults, fieldOrder)
-- Create and return HTML table from the data
local headers = {"Name", "Description"}
local htmlTable = helper.createHtmlTableWithMergedCols(dataTable, headers, {{1, 3}, {2}, {4}})
-- 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