Forskjell mellom versjoner av «Modul:Begrep»

Fra Termportalen
Hopp til navigering Hopp til søk
m (Pywikibot 7.1.0)
m (Pywikibot 7.1.0)
Linje 6: Linje 6:
  
 
-- one function for values which are in their own namespace (i.e autocompleted from namespace)
 
-- one function for values which are in their own namespace (i.e autocompleted from namespace)
function p.createMediawikiLinkNS( value )
+
local function createMediawikiLinkNS( value )
if  value and value ~= "" then return mw.getCurrentFrame():callParserFunction( '#arraymap:'.. value, felles.separator, 'x', "[[".. felles.namespace .. ':x' .. "]]", " , ", " og " )
+
  if  value and value ~= ""
    else
+
  then return mw.getCurrentFrame()
end
+
        :callParserFunction(
end
+
            '#arraymap:'.. value,
function p.createMediawikiLink( value )
+
            felles.separator,
if  value and value ~= "" then return mw.getCurrentFrame():callParserFunction( '#arraymap:'.. value, felles.separator, 'x', "[[" .. 'x' .. "]]", ", ", " og " )
+
            'x',
else
+
            "[[".. felles.namespace .. ':x' .. "]]",
 +
            " , ",
 +
            " og " )
 +
  end
 
end
 
end
 +
 +
local function createMediawikiLink( value )
 +
  if  value and value ~= ""
 +
  then return mw.getCurrentFrame()
 +
        :callParserFunction(
 +
            '#arraymap:'.. value,
 +
            felles.separator,
 +
            'x',
 +
            "[[" .. 'x' .. "]]",
 +
            ", ",
 +
            " og " )
 +
  end
 
end
 
end
--
 
  
 
local function addOptionalRow ( t, label, value, ... )
 
local function addOptionalRow ( t, label, value, ... )
-- error ( " label" .. label .. "v: " .. value )
+
  -- error ( " label" .. label .. "v: " .. value )
if value and value ~= "" then return t:addRow(label, value, ...) else return t end
+
  if value and value ~= ""
end
+
  then return t:addRow(label, value, ...)
 
+
  else return t
-- add namespace to value -https://phabricator.wikimedia.org/T254624
+
  end
function p.smwpropertyns( property, value )
 
    if (value == "" or value == nul)
 
    then return ""
 
      else
 
    local newvalue = mw.getCurrentFrame():callParserFunction( '#arraymap:'.. value, felles.separator, 'x', felles.namespace .. ':x', felles.separator )
 
 
 
      return p.smwproperty( property, newvalue )
 
  end
 
 
end
 
end
  
 
-- For å skrive smwproperties som wikitext som kan listes til SemanticScribunto
 
-- For å skrive smwproperties som wikitext som kan listes til SemanticScribunto
-- se  dataStoreType2 https://github.com/SemanticMediaWiki/SemanticScribunto/blob/master/docs/mw.smw.set.md
+
-- se  dataStoreType2 https://github.com/SemanticMediaWiki/SemanticScribunto/blob/master/docs/mw.smw.set.md
function p.smwproperty( property, value )
+
local function smwproperty( property, value )
local resultvalue = value or ""
+
  local resultvalue = value or ""
return property .. "=" .. resultvalue  
+
  return property .. "=" .. resultvalue
 
end
 
end
  
function p.smwlangproperty( property, value, lang )
+
-- add namespace to value -https://phabricator.wikimedia.org/T254624
if (value and lang) then resultvalue = (value .. "@" .. lang )  
+
local function smwpropertyns( property, value )
else resultvalue = ""
+
  if (value == "" or value == nil)
end
+
  then return ""
return property .. "=" .. resultvalue
+
  else
 +
      local newvalue = mw.getCurrentFrame():callParserFunction(
 +
        '#arraymap:'.. value, felles.separator, 'x', felles.namespace .. ':x', felles.separator )
 +
      return smwproperty( property, newvalue )
 +
  end
 
end
 
end
  
function p.smwwritetriples( relasjoner )
+
local function smwlangproperty( property, value, lang )
local result
+
  local resultvalue
local result = mw.smw.set( relasjoner )
+
  if (value and lang)
if result == true then
+
  then resultvalue = ( value .. "@" .. lang )
    -- everything ok
+
  else resultvalue = ""
    else  error( tostring(result.error) )
+
  end
    -- error message to be found in result.error
+
  return property .. "=" .. resultvalue
    end
 
    return
 
 
end
 
end
  
