This document gives an overview of the syntactic structures on the lexical level of Tamino XQuery 4. Any grammar productions use the same form of BNF that is also used in the respective W3C specifications.
At the character level, Tamino supports the basic multilingual plane (BMP) and plane 16 as defined in Unicode 3.1. You can find detailed information about Unicode support in the section Unicode and Text Retrieval. In Tamino, a character is defined as follows:
Char ::= #x9 | #xA | #xD | [#x0020-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#10FFFF]
WhitespaceChar ::= #x9 | #xA | #xD | #x20
An NCName
is an XML name with the exception that it may
not contain the colon character. It is defined in the W3C recommendation
Namespaces in
XML, section 2. An XML name is defined as Name
in the
W3C recommendation Extensible
Markup Language (XML) 1.0, section 2.4.
A QName
is a name that can be qualified with an optional
namespace prefix. It is defined in the W3C recommendation
Namespaces in
XML, section 3.
A literal is the direct syntactic representation of an atomic value. In XQuery, the following literals for strings and numbers are defined:
StringLiteral ::= '"' ( [^"] | '""' )* '"' | "'" ( [^'] | "''" )* "'"
A string literal is a singleton sequence composed of single characters.
It has an atomic value of type xs:string
that is delimited by
single or double quotation marks. If you want to use a single quotation mark in
a string literal, either delimit the string literal with double quotation
marks, or use two consecutive single quotation marks to represent the single
quotation mark. The same applies, mutatis mutandis, to the double quotation
mark.
"This is Joe's house." 'This is Joe''s house.' 'I bought a 21" monitor today.' "He's 5'11" tall." "He's 5'11"" tall."
IntegerLiteral ::= [0-9]+
DecimalLiteral ::= ("." [0-9]+) | ([0-9]+ "." [0-9]*)
DoubleLiteral ::= (("." [0-9]+) | ([0-9]+ ("." [0-9]*)?)) ("e" | "E") ("+" | "-")? [0-9]+
A numeric literal is a singleton sequence with an atomic value whose type is determined as follows:
If the value contains no "." and no
"e" or "E" character, it
is of type xs:integer
.
If the value contains ".", but no
"e" or "E" character, it
is of type xs:decimal
.
If the value contains an "e" or
"E" character, it is of type
xs:double
.
These are valid numeric literals:
42
0.07
.07
3.141
12E04
These are invalid numeric literals:
"42"
3,141
0E0A
You can represent the Boolean values true
and
false
by using the built-in functions fn:true()
and
fn:false()
.
You can use constructor functions for the supported types. The name of the constructor function is normally the same as the name of the type.
A comment in XQuery is defined as follows:
ExprComment ::= "{--" ([^}])* "--}"
So an XQuery comment is delimited by {--
and
--}
and it must not contain }
in between. Comments
may even be used within expressions and before or after tokens. However, you
can not nest comments. The following query is valid:
declare namespace tf="http://namespaces.softwareag.com/tamino/TaminoFunction" {-- This query uses a Tamino-specific function. Multi-line comments are perfectly valid. --} for $a in input{-- you should not put any comments here, but it still works --}() return tf:getLastModified({-- no error even here --} $a)
You should not place a comment immediately after the opening brace of
an enclosed expression, since the character sequence {{
will be
interpreted as an escaped {
.
The following tokens are also defined in the XQuery grammar.
PredefinedEntityRef ::= "&" ("lt" | "gt" | "amp" | "quot" | "apos") ";"
Variable ::= "$" QName
CharRef ::= "&#" ([0-9]+ | ("x" ([0-9] | [a-f] | [A-F])+)) ";"
Please note that you can use any of the XQuery keywords as the name of an XML element or attribute, if you prepend a colon:
for $a in <for><where let="d">abc</where></for> return $a/:where[@:let]