Module:PublicationRecommendedItems: Difference between revisions
From MaRDI portal
Tag: Undo |
changed indexing through module incept |
||
| Line 2: | Line 2: | ||
local helper = require('Module:HelperMethods') | local helper = require('Module:HelperMethods') | ||
-- Required modules for SPARQL queries and HTML | -- Required modules for SPARQL queries and HTML generation | ||
local sparql = require('SPARQL') | local sparql = require('SPARQL') | ||
local mwHtml = require('mw.html') | local mwHtml = require('mw.html') | ||
local p = {} | local p = {} | ||
-- | ---------------------------------------------------------------------- | ||
function p. | -- Build an unordered HTML list from SPARQL JSON results | ||
---------------------------------------------------------------------- | |||
function p.buildRecommendationList(jsonResults, currentPublicationId) | |||
local ul = mw.html.create('ul') | local ul = mw.html.create('ul') | ||
local likeIcon = '👍' | local likeIcon = '👍' | ||
local dislikeIcon = '👎' | local dislikeIcon = '👎' | ||
if jsonResults | if not jsonResults | ||
or not jsonResults.results | |||
or not jsonResults.results.bindings | |||
then | |||
return tostring(ul) | |||
end | |||
local link = binding.value.value | for _, binding in ipairs(jsonResults.results.bindings) do | ||
if binding.value and binding.value.value then | |||
local name = nil | |||
if binding.valueLabel and binding.valueLabel.value then | |||
name = binding.valueLabel.value | |||
else | |||
name = helper.titleNotAvailableStr() | |||
end | |||
-- Extract Q-ID | |||
local link = binding.value.value | |||
local qidCurrPub = link:match("Q%d+") | |||
if qidCurrPub then | |||
-- Convert entity link to publication wiki link | |||
link = link:gsub("entity/Q", "wiki/Publication:") | link = link:gsub("entity/Q", "wiki/Publication:") | ||
local modifiedLink = link .. "?source=recommendation&referrer=" .. currentPublicationId | local modifiedLink = | ||
link .. "?source=recommendation&referrer=" .. currentPublicationId | |||
local currentPubLink = | |||
currentPublicationId:gsub("Q", "Publication:") | |||
local likeLink = | |||
"https://portal.mardi4nfdi.de/wiki/" | |||
.. currentPubLink | |||
.. "?reaction=like&target=" | |||
.. qidCurrPub | |||
local dislikeLink = | |||
"https://portal.mardi4nfdi.de/wiki/" | |||
.. currentPubLink | |||
.. "?reaction=dislike&target=" | |||
.. qidCurrPub | |||
local li = mw.html.create('li') | local li = mw.html.create('li') | ||
li:wikitext('[' .. modifiedLink .. ' ' .. name .. '] ') | li:wikitext('[' .. modifiedLink .. ' ' .. name .. '] ') | ||
li:wikitext('[' .. likeLink .. ' ' .. likeIcon .. '] ') | li:wikitext('[' .. likeLink .. ' ' .. likeIcon .. '] ') | ||
| Line 55: | Line 74: | ||
end | end | ||
-- | ---------------------------------------------------------------------- | ||
-- Entry point invoked from wikitext | |||
---------------------------------------------------------------------- | |||
function p.getCitesWorkList(frame) | function p.getCitesWorkList(frame) | ||
local target1 = frame.args[1] | |||
if not target1 or target1 == '' then | if not target1 or target1 == '' then | ||
return "No records found" | return "No records found" | ||
end | end | ||
local sparqlQuery = [[ | local sparqlQuery = [[ | ||
PREFIX target: <https://portal.mardi4nfdi.de/entity/]] .. target1 .. [[> | PREFIX target: <https://portal.mardi4nfdi.de/entity/]] .. target1 .. [[> | ||
| Line 70: | Line 89: | ||
PREFIX wd: <https://portal.mardi4nfdi.de/entity/> | PREFIX wd: <https://portal.mardi4nfdi.de/entity/> | ||
SELECT | SELECT ?value ?valueLabel | ||
WHERE { | WHERE { | ||
target: wdt:P1643 ?value . | target: wdt:P1643 ?value . | ||
OPTIONAL { | OPTIONAL { | ||
?value rdfs:label ?valueLabel . | ?value rdfs:label ?valueLabel . | ||
FILTER(LANG(?valueLabel) = "en") | FILTER (LANG(?valueLabel) = "en") | ||
} | |||
SERVICE wikibase:label { | |||
bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". | |||
} | } | ||
} | } | ||
]] | ]] | ||
local jsonResults = sparql.runQuery(sparqlQuery) | |||
if not jsonResults or jsonResults.error then | |||
return nil | return nil | ||
end | |||
if helper.countElementsInBindings(jsonResults.results.bindings) == 0 then | |||
return nil | return nil | ||
end | |||
local rawList = | |||
p.buildRecommendationList(jsonResults, target1) | |||
local linkList = | |||
mw.getCurrentFrame():preprocess(rawList) | |||
local result = [[ | |||
<div class="keywords-header"> | <div class="keywords-header"> | ||
<span class="keywords-title">Recommendations</span> | <span class="keywords-title">Recommendations</span> | ||
<div class="keywords-line"></div> | <div class="keywords-line"></div> | ||
</div> | |||
<div class="keywords-list"> | |||
]] .. linkList .. [[ | |||
</div> | </div> | ||
]] | ]] | ||
return result | return result | ||
end | end | ||
return p | return p | ||
Revision as of 23:14, 4 January 2026
Documentation for this module may be created at Module:PublicationRecommendedItems/doc
-- Required module containing helper methods
local helper = require('Module:HelperMethods')
-- Required modules for SPARQL queries and HTML generation
local sparql = require('SPARQL')
local mwHtml = require('mw.html')
local p = {}
----------------------------------------------------------------------
-- Build an unordered HTML list from SPARQL JSON results
----------------------------------------------------------------------
function p.buildRecommendationList(jsonResults, currentPublicationId)
local ul = mw.html.create('ul')
local likeIcon = '👍'
local dislikeIcon = '👎'
if not jsonResults
or not jsonResults.results
or not jsonResults.results.bindings
then
return tostring(ul)
end
for _, binding in ipairs(jsonResults.results.bindings) do
if binding.value and binding.value.value then
local name = nil
if binding.valueLabel and binding.valueLabel.value then
name = binding.valueLabel.value
else
name = helper.titleNotAvailableStr()
end
-- Extract Q-ID
local link = binding.value.value
local qidCurrPub = link:match("Q%d+")
if qidCurrPub then
-- Convert entity link to publication wiki link
link = link:gsub("entity/Q", "wiki/Publication:")
local modifiedLink =
link .. "?source=recommendation&referrer=" .. currentPublicationId
local currentPubLink =
currentPublicationId:gsub("Q", "Publication:")
local likeLink =
"https://portal.mardi4nfdi.de/wiki/"
.. currentPubLink
.. "?reaction=like&target="
.. qidCurrPub
local dislikeLink =
"https://portal.mardi4nfdi.de/wiki/"
.. currentPubLink
.. "?reaction=dislike&target="
.. qidCurrPub
local li = mw.html.create('li')
li:wikitext('[' .. modifiedLink .. ' ' .. name .. '] ')
li:wikitext('[' .. likeLink .. ' ' .. likeIcon .. '] ')
li:wikitext('[' .. dislikeLink .. ' ' .. dislikeIcon .. ']')
ul:node(li)
end
end
end
return tostring(ul)
end
----------------------------------------------------------------------
-- Entry point invoked from wikitext
----------------------------------------------------------------------
function p.getCitesWorkList(frame)
local target1 = frame.args[1]
if not target1 or target1 == '' then
return "No records found"
end
local sparqlQuery = [[
PREFIX target: <https://portal.mardi4nfdi.de/entity/]] .. target1 .. [[>
PREFIX wdt: <https://portal.mardi4nfdi.de/prop/direct/>
PREFIX wd: <https://portal.mardi4nfdi.de/entity/>
SELECT ?value ?valueLabel
WHERE {
target: wdt:P1643 ?value .
OPTIONAL {
?value rdfs:label ?valueLabel .
FILTER (LANG(?valueLabel) = "en")
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
}
}
]]
local jsonResults = sparql.runQuery(sparqlQuery)
if not jsonResults or jsonResults.error then
return nil
end
if helper.countElementsInBindings(jsonResults.results.bindings) == 0 then
return nil
end
local rawList =
p.buildRecommendationList(jsonResults, target1)
local linkList =
mw.getCurrentFrame():preprocess(rawList)
local result = [[
<div class="keywords-header">
<span class="keywords-title">Recommendations</span>
<div class="keywords-line"></div>
</div>
<div class="keywords-list">
]] .. linkList .. [[
</div>
]]
return result
end
return p