function p.smwwritesubobjects( relasjoner, uri )
+
local function smwwritetriples( relasjoner )
local result
+
  local result = mw.smw.set( relasjoner )
local result = mw.smw.set( relasjoner )
+
  if result == true then
if result == true then
+
      -- everything ok
    -- everything ok
+
  else error( tostring(result.error) )
    else error( tostring(result.error) )
+
      -- error message to be found in result.error
    -- error message to be found in result.error
+
  end
    end
+
  return
    return
 
 
end
 
end
  
Linje 77: Linje 84:
  
 
-- Write triples for template relasjon
 
-- Write triples for template relasjon
function p.relasjon ( frame )
+
function p.relasjonsseksjon ( frame )
local relasjon = mw.getCurrentFrame():getParent()
+
  local relasjon = frame:getParent()
local relasjontripler = {
+
  local relasjontripler = {
        p.smwpropertyns("Skos:semanticRelation", relasjon.args["semantisk relasjon"]),
+
      smwpropertyns("Skos:semanticRelation", relasjon.args["semantisk relasjon"]),
        felles.sep,
+
      felles.sep,
        p.smwpropertyns("Skos:related", relasjon.args.assosiativ),
+
      smwpropertyns("Skos:related", relasjon.args.assosiativ),
      felles.sep,
+
      felles.sep,
        p.smwpropertyns("Xkos:generalizes", relasjon.args.generisk ),
+
      smwpropertyns("Xkos:generalizes", relasjon.args.generisk ),
        felles.sep,
+
      felles.sep,
        p.smwpropertyns("Xkos:hasPart", relasjon.args.partitiv ),
+
      smwpropertyns("Xkos:hasPart", relasjon.args.partitiv ),
        felles.sep,
+
      felles.sep,
        p.smwproperty('Rdfs:seeAlso', relasjon.args.seogsa),
+
      smwproperty('Rdfs:seeAlso', relasjon.args.seogsa),
        felles.sep,
+
      felles.sep,
        p.smwpropertyns('Dct:replaces', relasjon.args.erstatter),
+
      smwpropertyns('Dct:replaces', relasjon.args.erstatter),
        felles.sep,
+
      felles.sep,
        -- replacedBy is not tokens
+
      -- replacedBy is not tokens
      p.smwpropertyns('Dct:replacedBy', relasjon.args.erstattetav )
+
      smwpropertyns('Dct:replacedBy', relasjon.args.erstattetav )
    }
+
  }
    p.smwwritetriples( relasjontripler )
+
  smwwritetriples( relasjontripler )
   
+
 
    -- infobox
+
  -- infobox
    -- infobox
+
  local hasrelasjon = false
    hasrelasjon = false
+
  -- for i, v in ipairs(relasjon) do
--   for i, v in ipairs(relasjon) do
+
  for _, v in pairs( relasjon.args ) do
    for k, v in next, relasjon do
+
       if (v ~= nil and v ~= "")
       if (v ~= nul and v ~= "")  
 
 
       then hasrelasjon = true
 
       then hasrelasjon = true
      break;
+
        break;
 
       end
 
       end
    end
 
    if (hasrelasjon)
 
    then
 
    terminfobox = capiunto.create( {
 
    bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;"
 
} )
 
  :addHeader( "RELASJON", "mw-infobox-capiunto-title-1" )
 
terminfobox = addOptionalRow( terminfobox, 'semansisk Relasjon', p.createMediawikiLinkNS( relasjon.args["semantisk relasjon"] ) )
 
terminfobox = addOptionalRow( terminfobox, 'assosiativ', p.createMediawikiLinkNS( relasjon.args.assosiativ ) )
 
terminfobox = addOptionalRow( terminfobox, 'generisk', p.createMediawikiLinkNS( relasjon.args.generisk ) )
 
terminfobox = addOptionalRow( terminfobox, 'partitiv', p.createMediawikiLinkNS( relasjon.args.partitiv ) )
 
terminfobox = addOptionalRow( terminfobox, 'se også', p.createMediawikiLink (relasjon.args.seogsa) )
 
terminfobox = addOptionalRow( terminfobox, 'erstatter', p.createMediawikiLinkNS( relasjon.args.erstatter ) )
 
terminfobox = addOptionalRow( terminfobox, 'erstattet av', p.createMediawikiLinkNS( relasjon.args.erstattetav ) )
 
