Error Handling

Evaluating a query has two phases: the analysis phase, which catches static errors, and the evaluation phase, which catches dynamic errors. This section does not cover static errors, since they can be caught by the query processor and debugged as part of the development process. The dynamic errors are the unexpected errors that need to be considered carefully when writing queries.

Some programming languages have a try/catch feature that allows the processor to try to perform a series of instructions (specified in the "try" clause), but if there is an error, gracefully bow out and perform another series of instructions (specified in the "catch" clause). There is no concept of try/catch in XQuery, so it is up to the query author to anticipate the kinds of errors the processor will raise and avoid evaluating those expressions.

Avoiding Dynamic Errors

It is important to consider variations in the input documents that may cause dynamic errors. For example, if you are dividing a total amount by the number of items in an order, consider the possibility that there are no items in the order, which may result in a "division by zero" error. You can avoid this by checking the number of items first, as in:

if ($items) then $orderTotal div count($items) else 0

Dynamic type errors often occur when data cannot be cast to the required type. For example, to double the price discount, you might use the expression 2 * $discount. This expression raises a dynamic error if the value of

Get XQuery now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.