Module:CastleLD
From Jcastle.info
Documentation for this module may be created at Module:CastleLD/doc
local p = {}
local function escapeForMediaWiki(url)
-- Replace < and > so MW doesn't autolink
return url:gsub("<", "<"):gsub(">", ">")
end
function p.getJSONLD(frame)
local castleData = frame:getParent().args
local lat, lon = string.match(castleData["GPSLocation"] or "", "([%d%.%-]+)[,%s]+([%d%.%-]+)")
local altNames = {}
if castleData["Japanese Name"] then table.insert(altNames, castleData["Japanese Name"]) end
if castleData["Romaji Name"] then table.insert(altNames, castleData["Romaji Name"]) end
if castleData["Alternate Names"] then table.insert(altNames, castleData["Alternate Names"]) end
local pageUrl = "https://jcastle.info/view/" .. mw.uri.encode(castleData["English Name"] or "", "WIKI")
local websiteUrl = castleData["Website"] or ""
local schemaUrl = "https://schema.org"
local data = {
["@context"] = escapeForMediaWiki(schemaUrl),
["@type"] = "LandmarksOrHistoricalBuildings",
["@id"] = escapeForMediaWiki(pageUrl),
name = castleData["English Name"] or "",
alternateName = altNames,
description = sanitizeText(castleData["History"]),
founder = {
["@type"] = "Person",
name = castleData["Founder"] or ""
},
foundingDate = castleData["Year Founded"] or "",
geo = {
["@type"] = "GeoCoordinates",
latitude = tonumber(lat),
longitude = tonumber(lon)
},
address = {
["@type"] = "PostalAddress",
addressLocality = castleData["City"] or "",
addressRegion = castleData["Prefecture"] or "",
addressCountry = "Japan"
},
temporalCoverage = castleData["Historical Period"] or "",
url = escapeForMediaWiki(pageUrl),
tourBookingPage = escapeForMediaWiki(websiteUrl),
additionalProperty = {
{["@type"]="PropertyValue", name="Castle Condition", value=castleData["Castle Condition"] or ""},
{["@type"]="PropertyValue", name="Castle Type", value=castleData["Castle Type"] or ""},
{["@type"]="PropertyValue", name="Designations", value=castleData["Designations"] or ""},
{["@type"]="PropertyValue", name="Main Keep Structure", value=castleData["Main Keep Structure"] or ""},
{["@type"]="PropertyValue", name="Artifacts", value=castleData["Artifacts"] or ""},
{["@type"]="PropertyValue", name="Features", value=castleData["Features"] or ""},
{["@type"]="PropertyValue", name="Access", value=castleData["Access"] or ""},
{["@type"]="PropertyValue", name="Visitor Information", value=castleData["Visitor Information"] or ""},
{["@type"]="PropertyValue", name="Time Required", value=castleData["Time Required"] or ""}
}
}
local json = mw.text.jsonEncode(data, mw.text.JSON_PRETTY)
return json
end
return p
