rdf-mt/commit
Send supported datatypes down the system
author | Jan Wielemaker |
---|---|
Tue Dec 17 13:55:09 2013 +0100 | |
committer | Jan Wielemaker |
Tue Dec 17 13:55:09 2013 +0100 | |
commit | 1d88f7ef85c1cd58be4b71738f8edbeeee2b55e2 |
tree | 77070597cfeec8174b06be80b250aacda5170b75 |
parent | c57580e8bc7333dafa9254627a49f66ab733dcfa |
Diff style: patch stat
diff --git a/config-available/rdf-mt.pl b/config-available/rdf-mt.pl index 22ebfc3..d923c7e 100644 --- a/config-available/rdf-mt.pl +++ b/config-available/rdf-mt.pl @@ -35,6 +35,7 @@ list_test/0, list_data/0, + list_entailed_data/0, list_result/0 ]). :- use_module(library(debug)). @@ -112,7 +113,7 @@ run_test(Test) :- load_test_data(Test), test_entailment_properties(Test, Props), run_entailment(Props), - assess_result(Test). + assess_result(Test, Props). run_test(Name) :- mf_rdf(Test, mf:name, literal(Name)), !, run_test(Test). @@ -187,22 +188,22 @@ run_entailment(Props) :- debug(mt(entailment), 'Entailment using ~q', [Props]), compute_closure(Props.regime, Props.put(graph, data)). -%% assess_result(Test) :- +%% assess_result(+Test, +Properties) :- % % Assess the result :- meta_predicate assert_result(1, +). -assess_result(Test) :- +assess_result(Test, Props) :- mf_rdf(Test, rdf:type, mf:'PositiveEntailmentTest'), !, debug(mt(result), 'Evaluating positive entailment test', []), - assert_result(assess_result(positive), Test). -assess_result(Test) :- + assert_result(assess_result(positive, Props), Test). +assess_result(Test, Props) :- mf_rdf(Test, rdf:type, mf:'NegativeEntailmentTest'), !, debug(mt(result), 'Evaluating negative entailment test', []), - assert_result(assess_result(negative), Test). -assess_result(_Test) :- + assert_result(assess_result(negative, Props), Test). +assess_result(_Test, _) :- assertion(false). assert_result(Goal, Test) :- @@ -217,37 +218,37 @@ assert_result(Goal, Test) :- debug(mt(failed), 'FAILED: ~q', [Text]) ). -%% assess_result(+PosNeg, +Test) +%% assess_result(+Props, +PosNeg, +Test) % % True if the test has passed. -assess_result(positive, Test) :- +assess_result(positive, Props, Test) :- false_result_test(Test), !, - \+ consistent_graph(data). -assess_result(positive, Test) :- !, + \+ consistent_graph(data, Props). +assess_result(positive, Props, Test) :- !, load_test_result(Test), - graph_value_list(data, Data), - graph_value_list(result, Result), + graph_value_list(data, Data, Props), + graph_value_list(result, Result, Props), simply_entails(Data, Result). -assess_result(negative, Test) :- +assess_result(negative, Props, Test) :- false_result_test(Test), !, - consistent_graph(data). -assess_result(negative, Test) :- + consistent_graph(data, Props). +assess_result(negative, Props, Test) :- load_test_result(Test), - \+ ( graph_value_list(data, Data), - graph_value_list(result, Result), + \+ ( graph_value_list(data, Data, Props), + graph_value_list(result, Result, Props), simply_entails(Data, Result) ). -%% graph_value_list(+GraphName, -Triples) is semidet. +%% graph_value_list(+GraphName, -Triples, +Props) is semidet. % % True when Triples is a list of rdf(S,P,O) terms, where all % literals are in canonical value space representation. Fails if % some literal is inconsistent. -graph_value_list(Graph, ValueListGraph) :- +graph_value_list(Graph, ValueListGraph, Props) :- graph_list(Graph, List), - graph_value_space(List, ValueListGraph). + graph_value_space(List, ValueListGraph, Props). /******************************* diff --git a/lib/rdf_mt/graph_consistency.pl b/lib/rdf_mt/graph_consistency.pl index 6d001ad..d3956db 100644 --- a/lib/rdf_mt/graph_consistency.pl +++ b/lib/rdf_mt/graph_consistency.pl @@ -27,8 +27,9 @@ */ :- module(graph_consistency, - [ consistent_graph/1, % +GraphName - graph_value_space/2, % +Graph, -ValueSpaceGraph + [ consistent_graph/2, % +GraphName, +Props + graph_value_space/3, % +Graph, -ValueSpaceGraph, +Props + literal_value/3, % +Literal, -Canonical, +Props literal_value/2 % +Literal, -Canonical ]). :- use_module(library(apply)). @@ -36,26 +37,26 @@ :- use_module(library(semweb/rdf_db)). -%% consistent_graph(+Name) +%% consistent_graph(+Name, +Props) % % True if the named graph Name does not contain any % inconsistencies. -consistent_graph(Graph) :- - consistent_literals(Graph), - consistent_datatype_declarations(Graph). +consistent_graph(Graph, Props) :- + consistent_literals(Graph, Props), + consistent_datatype_declarations(Graph, Props). -consistent_literals(Graph) :- +consistent_literals(Graph, Props) :- forall(( rdf(_,_,L,Graph), L = literal(_) ), - literal_value(L, _)). + literal_value(L, _, Props)). -consistent_datatype_declarations(Graph) :- +consistent_datatype_declarations(Graph, _) :- rdf(S,P,O,Graph), invalid_datatype_assertion(S,P,O), !, fail. -consistent_datatype_declarations(_). +consistent_datatype_declarations(_, _). %% invalid_datatype_assertion(+S,+P,+O) is semidet. % @@ -91,6 +92,7 @@ xsd_subtype_of(_,_). %% literal_value(+Literal, -Value) is semidet. +%% literal_value(+Literal, -Value, +Props) is semidet. % % True when Value is the canonical representation of Literal in % the value space. Defined values are: @@ -103,19 +105,26 @@ xsd_subtype_of(_,_). % * type(Type, String) literal_value(literal(Data), Value) :- - literal_value2(Data, Value). + literal_value2(Data, Value, _{dummy:1}). % BUG: loops +literal_value(literal(Data), Value, Props) :- + literal_value2(Data, Value, Props). -literal_value2(type(Type, String), Value) :- - xsdp_numeric_uri(Type, Base), !, + +literal_value2(type(Type, String), Value, Props) :- + xsdp_numeric_uri(Type, Base), + \+ ( rdf_global_id(xsd:Local, Type), + get_dict(Local, Props, false) + ), !, numeric_value(Base, String, Value). -literal_value2(type(Type, String), boolean(Value)) :- +literal_value2(type(Type, String), boolean(Value), Props) :- + \+ get_dict(Props, boolean, false), rdf_equal(Type, xsd:boolean), !, bool(String, Value). -literal_value2(type(Type, String), type(Type, String)) :- !. -literal_value2(lang(Lang,String), lang(CanonicalLang, String)) :- !, +literal_value2(type(Type, String), type(Type, String), _) :- !. +literal_value2(lang(Lang,String), lang(CanonicalLang, String), _) :- !, downcase_atom(Lang, CanonicalLang). -literal_value2(Plain, type(XsdString, Plain)) :- +literal_value2(Plain, type(XsdString, Plain), _) :- rdf_equal(XsdString, xsd:string). numeric_value(float, String, float(Value)) :- @@ -145,16 +154,16 @@ bool('0', false). bool('1', true). -%% graph_value_space(+Graph, -ValueSpacedGraph) is semidet. +%% graph_value_space(+Graph, -ValueSpacedGraph, Props) is semidet. % % Convert a graph into a its canonical value space. Fails % if some triple has an inconsistent literal. -graph_value_space(Graph, ValueSpaceGraph) :- - maplist(triple_value_space, Graph, ValueSpaceGraph0), +graph_value_space(Graph, ValueSpaceGraph, Props) :- + maplist(triple_value_space(Props), Graph, ValueSpaceGraph0), sort(ValueSpaceGraph0, ValueSpaceGraph). -triple_value_space(rdf(S,P,L0), rdf(S,P,L)) :- +triple_value_space(Props, rdf(S,P,L0), rdf(S,P,L)) :- L0 = literal(_), !, - literal_value(L0, L). -triple_value_space(Triple, Triple). + literal_value(L0, L, Props). +triple_value_space(_, Triple, Triple).