Forskjell mellom versjoner av «Modul:Begrep»

Fra Redigeringsapplikasjon Termportalen
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 (v ~= nil and v ~= "")
 
--      then hasrelasjon = true
 
--        break;
 
--      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 Relasjon', createMediawikiLinkNS( relasjon.args["semantisk relasjon"] ) )
+
       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 function begrep:relasjon" )
+
   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
       smwwritetriples( smwpropertyns( felles.relasjonstable[relasjonskey], relasjonargs.begrep ) )
+
      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 sourceslug = slug .. "source"
 
         local id_subobject = felles.fullpagename .. "#" .. slug
 
         local id_subobject = felles.fullpagename .. "#" .. slug
  
  
         -- from subobject, adapt to new version of skosno
+
         -- from subobject
 
         local qualification_triples = {
 
         local qualification_triples = {
 
             smwproperty("@category", "skosp:Relation"),
 
             smwproperty("@category", "skosp:Relation"),
            smwproperty("Dct:source", felles.fullpagename .. sourceslug ),
+
--            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,
             smwproperty("skos:note", relasjonargs.merknad),
+
             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', createMediawikiLinkNS( relasjonargs.begrep ) )
+
         :addRow( 'begrep', createMediawikiLinkOrLinkNS( relasjonargs.begrep, relasjonsheading ) )
 
+
      if skille then
      terminfobox = addOptionalRow( terminfobox, "type", relasjonargs.type )
+
        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 ),
       smwproperty( "Skos:scopeNote", begrep.args.kommentar ),
+
       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.domene ),
+
       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,"alle termseksjon må ha en lc og tittel" .. 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
      then hasspraak = false
+
        hasspraak = false
       elseif (k == "ekvivalens merknad") and v
+
       elseif (k == "ekvivalens merknad") and v then
      then hasspraak = true
+
        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.merknad )
+
      -- 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")
  
   -- infobox
+
   if (definisjonargs.definisjon)
  local terminfobox = capiunto.create( {
+
  then
         bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;"
+
      local slug = 'definisjon_' .. lc
  } )
+
--     local sourceslug = slug .. "source"
      :addHeader( "Definisjon", "mw-infobox-capiunto-title-2" )
+
      local deftripler = {
      :addRow( 'definisjon', definisjonargs.definisjon )
+
         smwlangproperty("Rdfs:label", definisjonargs.definisjon, lc ),
  terminfobox = addOptionalRow( terminfobox, 'referanse', definisjonargs.referanse )
+
        smwproperty( "Skosp:dctSource", definisjonargs["referanse object"] ),
  terminfobox = addOptionalRow( terminfobox, 'merknad', definisjonargs.merknad )
+
        smwproperty("Dct:source", definisjonargs.referanse),
       :getHtml()
+
        smwlangproperty("Skos:scopeNote", definisjonargs.merknad, lc ),
  return tostring(terminfobox)
+
--        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 )
  
--   local slug = 'definisjon ' .. spraakkode
+
      -- infobox
--  local begreptripler = {
+
      local terminfobox = capiunto.create( {
--      smwproperty("Skosno:definisjon", felles.fullpagename ..'#'.. slug )
+
            bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;"
--   }
+
      } )
--   smwwritetriples( begreptripler )
+
        :addHeader( "Definisjon", "mw-infobox-capiunto-title-2" )
--      -- definisjon subobject -- uri er original # + slug. samme som brukes til definisjon
+
        :addRow( 'definisjon', definisjonargs.definisjon )
--  local defref = termseksjon.args['definisjon:referanse']
+
      terminfobox = addOptionalRow( terminfobox, 'referanse', createMediawikiLink(definisjonargs["referanse object"]) )
--
+
      terminfobox = addOptionalRow( terminfobox, 'referanse tekst', definisjonargs.referanse )
--  -- håndter nøstet referanse på definisjon
+
      terminfobox = addOptionalRow( terminfobox, 'merknad', definisjonargs.merknad )
--  if (defref)
+
        :getHtml()
--  then
+
      return tostring(terminfobox)
--      local definisjonrefslug = slug .. " referanse"
+
  end
--      local definisjonref = felles.fullpagename .. definisjonrefslug
 
--      local definisjonsreftripler = {
 
--        smwlangproperty("Skosp:label", defref, spraakkode )
 
--      }
 
--      mw.smw.subobject( definisjonsreftripler, definisjonrefslug )
 
--
 
--      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 )
 
 
end
 
end
 
--return
 
--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 relasjon = args.relasjon
+
 
 +
   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 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", "Skosxl:Label" )
+
        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.kommentar )
+
       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