####################### # Standard namespaces # ####################### namespace xsd = "http://www.w3c.org/xsd" namespace xs = "http://www.w3c.org/xs" namespace xml = "http://www.w3.org/xml" ############################# # 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)