Ontology Management Script "manage_DMP.rb"

From SMW CindyKate - Main
Component 600319
Jump to: navigation, search

Content

Notice:

OMS contain instructions to run in accordance with UseCase "Programmatically manage SMW pages' content/wikitext and metadata".

This is a real-world example from one of dataspect's customers.

DMPMigration.rb

class DMPMigration

  attr_accessor :working_set_of_pages

  def mutateBaujahrMinMaxOne9999 template_name, page, from, to, aufgabe2_result_repo
    new_value = page.wikitext.get_value_for_FIELD_NAME_in_TEMPLATE_NAME(
      from, template_name,
      :require_single_template_instance)
    page.wikitext.set_field_value_for_FIELD_NAME_in_TEMPLATE_NAME_with_NEW_FIELD_VALUE(
      to, template_name, new_value,
      :require_single_template_instance,
      :create_field_if_not_exists)
    new_value_Beleg = page.wikitext.get_value_for_FIELD_NAME_in_TEMPLATE_NAME(
      "#{from}Beleg", template_name,
      :require_single_template_instance)
    page.wikitext.set_field_value_for_FIELD_NAME_in_TEMPLATE_NAME_with_NEW_FIELD_VALUE(
      "#{to}Beleg", template_name, new_value_Beleg,
      :require_single_template_instance,
      :create_field_if_not_exists)
    #
    page.store_to_REPOSITORY(aufgabe2_result_repo)
    page.store_to_PAGES(@working_set_of_pages)
  end
  def aufgabe2_BAU pages_A_for_aufgabe2, aufgabe2_result_repo
    SMWCindyKate.user_message("Pages 'pages_A_for_aufgabe2': out of #{pages_A_for_aufgabe2.pages.values.count} objects")
    #
    pages_A_for_aufgabe2.NOT_having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('-9999','BaujahrMin','Bau')
    pages_A_for_aufgabe2.having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('9999','BaujahrMax','Bau')
    pages_A_for_aufgabe2.pages.each do |oid, page|
      mutateBaujahrMinMaxOne9999('Bau', page, 'BaujahrMin', 'BaujahrMax', aufgabe2_result_repo)
    end
    #
    pages_B_for_aufgabe2 = pages_A_for_aufgabe2.clone
    pages_B_for_aufgabe2.having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('-9999','BaujahrMin','Bau')
    pages_B_for_aufgabe2.NOT_having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('9999','BaujahrMax','Bau')
    pages_B_for_aufgabe2.pages.each do |oid, page|
      mutateBaujahrMinMaxOne9999('Bau', page, 'BaujahrMax', 'BaujahrMin', aufgabe2_result_repo)
    end
  end
  def aufgabe2_AST pages_A_for_aufgabe2, aufgabe2_result_repo
    SMWCindyKate.user_message("Pages 'pages_A_for_aufgabe2': out of #{pages_A_for_aufgabe2.pages.values.count} objects")
    #
    pages_A_for_aufgabe2.NOT_having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('-9999','BaujahrMin','Ausstattungsteil')
    pages_A_for_aufgabe2.having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('9999','BaujahrMax','Ausstattungsteil')
    pages_A_for_aufgabe2.pages.each do |oid, page|
      mutateBaujahrMinMaxOne9999('Ausstattungsteil', page, 'BaujahrMin', 'BaujahrMax', aufgabe2_result_repo)
    end
    #
    pages_B_for_aufgabe2 = pages_A_for_aufgabe2.clone
    pages_B_for_aufgabe2.having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('-9999','BaujahrMin','Ausstattungsteil')
    pages_B_for_aufgabe2.NOT_having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('9999','BaujahrMax','Ausstattungsteil')
    pages_B_for_aufgabe2.pages.each do |oid, page|
      mutateBaujahrMinMaxOne9999('Ausstattungsteil', page, 'BaujahrMax', 'BaujahrMin', aufgabe2_result_repo)
    end
  end
  ############################################################################################################
  ############################################################################################################
  ############################################################################################################
  def mutateBaujahrMinMaxBoth9999 template_name, page, aufgabe1_result_repo
    page.wikitext.set_field_value_for_FIELD_NAME_in_TEMPLATE_NAME_with_NEW_FIELD_VALUE(
      'BaujahrMin', template_name, '1', :require_single_template_instance, :create_field_if_not_exists)
    page.wikitext.set_field_value_for_FIELD_NAME_in_TEMPLATE_NAME_with_NEW_FIELD_VALUE(
      'BaujahrMax', template_name, '1', :require_single_template_instance, :create_field_if_not_exists)
    page.wikitext.set_field_value_for_FIELD_NAME_in_TEMPLATE_NAME_with_NEW_FIELD_VALUE(
      'BaujahrMinBeleg', template_name, 'Migration', :require_single_template_instance, :create_field_if_not_exists)
    page.wikitext.set_field_value_for_FIELD_NAME_in_TEMPLATE_NAME_with_NEW_FIELD_VALUE(
      'BaujahrMaxBeleg', template_name, 'Migration', :require_single_template_instance, :create_field_if_not_exists)
    page.store_to_REPOSITORY(aufgabe1_result_repo)
    page.store_to_PAGES(@working_set_of_pages)
  end
  def aufgabe1_BAU pages_for_aufgabe1, aufgabe1_result_repo
    SMWCindyKate.user_message("Pages 'pages_for_aufgabe1': out of #{pages_for_aufgabe1.pages.values.count} objects")
    pages_for_aufgabe1.having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('9999','BaujahrMin','Bau')
    pages_for_aufgabe1.having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('9999','BaujahrMax','Bau')
    pages_for_aufgabe1.pages.each do |oid, page|
      mutateBaujahrMinMaxBoth9999('Bau', page, aufgabe1_result_repo)
    end
  end
  def aufgabe1_AST pages_for_aufgabe1, aufgabe1_result_repo
    SMWCindyKate.user_message("Pages 'pages_for_aufgabe1': out of #{pages_for_aufgabe1.pages.values.count} objects")
    pages_for_aufgabe1.having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('9999','BaujahrMin','Ausstattungsteil')
    pages_for_aufgabe1.having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('9999','BaujahrMax','Ausstattungsteil')
    pages_for_aufgabe1.pages.each do |oid, page|
      mutateBaujahrMinMaxBoth9999('Ausstattungsteil', page, aufgabe1_result_repo)
    end
  end
  ############################################################################################################
  ############################################################################################################
  ############################################################################################################
  def mutateVersicherungsnummern template_name, page, toRepo
    old_value_GvzNr = page.wikitext.get_value_for_FIELD_NAME_in_TEMPLATE_NAME(
      'GvzNr',template_name, :require_single_template_instance)
    new_value_FruehereGvzNr = /171[0-9]+/.match(old_value_GvzNr)[0]
    arr = old_value_GvzNr.split(',')
    arr.delete(new_value_FruehereGvzNr)
    if(arr[0].nil?)
      new_value_GvzNr = ''
    else
      new_value_GvzNr = arr[0]
    end
    old_value_FruehereGvzNr = page.wikitext.get_value_for_FIELD_NAME_in_TEMPLATE_NAME(
      'FruehereGvzNr',template_name, :require_single_template_instance)
    unless old_value_FruehereGvzNr == 'FIELD_DOES_NOT_EXIST'
      arr_new_value_FruehereGvzNr = [old_value_FruehereGvzNr, new_value_FruehereGvzNr]
    else
      arr_new_value_FruehereGvzNr = [new_value_FruehereGvzNr]
    end
    page.wikitext.set_field_value_for_FIELD_NAME_in_TEMPLATE_NAME_with_NEW_FIELD_VALUE(
      'FruehereGvzNr',template_name, arr_new_value_FruehereGvzNr.join(', '), :require_single_template_instance, :create_field_if_not_exists)
    page.wikitext.set_field_value_for_FIELD_NAME_in_TEMPLATE_NAME_with_NEW_FIELD_VALUE(
      'GvzNr',template_name, new_value_GvzNr, :require_single_template_instance, :create_field_if_not_exists)

    page.store_to_REPOSITORY(toRepo)
    page.store_to_PAGES(@working_set_of_pages)
  end
  def aufgabe3_BAU pages_for_aufgabe3, aufgabe3_result_repo
    SMWCindyKate.user_message("Pages 'pages_for_aufgabe3': out of #{pages_for_aufgabe3.pages.values.count} objects")
    pages_for_aufgabe3.having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('Gemeinde_168','Gemeinde','Bau')
    pages_for_aufgabe3.having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME('171[0-9]+','GvzNr','Bau')
    pages_for_aufgabe3.pages.each do |oid, page|
      mutateVersicherungsnummern('Bau', page, aufgabe3_result_repo)
    end
  end
