Module:Theorems: Difference between revisions
From MaRDI portal
No edit summary |
No edit summary |
||
(3 intermediate revisions by the same user not shown) | |||
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 ?proofLabel ?software ?softwareLabel{ | ||
{ | { | ||
SELECT ?item { | SELECT ?item ?proof ?software { | ||
?item wdt:P37 wd:Q6480413 . | ?item wdt:P37 wd:Q6480413 . | ||
?item p:P1603 ?proof_statement . | |||
?proof_statement ps:P1603 ?proof . | |||
?proof_statement pq:P114 ?software | |||
} | } | ||
} | } | ||
SERVICE wikibase:label { | SERVICE wikibase:label { | ||
bd:serviceParam wikibase:language "en" . | bd:serviceParam wikibase:language "en" . | ||
?item rdfs:label ?label . ?item schema:description ?description | ?item rdfs:label ?label . | ||
?item schema:description ?description . | |||
?proof rdfs:label ?proofLabel . | |||
?software rdfs:label ?softwareLabel | |||
} | } | ||
} | } | ||
Line 56: | Line 62: | ||
return "No records found." | return "No records found." | ||
end | end | ||
-- 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", "proofLabel", "software", "softwareLabel" } | ||
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 = {" | local headers = {"Theorem", "Software", "Paper"} | ||
local htmlTable = helper.createHtmlTableWithMergedCols(dataTable, headers, {{1, 3}, { | local htmlTable = helper.createHtmlTableWithMergedCols(dataTable, headers, {{1, 3}, {6,7}, {4,5} }) | ||
Latest revision as of 20:21, 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 ?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