:getHtml()
 
  return tostring(terminfobox)
 
  else
 
  -- don't write infobox if no values are set
 
 
   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], relasjon.args.begrep ) )
  
 +
      -- qualification triples
 +
      if ( relasjonstype ~= "" or relasjonargs.inndelingskriterium or relasjonargs.merknad )
 +
 +
      then
 +
        local relasjonslug = mw.ustring.match(relasjonsheading, ":(.*)")
 +
        local urivarname = relasjonskey .. "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
 +
 +
 +
        -- to subobject, adapt to new version of skosno
 +
--        smwwritetriples( smwproperty( "skosp:qualifiedRelation",  id_subobject ) )
 +
 +
        -- 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 )
 +
      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
 
end
  
 
-- Write triples for template begrep
 
-- Write triples for template begrep
 
function p.begrep ( frame )
 
function p.begrep ( frame )
    local begrep = mw.getCurrentFrame():getParent()
+
  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
  
local begreptripler = {
+
  -- infobox
p.smwproperty("Dct:modified",  frame:preprocess( "{{#time: Y-m-d'T'H:i:s|{{REVISIONTIMESTAMP}}}}{{#time:P|{{REVISIONTIMESTAMP}}|nb|true}}")),
+
  local terminfobox = capiunto.create( {
p.smwproperty( "Skosp:memberOf",  begrep.args.medlem ),
+
        bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;"
p.smwproperty( "Skos:scopeNote", begrep.args.kommentar ),
+
  } )
p.smwproperty( "Dct:subject",begrep.args['bruksområde'] ),
+
      :addHeader( "INFORMASJON", "mw-infobox-capiunto-title-1" )
felles.sep,
+
  terminfobox = addOptionalRow( terminfobox, 'referanse', begrep.args["kommentar:referanse"] ) -- obsolete?
                p.smwproperty( "Skosp:domene", begrep.args.domene ),
+
  terminfobox = addOptionalRow( terminfobox, 'domene', begrep.args.domene )
                p.smwproperty( "Skosp:publisere", begrep.args.publisere ),
+
  terminfobox = addOptionalRow( terminfobox, 'bruksområde', begrep.args["bruksområde"] )
p.smwproperty( "Dct:identifier",begrep.args.identifikator ),
+
  terminfobox = addOptionalRow( terminfobox, 'merknad',  begrep.args.kommentar )
p.smwproperty( "Skosp:previousIdentifier",begrep.args['tidligere id'] )
+
  terminfobox = addOptionalRow( terminfobox, 'merknad (internt)',  begrep.args["merknad internt"] )
}
+
  terminfobox = addOptionalRow( terminfobox, 'status', begrep.args.status )
    p.smwwritetriples( begreptripler )
+
  terminfobox = addOptionalRow( terminfobox, 'publisere', begrep.args.publisere )
   
+
      :getHtml()
    -- infobox
 
   
 
    -- infobox
 
    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)
 
   return tostring(terminfobox)
 
end
 
end
  
-- Coalesce on displaytitle from prefLabel  
+
-- Coalesce on displaytitle from prefLabel
 
function p.displaytitle( term )
 
function p.displaytitle( term )
-- local prefixedtitle = mw.title.getCurrentTitle().prefixedText
+
  -- local prefixedtitle = mw.title.getCurrentTitle().prefixedText
-- local term = mw.getCurrentFrame():getParent().args.term
+
  -- local term = mw.getCurrentFrame():getParent().args.term
--  local currentdisplaytitle = mw.ext.displaytitle.get(prefixedtitle)
+
  --  local currentdisplaytitle = mw.ext.displaytitle.get(prefixedtitle)
    local isset = mw.getCurrentFrame():callParserFunction( '#var', { 'dtisset' } )
+
  local isset = mw.getCurrentFrame():callParserFunction( '#var', { 'dtisset' } )
   
+
 
    -- om term finnes og display title er tittel med namespace, sett displaytitle
+
  -- om term finnes og display title er tittel med namespace, sett displaytitle
if (isset == "" and term ~= nul)
+
  if (isset == "" and term ~= nil)
    then
+
  then
    mw.ext.displaytitle.set(term)
+
      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  
+
      -- 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 } )
+
      mw.getCurrentFrame():callParserFunction( '#vardefine', { 'dtisset', term } )
    return
+
  end
    else return
+
  return
end
 
 
end
 
end
  
 
-- Termseksjon
 
-- Termseksjon
function p.termseksjon( lc, lcname )
+
function p.termseksjon( frame )
  local luaframe = mw.getCurrentFrame()
+
  local args = frame.args
    local termseksjon = mw.getCurrentFrame():getParent()
+
  local seksjonargs = frame:getParent()
    local lc = luaframe.args.lc
+
  local lc = args.lc
    local lcname = luaframe.args.lcname
