amalgame/commit
IMPROVED: handle derived concept schemes
author | Jacco van Ossenbruggen |
---|---|
Wed Feb 19 17:58:33 2020 +0100 | |
committer | Jacco van Ossenbruggen |
Wed Feb 19 17:58:33 2020 +0100 | |
commit | 4ec400d8ed37777511f7623168b87073590aa483 |
tree | bb278ba0fb54428ab80c8e4d36763a9138584946 |
parent | f68378d44ea520a36a3f1163f0204a2b1fcff120 |
Diff style: patch stat
diff --git a/api/node_info.pl b/api/node_info.pl index 8cc8ae1..1a9783e 100644 --- a/api/node_info.pl +++ b/api/node_info.pl @@ -18,6 +18,7 @@ :- use_module(library(amalgame/amalgame_modules)). :- use_module(library(amalgame/ag_strategy)). :- use_module(library(amalgame/ag_stats)). +:- use_module(library(amalgame/vocabulary)). :- use_module(library(amalgame/util)). :- use_module(components(label)). % we need rdf_link//1 from this module @@ -202,7 +203,7 @@ amalgame_info(URL, Strategy, Stats) :- ], Stats). amalgame_info(Scheme, Strategy, Stats) :- - skos_is_vocabulary(Scheme), + amalgame_alignable_scheme(Scheme), !, node_stats(Strategy, Scheme, NStats, []), option(structure(DDict), NStats, _{}), diff --git a/api/strategy_viz.pl b/api/strategy_viz.pl index 113129d..bf78438 100644 --- a/api/strategy_viz.pl +++ b/api/strategy_viz.pl @@ -15,6 +15,7 @@ :- use_module(library(amalgame/ag_stats)). :- use_module(library(amalgame/ag_evaluation)). :- use_module(library(amalgame/map)). +:- use_module(library(amalgame/vocabulary)). :- http_handler(amalgame(api/strategy_viz), http_strategy_viz, []). @@ -171,7 +172,7 @@ amalgame_shape(R, [shape(ellipse), fillcolor('#EEEEEE'), fontsize(10)]) :- atom(R), - skos_is_vocabulary(R). + amalgame_alignable_scheme(R). amalgame_shape(R, [shape(ellipse), fillcolor(Color), style(filled), @@ -224,7 +225,7 @@ amalgame_label(Strategy, Resource, Lang, MaxLen, Label) :- ). stats_label_list(Strategy, Resource, [Count]) :- - skos_is_vocabulary(Resource), + amalgame_alignable_scheme(Resource), node_stats(Strategy, Resource, Stats, [compute(false)]), option(totalCount(Count), Stats), !. diff --git a/config-available/ag_strat_prov_graph_viz.pl b/config-available/ag_strat_prov_graph_viz.pl index 8183c0c..7fb34e5 100644 --- a/config-available/ag_strat_prov_graph_viz.pl +++ b/config-available/ag_strat_prov_graph_viz.pl @@ -6,7 +6,7 @@ :- use_module(library(semweb/rdfs)). :- use_module(library(semweb/rdf_abstract)). -:- use_module(library(skos/util)). +:- use_module(library(amalgame/vocabulary)). :- rdf_meta context_triple(r, t), @@ -16,7 +16,7 @@ cliopatria:context_graph(URI, RDF) :- ( rdfs_individual_of(URI, prov:'Entity') ; rdfs_individual_of(URI, prov:'Activity') ; rdfs_individual_of(URI, prov:'Agent') - ; skos_is_vocabulary(URI) + ; amalgame_alignable_scheme(URI) ; rdfs_individual_of(URI, amalgame:'Entity') ), findall(T, prov_context_triple(URI, T), RDF0), @@ -115,5 +115,5 @@ cliopatria:node_shape(URI, Shape, _Options) :- % Vocabulary (up)loaded or made with amalgame cliopatria:node_shape(URI, Shape, _Options) :- - skos_is_vocabulary(URI), + amalgame_alignable_scheme(URI), Shape = [shape(box3d),style(filled),fillcolor('#AAAAAA')]. diff --git a/lib/amalgame/ag_provenance.pl b/lib/amalgame/ag_provenance.pl index 6117265..d95405e 100644 --- a/lib/amalgame/ag_provenance.pl +++ b/lib/amalgame/ag_provenance.pl @@ -20,9 +20,7 @@ :- use_module(user(user_db)). :- use_module(library(version)). -:- use_module(library(prov_schema)). -:- use_module(library(skos/util)). - +:- use_module(vocabulary). :- use_module(ag_stats). :- use_module(util). @@ -80,7 +78,7 @@ prov_ensure_entity(_S, Entity, Graph) :- rdf(Entity, 'http://usefulinc.com/ns/doap#revision' , _, Graph), !. % prov already recorded prov_ensure_entity(Strategy, Entity, Graph) :- - skos_is_vocabulary(Entity), + amalgame_alignable_scheme(Entity), node_stats(Strategy, Entity, Stats, []), option(revision(Revision), Stats), prov_named_graphs(Repo, Graph), @@ -389,7 +387,7 @@ assert_counts([URI|Tail], Strategy, ProvGraph) :- assert_counts(Tail, Strategy, ProvGraph). assert_count(VocUri, Strategy, ProvGraph) :- - skos_is_vocabulary(VocUri), + amalgame_alignable_scheme(VocUri), node_stats(Strategy, VocUri, Stats, []), option(totalCount(Count), Stats), rdf_retractall(VocUri, amalgame:totalCount, _, ProvGraph), diff --git a/lib/amalgame/ag_publish.pl b/lib/amalgame/ag_publish.pl index 10f9d8a..473380d 100644 --- a/lib/amalgame/ag_publish.pl +++ b/lib/amalgame/ag_publish.pl @@ -12,8 +12,6 @@ :- use_module(library(semweb/rdf_label)). :- use_module(library(semweb/rdf_turtle_write)). -:- use_module(library(skos/util)). - :- use_module(library(amalgame/ag_provenance)). :- use_module(library(amalgame/ag_evaluation)). :- use_module(library(amalgame/ag_stats)). @@ -287,14 +285,14 @@ select_schemes_to_be_saved(Strategy, Schemes, Options) :- option(status(Status), Options, all), ( Status == all -> findall(Scheme, - ( skos_is_vocabulary(Scheme), + ( amalgame_alignable_scheme(Scheme), rdf(Scheme, rdf:type, _, Strategy), node_stats(Strategy, Scheme, Stats, [compute(true)]), \+ option(totalCount(0), Stats) ), Schemes) ; findall(Scheme, - ( skos_is_vocabulary(Scheme), + ( amalgame_alignable_scheme(Scheme), rdf(Scheme, rdf:type, _, Strategy), rdf(Scheme, amalgame:status, Status), node_stats(Strategy, Scheme, Stats, [compute(true)]), diff --git a/lib/amalgame/ag_stats.pl b/lib/amalgame/ag_stats.pl index dd1fea0..e29c006 100644 --- a/lib/amalgame/ag_stats.pl +++ b/lib/amalgame/ag_stats.pl @@ -12,7 +12,6 @@ :- use_module(library(semweb/rdf_db)). :- use_module(library(semweb/rdfs)). -:- use_module(library(skos/util)). :- use_module(library(stat_lists)). :- use_module(library(amalgame/ag_strategy)). @@ -30,7 +29,7 @@ node_stats(Strategy, Node, Stats, Options) :- !, ( rdfs_individual_of(Node, amalgame:'Mapping') -> node_counts(mapping, Node, Strategy, Stats, Options) - ; skos_is_vocabulary(Node) + ; amalgame_alignable_scheme(Node) -> node_counts(scheme, Node, Strategy, Stats, Options) ; Stats = [] ). diff --git a/lib/amalgame/caching.pl b/lib/amalgame/caching.pl index f3120ba..34f509f 100644 --- a/lib/amalgame/caching.pl +++ b/lib/amalgame/caching.pl @@ -22,10 +22,9 @@ :- use_module(library(semweb/rdf_db)). :- use_module(library(semweb/rdfs)). -:- use_module(library(skos/util)). - :- use_module(ag_provenance). :- use_module(map). +:- use_module(vocabulary). :- use_module(ag_stats). :- use_module(scheme_stats). @@ -89,7 +88,7 @@ cache_result(_ExecTime, Id, Strategy, Result) :- assert(stats_cache(Id-Strategy, Stats)). cache_result(_ExecTime, Id, Strategy, Result) :- - skos_is_vocabulary(Id), + amalgame_alignable_scheme(Id), !, flush_expand_cache(Id, Strategy), assert(expand_cache(Id-Strategy, Result)), @@ -346,7 +345,7 @@ mapping_to_delete(Id, Strategy) :- del_materialized_vocs(Strategy) :- findall(Voc, - ( skos_is_vocabulary(Voc), + ( amalgame_alignable_scheme(Voc), rdf_graph(Voc), rdf_has(Voc, amalgame:wasGeneratedBy, Process, RP), rdf(Voc, RP, Process, Strategy) diff --git a/lib/amalgame/expand_graph.pl b/lib/amalgame/expand_graph.pl index d66978c..ca67e87 100644 --- a/lib/amalgame/expand_graph.pl +++ b/lib/amalgame/expand_graph.pl @@ -17,6 +17,7 @@ :- use_module(library(amalgame/caching)). :- use_module(library(amalgame/map)). +:- use_module(library(amalgame/vocabulary)). :- use_module(library(amalgame/ag_provenance)). :- use_module(library(amalgame/amalgame_modules)). @@ -113,7 +114,7 @@ expand_node_(Strategy, Id, Result) :- ( rdfs_individual_of(Id, amalgame:'Mapping') -> select_result_mapping(Id, ProcessResult, OutputType, Result) - ; skos_is_vocabulary(Id) + ; amalgame_alignable_scheme(Id) -> select_result_scheme(Id, ProcessResult, OutputType, Result) ; Result = error(Id) ). @@ -123,7 +124,7 @@ expand_node_(Strategy, Id, Result) :- % Cache miss, we need to do the work ... ( rdfs_individual_of(Id, amalgame:'Mapping') -> expand_mapping(Strategy, Id, Result) - ; skos_is_vocabulary(Id) + ; amalgame_alignable_scheme(Id) -> expand_vocab(Strategy, Id, Result) ; Result=error(Id) ). diff --git a/lib/amalgame/vocabulary.pl b/lib/amalgame/vocabulary.pl index cf27a23..34aba40 100644 --- a/lib/amalgame/vocabulary.pl +++ b/lib/amalgame/vocabulary.pl @@ -2,6 +2,7 @@ [ vocab_member/2, all_vocab_members/2, amalgame_alignable_schemes/1, + amalgame_alignable_scheme/1, amalgame_vocabulary_languages/1, materialize_scheme_graph/2 ]). @@ -29,7 +30,7 @@ % % True if C is part of Vocabulary. % -% @param VocabDef is a URI of a skos:ConceptScheme or a definition +% @param VocabDef is a URI of a skos:ConceptScheme or a definitionamlgame_alignable_schemeamlgame_alignable_schemeamlgame_alignable_scheme % of a subset thereof. vocab_member(C, vocspec(Spec)) :- @@ -211,29 +212,49 @@ materialize_scheme_graph(Assoc, Options) :- materialize_concept(Concept, Graph) :- rdf_assert(Concept, skos:inScheme, Graph, Graph). +%! amalgame_alignable_scheme(Scheme) is nondet. +% +% Scheme is unified with a derived (implicitly) defined +% skos:ConceptScheme or an explicitly defined, non-empty +% skos:ConceptScheme. + +amalgame_alignable_scheme(S) :- + explicit_non_empty_scheme(S). + +amalgame_alignable_scheme(S) :- + derived_scheme(S). + %% amalgame_alignable_schemes(-Schemes) is det. % % Schemes is unified with a sorted list of urls of -% skos:ConceptSchemes or other alignable objects. +% alignable objects. % % Sorting is based on case insensitive scheme labels. amalgame_alignable_schemes(Schemes) :- - findall(S, alignable_scheme(S), All), + findall(S, amalgame_alignable_scheme(S), All0), + sort(All0, All), maplist(scheme_label, All, Labeled), keysort(Labeled, Sorted), pairs_values(Sorted, Schemes). -alignable_scheme(S) :- +derived_scheme(Scheme) :- + skos_in_scheme(Scheme, _Concept), + \+ skos_is_vocabulary(Scheme). + +explicit_non_empty_scheme(S) :- skos_is_vocabulary(S), skos_in_scheme_chk(S, _). + skos_in_scheme_chk(Scheme, Concept) :- skos_in_scheme(Scheme, Concept), !. scheme_label(URI, Key-URI) :- rdf_graph_label(URI, CasedKey), downcase_atom(CasedKey, Key). + + amalgame_vocabulary_languages(Languages) :- findall(Strategy-Schemes, strategy_vocabularies(Strategy, Schemes),