- if path = [] then []
- else
- let usek = get_prop_id path in
-
-let vvar = if attl = [] then "position"
- else List.hd attl
-in
-(*let (uril,atts) = List.split rset in*)
-let _ = print_string ("RELATION "^usek)
-and t = Unix.time () in
-let result =
- let c = pgc () in
- List.sort
-compare
-(List.fold_left (fun acc (uri,l) ->
- let tv = pgresult_to_string (c#exec ("select id from registry where uri='" ^ uri ^ "'"))
- in
- let qq = "select uri, context from t" ^ tv ^ " where prop_id='" ^ usek ^ "' order by uri asc"
- in
- let res = c#exec qq in
- (List.map
- (function [uri;context] -> (uri,[[(vvar,[context])]])
- | _ -> assert false )
- res#get_list) @ acc
- )
- [] rset
-)
-(*Come faccio a togliere i duplicati????*)
-
-
-in
-print_string (" = " ^ string_of_int (List.length result) ^ ": ") ;
-print_endline (string_of_float (Unix.time () -. t) ^ "s") ;
-flush stdout ;
- result
+ if path = [] then []
+ else
+ let usek = get_prop_id path in
+ let vvar = if attl = [] then "position"
+ else List.hd attl
+ in
+ let c = pgc () in
+ let rset_list = (* lista di singoletti:resource_set di un elemento *)
+ (List.fold_left (fun acc (uri,l) ->
+ let tv = pgresult_to_string (c#exec ("select id from registry where uri='" ^ uri ^ "'")) in
+ let qq = "select uri, context from t" ^ tv ^ " where prop_id='" ^ usek ^ "' order by uri asc" in
+ let res = c#exec qq in
+ (List.map
+ (function
+ [uri;context] -> [(uri,[[(vvar,[context])]])]
+ | _ -> assert false )
+ res#get_list) @ acc
+ )
+ [] rset
+ )
+ in
+ let rec edup = function
+ [] -> []
+ | rs1::tl -> union_ex rs1 (edup tl)
+ in
+ edup rset_list