amalgame/commit

REFACTORING: hide amalgame:includes behind stragey api

authorJacco van Ossenbruggen
Tue Sep 9 10:18:44 2014 +0200
committerJacco van Ossenbruggen
Tue Sep 9 10:18:44 2014 +0200
commit0da3c3dd3721afb186135f3d75c3574b98d05966
tree5525685ce8e77ddff4145624d260b69979f5aefd
parent18ab9bf55969eda2be9db428e39659a7d505d7a9
Diff style: patch stat
diff --git a/api/form/amalgame/startpage.pl b/api/form/amalgame/startpage.pl
index 8a462f6..46d5c02 100644
--- a/api/form/amalgame/startpage.pl
+++ b/api/form/amalgame/startpage.pl
@@ -16,6 +16,7 @@
 :- use_module(user(user_db)).
 
 :- use_module(library(amalgame/rdf_util)).
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(amalgame/ag_provenance)).
 :- use_module(library(amalgame/util)).
 
@@ -215,7 +216,7 @@ scheme_label(URI, Key-URI) :-
 
 add_schemes([], _).
 add_schemes([Scheme|Ss], Strategy) :-
-	rdf_assert(Strategy, amalgame:includes, Scheme, Strategy),
+	strategy_add_vocabulary(Strategy, Scheme),
 	add_schemes(Ss, Strategy).
 
 new_strategy_name(Strategy, NS) :-
diff --git a/api/hints.pl b/api/hints.pl
index 42001c7..70096d5 100644
--- a/api/hints.pl
+++ b/api/hints.pl
@@ -6,6 +6,7 @@
 :- use_module(library(semweb/rdf_db)).
 :- use_module(library(semweb/rdfs)).
 :- use_module(library(semweb/rdf_label)).
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(amalgame/ag_stats)).
 :- use_module(library(amalgame/voc_stats)).
 :- use_module(library(amalgame/map)).
@@ -68,8 +69,8 @@ find_hint(Strategy, Context, Hint) :-
 	Focus == Strategy,
 	\+ rdf(_, rdf:type, amalgame:'Mapping',Strategy),
 	!,
-	rdf(Strategy, amalgame:includes, Voc1, Strategy),
-	rdf(Strategy, amalgame:includes, Voc2, Strategy),
+	strategy_vocabulary(Strategy, Voc1),
+	strategy_vocabulary(Strategy, Voc2),
 	Voc1 \== Voc2,
 	voc_property(Voc1, totalCount(Count1)),
 	voc_property(Voc2, totalCount(Count2)),
@@ -99,9 +100,9 @@ find_hint(Strategy, Context, Hint) :-
 	% advise an exact label match using the focus as the source
 	\+ rdf(_, rdf:type, amalgame:'Mapping',Strategy),
 	option(focus(Focus), Context),
-	rdf(Strategy, amalgame:includes, Focus, Strategy),
+	strategy_vocabulary(Strategy, Focus),
 	!,
-	rdf(Strategy, amalgame:includes, Target, Strategy),
+	strategy_vocabulary(Strategy, Target),
 	Focus \== Target,
 	rdf_equal(Match, amalgame:'ExactLabelMatcher'),
 	rdf_display_label(Match, Label),
diff --git a/api/node_info.pl b/api/node_info.pl
index 158f52c..07b94b7 100644
--- a/api/node_info.pl
+++ b/api/node_info.pl
@@ -12,6 +12,7 @@
 :- use_module(library(skos/util)).
 
 :- use_module(library(amalgame/amalgame_modules)).
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(amalgame/ag_stats)).
 :- use_module(library(amalgame/voc_stats)).
 :- use_module(library(amalgame/caching)).
@@ -268,7 +269,11 @@ amalgame_info(URL, Strategy,
 	),
 	append([Definition, Input],Optional).
 
-amalgame_info(_URL, _Strategy, []).
+amalgame_info(Strategy, Strategy, Results) :-
+	findall(vocabulary- \(cp_label:rdf_link(V)),
+		strategy_vocabulary(Strategy, V), Vocs),
+	append([Vocs], Results).
+
 
 
 label_stats(Scheme, Strategy, Property, Stats) :-
diff --git a/api/strategy_viz.pl b/api/strategy_viz.pl
index 8e7d7d8..a260529 100644
--- a/api/strategy_viz.pl
+++ b/api/strategy_viz.pl
@@ -12,6 +12,7 @@
 :- use_module(components(graphviz)).
 :- use_module(library(skos/util)).
 :- use_module(library(amalgame/voc_stats)).
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(amalgame/ag_stats)).
 :- use_module(library(amalgame/ag_evaluation)).
 :- use_module(library(amalgame/map)).
