rdf-mt/commit

Send supported datatypes down the system

authorJan Wielemaker
Tue Dec 17 13:55:09 2013 +0100
committerJan Wielemaker
Tue Dec 17 13:55:09 2013 +0100
commit1d88f7ef85c1cd58be4b71738f8edbeeee2b55e2
tree77070597cfeec8174b06be80b250aacda5170b75
parentc57580e8bc7333dafa9254627a49f66ab733dcfa
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).