(* Copyright (C) 2000, HELM Team. * * This file is part of HELM, an Hypertextual, Electronic * Library of Mathematics, developed at the Computer Science * Department, University of Bologna, Italy. * * HELM is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * HELM is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HELM; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, * MA 02111-1307, USA. * * For details, see the HELM World-Wide-Web page, * http://cs.unibo.it/helm/. *) (* * *) open Dbconn;; open Utility;; open Intersect;; let getpid p = if (p = "refObj") then "F" else "B" ;; (* * implementazione delle funzioni dublin core *) let rec property_ex rop path inv = function [] -> [] | s::tl -> let mprop = fst path in print_endline mprop; let prop = List.hd (snd path) in match mprop with "refObj" (* in base al valore di prop restituisco i valori del relativo campo della tabella relativa all'uri rappresentata da s *) | "backPointer" -> print_endline mprop; let mpid = getpid mprop in let res = let c = pgc () in let tv = pgresult_to_string (c#exec ("select id from registry where uri='" ^ s ^ "'")) in let q = "select t" ^ tv ^ "." ^ prop ^ " from t" ^ tv ^ " where prop_id= '" ^ mpid ^ "'" in print_endline q; pgresult_to_string_list (c#exec q) in append (res,(property_ex rop path inv tl)) (*Rimane da capire cosa restituire nelle inverse!!!!*) | "refRel" | "refSort" -> if inv then (* restituisco gli uri che il valore della prop richiesta uguale a s *) let res = let c = pgc () in let q = ("select h" ^ mprop ^ ".uri from h" ^ mprop ^ " where h" ^ mprop ^ "." ^ prop ^ "= '" ^ s ^ "'") in print_endline q; pgresult_to_string_list (c#exec q) in append (res,(property_ex rop path inv tl)) else let res = (* restituisco il valore della prop relativo all'uri rappresentato da s*) let c = pgc () in let q = ("select h" ^ mprop ^ "." ^ prop ^" from h" ^ mprop ^ " where h" ^ mprop ^ ".uri = '" ^ s ^ "'") in pgresult_to_string_list (c#exec q) in append (res,(property_ex rop path inv tl)) | _ -> (* metadati DC !!!! Controllare se i nomi delle tabelle cominciano con h !!!!*) if inv then let res = let c = pgc () in let q = ("select " ^ mprop ^ ".uri from " ^ mprop ^ " where " ^ mprop ^ ".value = '" ^ s ^ "'") in pgresult_to_string_list (c#exec q) in append (res,(property_ex rop path inv tl)) else let res = let c = pgc () in let q = ("select " ^ mprop ^ ".value from " ^ mprop ^ " where " ^ mprop ^ ".uri = '" ^ s ^ "'") in pgresult_to_string_list (c#exec q) in append (res,(property_ex rop path inv tl)) ;;