open Mathql_semantics;; (* prende una lista di uri (contenente alternativamente uri e pos) e costruisce una lista di attributed_uri *) let rec attl uril svar = match uril with | head::tail -> let suri = List.hd uril in let uril_tl = List.tl uril in {uri = suri; attributes = [(svar, (List.hd uril_tl))]; extra = ""} :: attl (List.tl uril_tl) svar (* NON SONO SICURO DI AVER COSTRUITO BENE LA STRUTTURA DATI!!!!*) | [] -> [] (* prende un attributed_uri e una svar e restituisce la lista degli attributed_uri (backward o forward in base al parametro "d") associando la posizione alla var passata *) let muse svar d path = let dir = match d with "F" -> "/home/projects/helm/metadata/create4/forward" | _ -> "/home/projects/helm/metadata/create4/backward" in let dtag = match d with "F" -> "refObj" | _ -> "backPointer" in let xq ="namespace h=\"http://www.cs.unibo.it/helm/schemas/mattone.rdf#\" namespace rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" for $i in document(" ^ "\"" ^ dir ^ path.uri ^ "\"" ^ ")//rdf:RDF//h:Object//h:" ^ dtag ^ "//h:Occurrence return ($i//h:occurrence, $i//h:position)" in print_endline xq; let uril = Toputils.eval_query_string xq in (* e' una lista di liste di stringhe*) let hd_uril = List.hd uril in(*prendo l'elemento in testa che e' quello che contiene la lista di uri*) attl hd_uril svar (* adesso dalla lista di uri(hd_uril) costruisco una lista di attributed_uri*) (* prende una lista di uri (Mathql_semantics.result), una variabile (a cui associare la posizione), e la direzione (forward o backward) e per ogni uri chiama la muse *) let use_ex ulist svar d = List.concat (List.map (muse svar d) ulist) ;;