@@ -105,7 +106,7 @@ amalgame_triples(Graph, Triples) :-
 % hack, to get a better layout we reverse the arrow :(
 amalgame_graph_triple(Graph,Graph,P,Scheme) :-
 	rdf_equal(amalgame:includedIn, P),
-	rdf(Graph,amalgame:includes,Scheme,Graph).
+	strategy_vocabulary(Graph, Scheme).
 amalgame_graph_triple(Graph,O,P,S) :-
 	rdf(S,P,O,Graph),
 	is_amalgame_property(P),
diff --git a/applications/builder.pl b/applications/builder.pl
index 7983ce4..f9f8b5b 100644
--- a/applications/builder.pl
+++ b/applications/builder.pl
@@ -3,7 +3,6 @@
 :- use_module(library(pairs)).
 :- use_module(library(settings)).
 
-:- use_module(library(semweb/rdf_db)).
 :- use_module(library(http/http_dispatch)).
 :- use_module(library(http/http_parameters)).
 :- use_module(library(http/http_path)).
@@ -12,6 +11,7 @@
 :- use_module(library(yui3_beta)).
 :- use_module(user(user_db)).
 
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(amalgame/voc_stats)).
 :- use_module(library(amalgame/util)).
 :- use_module(library(amalgame/json_util)).
@@ -79,7 +79,7 @@ amalgame:prebuilder(Strategy) :-
 precalc_voc_stats(Strategy) :-
 	% handy to know how many concepts etc are in each vocab,
 	% both for the user as for the hints system etc.
