+(* 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/.
+ *)
+
+(******************************************************************************)
+(* *)
+(* PROJECT HELM *)
+(* *)
+(* Ferruccio Guidi <fguidi@cs.unibo.it> *)
+(* Domenico Lordi <lordi@cs.unibo.it> *)
+(* 30/04/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 mquptoken =
+ | MQString of string (* a constant string *)
+ | MQSlash (* a slash: '/' *)
+ | MQAnyChr (* Any single character: '?' *)
+ | MQAst (* single asterisk: '*' *)
+ | MQAstAst (* double asterisk: '**' *)
+
+type mqup = mquptoken list (* uri pattern (helper) *)
+
+type mqfi = int option * int option
+
+type mqtref = string * mqup * string * mqfi (* HELM preamble,
+ uri pattern,
+ extension,
+ fragment identifier *)
+
+type mqpattern = mqtref (* constant pattern *)
+
+type mqfunc =
+ | MQName (* NAME *)
+
+type mqstring =
+ | MQCons of string (* constant *)
+ | MQFunc of mqfunc * mqrvar (* function, rvar *)
+ | MQRVar of mqrvar (* rvar *)
+ | MQSVar of mqsvar (* svar *)
+ | MQMConclusion (* main conclusion *)
+ | MQConclusion (* inner conclusion *)
+
+type mqbool =
+ | MQTrue
+ | MQFalse
+ | MQAnd of mqbool * mqbool
+ | MQOr of mqbool * mqbool
+ | MQNot of mqbool
+ | MQIs of mqstring * mqstring (* operands *)
+
+type mqlist =
+ | MQSelect of mqrvar * mqlist * mqbool (* rvar, list, boolean *)
+ | MQUse of mqlist * mqsvar (* list, Position attribute *)
+ | MQUsedBy of mqlist * mqsvar (* list, Position attribute *)
+ | MQPattern of mqpattern (* pattern *)
+ | MQUnion of mqlist * mqlist (* *)
+ | MQIntersect of mqlist * mqlist (* *)
+
+type mquery =
+ | MQList of mqlist
+
+(* Output types *************************************************************)
+(* main type is mqresult *)
+
+(* TODO: usare le uri in questo formato *)
+type mquref = UriManager.uri * mqfi (* uri, fragment identifier *)
+
+type mqrefs = mqtref list (* list of references (helper) *)
+
+type mqresult =
+ | MQStrUri of string list
+ | MQRefs of mqrefs