Please check the errata for any errors or issues reported since publication.
See also translations.
This document is also available in these non-normative formats: XML.
Copyright © 2000 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and document use rules apply.
XML is a versatile markup language, capable of labeling the information content of diverse data sources, including structured and semi-structured documents, relational databases, and object repositories. A query language that uses the structure of XML intelligently can express queries across all these kinds of data, whether physically stored in XML or viewed as XML via middleware. This specification describes a query language called XQuery, which is designed to be broadly applicable across many types of XML data sources.
A list of changes made since XQuery 3.1 can be found in J Change Log.
This is a draft prepared by the QT4CG (officially registered in W3C as the XSLT Extensions Community Group). Comments are invited.
The publications of this community group are dedicated to our co-chair, Michael Sperberg-McQueen (1954–2024).
Note:
Historically, codes starting "XP" were for XPath errors, "XQ" for XQuery errors. This was followed by "ST" for static errors, "TY" for type errors, or "DY" for dynamic errors. Over time, some errors have been reclassified, but the error codes have been retained for compatibility reasons. Applications should therefore attach no significance to the choice of codes.
It is a static error if analysis of an expression relies on some component of the static context that is absentDM.
It is a type error if evaluation of an expression relies on some part of the dynamic context that is absentDM.
Note:
In version 4.0 this has been reclassified as a type error rather than a dynamic error. This change allows a processor to report the error during static analysis where possible; for example if the body of a user-defined function is written as fn($x) { @code }. The error code is prefixed XPDY rather than XPTY for backwards compatibility reasons.
It is a static error if an expression is not a valid instance of the grammar defined in A.1 EBNF.
It is a type error if, during the static analysis phase, an expression is found to have a static type that is not appropriate for the context in which the expression occurs, or during the dynamic evaluation phase, the dynamic type of a value does not match a required type as specified by the matching rules in 3.1.2 Sequence Type Matching.
During the analysis phase, an expression is classified as implausible if the inferred static typeS and the required type R are substantively disjoint; more specifically, if neither of the types is a subtype of the other, and if the only values that are instances of both types are one or more of: the empty sequence, the empty map, and the empty array.
It is a static error if an expression refers to an element name, attribute name, schema type name, or variable name that is not defined in the static context, except for an ElementName in an ElementTest or an AttributeName in an AttributeTest.
An implementation that does not support the Schema Aware Feature must raise a static error if a Prolog contains a schema import.
It is a static error if the set of definitions contained in all schemas imported by a Prolog do not satisfy the conditions for schema validity specified in Sections 3 and 5 of Part 1 of [XML Schema 1.0] or [XML Schema 1.1].
It is a static error if an implementation recognizes a pragma but determines that its content is invalid.
It is a static error if the expanded QName and number of arguments in a static function call do not match the name and arity range of a function definition in the static context, or if an argument keyword in the function call does not match a parameter name in that function definition, or if two arguments in the function call bind to the same parameter in the function definition.
It is a type error if the result of a path operator contains both nodes and non-nodes.
It is a type error if E1 in a path expression E1/E2 does not evaluate to a sequence of nodes.
It is a type error if, in an axis step, the context item is not a node.
It is a static error if two fields in a record declaration have the same name.
It is a static error if a namespace declaration attributecontains an EnclosedExpr.
It is a static error if a recursive record type cannot be instantiated (typically because it contains a self-reference that is neither optional nor emptiable). Processors are not required to detect this error.
It is a type error if the content sequence in an element constructor contains an attribute node following a node that is not an attribute node.
It is a dynamic error if any attribute of a constructed element does not have a name that is distinct from the names of all other attributes of the constructed element.
It is a dynamic error if the result of the content expression of a computed processing instruction constructor contains the string "?>".
In a validate expression, it is a dynamic error if the root element information item in the PSVI resulting from validation does not have the expected validity property: valid if validation mode is strict, or either valid or notKnown if validation mode is lax.
It is a type error if the argument of a validate expression does not evaluate to exactly one document or element node.
It is a static error if the version number specified in a version declaration is not supported by the implementation.
A static error is raised if a Prolog contains more than one base URI declaration.
It is a static error if a module contains multiple bindings for the same namespace prefix.
It is a static error if multiple functions declared or imported by a module have the same expanded QName and overlapping arity ranges (the arity range of a function declaration is M to M+N, where M is the number of required parameters and N is the number of optional parameters).
It is a static error to import two schema components that both define the same name in the same symbol space and in the same scope.
It is a static error if a Prolog contains more than one default collation declaration, or the value specified by a default collation declaration is not present in statically known collations.
It is a static error for a function declaration oran inline function expression to have more than one parameter with the same name.
It is a static error if the attributes specified by a direct element constructor do not have distinct expanded QNames.
It is a dynamic error if the value of the name expression in a computed processing instruction constructor cannot be cast to the type xs:NCName.
It is a dynamic error the node-name of a node constructed by a computed attribute constructor has any of the following properties:
Its namespace prefix is xmlns.
It has no namespace prefix and its local name is xmlns.
Its namespace URI is http://www.w3.org/2000/xmlns/.
Its namespace prefix is xml and its namespace URI is not http://www.w3.org/XML/1998/namespace.
Its namespace prefix is other than xml and its namespace URI is http://www.w3.org/XML/1998/namespace.
It is a static error if the name of a variable annotation, a function annotation, or the function name in a function declaration is in a reserved namespace.
An implementation MAY raise a static error if the value of a URILiteral or a BracedURILiteral is of nonzero length and is neither an absolute URI nor a relative URI.
It is a static error if multiple module imports in the same specify the same target namespace.
It is a static error if a function, variable, or item type declared in a library module is not in the target namespace of the library module.
It is a static error if two or more variables declared or imported by a module have equal expanded QNames (as defined by the eq operator.)
It is a type error if the dynamic type of the operand of a treat expression does not match the sequence type designated by the treat expression.
Note:
This error might also be raised by a path expression beginning with / or // if the context node is not in a tree that is rooted at a document node. This is because a leading / or // in a path expression is an abbreviation for an initial step that includes the clause treat as document-node().
It is a static error if an expanded QName used as an ItemType in a is not defined in the static context either as a named item type in the in-scope named item types, or as a generalized atomic type in the in-scope schema type.
The type named in a cast or castable expression must be the name of a type defined in the in-scope schema types, and the type must be simple.
It is a dynamic error if a cycle is encountered in the definition of a module’s dynamic context components, for example because of a cycle in variable declarations.
It is a static error if a Prolog contains more than one copy-namespaces declaration.
It is a static error if a schema import binds a namespace prefix but does not specify a target namespace other than a zero-length string.
It is a static error if multiple schema imports specify the same target namespace.
It is a static error if an implementation is unable to process a schema or module import by finding a schema or module with the specified target namespace.
It is a static error if the name of a function in a function declaration is not in a namespace (expanded QName has a null namespace URI).
It is a dynamic error if the operand of a validate expression is a document node whose children do not consist of exactly one element node and zero or more comment and processing instruction nodes, in any order.
It is a dynamic error if the value of the name expression in a computed processing instruction constructor is equal to XML (in any combination of upper and lower case).
A static error is raised if a Prolog contains more than one ordering mode declaration.
A static error is raised if a Prolog contains more than one default element/type namespace declaration, or more than one default function namespace declaration.
A static error is raised if a Prolog contains more than one construction declaration.
A static error is raised if a Prolog contains more than one boundary-space declaration.
A static error is raised if a Prolog contains more than one empty order declaration.
A namespace declaration must not define a binding for the prefix xml or xmlns, nor for the URI http://www.w3.org/XML/1998/namespace or http://www.w3.org/2000/xmlns/.
The same rule applies to namespace declaration attributes (see 4.12.1.2 Namespace Declaration Attributes), except that in this case it is permitted to provide a redundant namespace declaration attribute in the form xmlns:xml="http://www.w3.org/XML/1998/namespace".
A static error is raised if the namespace declaration attributes of a direct element constructor do not have distinct names.
It is a dynamic error if the result of the content expression of a computed comment constructor contains two adjacent hyphens or ends with a hyphen.
It is a dynamic error if the value of the name expression in a computed element or attribute constructor cannot be converted to an expanded QName (for example, because it contains a namespace prefix not found in statically known namespaces.)
An implementation that does not support the Schema Aware Feature must raise a static error if it encounters a validate expression.
It is a static error if a collation subclause in an order byor group by clause of a FLWOR expression does not identify a collation that is present in statically known collations.
It is a static error if an extension expression contains neither a pragma that is recognized by the implementation nor an expression enclosed in curly braces.
It is a static error if the target type of a cast or castable expression is xs:NOTATION, xs:anySimpleType, or xs:anyAtomicType.
It is a static error if a QName used in a query contains a namespace prefix that cannot be expanded into a namespace URI by using the statically known namespaces.
It is a dynamic error if the element validated by a validate statement does not have a top-level element declaration in the in-scope element declarations, if validation mode is strict.
It is a static error if the namespace URI in a namespace declaration attribute is a zero-length string, and the implementation does not support [XML Names 1.1].
It is a type error if the typed value of a copied element or attribute node is namespace-sensitive when construction mode is preserve and copy-namespaces mode is no-preserve.
It is a static error if the encoding specified in a Version Declaration does not conform to the definition of EncName specified in [XML 1.0].
It is a static error if the literal that specifies the target namespace in a module import or a module declaration is of zero length.
It is a static error if a variable bound in a for or window clause of a FLWOR expression, and its associated positional variable, do not have distinct names (expanded QNames).
It is a static error if a character reference does not identify a valid character in the version of XML that is in use.
An implementation MAY raise a dynamic error if an xml:id error, as defined in [XML ID], is encountered during construction of an attribute named xml:id.
An implementation MAY raise a dynamic error if a constructed attribute named xml:space has a value other than preserve or default.
The name of each grouping variable must be equal (by the eq operator on expanded QNames) to the name of a variable in the input tuple stream.
It is a dynamic errorif the node-name of a node constructed by a computed element constructor has any of the following properties:
Its namespace prefix is xmlns.
Its namespace URI is http://www.w3.org/2000/xmlns/.
Its namespace prefix is xml and its namespace URI is not http://www.w3.org/XML/1998/namespace.
Its namespace prefix is other than xml and its namespace URI is http://www.w3.org/XML/1998/namespace.
It is a static error for a decimal-format to specify a value that is not valid for a given property, as described in statically known decimal formats
It is a static error if, for any named or unnamed decimal format, the properties representing characters used in a picture string do not each have distinct values. The following properties represent characters used in a picture string: decimal-separator, exponent-separator, grouping-separator, percent, per-mille, the family of ten decimal digits starting with zero-digit, digit, and pattern-separator.
No module may contain more than one ContextItemDecl.
An error is raised if a computed namespace constructor attempts to do any of the following:
Bind the prefix xml to some namespace URI other than http://www.w3.org/XML/1998/namespace.
Bind a prefix other than xml to the namespace URI http://www.w3.org/XML/1998/namespace.
Bind the prefix xmlns to any namespace URI.
Bind a prefix to the namespace URI http://www.w3.org/2000/xmlns/.
Bind any prefix (including the empty prefix) to a zero-length namespace URI.
In an element constructor, if two or more namespace bindings in the in-scope bindings would have the same prefix, then an error is raised if they have different URIs; if they would have the same prefix and URI, duplicate bindings are ignored.
If the name of an element in an element constructor is in no namespace, creating a default namespace for that element using a computed namespace constructor is an error.
All variables in a window clause must have distinct names.
A TypeName that is specified in a validate expression must be found in the in-scope schema definitions
It is a type error if the content sequence in an element constructor contains a function .
It is a static error if a function declaration contains both a %private and a %public annotation.
It is a static error if an output declaration occurs in a library module.
It is a static error if the local name of an output declaration in the http://www.w3.org/2010/xslt-xquery-serialization namespace is not one of the serialization parameter names listed in B.1 Static Context Components, or if the name of an output declaration is use-character-maps.
It is a static error if the same serialization parameter is used more than once in an output declaration.
It is a static error for a query prolog to contain two decimal formats with the same name, or to contain two default decimal formats.
Specifying a VarValue or VarDefaultValue for a context item declaration in a library module is a static error.
It is a static error for a decimal format declaration to define the same property more than once.
It is a static error if the document specified by the option Q{http://www.w3.org/2010/xslt-xquery-serialization}parameter-document raises a serialization error.
It is a static errorif a variable declaration contains both a %private and a %public annotation, more than one %private annotation, or more than one %public annotation.
When applying the coercion rules, if an item is of type xs:untypedAtomic and the expected type is namespace-sensitive, a type error [err:XPTY0117] is raised.
In a direct element constructor, the name used in the end tag must exactly match the name used in the corresponding start tag, including its prefix or absence of a prefix.
It is a static error if the implementation is not able to process the value of an output:parameter-document declaration to produce an XDM instance.
It is a static error if an inline function expression is annotated as %public or %private.
An implementation-dependent limit has been exceeded.
The namespace axis is not supported.
No two keys in a map may have the same key value.
It is a static error if a named item type declaration is recursive, unless it satisfies the conditions defined in 3.2.8.3.1 Recursive Record Types.
In a forclause, when the keyword member is present, the value of the binding collection must be a single array; and when either or both of the keywords key and value are present, the value of the binding collection must be a single map.
During the analysis phase, an axis step is classified as implausible if the combination of the inferred context item type, the choice of axis, and the supplied node test, is such that the axis step will always return an empty sequence.
During the analysis phase, a unary or postfix lookup expression is classified as implausible if the combination of the inferred type of the left-hand operand (or the context item type in the case of a unary expression) and the choice of key specifier is such that the lookup expression will always return an empty sequence.
It is a static error if two or more item types declared or imported by a module have equal expanded QNames (as defined by the eq operator.)
It is a static error if an optional parameter in a function declaration is followed by a parameter that does not have a default value.
It is a static error if the schemas imported by different modules of a query are not compatible as defined in [XDM 4.0] section 4.1.2 Schema Consistency.
It is a static error if a node name supplied as a string literal in a computed element or attribute constructor does not take the form of an EQName.
It is a static error if a key type named in a is not a generalized atomic type.
The expression of a finally clause must return an empty sequence.
It is a static error if a URIQualifiedName includes a prefix but no URI.