open Dbconn;;
open Utility;;
-open MathQL;;
-
-(*
- * implementazione della funzione NAME
- *
- * esempio:
- * name "cic:/Algebra/CC_Props/CC_CauchySeq.ind#xpointer(1/1/1)" = CC_CauchySeq
- *)
-let func_name value =
- try (
- let i = Str.search_forward (Str.regexp "[^/]*\.") value 0 in
- let s = Str.matched_string value in
- let retVal = Str.string_before s ((String.length s) - 1) in
- retVal
- ) with
- Not_found -> ""
-;;
-
-(*
- *
- *)
-let func_theory value =
- ""
-;;
+open Intersect;;
(*
* implementazione delle funzioni dublin core
*)
-let func_dc (value, name) =
- let c = pgc ()
- and p = helm_property_id name in
- pgresult_to_string (c#exec ("select t" ^ p ^ ".att1 from t" ^ p ^ " where " ^ "t" ^ p ^ ".att0 = '" ^ value ^ "'"))
+let rec func_dc tab outv inv = function
+ [] -> []
+ | s::tl -> let res =
+ let c = pgc () in
+ let q = ("select " ^ tab ^ "." ^ outv ^ " from " ^ tab ^ " where " ^ tab ^ "." ^ inv ^ " = '" ^ s ^ "'") in
+ pgresult_to_string_list (c#exec q)
+ in
+ append (res,(func_dc tab outv inv tl))
;;
(*
*
*)
-let apply_func f value =
+let fun_ex f value =
match f with
- MQName -> func_name value
- | MQTheory -> func_theory value
- | MQTitle -> func_dc (value, "title")
- | MQContributor -> func_dc (value, "contributor")
- | MQCreator -> func_dc (value, "creator")
- | MQPublisher -> func_dc (value, "publisher")
- | MQSubject -> func_dc (value, "subject")
- | MQDescription -> func_dc (value, "description")
- | MQDate -> func_dc (value, "date")
- | MQType -> func_dc (value, "type")
- | MQFormat -> func_dc (value, "format")
- | MQIdentifier -> func_dc (value, "identifier")
- | MQLanguage -> func_dc (value, "language")
- | MQRelation -> func_dc (value, "relation")
- | MQSource -> func_dc (value, "source")
- | MQCoverage -> func_dc (value, "coverage")
- | MQRights -> func_dc (value, "rights")
- | MQInstitution -> func_dc (value, "institution")
- | MQContact -> func_dc (value, "contact")
- | MQFirstVersion -> func_dc (value, "firstversion")
- | MQModified -> func_dc (value, "modified")
+ "name" -> func_dc "names" "name" "uri" value
+ | "reference" -> func_dc "names" "uri" "name" value
+ | _ -> []
;;
open Context;;
open Diff;;
open Relation;;
-
+open Func;;
let init connection_param = Dbconn.init connection_param
(* valuta una MathQL.set_exp e ritorna un MathQL.resource_set *)
let rec exec_set_exp c = function
- |MathQL.SVar svar -> List.assoc svar c.svars
- |MathQL.RVar rvar -> [List.assoc rvar c.rvars]
+ MathQL.SVar svar -> List.assoc svar c.svars
+ | MathQL.RVar rvar -> [List.assoc rvar c.rvars]
| MathQL.Ref vexp -> List.map (fun s -> (s,[])) (exec_val_exp c vexp)
| MathQL.Intersect (sexp1, sexp2) ->
let before = Sys.time() in
(* valuta una MathQL.boole_exp e ritorna un boole *)
and exec_boole_exp c = function
- | MathQL.False -> false
+ MathQL.False -> false
| MathQL.True -> true
| MathQL.Not x -> not (exec_boole_exp c x)
| MathQL.And (x, y) -> (exec_boole_exp c x) && (exec_boole_exp c y)
(* valuta una MathQL.val_exp e ritorna un MathQL.value *)
and exec_val_exp c = function
- | MathQL.Const x -> let
+ MathQL.Const x -> let
ol = List.sort compare x in
let rec edup = function
| MathQL.VVar s -> List.assoc s c.vvars
| MathQL.RefOf sexp -> List.map (fun (s,_) -> s) (exec_set_exp c sexp)
-
+ | MathQL.Fun (s, vexp) -> fun_ex s (exec_val_exp c vexp)
| _ -> assert false