Ontology Management Script "manage_DMP.rb"
Component 600319
Jump to navigation
Jump to 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