(* * *) open Mathql;; (* * conversione di un pattern *) let rec patterneval p = match p with [] -> "" | head::tail -> let h = match head with MQString (s) -> s | MQSlash -> "/" | MQAnyChr -> "[^/]?" | MQAst -> "[^/]*" | MQAstAst -> ".*" in h ^ (patterneval tail) ;; (* * conversione di un fragment identifier *) let fieval fi = match fst fi with None -> "" | Some i -> let s = "#xpointer\(1/" ^ string_of_int (i) in match snd fi with None -> s ^ "\)" | Some j -> s ^ "/" ^ string_of_int j ^ "\)" ;; (* * trasforma un pattern MathQL in un pattern postgresql * * si utilizzano espressioni regolari POSIX anziche' l'operatore * SQL standard LIKE perche' MathQL prevede esperssioni con "*" * e con "**". *) let pattern_match preamble pattern ext fragid = " ~ '" ^ preamble ^ ":/" ^ (patterneval pattern) ^ "." ^ ext ^ (fieval fragid) ^ "'" ;;