]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql_interpreter_galax/pervasive.xqp
commit of galax mathql interpreter
[helm.git] / helm / ocaml / mathql_interpreter_galax / pervasive.xqp
diff --git a/helm/ocaml/mathql_interpreter_galax/pervasive.xqp b/helm/ocaml/mathql_interpreter_galax/pervasive.xqp
new file mode 100644 (file)
index 0000000..c7a4b1a
--- /dev/null
@@ -0,0 +1,192 @@
+#######################
+# Standard namespaces #
+#######################
+
+namespace xsd = "%%XSDURI%%"
+namespace xs = "%%XSURI%%"
+namespace xml = "%%XMLURI%%"
+
+#############################
+# XML Schema wildcard types #
+#############################
+
+define type xs:AnyNumeric     { xsd:decimal | xsd:integer | xsd:int | xsd:double | xsd:float } 
+
+define type xs:AnyScalar      { xsd:boolean |
+                               xsd:string |
+                               type xs:AnyNumeric |
+                               xsd:UnknownSimpleType }
+
+define type xs:AnySimpleType   { type xs:AnyScalar* }
+define type xs:AnyAttribute    { attribute * { type xs:AnySimpleType } }
+define type xs:AnyElement      { element * { type xs:AnyContentModel } }
+define type xs:AnyContentModel { (type xs:AnyAttribute*, (type xs:AnySimpleType | (type xs:AnyElement |
+text)*)) }
+define type xs:AnyDocument    { document { type xs:AnyElement } }
+
+#########################
+# XQuery Wildcard types #
+#########################
+define type xs:AnyNode        { type xs:AnyElement | type xs:AnyAttribute | text }
+
+define type xs:AnyItem        { type xs:AnyNode | type xs:AnyScalar }
+define type xs:AnyType        { type xs:AnyItem* }
+
+
+######################
+# Standard functions #
+######################
+
+# data-model accessors. 
+# F&O doc. Section 2
+
+define function signature  local-name(type xs:AnyNode)       returns (xsd:string)
+define function signature  name(type xs:AnyNode)             returns (xsd:string?)
+define function signature  children(type xs:AnyNode)         returns (type xs:AnyNode*)
+define function signature  attributes(type xs:AnyElement)    returns (type xs:AnyAttribute*)
+define function signature  parent(type xs:AnyNode)           returns (type xs:AnyElement?)
+define function signature  data(type xs:AnyNode)             returns (type xs:AnySimpleType)
+
+# F&O doc. Section 3.2
+define function signature  decimal(xsd:string)              returns (xsd:int)
+define function signature  integer(xsd:string)               returns (xsd:int)
+define function signature  long(xsd:string)                 returns (xsd:int)
+define function signature  int(xsd:string)                  returns (xsd:int)
+define function signature  short(xsd:string)                returns (xsd:int)
+define function signature  byte(xsd:string)                 returns (xsd:int)
+define function signature  float(xsd:string)                returns (xsd:double)
+define function signature  double(xsd:string)               returns (xsd:double)
+
+# polymorphic arithmetic operations #
+# F&O doc, Section 3.3
+
+define function signature  numeric-add(numeric, numeric)      returns (numeric)
+define function signature  numeric-subtract(numeric, numeric) returns (numeric)
+define function signature  numeric-multiply(numeric, numeric) returns (numeric)
+define function signature  numeric-divide(numeric, numeric)   returns (numeric)
+define function signature  numeric-mod(numeric, numeric)      returns (numeric)
+
+define function signature  numeric-unary-plus(numeric)        returns (numeric)
+define function signature  numeric-unary-minus(numeric)       returns (numeric)
+
+# Galax's monomorphic arithmetic operations #
+
+# Caml's int
+define function signature  int-add(xsd:int, xsd:int)      returns (xsd:int)
+define function signature  int-subtract(xsd:int, xsd:int) returns (xsd:int)
+define function signature  int-multiply(xsd:int, xsd:int) returns (xsd:int)
+define function signature  int-divide(xsd:int, xsd:int)   returns (xsd:int)
+define function signature  int-mod(xsd:int, xsd:int)      returns (xsd:int)
+
+define function signature  int-unary-plus(xsd:int)    returns (xsd:int)
+define function signature  int-unary-minus(xsd:int)   returns (xsd:int)
+
+# xsd:decimal
+define function signature  decimal-add(xsd:decimal, xsd:decimal)      returns (xsd:decimal)
+define function signature  decimal-subtract(xsd:decimal, xsd:decimal) returns (xsd:decimal)
+define function signature  decimal-multiply(xsd:decimal, xsd:decimal) returns (xsd:decimal)
+define function signature  decimal-divide(xsd:decimal, xsd:decimal)   returns (xsd:decimal)
+define function signature  decimal-mod(xsd:decimal, xsd:decimal)      returns (xsd:decimal)
+
+define function signature  decimal-unary-plus(xsd:decimal)    returns (xsd:decimal)
+define function signature  decimal-unary-minus(xsd:decimal)   returns (xsd:decimal)
+
+# xsd:float
+define function signature  float-add(xsd:float, xsd:float)      returns (xsd:float)
+define function signature  float-subtract(xsd:float, xsd:float) returns (xsd:float)
+define function signature  float-multiply(xsd:float, xsd:float) returns (xsd:float)
+define function signature  float-divide(xsd:float, xsd:float)   returns (xsd:float)
+define function signature  float-mod(xsd:float, xsd:float)      returns (xsd:float)
+
+define function signature  float-unary-plus(xsd:float)    returns (xsd:float)
+define function signature  float-unary-minus(xsd:float)   returns (xsd:float)
+
+# xsd:double
+define function signature  double-add(xsd:double, xsd:double)      returns (xsd:double)
+define function signature  double-subtract(xsd:double, xsd:double) returns (xsd:double)
+define function signature  double-multiply(xsd:double, xsd:double) returns (xsd:double)
+define function signature  double-divide(xsd:double, xsd:double)   returns (xsd:double)
+define function signature  double-mod(xsd:double, xsd:double)      returns (xsd:double)
+
+define function signature  double-unary-plus(xsd:double)    returns (xsd:double)
+define function signature  double-unary-minus(xsd:double)   returns (xsd:double)
+
+# comparators #
+# F&O doc, Section 3.4
+define function signature  nodeeq(type xs:AnyNode, type xs:AnyNode)     returns (xsd:boolean)
+define function signature  equal(type xs:AnyScalar, type xs:AnyScalar)  returns (xsd:boolean)
+define function signature  nequal(type xs:AnyScalar, type xs:AnyScalar) returns (xsd:boolean)
+define function signature  ge(type xs:AnyScalar, type xs:AnyScalar)     returns (xsd:boolean)
+define function signature  le(type xs:AnyScalar, type xs:AnyScalar)     returns (xsd:boolean)
+define function signature  gt(type xs:AnyScalar, type xs:AnyScalar)     returns (xsd:boolean)
+define function signature  lt(type xs:AnyScalar, type xs:AnyScalar)     returns (xsd:boolean)
+
+# F&O doc. Section 3.5
+define function signature  floor(xsd:double)                  returns (xsd:int)
+define function signature  ceiling(xsd:double)                 returns (xsd:int)
+define function signature  round(xsd:double)                  returns (xsd:int)
+
+# functions on strings
+# F&O doc. Section 4.4 
+define function signature  concat(xsd:string, xsd:string)                      returns (xsd:string)
+define function signature  starts-with(xsd:string, xsd:string)                 returns (xsd:boolean)
+define function signature  ends-with(xsd:string, xsd:string)                   returns (xsd:boolean)
+define function signature  contains(xsd:string, xsd:string)                    returns (xsd:boolean)
+define function signature  substring(xsd:string, xsd:int, xsd:int)             returns (xsd:string)
+define function signature  string-length(xsd:string)                           returns (xsd:int)
+define function signature  substring-before(xsd:string, xsd:string)            returns (xsd:string)
+define function signature  substring-after(xsd:string, xsd:string)             returns (xsd:string)
+define function signature  normalize-space(xsd:string)                         returns (xsd:string)
+define function signature  normalize-unicode(xsd:string)                       returns (xsd:string)
+define function signature  upper-case(xsd:string)                              returns (xsd:string)
+define function signature  lower-case(xsd:string)                              returns (xsd:string)
+define function signature  translate(xsd:string, xsd:string, xsd:string)       returns (xsd:string)
+define function signature  string-pad(xsd:string, xsd:int, xsd:string)         returns (xsd:string)
+define function signature  match(xsd:string, xsd:string)                       returns (xsd:int*)
+define function signature  replace(xsd:string, xsd:string, xsd:string)         returns (xsd:string)
+
+define function signature  codepoint-contains(xsd:string, xsd:string)          returns (xsd:boolean)
+define function signature  codepoint-substring-before(xsd:string, xsd:string)  returns (xsd:string)
+define function signature  codepoint-substring-after(xsd:string, xsd:string)   returns (xsd:string)
+
+# boolean operations #
+# F&O doc, Section 6.1
+define function signature  true()                            returns (xsd:boolean)
+define function signature  false()                           returns (xsd:boolean)
+
+# F&O doc, Section 6.2
+define function signature  or(xsd:boolean, xsd:boolean)              returns (xsd:boolean)
+define function signature  and(xsd:boolean, xsd:boolean)      returns (xsd:boolean)
+define function signature  not(xsd:boolean)                  returns (xsd:boolean)
+
+# functions on sequences #
+# F&O doc, Section 13.2
+define function signature  index-of(type xs:AnyNode*,  type xs:AnyNode)  returns (xsd:int)
+define function signature  length(type xs:AnyType)          returns (xsd:int)
+define function signature  empty(type xs:AnyType)            returns (xsd:boolean)
+define function signature  distinct-values(type xs:AnyType)  returns (type xs:AnyType)
+
+# aggregate functions #
+# F&O doc, Section 13.4
+define function signature  avg-int(xsd:int*)                 returns (xsd:int)
+define function signature  max-int(xsd:int*)                 returns (xsd:int?)
+define function signature  min-int(xsd:int*)                 returns (xsd:int?)
+define function signature  sum-int(xsd:int*)                 returns (xsd:int)
+
+define function signature  avg-float(xsd:double*)            returns (xsd:double)
+define function signature  max-float(xsd:double*)            returns (xsd:double?)
+define function signature  min-float(xsd:double*)            returns (xsd:double?)
+define function signature  sum-float(xsd:double*)            returns (xsd:double)
+
+define function signature  count(type xs:AnyType)            returns (xsd:int)
+
+# input-output operations #
+
+# The signature below is a hack : The output of document is declared
+# as the empty choice to avoid the need for explicit cast by the user
+# when loading the document - JS #
+
+# F&O doc, Section 13.5 
+define function signature  document(xsd:string)                       returns (type xs:AnyDocument)
+define function signature  document-validate(xsd:string, xsd:string)  returns (type xs:AnyDocument)
+