+
  local lcname = args.lcname
    assert(lc and lcname,"alle termseksjon må ha en en lc og tittel" .. lcname )
+
  assert(lc and lcname,"alle termseksjon må ha en en lc og tittel" .. lcname )
   
+
 
-- local spraakkode = termseksjon.args['språkkode']
+
  -- local spraakkode = termseksjon.args['språkkode']
+
 
    if (termseksjon.args.definisjon ~= nul)
+
  if ( seksjonargs.definisjon ~= nil )
    then  
+
  then
    p.definisjon( termseksjon, lc )
+
      p.definisjon( seksjonargs, lc )
    else  -- error(tostring(termseksjon.args.definisjon))
+
  -- else  -- error(tostring(termseksjon.args.definisjon))
   
+
  end
    end
+
  -- infobox
-- infobox
+
  local terminfobox = capiunto.create( {
    terminfobox = capiunto.create( {
+
        bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;"
    bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;"
+
  } )
} )
+
      :addHeader( lcname, "mw-infobox-capiunto-title-1" )
  :addHeader( lcname, "mw-infobox-capiunto-title-1" )
+
  terminfobox = addOptionalRow( terminfobox, 'merknad', seksjonargs.merknad )
terminfobox = addOptionalRow( terminfobox, 'merknad', termseksjon.args.merknad )
+
  terminfobox = addOptionalRow( terminfobox, 'referanse', seksjonargs["merknad:referanse"] )
terminfobox = addOptionalRow( terminfobox, 'referanse', termseksjon.args["merknad:referanse"] )
+
  terminfobox = addOptionalRow( terminfobox, 'godkjent', seksjonargs.godkjent )
terminfobox = addOptionalRow( terminfobox, 'godkjent', termseksjon.args.godkjent )
+
  terminfobox = addOptionalRow( terminfobox, 'definisjon', seksjonargs.definisjon )
terminfobox = addOptionalRow( terminfobox, 'definisjon', termseksjon.args.definisjon )
+
  terminfobox = addOptionalRow( terminfobox, 'definisjon:referanse', seksjonargs["definisjon:referanse"] )
terminfobox = addOptionalRow( terminfobox, 'definisjon:referanse', termseksjon.args["definisjon:referanse"] )
+
  terminfobox = addOptionalRow( terminfobox, 'referanse', seksjonargs["merknad:referanse"] )
terminfobox = addOptionalRow( terminfobox, 'referanse', termseksjon.args["merknad:referanse"] )
+
      :getHtml()
:getHtml()
 
 
   return tostring(terminfobox)
 
   return tostring(terminfobox)
 
end
 
end
  
 
function p.definisjon(termseksjon, spraakkode)
 
function p.definisjon(termseksjon, spraakkode)
  if (not(termseksjon and spraakkode))
+
  if (not (termseksjon and spraakkode))
  then error ('definisjon og spraakkode må være satt')
+
  then error ('definisjon og spraakkode må være satt')
  else
 
local slug = 'definisjon ' .. spraakkode
 
    local begreptripler = {
 
  p.smwproperty("Skosno:definisjon", felles.fullpagename ..'#'.. slug )
 
  }
 
  p.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
 
definisjonsreftripler = {
 
p.smwlangproperty("Skosp:label", defref, spraakkode )
 
}
 
  local result = mw.smw.subobject( definisjonsreftripler, definisjonrefslug )
 
 
   else
 
   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
  local definisjontripler =
+
end
  {
 
  p.smwproperty( "@category","Skosno:Definisjon" ),
 
  p.smwlangproperty("Skosp:label",termseksjon.args['definisjon'],spraakkode),
 
  p.smwproperty("Dct:source", definisjonref )
 
 
 
  }
 
  -- andre parameter er (relativ ) uri å bruke som navn for subobject, appender # og slug på sidenavn
 
  result = mw.smw.subobject( definisjontripler, slug )
 
  return
 
  end
 
  end
 
  
 
--return
 
--return
Linje 252: Linje 320:
  
 
function p.term( frame )
 
function p.term( frame )
local luaframe = mw.getCurrentFrame()
+
  local args = frame.args
local term = mw.getCurrentFrame():getParent()
+
  local termargs = frame:getParent().args
local langcode = luaframe.args['lc']
+
  local langcode = args.lc
local relasjon = luaframe.args.relasjon
+
  local relasjon = args.relasjon
local sourceful = ""
+
 
    local slug = nul
+
  assert ( langcode ~= nil, "named param lc must be set when invoking module begrep:term")
    local sourceslug = nul
