+
+let bodyuri_of_uri uri =
+ let struri = string_of_uri uri in
+ if Str.string_match (Str.regexp ".*\\.con$") (string_of_uri uri) 0 then
+ let newuri = Array.copy uri in
+ newuri.(Array.length uri - 2) <- struri ^ ".body" ;
+ Some newuri
+ else
+ None
+;;
+
+let innertypesuri_of_uri uri =
+ let cicuri = cicuri_of_uri uri in
+ let newuri = Array.copy cicuri in
+ newuri.(Array.length cicuri - 2) <- (string_of_uri cicuri) ^ ".types" ;
+ newuri
+;;
+
+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 ^ ")"
+