foaf_user/commit

Avoid getting duplicate triples

authorJan Wielemaker
Fri Nov 19 15:41:16 2010 +0100
committerJan Wielemaker
Fri Nov 19 15:41:16 2010 +0100
commit8380b4de064b3df97a204bc33bd4e96a9470965c
tree74ab2aba0c4e3c617b29dad39b95ea686c7d4f41
parentb2c1a511362fe4d20c2aaa40e8070257cc28ca9b
Diff style: patch stat
diff --git a/applications/foaf_user_profile.pl b/applications/foaf_user_profile.pl
index 77efab6..a2ac70d 100644
--- a/applications/foaf_user_profile.pl
+++ b/applications/foaf_user_profile.pl
@@ -144,23 +144,34 @@ update_foaf_profile(Request) :-
 			]).
 
 
+:- rdf_meta
+	rdf_set_object(r,r,o,r).
+
 update_user(_, r=_) :- !.
 update_user(UserURI, P=Value) :-
 	rdf_equal(P, foaf:mbox), !,
-	rdf_retractall(UserURI, P, _),
 	(   sub_atom(Value, 0, _, _, 'mailto:')
 	->  MBOX = Value
 	;   atom_concat('mailto:', Value, MBOX)
 	),
 	foaf_mbox_hash(MBOX, Hash),
-	rdf_assert(UserURI, foaf:mbox_sha1sum, literal(Hash), UserURI),
-	rdf_assert(UserURI, P, MBOX, UserURI).
+	rdf_set_object(UserURI, foaf:mbox_sha1sum, literal(Hash), UserURI),
+	rdf_set_object(UserURI, P, MBOX, UserURI).
 update_user(UserURI, P=Value) :-
 	rdf_has(P, rdfs:isDefinedBy, foaf:''), !,
 	rdf_retractall(UserURI, P, _),
 	(   rdf_has(P, rdf:type, owl:'ObjectProperty')
-	->  rdf_assert(UserURI, P, Value, UserURI)
-	;   rdf_assert(UserURI, P, literal(Value), UserURI)
+	->  rdf_set_object(UserURI, P, Value, UserURI)
+	;   rdf_set_object(UserURI, P, literal(Value), UserURI)
 	).
 update_user(_, P=_) :-
 	existence_error(foaf_property, P).
+
+rdf_set_object(S,P,O,G) :-
+	rdf(S,P,O1,G), !,
+	(   O == O1
+	->  true
+	;   rdf_update(S,P,O1,G,object(O))
+	).
+rdf_set_object(S,P,O,G) :-
+	rdf_assert(S,P,O,G).