+
  assert ( relasjon ~= nil , "named param relasjon must be set when invoking module begrep:term" )
 
assert (langcode ~= nul, "named param lc must be set when invoking module begrep:term")
 
assert ( relasjon ~= nul , "named param relasjon must be set when invoking module begrep:term" )
 
if (term.args.term )
 
then
 
-- langcode = term.args['språkkode']
 
-- forventer alltid å få inn en en relasjon på type prefix:tekst
 
local relasjonslug = mw.ustring.match(luaframe.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 = {
 
p.smwlangproperty("Skosxl:literalForm",term.args['term'], langcode ),
 
p.smwproperty("Dct:source", felles.fullpagename .. sourceslug ),
 
p.smwproperty("@category", "Skosxl:Label" )
 
}
 
local result = mw.smw.subobject( termtripler, slug )
 
 
-- function
 
    if (relasjonslug == "prefLabel") then
 
    p.displaytitle( term.args.term )
 
end
 
 
local relasjonstripler = {
 
p.smwproperty(relasjon, felles.fullpagename .. "#" .. slug)
 
}
 
result = p.smwwritetriples(relasjonstripler)
 
 
-- 
 
  
if (term.args.term and term.args["term:referanse"] )
+
  if ( termargs.term )
then
+
  then
kildetripler = {
+
      -- langcode = term.args['språkkode']
p.smwlangproperty("Rdfs:label",term.args['term:referanse'],langcode),
+
      -- forventer alltid å få inn en en relasjon på type prefix:tekst
p.smwlangproperty("Skos:scopeNote",term.args['kommentar'], langcode)
+
      local relasjonslug = mw.ustring.match(args.relasjon, ":(.*)")
}
+
      local urivarname = relasjonslug .. "termCounter" .. langcode
-- result = mw.smw.subobject( definisjontripler, sourceslug  )  
+
      local LuaVarTermCounter = mw.ext.VariablesLua.var( urivarname  )
end
+
      -- 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
  
terminfobox = capiunto.create( {
+
      local relasjonstripler = {
bodyStyle = "width:60em;background:#f3f3f3; margin: 0 0 0 0;"
+
        smwproperty(relasjon, felles.fullpagename .. "#" .. slug)
} )
+
      }
:addHeader( felles.languagetable[relasjon], "mw-infobox-capiunto-title-2" )
+
      smwwritetriples(relasjonstripler)
:addRow( 'term',term.args.term )
 
  
terminfobox = addOptionalRow( terminfobox, 'referanse', term.args['term:referanse'] )
+
      --
terminfobox = addOptionalRow( terminfobox, 'kontekst', term.args.kontekst )
 
terminfobox = addOptionalRow( terminfobox, 'kortform',term.args.kortform )
 
terminfobox = addOptionalRow( terminfobox, 'kommentar',term.args.kommentar )
 
terminfobox = addOptionalRow( terminfobox, 'kollokasjon', term.args.kollokasjon )
 
terminfobox = addOptionalRow( terminfobox, 'andre referanser',term.args['andre referanser'] )
 
:getHtml()
 
  
return tostring(terminfobox)
+
      if (termargs.term and termargs["term:referanse"] )
else end
+
      then
   
+
        local kildetripler = {
--  error ((string.match(property, ":(.*)$")) .. " " ..spraakkode)
+
            smwlangproperty("Rdfs:label", termargs['term:referanse'], langcode),
-- return error (string.match(property, ":(.*)$") .. term.args.spraakkode)
+
            smwlangproperty("Skos:scopeNote", termargs['kommentar'], langcode)
end
+
        }
 +
        -- result = mw.smw.subobject( definisjontripler, sourceslug  )
 +
      end
  
-- return
 
-- 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 )
  
--function p.term( )
+
      terminfobox = addOptionalRow( terminfobox, 'referanse', termargs['term:referanse'] )
--return  
+
      terminfobox = addOptionalRow( terminfobox, 'kontekst', termargs.kontekst )
--end
+
      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
 
return p

Revisjonen fra 20. jun. 2022 kl. 16:35

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], relasjon.args.begrep ) )

      -- qualification triples
      if ( relasjonstype ~= "" or relasjonargs.inndelingskriterium or relasjonargs.merknad )

      then
         local relasjonslug = mw.ustring.match(relasjonsheading, ":(.*)")
         local urivarname = relasjonskey .. "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


         -- to subobject, adapt to new version of skosno
--         smwwritetriples( smwproperty( "skosp:qualifiedRelation",  id_subobject ) )

         -- 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 )
      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()
   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