############################################################################################################
############################################################################################################
############################################################################################################
  def mutateSchutz template_name, page, aufgabe4_result_repo
    page.wikitext.set_field_value_for_FIELD_NAME_in_TEMPLATE_NAME_with_NEW_FIELD_VALUE(
      'Schutz', template_name, '-', :require_single_template_instance, :create_field_if_not_exists)
    page.store_to_REPOSITORY(aufgabe4_result_repo)
    page.store_to_PAGES(@working_set_of_pages)
  end
  def aufgabe4_BAU pages_for_aufgabe4, aufgabe4_result_repo
    SMWCindyKate.user_message("Pages 'pages_for_aufgabe4': out of #{pages_for_aufgabe4.pages.values.count} objects")
      a = pages_for_aufgabe4.clone
      b = pages_for_aufgabe4.clone
      c = SMWCindyKate::Pages.new(@options)
      a.NOT_having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME(
        'ÖREB|PD|-','^Schutz$','Bau')
      b.NOT_having_FIELD_NAME_in_TEMPLATE_NAME(
        'Schutz','Bau')
      c.filtered_out_of_PAGES([a, b])
      c.pages.each do |oid, page|
        mutateSchutz('Bau', page, aufgabe4_result_repo)
      end
  end
  def aufgabe4_AST pages_for_aufgabe4, aufgabe4_result_repo
    SMWCindyKate.user_message("Pages 'pages_for_aufgabe4': out of #{pages_for_aufgabe4.pages.values.count} objects")
      a = pages_for_aufgabe4.clone
      b = pages_for_aufgabe4.clone
      c = SMWCindyKate::Pages.new(@options)
      a.NOT_having_FIELD_VALUE_for_FIELD_NAME_in_TEMPLATE_NAME(
        'ÖREB|PD|-','^Schutz$','Ausstattungsteil')
      b.NOT_having_FIELD_NAME_in_TEMPLATE_NAME(
        'Schutz','Ausstattungsteil')
      c.filtered_out_of_PAGES([a, b])
      c.pages.each do |oid, page|
        mutateSchutz('Ausstattungsteil', page, aufgabe4_result_repo)
      end
  end
  ############################################################################################################
  ############################################################################################################
  ############################################################################################################
  def get_new_Katasternummer odb_id
    return @kn[odb_id]
  end
  def aufgabe6_BAU pages_for_aufgabe6, aufgabe6_result_repo
    @kn = {}
    CSV.foreach(
      "/media/lex/LEXSAMSUNG-64GB/DMP/20170829_bauten_fuer_katnr_von_GIS_def_auswahl.csv",
      col_sep: "\t" # Non-standard, see http://ruby-doc.org/stdlib-2.4.1/libdoc/csv/rdoc/CSV.html
    ) do |row|
      unless row[0] == 'ODB-ID'
        # UNKLAR: Die KatasternummerAktuellInOdb könnten wir verwenden, um sicherzustellen,
        # dass keine zwischenzeitlich manuell geänderten Werte werden.
        @kn[row[0]] = row[2]
      end
    end
    pages_for_aufgabe6.pages.each do |oid, page|
      if @kn.has_key?(page.smw_page_name)
        nkn = get_new_Katasternummer(page.smw_page_name)
        page.wikitext.set_field_value_for_FIELD_NAME_in_TEMPLATE_NAME_with_NEW_FIELD_VALUE(
          'Katasternummer','Bau', nkn, :require_single_template_instance, :create_field_if_not_exists)
        page.store_to_REPOSITORY(aufgabe6_result_repo)
      end
    end
  end
  