-	forall(rdf(Strategy, amalgame:includes, Vocab),
+	forall(strategy_vocabulary(Strategy, Vocab),
 	       (   voc_property(Vocab, totalCount(_))
 	       ->  ( setting(amalgame:precompute, true)
 		   ->  precompute_node(Strategy, Vocab)
diff --git a/applications/startpage.pl b/applications/startpage.pl
index a2dfeca..ef6687b 100644
--- a/applications/startpage.pl
+++ b/applications/startpage.pl
@@ -10,6 +10,7 @@
 
 :- use_module(library(yui3_beta)).
 :- use_module(library(amalgame/util)).
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(applications(skos_browser)).
 
 :- use_module(components(amalgame/startpage)).
@@ -37,7 +38,7 @@ html_schemes_only -->
 	html_new(ConceptSchemes).
 
 html_main_page(_Request) :-
-	findall(A-S, amalgame_strategy_schemes(A, S), StrategySchemePairs),
+	findall(A-S, strategy_vocabularies(A, S), StrategySchemePairs),
 	amalgame_alignable_schemes(ConceptSchemes),
 	reply_html_page(cliopatria(main),
 			[ title(['Amalgame - strategies'])
diff --git a/lib/ag_modules/ancestor_generator.pl b/lib/ag_modules/ancestor_generator.pl
index 46ced69..c9dbb19 100644
--- a/lib/ag_modules/ancestor_generator.pl
+++ b/lib/ag_modules/ancestor_generator.pl
@@ -1,6 +1,7 @@
 :- module(ancestor_generator,
 	  []).
 
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(ancestor_match).
 :- use_module(generator_snd_input).
 
diff --git a/lib/ag_modules/compound_label_generator.pl b/lib/ag_modules/compound_label_generator.pl
index 767e549..d2b87a3 100644
--- a/lib/ag_modules/compound_label_generator.pl
+++ b/lib/ag_modules/compound_label_generator.pl
@@ -3,6 +3,7 @@
 
 :- use_module(library(semweb/rdf_db)).
 :- use_module(library(amalgame/vocabulary)).
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(string_match_util).
 :- use_module(compound_label_match).
 
diff --git a/lib/ag_modules/compound_label_selecter.pl b/lib/ag_modules/compound_label_selecter.pl
index d4ce0f0..726f6d8 100644
--- a/lib/ag_modules/compound_label_selecter.pl
+++ b/lib/ag_modules/compound_label_selecter.pl
@@ -5,6 +5,7 @@
 :- public selecter/5.
 :- public parameter/4.
 
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(semweb/rdf_db)).
 :- use_module(label_selecter).
 :- use_module(compound_label_match).
diff --git a/lib/ag_modules/exact_label_generator.pl b/lib/ag_modules/exact_label_generator.pl
index 8ab58b9..4168cff 100644
--- a/lib/ag_modules/exact_label_generator.pl
+++ b/lib/ag_modules/exact_label_generator.pl
@@ -2,6 +2,8 @@
 
 :- use_module(library(semweb/rdf_db)).
 :- use_module(library(amalgame/vocabulary)).
+:- use_module(library(amalgame/ag_strategy)).
+
 :- use_module(exact_label_match).
 :- use_module(string_match_util).
 
diff --git a/lib/ag_modules/exact_label_selecter.pl b/lib/ag_modules/exact_label_selecter.pl
index 54b3a1d..155e154 100644
--- a/lib/ag_modules/exact_label_selecter.pl
+++ b/lib/ag_modules/exact_label_selecter.pl
@@ -5,6 +5,7 @@
 :- public selecter/5.
 :- public parameter/4.
 
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(semweb/rdf_db)).
 :- use_module(label_selecter).
 :- use_module(exact_label_match).
diff --git a/lib/ag_modules/isub_generator.pl b/lib/ag_modules/isub_generator.pl
index c0814e3..1c336bc 100644
--- a/lib/ag_modules/isub_generator.pl
+++ b/lib/ag_modules/isub_generator.pl
@@ -3,6 +3,8 @@
 
 :- use_module(library(semweb/rdf_db)).
 :- use_module(library(amalgame/vocabulary)).
+:- use_module(library(amalgame/ag_strategy)).
+
 :- use_module(isub_match).
 :- use_module(string_match_util).
 
diff --git a/lib/ag_modules/isub_selecter.pl b/lib/ag_modules/isub_selecter.pl
index 903a77e..b02ee08 100644
--- a/lib/ag_modules/isub_selecter.pl
+++ b/lib/ag_modules/isub_selecter.pl
@@ -5,6 +5,7 @@
 :- public selecter/5.
 :- public parameter/4.
 
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(semweb/rdf_db)).
 :- use_module(label_selecter).
 :- use_module(string_match_util).
diff --git a/lib/ag_modules/snowball_label_generator.pl b/lib/ag_modules/snowball_label_generator.pl
index d842215..4516f53 100644
--- a/lib/ag_modules/snowball_label_generator.pl
+++ b/lib/ag_modules/snowball_label_generator.pl
@@ -4,6 +4,8 @@
 :- use_module(library(semweb/rdf_db)).
 :- use_module(library(snowball)).
 :- use_module(library(amalgame/vocabulary)).
+:- use_module(library(amalgame/ag_strategy)).
+
 :- use_module(string_match_util).
 :- use_module(snowball_label_match).
 
diff --git a/lib/ag_modules/snowball_label_selecter.pl b/lib/ag_modules/snowball_label_selecter.pl
index 324b505..3e5a938 100644
--- a/lib/ag_modules/snowball_label_selecter.pl
+++ b/lib/ag_modules/snowball_label_selecter.pl
@@ -1,6 +1,7 @@
 :- module(snowball_label_selecter,
 	  []).
 
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(semweb/rdf_db)).
 :- use_module(library(snowball)).
 :- use_module(string_match_util).
diff --git a/lib/ag_modules/string_match_util.pl b/lib/ag_modules/string_match_util.pl
index 30e183d..2e47a74 100644
--- a/lib/ag_modules/string_match_util.pl
+++ b/lib/ag_modules/string_match_util.pl
@@ -1,16 +1,13 @@
 :- module(ag_string_match_util,
 	  [label_list/1,
 	   skos_match/5,
-	   matching_types/2,
-	   strategy_languages/2
+	   matching_types/2
 	  ]).
 
 :- use_module(library(semweb/rdf_db)).
 :- use_module(library(semweb/rdfs)).
 :- use_module(library(semweb/rdf_label)).
 
-:- use_module(library(amalgame/voc_stats)).
-
 %%	labels_list(-L) is det.
 %
 %	L is a sorted list of portrayed label options
@@ -84,12 +81,3 @@ matching_types(S1, S2) :-
 	;
 	true)
 	,!.
-
-strategy_languages(Strategy, Languages) :-
-	findall(Voc, rdf_has(Strategy, amalgame:includes, Voc), Vocs),
-	maplist(lang_used, Vocs, Langs),
-	append(Langs, Languages0),
-	sort(Languages0, Languages).
-
-lang_used(Voc, Langs) :-
-	voc_property(Voc, languages(Langs)).
diff --git a/lib/amalgame/ag_stats.pl b/lib/amalgame/ag_stats.pl
index eae2756..1779640 100644
--- a/lib/amalgame/ag_stats.pl
+++ b/lib/amalgame/ag_stats.pl
@@ -9,6 +9,7 @@
 
 :- use_module(library(skos/util)).
 
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(amalgame/expand_graph)).
 :- use_module(library(amalgame/caching)).
 :- use_module(library(amalgame/vocabulary)).
