annotation_service/commit

optimize rdf_get_annotation_target(-,+)

authorJacco van Ossenbruggen
Mon Jun 30 12:08:19 2014 +0200
committerJacco van Ossenbruggen
Mon Jun 30 12:08:19 2014 +0200
commit06323f9a17d3c0b7ea8260dca1c8c81569532e23
tree46320c0b581a16c7a4b9aadaaf88a1a87ba10fa0
parent2e1646f8b12da92446b4c11f6861652eb61b4010
Diff style: patch stat
diff --git a/lib/oa_annotation.pl b/lib/oa_annotation.pl
index aab1189..3eb6852 100644
--- a/lib/oa_annotation.pl
+++ b/lib/oa_annotation.pl
@@ -232,15 +232,24 @@ make_selector_node(Fragment, Shape, Graph, Node) :-
 rdf_get_annotation(Annotation, Props) :-
 	get_annotation_properties(Annotation, _Graph, Props).
 
-%%	rdf_get_annotation_target(+Annotation, ?TargetUri) is det.
+%%	rdf_get_annotation_target(+Annotation, -TargetUri) is semidet.
+%%	rdf_get_annotation_target(-Annotation, +TargetUri) is nondet.
 %
 %	Get Target uri, abstracting away OA selector stuff
 rdf_get_annotation_target(Annotation, TargetUri) :-
+	ground(Annotation), !,
 	rdf_has(Annotation, oa:hasTarget, TargetNode),
 	(   rdfs_individual_of(TargetNode, oa:'SpecificResource')
 	->  rdf_has(TargetNode, oa:hasSource, TargetUri)
 	;   TargetNode = TargetUri
 	).
+rdf_get_annotation_target(Annotation, TargetUri) :-
+	ground(TargetUri),
+	rdf_has(TargetNode, oa:hasSource, TargetUri),
+	rdf_has(Annotation, oa:hasTarget, TargetNode).
+rdf_get_annotation_target(Annotation, TargetUri) :-
+	ground(TargetUri),
+	rdf_has(Annotation, oa:hasTarget, TargetUri).
 
 rdf_get_annotation_by_tfa(Target, Field, Annotator, Graph, [annotation(Annotation)|Props]) :-
 	rdf_has_graph(Annotation, oa:hasTarget, Target, Graph),