]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql/mathQL.ml
Initial revision
[helm.git] / helm / ocaml / mathql / mathQL.ml
index 90d17c553a76f3cc7e8b93c1a6ffde6ff2a76b8b..61a7646aa6261d842ff07fa38e8fd84906f04f27 100644 (file)
 (*                               PROJECT HELM                                 *)
 (*                                                                            *)
 (*                     Ferruccio Guidi <fguidi@cs.unibo.it>                   *)
-(*                     Domenico Lordi  <lordi@cs.unibo.it>                    *)
-(*                                 30/04/2002                                 *)
+(*                     Irene Schena  <schena@cs.unibo.it>                     *)
+(*                                 10/09/2002                                 *)
 (*                                                                            *)
 (*                                                                            *)
 (******************************************************************************)
 
-exception MQInvalidURI of string
-exception MQConnectionFailed of string
-exception MQInvalidConnection of string
-
-(* Input types **************************************************************)
-(* main type is mquery                                                      *)
-
-type mqrvar = string (* name *)
-
-type mqsvar = string (* name *)
-
-type mqlvar = string (* name *)
-
-type mqpt = string option (* PROTOCOL TOKENS *)
-                          (* Some = constant string *)
-                          (* None = single star: '*' *)
-
-type mqbt =               (* BODY TOKENS *)
-   | MQBC of string       (* a constant string *)
-   | MQBD                 (* a slash: '/' *)
-   | MQBQ                 (* a question mark: '?' *)
-   | MQBS                 (* a single star: '*' *)
-   | MQBSS                (* a double star: '**' *)
-
-type mqft =               (* FRAGMENT TOKENS *)
-   | MQFC of int          (* a constant integer *)
-   | MQFS                 (* a single star: '*' *)
-   | MQFSS                (* a double star: '**' *)
-
-type mquref = UriManager.uri * (int list) (* uri, fragment identifier *)
-
-type mqtref = mqpt * (mqbt list) * (mqft list) (* tokenized pattern reference *)
-
-type mqref = string (* format for references (helper) *)
-
-type mqfunc =
-   | MQName         (* Name *)
-   | MQTheory       (* theory *)
-   | MQTitle        (* DC properties *)
-   | MQContributor
-   | MQCreator
-   | MQPublisher
-   | MQSubject
-   | MQDescription
-   | MQDate
-   | MQType
-   | MQFormat
-   | MQIdentifier
-   | MQLanguage
-   | MQRelation
-   | MQSource
-   | MQCoverage
-   | MQRights
-   | MQInstitution
-   | MQContact
-   | MQFirstVersion 
-   | MQModified
-
-type mqstring =
-   | MQCons of string          (* constant *)
-   | MQFunc of mqfunc * mqrvar (* function, rvar *)
-   | MQStringRVar of mqrvar    (* rvar *)
-   | MQStringSVar of mqsvar    (* svar *)
-   | MQMConclusion             (* main conclusion *)
-   | MQConclusion              (* inner conclusion *)
-
-type mqorder =
-   | MQAsc     (* ascending order *)
-   | MQDesc    (* descending order *)
-
-type mqbool =
-   | MQTrue                        (* true *)
-   | MQFalse                       (* false *)
-   | MQAnd of mqbool * mqbool      (* conjunction *)
-   | MQOr of mqbool * mqbool       (* disjunction *)
-   | MQNot of mqbool               (* negation *)
-   | MQIs of mqstring * mqstring   (* case-sensitive comparison  *)
-   | MQSetEqual of mqlist * mqlist (* the two lists denote the same set *)
-   | MQSubset of mqlist * mqlist   (* the two lists denote two sets, the 1st subset of the 2nd *)
-
-and mqlist =
-   | MQReference of mqref                    (* reference *)
-   | MQPattern of mqtref                     (* pattern *)
-   | MQListLVar of mqlvar                    (* lvar *)
-   | MQListRVar of mqrvar                    (* rvar *)
-   | MQSelect of mqrvar * mqlist * mqbool    (* rvar, list, boolean *) 
-   | MQUse of mqlist * mqsvar                (* list, Position attribute *)
-   | MQUsedBy of mqlist * mqsvar             (* list, Position attribute *)
-   | MQUnion of mqlist * mqlist              (* operands *)
-   | MQIntersect of mqlist * mqlist          (* operands *)
-   | MQSortedBy of mqlist * mqorder * mqfunc (* ordering *)
-   | MQDiff of mqlist * mqlist               (* set difference  *)
-   | MQLetIn of mqlvar * mqlist * mqlist     (* explicit lvar assignment *)
-   | MQMinimize of mqlist                    (* list minimization *)
-   
-type mquery =
-   | MQList of mqlist
-   
-(* Output types *************************************************************)
-(* main type is mqresult                                                    *)
-
-type mqresult =
-   | MQRefs of mqref list
+
+(* output data structures ***************************************************)
+
+type path            = string * (string list) (* the name of an attribute *)
+
+type value           = string list            (* the value of an attribute *)
+
+type attribute       = path * value           (* an attribute *)
+
+type attribute_group = attribute list         (* a group of attributes *)
+
+type attribute_set   = attribute_group list   (* the attributes of an URI *)
+
+type resource        = string * attribute_set (* an attributed URI *)
+
+type resource_set    = resource list          (* the query result *)
+
+type result = resource_set
+
+
+(* input data structures ****************************************************)
+
+type svar = string (* the name of a variable for a resource set *)
+
+type rvar = string (* the name of a variable for a resource *)
+
+type vvar = string (* the name of a variable for an attribute value *)
+
+type inverse = bool 
+
+type refine = RefineExact
+            | RefineSub
+           | RefineSuper
+
+type assign = path * path 
+
+type set_exp = SVar of svar
+            | RVar of rvar
+             | Ref of val_exp
+             | Pattern of val_exp
+            | Relation of inverse * refine * path * set_exp * assign list
+             | Select of rvar * set_exp * boole_exp
+            | Union of set_exp * set_exp
+            | Intersect of set_exp * set_exp
+            | Diff of set_exp * set_exp
+            | LetSVar of svar * set_exp * set_exp
+            | LetVVar of vvar * val_exp * set_exp
+            
+and boole_exp = False
+              | True
+             | Not of boole_exp
+             | Ex of rvar list * boole_exp   
+             | And of boole_exp * boole_exp
+             | Or of boole_exp * boole_exp
+             | Sub of val_exp * val_exp
+             | Meet of val_exp * val_exp
+             | Eq of val_exp * val_exp
+              
+and val_exp = Const of string list 
+            | RefOf of set_exp 
+           | Record of rvar * path
+           | VVar of vvar
+           | Property of inverse * refine * path * val_exp
+           | Fun of string * val_exp
+
+type query = set_exp