@@ -142,7 +143,7 @@ has_mapping_input(URL, Strategy, Input) :-
 	rdfs_individual_of(Input, amalgame:'Mapping').
 
 
-%%	mapping_vocab_sources(+MappingURI, Strategy, -Source, -Target)
+%%	mapping_vocab_sources(+MappingURI, +Strategy, -Source, -Target)
 %
 %	Source and Target are the recursive source and target
 %	vocabularies of Mapping.
@@ -153,9 +154,9 @@ mapping_vocab_sources(Manual, Strategy, SV, TV) :-
 	),
 	!,
 	has_correspondence_chk(align(SC,TC,_), Manual),
-	rdf_has(Strategy, amalgame:includes, SV),
+	strategy_vocabulary(Strategy, SV),
 	vocab_member(SC, scheme(SV)),
-	rdf_has(Strategy, amalgame:includes, TV),
+	strategy_vocabulary(Strategy, TV),
 	vocab_member(TC, scheme(TV)).
 
 mapping_vocab_sources(URL, Strategy, S, T) :-
diff --git a/lib/amalgame/ag_strategy.pl b/lib/amalgame/ag_strategy.pl
index 68ba384..9a3af46 100644
--- a/lib/amalgame/ag_strategy.pl
+++ b/lib/amalgame/ag_strategy.pl
@@ -1,9 +1,16 @@
 :- module(ag_strategy,
-	  [ strategy_process_entity/3,
-	    strategy_new_process/9,
-	    strategy_update_process_parameters/4,
-	    strategy_update_node/3,
-	    strategy_delete_node/2,
+	  [ % get information about a strategy:
+	      strategy_process_entity/3,
+	      strategy_vocabulary/2,
+	      strategy_vocabularies/2,
+	      strategy_languages/2,
+
+	    % change strategy
+	      strategy_new_process/9,
+	      strategy_update_process_parameters/4,
+	      strategy_update_node/3,
+	      strategy_delete_node/2,
+	      strategy_add_vocabulary/2,
 
 	    assert_output/6 % used in strategy_backward_compatability.pl
 	  ]).
@@ -17,9 +24,12 @@
 :- use_module(library(amalgame/util)).
 :- use_module(library(amalgame/map)).
 :- use_module(library(amalgame/ag_provenance)).
+:- use_module(library(amalgame/voc_stats)).
+
 
 :- rdf_meta
 	strategy_process_entity(r,r,r),
+	strategy_vocabulary(r,r),
 	strategy_delete_node(r,r),
 	strategy_update_node(r,+,r),
 	strategy_update_process_parameters(r,r,+,+),
@@ -28,10 +38,53 @@
 	output_type(r,r),
 	process_entity(r,r,r).
 
+%%	strategy_process_entity(?Strategy, ?Process, ?Entity) is nondet.
+%
+%	True if Entity is generated by Process in Strategy.
+
 strategy_process_entity(Strategy, Process,Entity) :-
 	rdf_has(Entity, amalgame:wasGeneratedBy, Process, RealProperty),
 	rdf(Entity, RealProperty, Process, Strategy).
 
+%%	strategy_vocabulary(?Strategy, ?Vocabulary) is nondet.
+%
+%	True if Vocabulary is included in Strategy.
+%
+
+strategy_vocabulary(Strategy, Vocabulary) :-
+	rdf_has(Strategy, amalgame:includes, Vocabulary).
+
+%%	strategy_vocabularies(?Strategy, ?Schemes) is nondet.
+%
+%	Strategy is an amalgame alignment strategy and Schemes are the
+%       conceptSchemes that it includes.
+
+strategy_vocabularies(Strategy, Schemes) :-
+	rdfs_individual_of(Strategy, amalgame:'AlignmentStrategy'),
+	findall(S, strategy_vocabulary(Strategy, S), Schemes),
+	Schemes \== [].
+
+%%	strategy_languages(+Strategy, -Languages) is det.
+%
+%	Languages is a list of language codes used in the vocabularies
+%	of Strategy.
+
+strategy_languages(Strategy, Languages) :-
+	strategy_vocabularies(Strategy, Vocs),
+	maplist(lang_used, Vocs, Langs),
+	append(Langs, Languages0),
+	sort(Languages0, Languages).
+
+lang_used(Voc, Langs) :-
+	voc_property(Voc, languages(Langs)).
+
+%%	strategy_add_vocabulary(+Strategy, +Vocabulary) is det.
+%
+%	Adds Vocabulary as an included scheme in Strategy.
+
+strategy_add_vocabulary(Strategy, Vocabulary) :-
+	rdf_assert(Strategy, amalgame:includes, Vocabulary, Strategy).
+
 %%	new_process(+Process, +Strategy, +Source, +Target, +Input,
 %%	+SecInputs, +Params, -NewFocus)
 %
diff --git a/lib/amalgame/json_util.pl b/lib/amalgame/json_util.pl
index 72901a2..9160765 100644
--- a/lib/amalgame/json_util.pl
+++ b/lib/amalgame/json_util.pl
@@ -4,12 +4,12 @@
 	      js_strategy_nodes/2
 	  ]).
 
