+
+type uriref = uri * (int list)
+
+let string_of_uriref (uri, fi) =
+ let str = string_of_uri uri in
+ let xp t = "#xpointer(1/" ^ string_of_int (t + 1) in
+ match fi with
+ | [] -> str
+ | [t] -> str ^ xp t ^ ")"
+ | t :: c :: _ -> str ^ xp t ^ "/" ^ string_of_int c ^ ")"
+
+let compare u1 u2 =
+ let su1 = string_of_uri u1 in
+ let su2 = string_of_uri u2 in
+ Pervasives.compare su1 su2
+
+module OrderedUri =
+struct
+ type t = uri
+ let compare = compare (* the one above, not Pervasives.compare *)
+end
+
+module UriSet = Set.Make (OrderedUri)
+