X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FsearchEngine%2FsearchEngine.ml;h=6e3b846d2ea3ff6d6db6450e15e6aaabcc7b5ab8;hb=0e74e8e94eada756157addce67e4adeb8dff1feb;hp=ca507663511a7696d2b182064c3ba4ab94d783cb;hpb=65e3c9976212e04a4678ff9ce9e3c2f436d06d33;p=helm.git diff --git a/helm/searchEngine/searchEngine.ml b/helm/searchEngine/searchEngine.ml index ca5076635..6e3b846d2 100644 --- a/helm/searchEngine/searchEngine.ml +++ b/helm/searchEngine/searchEngine.ml @@ -23,6 +23,11 @@ * http://cs.unibo.it/helm/. *) +module T = MQGTypes +module U = MQGUtil +module G = MQueryGenerator +module C = MQIConn + open Http_types ;; let debug = true;; @@ -72,41 +77,29 @@ let int_of_string' = function failwith ("Can't parse an int option from string: " ^ s) ;; -let is_concl_pos pos = - pos = "http://www.cs.unibo.it/helm/schemas/schema-helm#MainConclusion" - or - pos = "http://www.cs.unibo.it/helm/schemas/schema-helm#InConclusion" -;; - -let is_main_pos pos = - pos = "http://www.cs.unibo.it/helm/schemas/schema-helm#MainConclusion" - or - pos = "http://www.cs.unibo.it/helm/schemas/schema-helm#MainHypothesis" -;; - (* HTML pretty printers for mquery_generator types *) -let html_of_r_obj (uri, pos, depth) = +let html_of_r_obj (pos, uri) = sprintf "%s%s%s" - uri (Str.string_after pos ((String.rindex pos '#') + 1)) - (if is_main_pos pos then + uri (U.text_of_position pos) + (if U.is_main_position pos then sprintf "" - (match depth with Some i -> string_of_int i | None -> "") + (U.text_of_depth pos "") else "") ;; -let html_of_r_rel (pos, depth) = +let html_of_r_rel pos = sprintf "%s" - pos (match depth with Some i -> string_of_int i | None -> "") + (U.text_of_position (pos:>T.full_position)) (U.text_of_depth (pos:>T.full_position) "") ;; -let html_of_r_sort (pos, depth, sort) = +let html_of_r_sort (pos, sort) = sprintf "%s%s" - sort pos (match depth with Some i -> string_of_int i | None -> "") + (U.text_of_sort sort) (U.text_of_position (pos:>T.full_position)) (U.text_of_depth (pos:>T.full_position) "") ;; (** pretty print a MathQL query result to an HELM theory file *) @@ -184,37 +177,25 @@ let contype = "Content-Type", "text/html";; (* SEARCH ENGINE functions *) -let whole_statement_universe = - ["http://www.cs.unibo.it/helm/schemas/schema-helm#MainConclusion" ; - "http://www.cs.unibo.it/helm/schemas/schema-helm#InConclusion" ; - "http://www.cs.unibo.it/helm/schemas/schema-helm#MainHypothesis" ; - "http://www.cs.unibo.it/helm/schemas/schema-helm#InHypothesis"] -;; - -let only_conclusion_universe = - ["http://www.cs.unibo.it/helm/schemas/schema-helm#MainConclusion" ; - "http://www.cs.unibo.it/helm/schemas/schema-helm#InConclusion"] -;; - -let refine_constraints (constr_obj, constr_rel, constr_sort) = +let refine_constraints ((constr_obj:T.r_obj list), (constr_rel:T.r_rel list), (constr_sort:T.r_sort list)) = function "/searchPattern" -> - whole_statement_universe, + U.universe_for_search_pattern, (constr_obj, constr_rel, constr_sort), (Some constr_obj, Some constr_rel, Some constr_sort) | "/matchConclusion" -> let constr_obj' = List.map - (function (uri,pos,_) -> (uri,pos,None)) + (function (pos, uri) -> U.set_full_position pos None, uri) (List.filter - (function (uri,pos,depth) as constr -> is_concl_pos pos) + (function (pos, _) -> U.is_conclusion pos) constr_obj) in - only_conclusion_universe, + U.universe_for_match_conclusion, (*CSC: we must select the must constraints here!!! *) (constr_obj',[],[]),(Some constr_obj', None, None) | _ -> assert false -in +;; let get_constraints term = function @@ -225,25 +206,16 @@ let get_constraints term = | _ -> raise NotAnInductiveDefinition in let constr_obj = - [uri,"http://www.cs.unibo.it/helm/schemas/schema-helm#InHypothesis", - None ; - uri,"http://www.cs.unibo.it/helm/schemas/schema-helm#MainHypothesis", - Some 0 - ] + [(`InHypothesis, uri); (`MainHypothesis (Some 0), uri)] in - let constr_rel = - ["http://www.cs.unibo.it/helm/schemas/schema-helm#MainConclusion", - None] in - let constr_sort = - ["http://www.cs.unibo.it/helm/schemas/schema-helm#MainHypothesis", - Some 1, "Prop"] - in - whole_statement_universe, + let constr_rel = [`MainConclusion None] in + let constr_sort = [(`MainHypothesis (Some 1), T.Prop)] in + U.universe_for_search_pattern, (constr_obj, constr_rel, constr_sort), (None,None,None) | req_path -> let must = MQueryLevels2.get_constraints term in refine_constraints must req_path -in +;; (* format: @@ -270,19 +242,19 @@ let add_user_constraints ~constraints (* to be used on "obj" *) let add_user_must33 user_must must = List.map2 - (fun (b, i) (p1, p2, p3) -> if b then (p1, p2, i) else (p1, p2, None)) + (fun (b, i) (p, u) -> U.set_full_position p (if b then i else None), u) user_must must in (* to be used on "rel" *) let add_user_must22 user_must must = List.map2 - (fun (b, i) (p1, p2) -> if b then (p1, i) else (p1, None)) + (fun (b, i) p -> U.set_main_position p (if b then i else None)) user_must must in (* to be used on "sort" *) let add_user_must32 user_must must = List.map2 - (fun (b, i) (p1, p2, p3) -> if b then (p1, i, p3) else (p1, None, p3)) + (fun (b, i) (p, s) -> U.set_main_position p (if b then i else None), s) user_must must in match Pcre.split ~pat:":" constraints with @@ -318,20 +290,20 @@ let callback (req: Http_types.request) outchan = debug_print (sprintf "Received request: %s" req#path); (match req#path with | "/execute" -> - let mqi_handle = MQIConn.init mqi_flags debug_print in + let mqi_handle = C.init mqi_flags debug_print in let query_string = req#param "query" in let lexbuf = Lexing.from_string query_string in let query = MQueryUtil.query_of_text lexbuf in let result = MQueryInterpreter.execute mqi_handle query in let result_string = pp_result result in - MQIConn.close mqi_handle; + C.close mqi_handle; Http_daemon.respond ~body:result_string ~headers:[contype] outchan | "/locate" -> - let mqi_handle = MQIConn.init mqi_flags debug_print in + let mqi_handle = C.init mqi_flags debug_print in let id = req#param "id" in - let query = MQueryGenerator.locate id in + let query = G.locate id in let result = MQueryInterpreter.execute mqi_handle query in - MQIConn.close mqi_handle; + C.close mqi_handle; Http_daemon.respond ~headers:[contype] ~body:(pp_result result) outchan | "/getpage" -> (* TODO implement "is_permitted" *) @@ -388,7 +360,7 @@ let callback (req: Http_types.request) outchan = | "/searchPattern" | "/matchConclusion" | "/locateInductivePrinciple" -> - let mqi_handle = MQIConn.init mqi_flags debug_print in + let mqi_handle = C.init mqi_flags debug_print in let term_string = req#param "term" in let lexbuf = Lexing.from_string term_string in let (context, metasenv) = ([], []) in @@ -613,7 +585,7 @@ List.iter (fun u -> prerr_endline ("<" ^ Netencoding.Url.decode u ^ ">")) tail; raise Chat_unfinished) in let query = - MQueryGenerator.query_of_constraints (Some universe) must'' only' + G.query_of_constraints (Some universe) must'' only' in let results = MQueryInterpreter.execute mqi_handle query in Http_daemon.send_basic_headers ~code:200 outchan ; @@ -651,7 +623,7 @@ List.iter (fun u -> prerr_endline ("<" ^ Netencoding.Url.decode u ^ ">")) tail; ~headers:[contype] ~body:"some implicit variables are still unistantiated :-(" outchan); - MQIConn.close mqi_handle + C.close mqi_handle | invalid_request -> Http_daemon.respond_error ~status:(`Client_error `Bad_request) outchan); debug_print (sprintf "%s done!" req#path)