-:- use_module(library(http/json)).
 :- use_module(library(semweb/rdf_db)).
 :- use_module(library(semweb/rdfs)).
 :- use_module(library(semweb/rdf_label)).
 :- use_module(cliopatria(components/label)).
 
+:- use_module(library(amalgame/ag_strategy)).
 :- use_module(library(amalgame/ag_stats)).
 :- use_module(library(amalgame/map)).
 :- use_module(library(amalgame/ag_stats)).
@@ -73,19 +73,6 @@ js_strategy_nodes(Strategy, Nodes) :-
 	maplist(node_data(Strategy), URIsUnique, Pairs),
 	dict_pairs(Nodes, nodes, Pairs).
 
-atomify_pairs([], []).
-atomify_pairs([K-Vs|Ts], [K-Va|Ta]) :-
-	atom_string(Va,Vs),!,
-	atomify_pairs(Ts, Ta).
-atomify_pairs([K-V|Ts], [K-V|Ta]) :-
-	atomify_pairs(Ts, Ta).
-
-atomify_dict(S,D) :-
-	dict_pairs(S, T, SPairs),
-	atomify_pairs(SPairs, APairs),
-	dict_pairs(D, T, APairs).
-
-
 amalgame_strategy_mappings(Strategy, Mappings, Options) :-
 	rdfs_individual_of(Strategy, amalgame:'AlignmentStrategy'),
 	findall(URI, (rdf(URI, rdf:type, _ ,Strategy),
@@ -114,7 +101,7 @@ graph_resource(Graph, R) :-
 graph_resource(Graph, R) :-
 	rdf(_,amalgame:target,R,Graph).
 graph_resource(Graph, R) :-
-	rdf(Graph, amalgame:includes, R).
+	strategy_vocabulary(Graph, R).
 
 node_data(Strategy, R, R-Props) :-
 	findall(Type-Value, node_prop(Strategy, R, Type, Value), Pairs),
diff --git a/lib/amalgame/util.pl b/lib/amalgame/util.pl
index c6b1255..102f21f 100644
--- a/lib/amalgame/util.pl
+++ b/lib/amalgame/util.pl
@@ -1,6 +1,5 @@
 :- module(ag_utils,
 	  [   mint_node_uri/3,
-	      amalgame_strategy_schemes/2,
 	      amalgame_alignable_schemes/1,
 
 	      assert_user_provenance/2,
@@ -17,7 +16,6 @@
 
 
 :- use_module(library(semweb/rdf_db)).
-:- use_module(library(semweb/rdfs)).
 :- use_module(user(user_db)).
 :- use_module(library(amalgame/voc_stats)).
 :- use_module(library(amalgame/rdf_util)).
@@ -86,15 +84,7 @@ assert_user_provenance(R, Graph) :-
 	rdf_assert(R, dcterms:date, literal(type(xsd:dateTime, Time)), Graph).
 
 
-%%	amalgame_strategy_schemes(?Strategy, ?Schemes)
-%
-%	Strategy is an amalgame alignment strategy and Schemes are the
-%       conceptSchemes that it includes.
 
-amalgame_strategy_schemes(Strategy, Schemes) :-
-	rdfs_individual_of(Strategy, amalgame:'AlignmentStrategy'),
-	findall(S,  rdf(Strategy, amalgame:includes, S), Schemes),
-	Schemes \== [].