Forskjell mellom versjoner av «Modul:Begrep»
Hopp til navigering
Hopp til søk
m (Pywikibot 7.1.0) |
m (Pywikibot 7.1.0) |
||
(41 mellomliggende revisjoner av samme bruker vises ikke) | |||
Linje 29: | Linje 29: | ||
", ", | ", ", | ||
" og " ) | " og " ) | ||
+ | end | ||
+ | end | ||
+ | |||
+ | local function createMediawikiLinkOrLinkNS( value, relasjonsheading ) | ||
+ | if value and value ~= "" | ||
+ | then | ||
+ | local i,_ = string.find(value, felles.namespace .. ":") | ||
+ | if i == 1 or relasjonsheading == "Se også" | ||
+ | then | ||
+ | return createMediawikiLink( value ) | ||
+ | else | ||
+ | return createMediawikiLinkNS( value ) | ||
+ | end | ||
end | end | ||
end | end | ||
Linje 75: | Linje 88: | ||
end | end | ||
return | return | ||
+ | end | ||
+ | |||
+ | local function splitstring (inputstr, sep) | ||
+ | if sep == nil then | ||
+ | sep = "%s" | ||
+ | end | ||
+ | local t={} | ||
+ | for str in string.gmatch(inputstr, "([^"..sep.."]+)") do | ||
+ | table.insert(t, str) | ||
+ | end | ||
+ | return t | ||
+ | end | ||
+ | |||
+ | local function uppercasefirstchar(str) | ||
+ | return (str:gsub("^%l", string.upper)) | ||
+ | end | ||
+ | |||
+ | local function dump(o) | ||
+ | if type(o) == 'table' then | ||
+ | local s = '{ ' | ||
+ | for k,v in pairs(o) do | ||
+ | if type(k) ~= 'number' then k = '"'..k..'"' end | ||
+ | s = s .. '['..k..'] = ' .. dump(v) .. ',' | ||
+ | end | ||
+ | return s .. '} ' | ||
+ | else | ||
+ | return tostring(o) | ||
+ | end | ||
+ | end | ||
+ | |||
+ | local function getsamlingproperty(namespace, property, defaultvalue) | ||
+ | local query = {} | ||
+ | table.insert( query, '[[Category:Skos:Collection]]') | ||
+ | table.insert( query, '?dct:identifier=id') | ||
+ | table.insert( query, '?' .. property) | ||
+ | local result = mw.smw.ask( query ) | ||
+ | |||
+ | local value = defaultvalue | ||
+ | for _, v in pairs(result) do | ||
+ | if v["id"] == namespace then | ||
+ | value = v[property] | ||
+ | break; | ||
+ | end | ||
+ | end | ||
+ | return value | ||
+ | end | ||
+ | |||
+ | local function getskillevalue(namespace, property) | ||
+ | -- build query | ||
+ | local query = {} | ||
+ | table.insert( query, '[[Category:Skos:Collection]]') | ||
+ | table.insert( query, '?dct:identifier=id') | ||
+ | table.insert( query, '?' .. property .. '=skille') | ||
+ | local result = mw.smw.ask( query ) | ||
+ | |||
+ | local skille = false | ||
+ | for _, v in pairs(result) do | ||
+ | if v["id"] == namespace then | ||
+ | skille = v["skille"] | ||
+ | break; | ||
+ | end | ||
+ | end | ||
+ | return skille | ||
end | end | ||
Linje 103: | Linje 179: | ||
end | end | ||
end | end | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
if (hasrelasjon) | if (hasrelasjon) | ||
then | then | ||
Linje 115: | Linje 186: | ||
} ) | } ) | ||
:addHeader( "RELASJON", "mw-infobox-capiunto-title-1" ) | :addHeader( "RELASJON", "mw-infobox-capiunto-title-1" ) | ||
− | terminfobox = addOptionalRow( terminfobox, 'semantisk | + | terminfobox = addOptionalRow( terminfobox, 'merknad (intern)', relasjon.args["merknad internt"] ) |
+ | terminfobox = addOptionalRow( terminfobox, | ||
+ | 'semantisk relasjon', | ||
+ | createMediawikiLinkNS( relasjon.args["semantisk relasjon"] ) ) | ||
:getHtml() | :getHtml() | ||
return tostring(terminfobox) | return tostring(terminfobox) | ||
Linje 126: | Linje 200: | ||
local relasjonsheading = args.relasjonsheading | local relasjonsheading = args.relasjonsheading | ||
local relasjonargs = frame:getParent().args | local relasjonargs = frame:getParent().args | ||
− | assert ( relasjonsheading ~= nil, "named param relasjonsheading must be set when invoking | + | assert ( relasjonsheading ~= nil, "named param 'relasjonsheading' must be set when invoking begrep:relasjon" ) |
+ | |||
+ | local skille = false | ||
+ | if args.namespace then | ||
+ | local namespace = args.namespace | ||
+ | skille = getskillevalue(namespace, "skosp:skilleGeneriskPartitiv") | ||
+ | end | ||
local relasjonstype = relasjonargs.type | local relasjonstype = relasjonargs.type | ||
if relasjonstype == nil then relasjonstype = "" end | if relasjonstype == nil then relasjonstype = "" end | ||
− | |||
if ( relasjonargs.begrep ) | if ( relasjonargs.begrep ) | ||
then | then | ||
-- flat triple | -- flat triple | ||
− | local relasjonskey = relasjonsheading .. relasjonstype | + | local relasjonskey = nil |
− | + | if skille then | |
+ | relasjonskey = relasjonsheading .. relasjonstype | ||
+ | else | ||
+ | relasjonskey = relasjonsheading | ||
+ | end | ||
− | -- qualification triples | + | local i,_ = string.find(relasjonargs.begrep, felles.namespace .. ":") |
+ | if i == 1 or relasjonskey == "Se også" | ||
+ | then | ||
+ | -- for rdfs:seeAlso, namespace is part of link defined in form | ||
+ | smwwritetriples( smwproperty( felles.relasjonstable[relasjonskey], relasjonargs.begrep ) ) | ||
+ | else | ||
+ | smwwritetriples( smwpropertyns( felles.relasjonstable[relasjonskey], relasjonargs.begrep ) ) | ||
+ | end | ||
+ | -- qualification triples: TODO Adapt to new Version of skosno; with skille | ||
if ( relasjonstype ~= "" or relasjonargs.inndelingskriterium or relasjonargs.merknad ) | if ( relasjonstype ~= "" or relasjonargs.inndelingskriterium or relasjonargs.merknad ) | ||
Linje 147: | Linje 238: | ||
mw.ext.VariablesLua.vardefine(urivarname, tonumber(counter) + 1) | mw.ext.VariablesLua.vardefine(urivarname, tonumber(counter) + 1) | ||
local slug = relasjonskey .. " " .. counter | local slug = relasjonskey .. " " .. counter | ||
− | + | -- local sourceslug = slug .. "source" | |
local id_subobject = felles.fullpagename .. "#" .. slug | local id_subobject = felles.fullpagename .. "#" .. slug | ||
− | -- from subobject | + | -- from subobject |
local qualification_triples = { | local qualification_triples = { | ||
smwproperty("@category", "skosp:Relation"), | smwproperty("@category", "skosp:Relation"), | ||
− | + | -- smwproperty("Dct:source", felles.fullpagename .. sourceslug ), | |
smwpropertyns("skosp:begrep", relasjonargs.begrep), | smwpropertyns("skosp:begrep", relasjonargs.begrep), | ||
smwproperty("skosno:inndelingskriterium", relasjonargs.inndelingskriterium ), | smwproperty("skosno:inndelingskriterium", relasjonargs.inndelingskriterium ), | ||
felles.sep, | felles.sep, | ||
− | + | smwlangproperty("skos:note", relasjonargs.merknad, "nb"), | |
} | } | ||
+ | -- subobject id duplicates pagename TODO | ||
mw.smw.subobject( qualification_triples, id_subobject ) | mw.smw.subobject( qualification_triples, id_subobject ) | ||
Linje 173: | Linje 265: | ||
} ) | } ) | ||
:addHeader( relasjonsheading, "mw-infobox-capiunto-title-2" ) | :addHeader( relasjonsheading, "mw-infobox-capiunto-title-2" ) | ||
− | :addRow( 'begrep', | + | :addRow( 'begrep', createMediawikiLinkOrLinkNS( relasjonargs.begrep, relasjonsheading ) ) |
− | + | if skille then | |
− | + | terminfobox = addOptionalRow( terminfobox, "type", relasjonargs.type ) | |
+ | end | ||
terminfobox = addOptionalRow( terminfobox, "inndelingskriterium", relasjonargs.inndelingskriterium ) | terminfobox = addOptionalRow( terminfobox, "inndelingskriterium", relasjonargs.inndelingskriterium ) | ||
terminfobox = addOptionalRow( terminfobox, "merknad", relasjonargs.merknad ) | terminfobox = addOptionalRow( terminfobox, "merknad", relasjonargs.merknad ) | ||
Linje 188: | Linje 281: | ||
function p.begrep ( frame ) | function p.begrep ( frame ) | ||
local begrep = frame:getParent() | local begrep = frame:getParent() | ||
+ | |||
+ | local domene_value = nil | ||
+ | if begrep.args.domene then | ||
+ | -- workaround for present but problmatic domain info | ||
+ | if ( begrep.args.medlem == "NOJU" or begrep.args.medlem == "NOJU:NOJU" ) then | ||
+ | domene_value = felles.domenens .. ":Rett" | ||
+ | elseif ( begrep.args.medlem == "OKADM" or begrep.args.medlem == "OKADM:OKADM" ) then | ||
+ | domene_value = felles.domenens .. ":OkonomiAdministrasjon" | ||
+ | else | ||
+ | domene_value = felles.domenens .. ":" .. begrep.args.domene | ||
+ | end | ||
+ | end | ||
local begreptripler = { | local begreptripler = { | ||
smwproperty( "Dct:modified", frame:preprocess( | smwproperty( "Dct:modified", frame:preprocess( | ||
"{{#time: Y-m-d'T'H:i:s|{{REVISIONTIMESTAMP}}}}{{#time:P|{{REVISIONTIMESTAMP}}|nb|true}}" )), | "{{#time: Y-m-d'T'H:i:s|{{REVISIONTIMESTAMP}}}}{{#time:P|{{REVISIONTIMESTAMP}}|nb|true}}" )), | ||
+ | smwproperty( "Dct:created", begrep.args.inndato), | ||
smwproperty( "Skosp:memberOf", begrep.args.medlem ), | smwproperty( "Skosp:memberOf", begrep.args.medlem ), | ||
− | + | smwlangproperty( "Skos:scopeNote", begrep.args.kommentar, "nb" ), | |
smwproperty( "Dct:subject", begrep.args['bruksområde'] ), | smwproperty( "Dct:subject", begrep.args['bruksområde'] ), | ||
felles.sep, | felles.sep, | ||
− | smwproperty( "Skosp:domene", begrep.args. | + | smwproperty( "Skosp:domene", domene_value ), |
+ | smwproperty( "euvoc:status", begrep.args.status ), | ||
smwproperty( "Skosp:publisere", begrep.args.publisere ), | smwproperty( "Skosp:publisere", begrep.args.publisere ), | ||
smwproperty( "Dct:identifier", begrep.args.identifikator ), | smwproperty( "Dct:identifier", begrep.args.identifikator ), | ||
Linje 211: | Linje 318: | ||
:addHeader( "INFORMASJON", "mw-infobox-capiunto-title-1" ) | :addHeader( "INFORMASJON", "mw-infobox-capiunto-title-1" ) | ||
terminfobox = addOptionalRow( terminfobox, 'referanse', begrep.args["kommentar:referanse"] ) -- obsolete? | terminfobox = addOptionalRow( terminfobox, 'referanse', begrep.args["kommentar:referanse"] ) -- obsolete? | ||
− | terminfobox = addOptionalRow( terminfobox, 'domene', begrep.args.domene ) | + | -- terminfobox = addOptionalRow( terminfobox, 'domene', createMediawikiLink(domene_value) ) TODO, add when domains in place |
+ | terminfobox = addOptionalRow( terminfobox, 'domene', begrep.args.domene ) | ||
terminfobox = addOptionalRow( terminfobox, 'bruksområde', begrep.args["bruksområde"] ) | terminfobox = addOptionalRow( terminfobox, 'bruksområde', begrep.args["bruksområde"] ) | ||
terminfobox = addOptionalRow( terminfobox, 'merknad', begrep.args.kommentar ) | terminfobox = addOptionalRow( terminfobox, 'merknad', begrep.args.kommentar ) | ||
Linje 236: | Linje 344: | ||
end | end | ||
return | return | ||
+ | end | ||
+ | |||
+ | function p.bilde( frame ) | ||
+ | local bildeargs = frame:getParent().args | ||
+ | if ( bildeargs.file_name ) then | ||
+ | local slug = "_bilde" | ||
+ | |||
+ | smwwritetriples( smwproperty( "skos:notation", felles.fullpagename .. slug ) ) | ||
+ | local filenamehash = mw.hash.hashValue("md5", uppercasefirstchar(bildeargs.file_name)) | ||
+ | local dir1 = string.sub(filenamehash, 1, 1) | ||
+ | local dir2 = string.sub(filenamehash, 1, 2) | ||
+ | local imagepath = "wiki.terminologi.no/images/" .. dir1 .. "/" .. dir2.. "/" .. uppercasefirstchar(bildeargs.file_name) | ||
+ | local bildetripler = { | ||
+ | smwproperty( "prov:value", imagepath ), | ||
+ | smwlangproperty( "dct:description", bildeargs["beskrivelse nb"], "nb" ), | ||
+ | smwlangproperty( "dct:description", bildeargs["beskrivelse nn"], "nn" ), | ||
+ | smwlangproperty( "dct:description", bildeargs["beskrivelse en"], "en" ), | ||
+ | smwproperty( "@category", "dct:Image" ), | ||
+ | smwproperty( "@category", "prov:Entity" ) | ||
+ | } | ||
+ | mw.smw.subobject( bildetripler, slug ) | ||
+ | |||
+ | local terminfobox = capiunto.create( { | ||
+ | bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;" | ||
+ | } ) | ||
+ | terminfobox = addOptionalRow( terminfobox, 'beskrivelse (bokmål)', bildeargs["beskrivelse nb"] ) | ||
+ | terminfobox = addOptionalRow( terminfobox, 'beskrivelse (nynorsk)', bildeargs["beskrivelse nn"] ) | ||
+ | terminfobox = addOptionalRow( terminfobox, 'beskrivelse (engelsk)', bildeargs["beskrivelse en"] ) | ||
+ | :addImage("[[File:" .. bildeargs.file_name .. "|400px]]" ) | ||
+ | :getHtml() | ||
+ | return tostring(terminfobox) | ||
+ | end | ||
end | end | ||
Linje 244: | Linje 384: | ||
local lc = args.lc | local lc = args.lc | ||
local lcname = args.lcname | local lcname = args.lcname | ||
− | assert(lc and lcname," | + | local ns = args.namespace |
+ | assert(lc and lcname and ns, "Alle termseksjon må ha en lc, tittel og namespace" .. lcname ) | ||
local hasspraak = false | local hasspraak = false | ||
for k, v in pairs( seksjonargs ) do | for k, v in pairs( seksjonargs ) do | ||
− | if (k == "ekvivalens") | + | if (k == "ekvivalens") then |
− | + | hasspraak = false | |
− | elseif (k == "ekvivalens merknad") and v | + | elseif (k == "ekvivalens merknad") and v then |
− | + | hasspraak = true | |
break; | break; | ||
elseif k then | elseif k then | ||
Linje 258: | Linje 399: | ||
end | end | ||
end | end | ||
− | |||
-- infobox | -- infobox | ||
Linje 266: | Linje 406: | ||
} ) | } ) | ||
:addHeader( lcname, "mw-infobox-capiunto-title-1" ) | :addHeader( lcname, "mw-infobox-capiunto-title-1" ) | ||
− | terminfobox = addOptionalRow( terminfobox, 'ekvivalens', seksjonargs.ekvivalens ) | + | |
− | terminfobox = addOptionalRow( terminfobox, 'merknad', seksjonargs | + | -- check if starting language is the same as termsection language |
+ | if not (getsamlingproperty( ns , "skosp:opprinneligSpraak", "") == lc) then | ||
+ | terminfobox = addOptionalRow( terminfobox, 'ekvivalens', seksjonargs.ekvivalens ) | ||
+ | terminfobox = addOptionalRow( terminfobox, 'ekvivalensmerknad', seksjonargs.merknad ) | ||
+ | end | ||
+ | |||
+ | terminfobox = addOptionalRow( terminfobox, 'merknad (intern)', seksjonargs["merknad intern"] ) | ||
:getHtml() | :getHtml() | ||
return tostring(terminfobox) | return tostring(terminfobox) | ||
Linje 279: | Linje 425: | ||
assert (lc ~= nil, "named param lc must be set when invoking function begrep:kontekst") | assert (lc ~= nil, "named param lc must be set when invoking function begrep:kontekst") | ||
+ | |||
+ | if kontekstargs.kontekst | ||
+ | then | ||
+ | local urivarname = "kontekstCounter" | ||
+ | local LuaVarKontekstCounter = mw.ext.VariablesLua.var( urivarname ) | ||
+ | local counter = (LuaVarKontekstCounter and LuaVarKontekstCounter ~= '') and LuaVarKontekstCounter or 1 | ||
+ | mw.ext.VariablesLua.vardefine(urivarname, tonumber(counter) + 1) | ||
+ | local slug = 'kontekst_' .. lc .. "_" .. counter | ||
+ | |||
+ | local konteksttripler = { | ||
+ | smwlangproperty( "rdfs:label", kontekstargs.kontekst, lc ), | ||
+ | smwproperty( "dct:subject", kontekstargs["kontekst av"] ), | ||
+ | smwproperty( "Skosp:dctSource", kontekstargs["referanse object"] ), | ||
+ | smwproperty( "dct:source", kontekstargs.referanse ), | ||
+ | smwproperty( "@category", "euvoc:XlNote" ) | ||
+ | } | ||
+ | mw.smw.subobject( konteksttripler, slug ) | ||
+ | smwwritetriples( smwproperty( "skosp:hasUsage", felles.fullpagename .. "#" .. slug ) ) | ||
+ | |||
+ | |||
+ | end | ||
-- infobox | -- infobox | ||
Linje 299: | Linje 466: | ||
assert (lc ~= nil, "named param lc must be set when invoking function begrep:definisjon") | assert (lc ~= nil, "named param lc must be set when invoking function begrep:definisjon") | ||
− | -- | + | if (definisjonargs.definisjon) |
− | + | then | |
− | + | local slug = 'definisjon_' .. lc | |
− | + | -- local sourceslug = slug .. "source" | |
− | + | local deftripler = { | |
− | + | smwlangproperty("Rdfs:label", definisjonargs.definisjon, lc ), | |
− | + | smwproperty( "Skosp:dctSource", definisjonargs["referanse object"] ), | |
− | + | smwproperty("Dct:source", definisjonargs.referanse), | |
− | + | smwlangproperty("Skos:scopeNote", definisjonargs.merknad, lc ), | |
− | + | -- smwproperty("Dct:source", felles.fullpagename .. sourceslug ), | |
+ | smwproperty("@category", "Skosno:Definisjon" ) | ||
+ | } | ||
+ | mw.smw.subobject( deftripler, slug ) | ||
+ | |||
+ | local begreptripler = { | ||
+ | smwproperty("Skosno:definisjon", felles.fullpagename ..'#'.. slug ), | ||
+ | } | ||
+ | smwwritetriples( begreptripler ) | ||
− | -- | + | -- infobox |
− | + | local terminfobox = capiunto.create( { | |
− | + | bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;" | |
− | -- | + | } ) |
− | -- | + | :addHeader( "Definisjon", "mw-infobox-capiunto-title-2" ) |
− | + | :addRow( 'definisjon', definisjonargs.definisjon ) | |
− | + | terminfobox = addOptionalRow( terminfobox, 'referanse', createMediawikiLink(definisjonargs["referanse object"]) ) | |
− | + | terminfobox = addOptionalRow( terminfobox, 'referanse tekst', definisjonargs.referanse ) | |
− | + | terminfobox = addOptionalRow( terminfobox, 'merknad', definisjonargs.merknad ) | |
− | + | :getHtml() | |
− | + | return tostring(terminfobox) | |
− | + | end | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
− | |||
− | |||
− | |||
function p.term( frame ) | function p.term( frame ) | ||
Linje 347: | Linje 504: | ||
local langcode = args.lc | local langcode = args.lc | ||
local heading = args.heading | local heading = args.heading | ||
− | local | + | |
+ | local skille = false | ||
+ | if args.namespace then | ||
+ | local namespace = args.namespace | ||
+ | skille = getskillevalue(namespace, "skosp:skilleForkortelsestyper") | ||
+ | end | ||
assert ( langcode ~= nil, "named param lc must be set when invoking module begrep:term") | assert ( langcode ~= nil, "named param lc must be set when invoking module begrep:term") | ||
Linje 363: | Linje 525: | ||
mw.ext.VariablesLua.vardefine(urivarname, tonumber(counter) + 1) | mw.ext.VariablesLua.vardefine(urivarname, tonumber(counter) + 1) | ||
local slug = relasjonslug .. " " .. langcode .. " " .. counter | local slug = relasjonslug .. " " .. langcode .. " " .. counter | ||
− | + | -- local sourceslug = slug .. "source" | |
+ | |||
+ | local abbrev = "" | ||
+ | if termargs.forkortelsep == "Ja" | ||
+ | then | ||
+ | abbrev = "skosp:Abbreviation" | ||
+ | end | ||
+ | |||
local termtripler = { | local termtripler = { | ||
smwlangproperty("Skosxl:literalForm", termargs.term, langcode ), | smwlangproperty("Skosxl:literalForm", termargs.term, langcode ), | ||
− | smwproperty("Dct:source", felles.fullpagename .. sourceslug ), | + | smwproperty( "Skosp:dctSource", termargs["referanse object"]), |
− | smwproperty("@category", " | + | smwproperty( "dct:source", termargs.referanse ), |
+ | -- smwproperty("Dct:source", felles.fullpagename .. sourceslug ), | ||
+ | -- smwlangproperty( "skosp:isCollocatedWith", termargs.kollokasjon, langcode), | ||
+ | -- felles.sep, | ||
+ | smwproperty("skosp:isAbbreviationOf", termargs["forkortelse av"]), | ||
+ | smwproperty("skosp:isOfAbbreviationType", termargs.forkortelsestype ), | ||
+ | smwlangproperty("skos:note", termargs.kommentar, langcode ), | ||
+ | smwproperty("@category", "skosxl:Label" ), | ||
+ | smwproperty("@category", abbrev ) | ||
} | } | ||
mw.smw.subobject( termtripler, slug ) | mw.smw.subobject( termtripler, slug ) | ||
+ | |||
+ | if ( termargs.kollokasjon ) then | ||
+ | local collocations = splitstring(termargs.kollokasjon, felles.sep) | ||
+ | for _, col in ipairs(collocations) do | ||
+ | mw.smw.subobject( smwlangproperty( "skosp:isCollocatedWith", col, langcode) , slug ) | ||
+ | end | ||
+ | end | ||
if (relasjonslug == "prefLabel") then | if (relasjonslug == "prefLabel") then | ||
Linje 397: | Linje 581: | ||
:addHeader( heading, "mw-infobox-capiunto-title-2" ) | :addHeader( heading, "mw-infobox-capiunto-title-2" ) | ||
:addRow( 'term',termargs.term ) | :addRow( 'term',termargs.term ) | ||
− | + | terminfobox = addOptionalRow( terminfobox, 'referanse', createMediawikiLink( termargs["referanse object"] ) ) | |
− | terminfobox = addOptionalRow( terminfobox, 'referanse', termargs['term:referanse'] ) | + | terminfobox = addOptionalRow( terminfobox, 'referanse tekst', termargs['term:referanse'] ) |
+ | terminfobox = addOptionalRow( terminfobox, 'referanse tekst', termargs['referanse'] ) | ||
terminfobox = addOptionalRow( terminfobox, 'kollokasjon', termargs.kollokasjon ) | terminfobox = addOptionalRow( terminfobox, 'kollokasjon', termargs.kollokasjon ) | ||
if termargs.forkortelsep == "Ja" | if termargs.forkortelsep == "Ja" | ||
then | then | ||
terminfobox = addOptionalRow( terminfobox, 'forkortelse av', termargs['forkortelse av'] ) | terminfobox = addOptionalRow( terminfobox, 'forkortelse av', termargs['forkortelse av'] ) | ||
− | terminfobox = addOptionalRow( terminfobox, 'forkortelsestype', termargs.forkortelsestype ) | + | if skille then |
+ | terminfobox = addOptionalRow( terminfobox, 'forkortelsestype', termargs.forkortelsestype ) | ||
+ | end | ||
+ | if not termargs['forkortelse av'] and not termargs.forkortelsestype then | ||
+ | terminfobox = addOptionalRow( terminfobox, 'forkortelse', tostring(termargs.forkortelsep) ) | ||
+ | end | ||
end | end | ||
− | terminfobox = addOptionalRow( terminfobox, 'kommentar', termargs. | + | terminfobox = addOptionalRow( terminfobox, 'merknad', termargs.kommentar ) |
+ | terminfobox = addOptionalRow( terminfobox, 'merknad', termargs.merknad ) | ||
:getHtml() | :getHtml() | ||
return tostring(terminfobox) | return tostring(terminfobox) |
Nåværende revisjon fra 4. sep. 2023 kl. 17:57
Dokumentasjon for denne modulen kan opprettes på Modul:Begrep/dok
local capiunto = require 'capiunto' local p = {} --p stands for package local felles = mw.loadData( 'Module:Felles' ) -- one function for values which are in their own namespace (i.e autocompleted from namespace) local function createMediawikiLinkNS( value ) if value and value ~= "" then return mw.getCurrentFrame() :callParserFunction( '#arraymap:'.. value, felles.separator, 'x', "[[".. felles.namespace .. ':x' .. "]]", " , ", " og " ) end end local function createMediawikiLink( value ) if value and value ~= "" then return mw.getCurrentFrame() :callParserFunction( '#arraymap:'.. value, felles.separator, 'x', "[[" .. 'x' .. "]]", ", ", " og " ) end end local function createMediawikiLinkOrLinkNS( value, relasjonsheading ) if value and value ~= "" then local i,_ = string.find(value, felles.namespace .. ":") if i == 1 or relasjonsheading == "Se også" then return createMediawikiLink( value ) else return createMediawikiLinkNS( value ) end end end local function addOptionalRow ( t, label, value, ... ) -- error ( " label" .. label .. "v: " .. value ) if value and value ~= "" then return t:addRow(label, value, ...) else return t end end -- For å skrive smwproperties som wikitext som kan listes til SemanticScribunto -- se dataStoreType2 https://github.com/SemanticMediaWiki/SemanticScribunto/blob/master/docs/mw.smw.set.md local function smwproperty( property, value ) local resultvalue = value or "" return property .. "=" .. resultvalue end -- add namespace to value -https://phabricator.wikimedia.org/T254624 local function smwpropertyns( property, value ) if (value == "" or value == nil) then return "" else local newvalue = mw.getCurrentFrame():callParserFunction( '#arraymap:'.. value, felles.separator, 'x', felles.namespace .. ':x', felles.separator ) return smwproperty( property, newvalue ) end end local function smwlangproperty( property, value, lang ) local resultvalue if (value and lang) then resultvalue = ( value .. "@" .. lang ) else resultvalue = "" end return property .. "=" .. resultvalue end local function smwwritetriples( relasjoner ) local result = mw.smw.set( relasjoner ) if result == true then -- everything ok else error( tostring(result.error) ) -- error message to be found in result.error end return end local function splitstring (inputstr, sep) if sep == nil then sep = "%s" end local t={} for str in string.gmatch(inputstr, "([^"..sep.."]+)") do table.insert(t, str) end return t end local function uppercasefirstchar(str) return (str:gsub("^%l", string.upper)) end local function dump(o) if type(o) == 'table' then local s = '{ ' for k,v in pairs(o) do if type(k) ~= 'number' then k = '"'..k..'"' end s = s .. '['..k..'] = ' .. dump(v) .. ',' end return s .. '} ' else return tostring(o) end end local function getsamlingproperty(namespace, property, defaultvalue) local query = {} table.insert( query, '[[Category:Skos:Collection]]') table.insert( query, '?dct:identifier=id') table.insert( query, '?' .. property) local result = mw.smw.ask( query ) local value = defaultvalue for _, v in pairs(result) do if v["id"] == namespace then value = v[property] break; end end return value end local function getskillevalue(namespace, property) -- build query local query = {} table.insert( query, '[[Category:Skos:Collection]]') table.insert( query, '?dct:identifier=id') table.insert( query, '?' .. property .. '=skille') local result = mw.smw.ask( query ) local skille = false for _, v in pairs(result) do if v["id"] == namespace then skille = v["skille"] break; end end return skille end -- global vars -- Write triples for template Begrep -- Begin Triples for form Begrep -- Write triples for template relasjon function p.relasjonsseksjon ( frame ) local relasjon = frame:getParent() local relasjontripler = { smwpropertyns("Skos:semanticRelation", relasjon.args["semantisk relasjon"]), felles.sep, } smwwritetriples( relasjontripler ) -- infobox local hasrelasjon = false for k, v in pairs( relasjon.args ) do if (k == "semantisk relasjon") and v then hasrelasjon = true break; elseif k then hasrelasjon = true break; end end if (hasrelasjon) then local terminfobox = capiunto.create( { bodyStyle = "width:60em; background:#f3f3f3; margin: 0 0 0 0; margin-top: 25px;" } ) :addHeader( "RELASJON", "mw-infobox-capiunto-title-1" ) terminfobox = addOptionalRow( terminfobox, 'merknad (intern)', relasjon.args["merknad internt"] ) terminfobox = addOptionalRow( terminfobox, 'semantisk relasjon', createMediawikiLinkNS( relasjon.args["semantisk relasjon"] ) ) :getHtml() return tostring(terminfobox) end end -- Write triples for relasjon template function p.relasjon( frame ) local args = frame.args local relasjonsheading = args.relasjonsheading local relasjonargs = frame:getParent().args assert ( relasjonsheading ~= nil, "named param 'relasjonsheading' must be set when invoking begrep:relasjon" ) local skille = false if args.namespace then local namespace = args.namespace skille = getskillevalue(namespace, "skosp:skilleGeneriskPartitiv") end local relasjonstype = relasjonargs.type if relasjonstype == nil then relasjonstype = "" end if ( relasjonargs.begrep ) then -- flat triple local relasjonskey = nil if skille then relasjonskey = relasjonsheading .. relasjonstype else relasjonskey = relasjonsheading end local i,_ = string.find(relasjonargs.begrep, felles.namespace .. ":") if i == 1 or relasjonskey == "Se også" then -- for rdfs:seeAlso, namespace is part of link defined in form smwwritetriples( smwproperty( felles.relasjonstable[relasjonskey], relasjonargs.begrep ) ) else smwwritetriples( smwpropertyns( felles.relasjonstable[relasjonskey], relasjonargs.begrep ) ) end -- qualification triples: TODO Adapt to new Version of skosno; with skille if ( relasjonstype ~= "" or relasjonargs.inndelingskriterium or relasjonargs.merknad ) then local relasjonslug = mw.ustring.match(felles.relasjonstable[relasjonskey], ":(.*)") local urivarname = relasjonslug .. "termCounter" local LuaVarTermCounter = mw.ext.VariablesLua.var( urivarname ) local counter = (LuaVarTermCounter and LuaVarTermCounter ~= '') and LuaVarTermCounter or 1 mw.ext.VariablesLua.vardefine(urivarname, tonumber(counter) + 1) local slug = relasjonskey .. " " .. counter -- local sourceslug = slug .. "source" local id_subobject = felles.fullpagename .. "#" .. slug -- from subobject local qualification_triples = { smwproperty("@category", "skosp:Relation"), -- smwproperty("Dct:source", felles.fullpagename .. sourceslug ), smwpropertyns("skosp:begrep", relasjonargs.begrep), smwproperty("skosno:inndelingskriterium", relasjonargs.inndelingskriterium ), felles.sep, smwlangproperty("skos:note", relasjonargs.merknad, "nb"), } -- subobject id duplicates pagename TODO mw.smw.subobject( qualification_triples, id_subobject ) -- to subobject, adapt to new version of skosno smwwritetriples( smwproperty( "skosp:qualifiedRelation", id_subobject ) ) end -- terminfobox if relasjonargs then local terminfobox = capiunto.create( { bodyStyle = "width:60em; background:#f3f3f3; margin: 0 0 0 0;" } ) :addHeader( relasjonsheading, "mw-infobox-capiunto-title-2" ) :addRow( 'begrep', createMediawikiLinkOrLinkNS( relasjonargs.begrep, relasjonsheading ) ) if skille then terminfobox = addOptionalRow( terminfobox, "type", relasjonargs.type ) end terminfobox = addOptionalRow( terminfobox, "inndelingskriterium", relasjonargs.inndelingskriterium ) terminfobox = addOptionalRow( terminfobox, "merknad", relasjonargs.merknad ) :getHtml() return tostring(terminfobox) end end end -- Write triples for template begrep function p.begrep ( frame ) local begrep = frame:getParent() local domene_value = nil if begrep.args.domene then -- workaround for present but problmatic domain info if ( begrep.args.medlem == "NOJU" or begrep.args.medlem == "NOJU:NOJU" ) then domene_value = felles.domenens .. ":Rett" elseif ( begrep.args.medlem == "OKADM" or begrep.args.medlem == "OKADM:OKADM" ) then domene_value = felles.domenens .. ":OkonomiAdministrasjon" else domene_value = felles.domenens .. ":" .. begrep.args.domene end end local begreptripler = { smwproperty( "Dct:modified", frame:preprocess( "{{#time: Y-m-d'T'H:i:s|{{REVISIONTIMESTAMP}}}}{{#time:P|{{REVISIONTIMESTAMP}}|nb|true}}" )), smwproperty( "Dct:created", begrep.args.inndato), smwproperty( "Skosp:memberOf", begrep.args.medlem ), smwlangproperty( "Skos:scopeNote", begrep.args.kommentar, "nb" ), smwproperty( "Dct:subject", begrep.args['bruksområde'] ), felles.sep, smwproperty( "Skosp:domene", domene_value ), smwproperty( "euvoc:status", begrep.args.status ), smwproperty( "Skosp:publisere", begrep.args.publisere ), smwproperty( "Dct:identifier", begrep.args.identifikator ), smwproperty( "Skosp:previousIdentifier", begrep.args['tidligere id'] ) } smwwritetriples( begreptripler ) -- infobox -- infobox local terminfobox = capiunto.create( { bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;" } ) :addHeader( "INFORMASJON", "mw-infobox-capiunto-title-1" ) terminfobox = addOptionalRow( terminfobox, 'referanse', begrep.args["kommentar:referanse"] ) -- obsolete? -- terminfobox = addOptionalRow( terminfobox, 'domene', createMediawikiLink(domene_value) ) TODO, add when domains in place terminfobox = addOptionalRow( terminfobox, 'domene', begrep.args.domene ) terminfobox = addOptionalRow( terminfobox, 'bruksområde', begrep.args["bruksområde"] ) terminfobox = addOptionalRow( terminfobox, 'merknad', begrep.args.kommentar ) terminfobox = addOptionalRow( terminfobox, 'merknad (intern)', begrep.args["merknad internt"] ) terminfobox = addOptionalRow( terminfobox, 'status', begrep.args.status ) terminfobox = addOptionalRow( terminfobox, 'publisere', begrep.args.publisere ) :getHtml() return tostring(terminfobox) end -- Coalesce on displaytitle from prefLabel function p.displaytitle( term ) -- local prefixedtitle = mw.title.getCurrentTitle().prefixedText -- local term = mw.getCurrentFrame():getParent().args.term -- local currentdisplaytitle = mw.ext.displaytitle.get(prefixedtitle) local isset = mw.getCurrentFrame():callParserFunction( '#var', { 'dtisset' } ) -- om term finnes og display title er tittel med namespace, sett displaytitle if (isset == "" and term ~= nil) then mw.ext.displaytitle.set(term) -- sett info om at at term finnes via wiki parserfuncstions siden en ikke kan ha state mellom invocations i LUA mw.getCurrentFrame():callParserFunction( '#vardefine', { 'dtisset', term } ) end return end function p.bilde( frame ) local bildeargs = frame:getParent().args if ( bildeargs.file_name ) then local slug = "_bilde" smwwritetriples( smwproperty( "skos:notation", felles.fullpagename .. slug ) ) local filenamehash = mw.hash.hashValue("md5", uppercasefirstchar(bildeargs.file_name)) local dir1 = string.sub(filenamehash, 1, 1) local dir2 = string.sub(filenamehash, 1, 2) local imagepath = "wiki.terminologi.no/images/" .. dir1 .. "/" .. dir2.. "/" .. uppercasefirstchar(bildeargs.file_name) local bildetripler = { smwproperty( "prov:value", imagepath ), smwlangproperty( "dct:description", bildeargs["beskrivelse nb"], "nb" ), smwlangproperty( "dct:description", bildeargs["beskrivelse nn"], "nn" ), smwlangproperty( "dct:description", bildeargs["beskrivelse en"], "en" ), smwproperty( "@category", "dct:Image" ), smwproperty( "@category", "prov:Entity" ) } mw.smw.subobject( bildetripler, slug ) local terminfobox = capiunto.create( { bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;" } ) terminfobox = addOptionalRow( terminfobox, 'beskrivelse (bokmål)', bildeargs["beskrivelse nb"] ) terminfobox = addOptionalRow( terminfobox, 'beskrivelse (nynorsk)', bildeargs["beskrivelse nn"] ) terminfobox = addOptionalRow( terminfobox, 'beskrivelse (engelsk)', bildeargs["beskrivelse en"] ) :addImage("[[File:" .. bildeargs.file_name .. "|400px]]" ) :getHtml() return tostring(terminfobox) end end -- Termseksjon function p.termseksjon( frame ) local args = frame.args local seksjonargs = frame:getParent().args local lc = args.lc local lcname = args.lcname local ns = args.namespace assert(lc and lcname and ns, "Alle termseksjon må ha en lc, tittel og namespace" .. lcname ) local hasspraak = false for k, v in pairs( seksjonargs ) do if (k == "ekvivalens") then hasspraak = false elseif (k == "ekvivalens merknad") and v then hasspraak = true break; elseif k then hasspraak = true break; end end -- infobox if hasspraak then local terminfobox = capiunto.create( { bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0; margin-top: 25px;" } ) :addHeader( lcname, "mw-infobox-capiunto-title-1" ) -- check if starting language is the same as termsection language if not (getsamlingproperty( ns , "skosp:opprinneligSpraak", "") == lc) then terminfobox = addOptionalRow( terminfobox, 'ekvivalens', seksjonargs.ekvivalens ) terminfobox = addOptionalRow( terminfobox, 'ekvivalensmerknad', seksjonargs.merknad ) end terminfobox = addOptionalRow( terminfobox, 'merknad (intern)', seksjonargs["merknad intern"] ) :getHtml() return tostring(terminfobox) end end function p.kontekst(frame) local args = frame.args local lc = args.lc local kontekstargs = frame:getParent().args assert (lc ~= nil, "named param lc must be set when invoking function begrep:kontekst") if kontekstargs.kontekst then local urivarname = "kontekstCounter" local LuaVarKontekstCounter = mw.ext.VariablesLua.var( urivarname ) local counter = (LuaVarKontekstCounter and LuaVarKontekstCounter ~= '') and LuaVarKontekstCounter or 1 mw.ext.VariablesLua.vardefine(urivarname, tonumber(counter) + 1) local slug = 'kontekst_' .. lc .. "_" .. counter local konteksttripler = { smwlangproperty( "rdfs:label", kontekstargs.kontekst, lc ), smwproperty( "dct:subject", kontekstargs["kontekst av"] ), smwproperty( "Skosp:dctSource", kontekstargs["referanse object"] ), smwproperty( "dct:source", kontekstargs.referanse ), smwproperty( "@category", "euvoc:XlNote" ) } mw.smw.subobject( konteksttripler, slug ) smwwritetriples( smwproperty( "skosp:hasUsage", felles.fullpagename .. "#" .. slug ) ) end -- infobox local terminfobox = capiunto.create( { bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;" } ) :addHeader( "Kontekst", "mw-infobox-capiunto-title-2" ) :addRow( 'kontekst av', kontekstargs['kontekst av'] ) :addRow( 'kontekst', kontekstargs.kontekst ) terminfobox = addOptionalRow( terminfobox, 'referanse', kontekstargs.referanse ) :getHtml() return tostring(terminfobox) end function p.definisjon(frame) local args = frame.args local lc = args.lc local definisjonargs = frame:getParent().args assert (lc ~= nil, "named param lc must be set when invoking function begrep:definisjon") if (definisjonargs.definisjon) then local slug = 'definisjon_' .. lc -- local sourceslug = slug .. "source" local deftripler = { smwlangproperty("Rdfs:label", definisjonargs.definisjon, lc ), smwproperty( "Skosp:dctSource", definisjonargs["referanse object"] ), smwproperty("Dct:source", definisjonargs.referanse), smwlangproperty("Skos:scopeNote", definisjonargs.merknad, lc ), -- smwproperty("Dct:source", felles.fullpagename .. sourceslug ), smwproperty("@category", "Skosno:Definisjon" ) } mw.smw.subobject( deftripler, slug ) local begreptripler = { smwproperty("Skosno:definisjon", felles.fullpagename ..'#'.. slug ), } smwwritetriples( begreptripler ) -- infobox local terminfobox = capiunto.create( { bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;" } ) :addHeader( "Definisjon", "mw-infobox-capiunto-title-2" ) :addRow( 'definisjon', definisjonargs.definisjon ) terminfobox = addOptionalRow( terminfobox, 'referanse', createMediawikiLink(definisjonargs["referanse object"]) ) terminfobox = addOptionalRow( terminfobox, 'referanse tekst', definisjonargs.referanse ) terminfobox = addOptionalRow( terminfobox, 'merknad', definisjonargs.merknad ) :getHtml() return tostring(terminfobox) end end function p.term( frame ) local args = frame.args local termargs = frame:getParent().args local langcode = args.lc local heading = args.heading local skille = false if args.namespace then local namespace = args.namespace skille = getskillevalue(namespace, "skosp:skilleForkortelsestyper") end assert ( langcode ~= nil, "named param lc must be set when invoking module begrep:term") assert ( heading ~= nil , "named param heading must be set when invoking module begrep:term" ) if ( termargs.term ) then -- langcode = term.args['språkkode'] -- forventer alltid å få inn en en relasjon på type prefix:tekst local relasjonslug = mw.ustring.match(felles.languagetable[heading], ":(.*)") local urivarname = relasjonslug .. "termCounter" .. langcode local LuaVarTermCounter = mw.ext.VariablesLua.var( urivarname ) -- error(type(LuaVarTermCounter)) local counter = (LuaVarTermCounter and LuaVarTermCounter ~= '') and LuaVarTermCounter or 1 mw.ext.VariablesLua.vardefine(urivarname, tonumber(counter) + 1) local slug = relasjonslug .. " " .. langcode .. " " .. counter -- local sourceslug = slug .. "source" local abbrev = "" if termargs.forkortelsep == "Ja" then abbrev = "skosp:Abbreviation" end local termtripler = { smwlangproperty("Skosxl:literalForm", termargs.term, langcode ), smwproperty( "Skosp:dctSource", termargs["referanse object"]), smwproperty( "dct:source", termargs.referanse ), -- smwproperty("Dct:source", felles.fullpagename .. sourceslug ), -- smwlangproperty( "skosp:isCollocatedWith", termargs.kollokasjon, langcode), -- felles.sep, smwproperty("skosp:isAbbreviationOf", termargs["forkortelse av"]), smwproperty("skosp:isOfAbbreviationType", termargs.forkortelsestype ), smwlangproperty("skos:note", termargs.kommentar, langcode ), smwproperty("@category", "skosxl:Label" ), smwproperty("@category", abbrev ) } mw.smw.subobject( termtripler, slug ) if ( termargs.kollokasjon ) then local collocations = splitstring(termargs.kollokasjon, felles.sep) for _, col in ipairs(collocations) do mw.smw.subobject( smwlangproperty( "skosp:isCollocatedWith", col, langcode) , slug ) end end if (relasjonslug == "prefLabel") then p.displaytitle( termargs.term ) end local relasjonstripler = { smwproperty(felles.languagetable[heading], felles.fullpagename .. "#" .. slug) } smwwritetriples(relasjonstripler) -- if (termargs.term and termargs["term:referanse"] ) then local kildetripler = { smwlangproperty("Rdfs:label", termargs['term:referanse'], langcode), smwlangproperty("Skos:scopeNote", termargs['kommentar'], langcode) } -- result = mw.smw.subobject( definisjontripler, sourceslug ) end local terminfobox = capiunto.create( { bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;" } ) :addHeader( heading, "mw-infobox-capiunto-title-2" ) :addRow( 'term',termargs.term ) terminfobox = addOptionalRow( terminfobox, 'referanse', createMediawikiLink( termargs["referanse object"] ) ) terminfobox = addOptionalRow( terminfobox, 'referanse tekst', termargs['term:referanse'] ) terminfobox = addOptionalRow( terminfobox, 'referanse tekst', termargs['referanse'] ) terminfobox = addOptionalRow( terminfobox, 'kollokasjon', termargs.kollokasjon ) if termargs.forkortelsep == "Ja" then terminfobox = addOptionalRow( terminfobox, 'forkortelse av', termargs['forkortelse av'] ) if skille then terminfobox = addOptionalRow( terminfobox, 'forkortelsestype', termargs.forkortelsestype ) end if not termargs['forkortelse av'] and not termargs.forkortelsestype then terminfobox = addOptionalRow( terminfobox, 'forkortelse', tostring(termargs.forkortelsep) ) end end terminfobox = addOptionalRow( terminfobox, 'merknad', termargs.kommentar ) terminfobox = addOptionalRow( terminfobox, 'merknad', termargs.merknad ) :getHtml() return tostring(terminfobox) end -- error ((string.match(property, ":(.*)$")) .. " " ..spraakkode) -- return error (string.match(property, ":(.*)$") .. term.args.spraakkode) end return p