end

end

manage_DMP.rb

require_relative "DMPMigration.rb"

$dmpm = DMPMigration.new

  original_download_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/ORIGINALEXPORT_ast', @options)
  original_download_repo.must_be_a_git_repository!
  $dmpm.working_set_of_pages = SMWCindyKate::Pages.new(@options)
  $dmpm.working_set_of_pages.from_REPOSITORY(original_download_repo)
  aufgabe2_result_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/AUFGABE2_TARGET_ast', @options)
  aufgabe1_result_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/AUFGABE1_TARGET_ast', @options)
  aufgabe4_result_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/AUFGABE4_TARGET_ast', @options)
  final_result_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/FINAL_ast', @options)
  #
  monitor = SMWCindyKate::Monitor.new
  
  pages_for_aufgabe2 = $dmpm.working_set_of_pages.clone
  $dmpm.aufgabe2_AST(pages_for_aufgabe2, aufgabe2_result_repo)

  pages_for_aufgabe1 = $dmpm.working_set_of_pages.clone
  $dmpm.aufgabe1_AST(pages_for_aufgabe1, aufgabe1_result_repo)

  pages_for_aufgabe4 = $dmpm.working_set_of_pages.clone
  $dmpm.aufgabe4_AST(pages_for_aufgabe4, aufgabe4_result_repo)

  $dmpm.working_set_of_pages.store_to_REPOSITORY(final_result_repo)

  monitor.compare_COMMANDS_for_REPOSITORIES(
    [
      'egrep "BaujahrMin=-9999" *.sWikitext | wc -l',
      'egrep "BaujahrMax=9999" *.sWikitext | wc -l',
      'egrep "\|BaujahrMinBeleg=Migration" *.sWikitext | wc -l',
      'egrep "\|BaujahrMaxBeleg=Migration" *.sWikitext | wc -l',
      'egrep "\|Schutz=PD" *.sWikitext | wc -l',
      'egrep "\|Schutz=\-" *.sWikitext | wc -l',
      'egrep "\|Schutz=ÖREB" *.sWikitext | wc -l',
      'egrep "\|Schutz=$" *.sWikitext | wc -l'
    ],[
      original_download_repo,
      final_result_repo
    ]
  )

  monitor.compare_OBJECTS_for_REPOSITORIES(
    [
      original_download_repo,
      final_result_repo
    ],
    :show_full_source
  )

  ############################################################################################################
  ############################################################################################################
  ############################################################################################################

  original_download_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/ORIGINALEXPORT_bau', @options)
  original_download_repo.must_be_a_git_repository!
  $dmpm.working_set_of_pages = SMWCindyKate::Pages.new(@options)
  $dmpm.working_set_of_pages.from_REPOSITORY(original_download_repo)
  aufgabe2_result_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/AUFGABE2_TARGET_bau', @options)
  aufgabe1_result_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/AUFGABE1_TARGET_bau', @options)
  aufgabe3_result_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/AUFGABE3_TARGET_bau', @options)
  aufgabe4_result_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/AUFGABE4_TARGET_bau', @options)
  aufgabe6_result_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/AUFGABE6_TARGET_bau', @options)
  final_result_repo = SMWCindyKate::OntologyRepository.new('/media/lex/LEXSAMSUNG-64GB/DMP/171019/FINAL_bau', @options)
  #
  monitor = SMWCindyKate::Monitor.new

  pages_for_aufgabe2 = $dmpm.working_set_of_pages.clone
  $dmpm.aufgabe2_BAU(pages_for_aufgabe2, aufgabe2_result_repo)

  pages_for_aufgabe1 = $dmpm.working_set_of_pages.clone
  $dmpm.aufgabe1_BAU(pages_for_aufgabe1, aufgabe1_result_repo)

  pages_for_aufgabe3 = $dmpm.working_set_of_pages.clone
  $dmpm.aufgabe3_BAU(pages_for_aufgabe3, aufgabe3_result_repo)

  pages_for_aufgabe4 = $dmpm.working_set_of_pages.clone
  $dmpm.aufgabe4_BAU(pages_for_aufgabe4, aufgabe4_result_repo)

  pages_for_aufgabe6 = $dmpm.working_set_of_pages.clone
  $dmpm.aufgabe6_BAU(pages_for_aufgabe6, aufgabe6_result_repo)

  $dmpm.working_set_of_pages.store_to_REPOSITORY(final_result_repo)

  monitor.compare_COMMANDS_for_REPOSITORIES(
    [
      'egrep "BaujahrMin=-9999" *.sWikitext | wc -l',
      'egrep "BaujahrMax=9999" *.sWikitext | wc -l',
      'egrep "\|BaujahrMinBeleg=Migration" *.sWikitext | wc -l',
      'egrep "\|BaujahrMaxBeleg=Migration" *.sWikitext | wc -l',
      'egrep "\|Schutz=PD" *.sWikitext | wc -l',
      'egrep "\|Schutz=\-" *.sWikitext | wc -l',
      'egrep "\|Schutz=ÖREB" *.sWikitext | wc -l',
      'egrep "\|Schutz=$" *.sWikitext | wc -l'
    ],[
      original_download_repo,
      final_result_repo
    ]
  )

  monitor.compare_OBJECTS_for_REPOSITORIES(
    [
      original_download_repo,
      final_result_repo
    ],
    :show_full_source
  )

inject_DMP.rb

ast_repo = SMWCindyKate::OntologyRepository.new('/home/user/171018_FINAL_ast', @options)
ast_pages = SMWCindyKate::Pages.new(@options)
ast_pages.from_REPOSITORY(ast_repo, false)
i = 1
ast_pages.pages.each do |oid, page|
  page.store_to_SMW(@profile, "wiki_id", i)
  i += 1
end

bau_repo = SMWCindyKate::OntologyRepository.new('/home/user/171018_FINAL_bau', @options)
bau_pages = SMWCindyKate::Pages.new(@options)
bau_pages.from_REPOSITORY(bau_repo, false)
i = 1
bau_pages.pages.each do |oid, page|
  page.store_to_SMW(@profile, "wiki_id", i)
  i += 1
end

bau_repo = SMWCindyKate::OntologyRepository.new('/home/user/171018_FINAL_bau_RECENT', @options)
bau_pages = SMWCindyKate::Pages.new(@options)
bau_pages.from_REPOSITORY(bau_repo, false)
i = 1
bau_pages.pages.each do |oid, page|
  page.store_to_SMW(@profile, "wiki_id", i)
  i += 1
end