Modul:Begrep
Hopp til navigering
Hopp til søk
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 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 -- 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, smwpropertyns("Skos:related", relasjon.args.assosiativ), felles.sep, smwpropertyns("Xkos:generalizes", relasjon.args.generisk ), felles.sep, smwpropertyns("Xkos:hasPart", relasjon.args.partitiv ), felles.sep, smwproperty('Rdfs:seeAlso', relasjon.args.seogsa), felles.sep, smwpropertyns('Dct:replaces', relasjon.args.erstatter), felles.sep, -- replacedBy is not tokens smwpropertyns('Dct:replacedBy', relasjon.args.erstattetav ) } smwwritetriples( relasjontripler ) -- infobox local hasrelasjon = false -- for i, v in ipairs(relasjon) do for _, v in pairs( relasjon.args ) do if (v ~= nil and v ~= "") then hasrelasjon = true break; end end hasrelasjon = true -- temporary if (hasrelasjon) then local terminfobox = capiunto.create( { bodyStyle = "width:60em; background:#f3f3f3; margin: 0 0 0 0;" } ) :addHeader( "RELASJON", "mw-infobox-capiunto-title-1" ) terminfobox = addOptionalRow( terminfobox, 'semantisk Relasjon', createMediawikiLinkNS( relasjon.args["semantisk relasjon"] ) ) terminfobox = addOptionalRow( terminfobox, 'assosiativ', createMediawikiLinkNS( relasjon.args.assosiativ ) ) terminfobox = addOptionalRow( terminfobox, 'generisk', createMediawikiLinkNS( relasjon.args.generisk ) ) terminfobox = addOptionalRow( terminfobox, 'partitiv', createMediawikiLinkNS( relasjon.args.partitiv ) ) terminfobox = addOptionalRow( terminfobox, 'se også', createMediawikiLink (relasjon.args.seogsa) ) terminfobox = addOptionalRow( terminfobox, 'erstatter', createMediawikiLinkNS( relasjon.args.erstatter ) ) terminfobox = addOptionalRow( terminfobox, 'erstattet av', createMediawikiLinkNS( relasjon.args.erstattetav ) ) :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 function begrep:relasjon" ) local relasjonstype = relasjonargs.type if relasjonstype == nil then relasjonstype = "" end if ( relasjonargs.begrep ) then -- flat triple local relasjonskey = relasjonsheading .. relasjonstype -- smwwritetriples( smwpropertyns( felles.relasjonstable[relasjonskey], relasjonargs.begrep ) ) -- qualification triples 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, adapt to new version of skosno 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, smwproperty("skos:note", relasjonargs.merknad), } mw.smw.subobject( qualification_triples, id_subobject ) -- to subobject, adapt to new version of skosno smwwritetriples( smwproperty( "skosp:qualifiedRelation", id_subobject ) ) end -- terminfobox local terminfobox = capiunto.create( { bodyStyle = "width:60em; background:#f3f3f3; margin: 0 0 0 0;" } ) :addHeader( relasjonsheading, "mw-infobox-capiunto-title-2" ) :addRow( 'begrep', createMediawikiLinkNS( relasjonargs.begrep ) ) terminfobox = addOptionalRow( terminfobox, "type", relasjonargs.type ) terminfobox = addOptionalRow( terminfobox, "inndelingskriterium", relasjonargs.inndelingskriterium ) terminfobox = addOptionalRow( terminfobox, "merknad", relasjonargs.merknad ) :getHtml() return tostring(terminfobox) end end -- Write triples for template begrep function p.begrep ( frame ) local begrep = frame:getParent() local begreptripler = { smwproperty( "Dct:modified", frame:preprocess( "{{#time: Y-m-d'T'H:i:s|{{REVISIONTIMESTAMP}}}}{{#time:P|{{REVISIONTIMESTAMP}}|nb|true}}" )), smwproperty( "Skosp:memberOf", begrep.args.medlem ), smwproperty( "Skos:scopeNote", begrep.args.kommentar ), smwproperty( "Dct:subject", begrep.args['bruksområde'] ), felles.sep, smwproperty( "Skosp:domene", begrep.args.domene ), 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', begrep.args.domene ) terminfobox = addOptionalRow( terminfobox, 'bruksområde', begrep.args["bruksområde"] ) terminfobox = addOptionalRow( terminfobox, 'merknad', begrep.args.kommentar ) terminfobox = addOptionalRow( terminfobox, 'merknad (internt)', 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 -- Termseksjon function p.termseksjon( frame ) local args = frame.args local seksjonargs = frame:getParent().args local lc = args.lc local lcname = args.lcname assert(lc and lcname,"alle termseksjon må ha en en lc og tittel" .. lcname ) -- local spraakkode = termseksjon.args['språkkode'] -- if ( seksjonargs.definisjon ~= nil ) -- then -- p.definisjon( seksjonargs, lc ) -- else -- error(tostring(termseksjon.args.definisjon)) -- end -- infobox local terminfobox = capiunto.create( { bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;" } ) :addHeader( lcname, "mw-infobox-capiunto-title-1" ) terminfobox = addOptionalRow( terminfobox, 'merknad', seksjonargs.merknad ) terminfobox = addOptionalRow( terminfobox, 'referanse', seksjonargs["merknad:referanse"] ) terminfobox = addOptionalRow( terminfobox, 'godkjent', seksjonargs.godkjent ) terminfobox = addOptionalRow( terminfobox, 'definisjon', seksjonargs.definisjon ) terminfobox = addOptionalRow( terminfobox, 'definisjon:referanse', seksjonargs["definisjon:referanse"] ) terminfobox = addOptionalRow( terminfobox, 'referanse', seksjonargs["merknad:referanse"] ) :getHtml() return tostring(terminfobox) end function p.definisjon(termseksjon, spraakkode) if (not (termseksjon and spraakkode)) then error ('definisjon og spraakkode må være satt') else local slug = 'definisjon ' .. spraakkode local begreptripler = { smwproperty("Skosno:definisjon", felles.fullpagename ..'#'.. slug ) } smwwritetriples( begreptripler ) -- definisjon subobject -- uri er original # + slug. samme som brukes til definisjon local defref = termseksjon.args['definisjon:referanse'] -- håndter nøstet referanse på definisjon if (defref) then local definisjonrefslug = slug .. " referanse" local definisjonref = felles.fullpagename .. definisjonrefslug local definisjonsreftripler = { smwlangproperty("Skosp:label", defref, spraakkode ) } mw.smw.subobject( definisjonsreftripler, definisjonrefslug ) else end local definisjontripler = { smwproperty( "@category","Skosno:Definisjon" ), smwlangproperty("Skosp:label", termseksjon.args['definisjon'], spraakkode), smwproperty("Dct:source", definisjonref ) } -- andre parameter er (relativ ) uri å bruke som navn for subobject, appender # og slug på sidenavn mw.smw.subobject( definisjontripler, slug ) return end end --return --end function p.term( frame ) local args = frame.args local termargs = frame:getParent().args local langcode = args.lc local relasjon = args.relasjon assert ( langcode ~= nil, "named param lc must be set when invoking module begrep:term") assert ( relasjon ~= nil , "named param relasjon 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(args.relasjon, ":(.*)") 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 termtripler = { smwlangproperty("Skosxl:literalForm", termargs.term, langcode ), smwproperty("Dct:source", felles.fullpagename .. sourceslug ), smwproperty("@category", "Skosxl:Label" ) } -- local result = mw.smw.subobject( termtripler, slug ) mw.smw.subobject( termtripler, slug ) -- function if (relasjonslug == "prefLabel") then p.displaytitle( termargs.term ) end local relasjonstripler = { smwproperty(relasjon, 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( felles.languagetable[relasjon], "mw-infobox-capiunto-title-2" ) :addRow( 'term',termargs.term ) terminfobox = addOptionalRow( terminfobox, 'referanse', termargs['term:referanse'] ) terminfobox = addOptionalRow( terminfobox, 'kontekst', termargs.kontekst ) terminfobox = addOptionalRow( terminfobox, 'kortform', termargs.kortform ) terminfobox = addOptionalRow( terminfobox, 'kommentar', termargs.kommentar ) terminfobox = addOptionalRow( terminfobox, 'kollokasjon', termargs.kollokasjon ) terminfobox = addOptionalRow( terminfobox, 'andre referanser', termargs['andre referanser'] ) :getHtml() return tostring(terminfobox) else end -- error ((string.match(property, ":(.*)$")) .. " " ..spraakkode) -- return error (string.match(property, ":(.*)$") .. term.args.spraakkode) end return p