You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
9146 lines
332 KiB
9146 lines
332 KiB
<?xml version="1.0" encoding="utf-8"?>
|
|
<!--{xml-fix} XSLT Processor: SAXON 9.3.0.5 from Saxonica SAXON EE 9.3.0.5--><!--This document was created at 20111212 1701-->
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="EN" xml:lang="EN">
|
|
<head>
|
|
<meta name="generator" content=
|
|
"HTML Tidy for Windows (vers 14 February 2006), see www.w3.org" />
|
|
<title>XQuery Update Facility 3.0</title>
|
|
|
|
<style type="text/css">
|
|
/*<![CDATA[*/
|
|
code { font-family: monospace; }
|
|
|
|
div.constraint,
|
|
div.issue,
|
|
div.note,
|
|
div.notice { margin-left: 2em; }
|
|
|
|
div.issue
|
|
p.title { margin-left: -2em; }
|
|
|
|
ol.enumar { list-style-type: decimal; }
|
|
ol.enumla { list-style-type: lower-alpha; }
|
|
ol.enumlr { list-style-type: lower-roman; }
|
|
ol.enumua { list-style-type: upper-alpha; }
|
|
ol.enumur { list-style-type: upper-roman; }
|
|
|
|
li p { margin-top: 0.3em;
|
|
margin-bottom: 0.3em; }
|
|
|
|
sup small { font-style: italic;
|
|
color: #8F8F8F;
|
|
}
|
|
|
|
div.exampleInner pre { margin-left: 1em;
|
|
margin-top: 0em; margin-bottom: 0em}
|
|
div.exampleOuter {border: 4px double gray;
|
|
margin: 0em; padding: 0em}
|
|
div.exampleInner { background-color: #d5dee3;
|
|
border-top-width: 4px;
|
|
border-top-style: double;
|
|
border-top-color: #d3d3d3;
|
|
border-bottom-width: 4px;
|
|
border-bottom-style: double;
|
|
border-bottom-color: #d3d3d3;
|
|
padding: 4px; margin: 0em }
|
|
div.exampleWrapper { margin: 4px }
|
|
div.exampleHeader { font-weight: bold;
|
|
margin: 4px}
|
|
|
|
div.issue { border-bottom-color: black;
|
|
border-bottom-style: solid;
|
|
border-bottom-width: 1pt;
|
|
margin-bottom: 20pt;
|
|
}
|
|
|
|
th.issue-toc-head { border-bottom-color: black;
|
|
border-bottom-style: solid;
|
|
border-bottom-width: 1pt;
|
|
}
|
|
|
|
|
|
table.small { font-size: x-small; }
|
|
|
|
table.small { font-size: x-small; }
|
|
a.judgment:visited, a.judgment:link { font-family: sans-serif;
|
|
color: black;
|
|
text-decoration: none }
|
|
a.processing:visited, a.processing:link { color: black;
|
|
text-decoration: none }
|
|
a.env:visited, a.env:link { color: black;
|
|
text-decoration: none }
|
|
/*]]>*/
|
|
</style>
|
|
<link rel="stylesheet" type="text/css" href=
|
|
"http://www.w3.org/StyleSheets/TR/W3C-WD.css" />
|
|
</head>
|
|
<body>
|
|
<div class="head">
|
|
<p><a href="http://www.w3.org/"><img src=
|
|
"http://www.w3.org/Icons/w3c_home" alt="W3C" height="48" width=
|
|
"72" /></a></p>
|
|
<h1><a name="title" id="title"></a>XQuery Update Facility 3.0</h1>
|
|
<h2><a name="w3c-doctype" id="w3c-doctype"></a>W3C Working Draft 13
|
|
December 2011</h2>
|
|
<dl>
|
|
<dt>This version:</dt>
|
|
<dd><a href=
|
|
"http://www.w3.org/TR/2011/WD-xquery-update-30-20111213/">http://www.w3.org/TR/2011/WD-xquery-update-30-20111213/</a></dd>
|
|
<dt>Latest version:</dt>
|
|
<dd><a href=
|
|
"http://www.w3.org/TR/xquery-update-30/">http://www.w3.org/TR/xquery-update-30/</a></dd>
|
|
<dt>Previous version:</dt>
|
|
<dt>Editors:</dt>
|
|
<dd><span><a href="http://john.snelson.org.uk">John
|
|
Snelson</a></span>, MarkLogic Corporation <a href=
|
|
"mailto:john.snelson@marklogic.com"><john.snelson@marklogic.com></a></dd>
|
|
<dd>Jim Melton, Oracle <a href=
|
|
"mailto:jim.melton@oracle.com"><jim.melton@oracle.com></a></dd>
|
|
</dl>
|
|
<p>This document is also available in these non-normative formats:
|
|
<a href=
|
|
"http://www.w3.org/TR/2011/WD-xquery-update-30-20111213/xquery-update-30.xml">
|
|
XML</a> and <a href=
|
|
"http://www.w3.org/TR/2011/WD-xquery-update-30-20111213/xquery-update-30-diff.html">Recent
|
|
revisions (HTML)</a>.</p>
|
|
<p class="copyright"><a href=
|
|
"http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> © 2011 <a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>®</sup>
|
|
(<a href="http://www.csail.mit.edu/"><acronym title=
|
|
"Massachusetts Institute of Technology">MIT</acronym></a>, <a href=
|
|
"http://www.ercim.eu/"><acronym title=
|
|
"European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>,
|
|
<a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved.
|
|
W3C <a href=
|
|
"http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
|
|
<a href=
|
|
"http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>
|
|
and <a href=
|
|
"http://www.w3.org/Consortium/Legal/copyright-documents">document
|
|
use</a> rules apply.</p>
|
|
</div>
|
|
<hr />
|
|
<div>
|
|
<h2><a name="abstract" id="abstract"></a>Abstract</h2>
|
|
<p>This document defines an update facility that extends the XML
|
|
Query language, XQuery. The XQuery Update Facility 3.0 provides
|
|
expressions that can be used to make persistent changes to
|
|
instances of the XQuery and XPath Data Model 3.0.</p>
|
|
</div>
|
|
<div>
|
|
<h2><a name="status" id="status"></a>Status of this Document</h2>
|
|
<p><em>This section describes the status of this document at the
|
|
time of its publication. Other documents may supersede this
|
|
document. A list of current W3C publications and the latest
|
|
revision of this technical report can be found in the <a href=
|
|
"http://www.w3.org/TR/">W3C technical reports index</a> at
|
|
http://www.w3.org/TR/.</em></p>
|
|
<p>This is a <a href=
|
|
"http://www.w3.org/2005/10/Process-20051014/tr.html#first-wd">First
|
|
Public Working Draft</a> as described in the <a href=
|
|
"http://www.w3.org/2005/10/Process-20051014/tr.html">Process
|
|
Document</a>. It was developed by the W3C <a href=
|
|
"http://www.w3.org/XML/Query/">XML Query Working Group</a>, which
|
|
is part of the <a href="http://www.w3.org/XML/Activity">XML
|
|
Activity</a>. The Working Group expects to advance this
|
|
specification to <a href=
|
|
"http://www.w3.org/2005/10/Process-20051014/tr.html#RecsW3C">Recommendation</a>
|
|
Status.</p>
|
|
<p>The following features are considered to be at risk:</p>
|
|
<ul>
|
|
<li>
|
|
<p><a href="#dt-revalidation-mode">Revalidation modes other than
|
|
"skip"</a></p>
|
|
</li>
|
|
<li>
|
|
<p><a href="#id-xqueryx-update-conformance">XQueryX
|
|
Conformance</a></p>
|
|
</li>
|
|
</ul>
|
|
<p>They may be removed if implementations of them do not exist at
|
|
the end of the Candidate Recommendation period.</p>
|
|
<p>This is the First Public Working Draft of XQuery Update Facility
|
|
3.0. There are currently no substantive differences between this
|
|
document and the Recommendation of XQuery Update Facility 1.0.
|
|
Reviewers are expressly requested to submit candidate requirements
|
|
for XQuery Update Facility 3.0, either by using the Bugzilla system
|
|
or the public comments mailing list, as described just below.</p>
|
|
<p>No implementation report currently exists. However, a Test Suite
|
|
for XQuery Update Facility 3.0 is under development.</p>
|
|
<p>Please report errors in this document using W3C's <a href=
|
|
"http://www.w3.org/Bugs/Public/">public Bugzilla system</a>
|
|
(instructions can be found at <a href=
|
|
"http://www.w3.org/XML/2005/04/qt-bugzilla">http://www.w3.org/XML/2005/04/qt-bugzilla</a>).
|
|
If access to that system is not feasible, you may send your
|
|
comments to the W3C XSLT/XPath/XQuery public comments mailing list,
|
|
<a href=
|
|
"mailto:public-qt-comments@w3.org">public-qt-comments@w3.org</a>.
|
|
It will be very helpful if you include the string “[UPD30]” in the
|
|
subject line of your report, whether made in Bugzilla or in email.
|
|
Please use multiple Bugzilla entries (or, if necessary, multiple
|
|
email messages) if you have more than one comment to make. Archives
|
|
of the comments and responses are available at <a href=
|
|
"http://lists.w3.org/Archives/Public/public-qt-comments/">http://lists.w3.org/Archives/Public/public-qt-comments/</a>.</p>
|
|
<p>Publication as a Working Draft does not imply endorsement by the
|
|
W3C Membership. This is a draft document and may be updated,
|
|
replaced or obsoleted by other documents at any time. It is
|
|
inappropriate to cite this document as other than work in
|
|
progress.</p>
|
|
<p>This document was produced by a group operating under the
|
|
<a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5
|
|
February 2004 W3C Patent Policy</a>. W3C maintains a <a href=
|
|
"http://www.w3.org/2004/01/pp-impl/18797/status#disclosures">public
|
|
list of any patent disclosures</a> made in connection with the
|
|
deliverables of the group; that page also includes instructions for
|
|
disclosing a patent. An individual who has actual knowledge of a
|
|
patent which the individual believes contains <a href=
|
|
"http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">
|
|
Essential Claim(s)</a> must disclose the information in accordance
|
|
with <a href=
|
|
"http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">
|
|
section 6 of the W3C Patent Policy</a>.</p>
|
|
</div>
|
|
<div class="toc">
|
|
<h2><a name="contents" id="contents"></a>Table of Contents</h2>
|
|
<p class="toc">1 <a href="#introduction">Introduction</a><br />
|
|
    1.1 <a href=
|
|
"#id-terminology">Terminology</a><br />
|
|
2 <a href="#id-extensions">Extensions to XQuery 3.0</a><br />
|
|
    2.1 <a href=
|
|
"#id-processing-model">Extensions to the Processing Model</a><br />
|
|
    2.2 <a href="#id-data-model">Extensions to
|
|
the Data Model</a><br />
|
|
    2.3 <a href="#id-annotations">Extensions to
|
|
Annotations</a><br />
|
|
        2.3.1 <a href=
|
|
"#id-updating-annotation">Updating Annotation</a><br />
|
|
        2.3.2 <a href=
|
|
"#id-updating-annotation-assertion">Updating Annotation
|
|
Assertion</a><br />
|
|
    2.4 <a href=
|
|
"#id-prolog-extensions">Extensions to the Prolog</a><br />
|
|
        2.4.1 <a href=
|
|
"#id-revalidation-declaration">Revalidation Declaration</a><br />
|
|
        2.4.2 <a href=
|
|
"#id-function-declaration">Function Declaration</a><br />
|
|
        2.4.3 <a href=
|
|
"#id-variable-declaration">Variable Declaration</a><br />
|
|
        2.4.4 <a href=
|
|
"#id-context-item-declaration">Context Item Declaration</a><br />
|
|
        2.4.5 <a href=
|
|
"#id-require-feature">require-feature and
|
|
prohibit-feature</a><br />
|
|
    2.5 <a href=
|
|
"#id-static-context-extensions">Extensions to the Static
|
|
Context</a><br />
|
|
    2.6 <a href="#id-new-expressions">New Kinds
|
|
of Expressions</a><br />
|
|
        2.6.1 <a href=
|
|
"#id-insert">Insert</a><br />
|
|
        2.6.2 <a href=
|
|
"#id-delete">Delete</a><br />
|
|
        2.6.3 <a href=
|
|
"#id-replace">Replace</a><br />
|
|
            2.6.3.1
|
|
<a href="#id-replacing-node">Replacing a Node</a><br />
|
|
            2.6.3.2
|
|
<a href="#id-replacing-node-value">Replacing the Value of a
|
|
Node</a><br />
|
|
        2.6.4 <a href=
|
|
"#id-rename">Rename</a><br />
|
|
        2.6.5 <a href=
|
|
"#id-transform">Transform</a><br />
|
|
        2.6.6 <a href=
|
|
"#id-compatibility">Compatibility of Updating Expressions</a><br />
|
|
    2.7 <a href=
|
|
"#id-extensions-to-existing">Extensions to Existing
|
|
Expressions</a><br />
|
|
        2.7.1 <a href=
|
|
"#id-flwor-expr">FLWOR Expression</a><br />
|
|
        2.7.2 <a href=
|
|
"#id-typeswitch-expr">Typeswitch Expression</a><br />
|
|
        2.7.3 <a href=
|
|
"#id-switch-expr">Switch Expression</a><br />
|
|
        2.7.4 <a href=
|
|
"#id-conditional-expr">Conditional Expression</a><br />
|
|
        2.7.5 <a href=
|
|
"#id-try-catch">Try/Catch Expression</a><br />
|
|
        2.7.6 <a href=
|
|
"#id-comma-expr">Comma Expression</a><br />
|
|
        2.7.7 <a href=
|
|
"#id-parenthesized-expr">Parenthesized Expression</a><br />
|
|
        2.7.8 <a href=
|
|
"#id-extension-expr">Extension Expression</a><br />
|
|
        2.7.9 <a href=
|
|
"#id-inline-function">Inline Functions</a><br />
|
|
        2.7.10 <a href=
|
|
"#id-function-call">Function Calls</a><br />
|
|
        2.7.11 <a href=
|
|
"#id-dynamic-function-invocation">Dynamic Function
|
|
Invocation</a><br />
|
|
        2.7.12 <a href=
|
|
"#id-other-expr">Other Expressions</a><br />
|
|
    2.8 <a href="#id-new-functions">Extensions
|
|
to Built-in Function Library</a><br />
|
|
        2.8.1 <a href=
|
|
"#id-func-put">fn:put</a><br />
|
|
3 <a href="#id-update-operations">Update Operations</a><br />
|
|
    3.1 <a href="#id-update-primitives">Update
|
|
Primitives</a><br />
|
|
        3.1.1 <a href=
|
|
"#id-upd-insert-before">upd:insertBefore</a><br />
|
|
        3.1.2 <a href=
|
|
"#id-upd-insert-after">upd:insertAfter</a><br />
|
|
        3.1.3 <a href=
|
|
"#id-upd-insert-into">upd:insertInto</a><br />
|
|
        3.1.4 <a href=
|
|
"#id-upd-insert-into-as-first">upd:insertIntoAsFirst</a><br />
|
|
        3.1.5 <a href=
|
|
"#id-upd-insert-into-as-last">upd:insertIntoAsLast</a><br />
|
|
        3.1.6 <a href=
|
|
"#id-upd-insert-attributes">upd:insertAttributes</a><br />
|
|
        3.1.7 <a href=
|
|
"#id-upd-delete">upd:delete</a><br />
|
|
        3.1.8 <a href=
|
|
"#id-upd-replacenode">upd:replaceNode</a><br />
|
|
        3.1.9 <a href=
|
|
"#id-upd-replace-value">upd:replaceValue</a><br />
|
|
        3.1.10 <a href=
|
|
"#id-upd-replace-element-content">upd:replaceElementContent</a><br />
|
|
|
|
        3.1.11 <a href=
|
|
"#id-upd-rename">upd:rename</a><br />
|
|
        3.1.12 <a href=
|
|
"#id-upd-put">upd:put</a><br />
|
|
    3.2 <a href="#id-update-routines">Update
|
|
Routines</a><br />
|
|
        3.2.1 <a href=
|
|
"#id-upd-merge-updates">upd:mergeUpdates</a><br />
|
|
        3.2.2 <a href=
|
|
"#id-upd-apply-updates">upd:applyUpdates</a><br />
|
|
        3.2.3 <a href=
|
|
"#id-upd-revalidate">upd:revalidate</a><br />
|
|
        3.2.4 <a href=
|
|
"#id-upd-remove-type">upd:removeType</a><br />
|
|
        3.2.5 <a href=
|
|
"#id-upd-set-to-untyped">upd:setToUntyped</a><br />
|
|
        3.2.6 <a href=
|
|
"#id-upd-propagate-namespace">upd:propagateNamespace</a><br />
|
|
4 <a href="#id-xquery-update-conformance">Conformance</a><br />
|
|
    4.1 <a href=
|
|
"#id-minimal-conformance">Minimal Conformance</a><br />
|
|
    4.2 <a href=
|
|
"#id-conform-optional-features">Optional Features</a><br />
|
|
5 <a href="#id-xqueryx-update-conformance">XQueryX
|
|
Conformance</a><br /></p>
|
|
<h3><a name="appendices" id="appendices"></a>Appendices</h3>
|
|
<p class="toc">A <a href="#id-grammar">EBNF for XQuery 3.0 Grammar
|
|
with Update extensions</a><br />
|
|
    A.1 <a href="#id-terminal-symbols">Terminal
|
|
Symbols</a><br />
|
|
B <a href="#id-impl-defs">Implementation-Defined Items</a><br />
|
|
C <a href="#References">References</a><br />
|
|
    C.1 <a href=
|
|
"#id-normative-references">Normative References</a><br />
|
|
    C.2 <a href=
|
|
"#id-non-normative-references">Non-normative References</a><br />
|
|
D <a href="#id-errors">Error Conditions</a><br />
|
|
    D.1 <a href="#id-new-error-codes">New Error
|
|
Codes</a><br />
|
|
    D.2 <a href=
|
|
"#id-amended-error-codes">Amendments to Existing Error
|
|
Codes</a><br />
|
|
E <a href="#id-xquf-xqueryx">XML Syntax (XQueryX) for XQuery Update
|
|
Facility 3.0</a><br />
|
|
    E.1 <a href=
|
|
"#id-xquf-update-schema">Schema</a><br />
|
|
    E.2 <a href=
|
|
"#id-xquf-update-stylesheet">Stylesheet</a><br />
|
|
    E.3 <a href=
|
|
"#id-xquf-update-examples">Example</a><br />
|
|
        E.3.1 <a href=
|
|
"#id-xquery-rep">XQuery Representation</a><br />
|
|
        E.3.2 <a href=
|
|
"#id-xqueryx-rep">XQueryX Representation</a><br />
|
|
        E.3.3 <a href=
|
|
"#id-transformed-rep">Transformed XQuery Representation</a><br />
|
|
F <a href="#id-glossary">Glossary</a> (Non-Normative)<br />
|
|
G <a href="#id-precedence-rationale">Rationale for Precedence of
|
|
Update Primitives</a> (Non-Normative)<br />
|
|
H <a href="#id-revision-log">Revision Log</a>
|
|
(Non-Normative)<br /></p>
|
|
</div>
|
|
<hr />
|
|
<div class="body">
|
|
<div class="div1">
|
|
<h2><a name="introduction" id="introduction"></a>1
|
|
Introduction</h2>
|
|
<p>This document defines the syntax and semantics of an extension
|
|
to <a href="#xquery-30">[XQuery 3.0: A Query Language]</a> called
|
|
the XQuery Update Facility 3.0. This language extension is designed
|
|
to meet the requirements for updating instances of the <a href=
|
|
"#xpath-datamodel-30">[XQuery and XPath Data Model (XDM) 3.0]</a>,
|
|
as defined in <a href=
|
|
"#xquery-update-30-requirements-use-cases">[XQuery Update Facility
|
|
3.0 Requirements and Use Cases]</a>.</p>
|
|
<p>The XQuery Update Facility 3.0 provides facilities to perform
|
|
any or all of the following operations on an <a title=
|
|
"XDM instance" href="#dt-xdm-instance">XDM instance</a>:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Insertion of a node.</p>
|
|
</li>
|
|
<li>
|
|
<p>Deletion of a node.</p>
|
|
</li>
|
|
<li>
|
|
<p>Modification of a node by changing some of its properties while
|
|
preserving its <a title="node identity" href=
|
|
"#dt-node-identity">node identity</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Creation of a modified copy of a node with a new <a title=
|
|
"node identity" href="#dt-node-identity">node identity</a>.</p>
|
|
</li>
|
|
</ul>
|
|
<p>Additionally, this document defines an XML syntax for the XQuery
|
|
Update Facility 3.0. The most recent versions of the two XQueryX
|
|
XML Schemas and the XQueryX XSLT stylesheet for the XQuery Update
|
|
Facility 3.0 are available at <a href=
|
|
"http://www.w3.org/2011/12/xquery-update-30/xquery-update-30-xqueryx.xsd">
|
|
http://www.w3.org/2011/12/xquery-update-30/xquery-update-30-xqueryx.xsd</a>,
|
|
<a href=
|
|
"http://www.w3.org/2011/12/xquery-update-30/xquery-update-30-xqueryx-redef.xsd">
|
|
http://www.w3.org/2011/12/xquery-update-30/xquery-update-30-xqueryx-redef.xsd</a>,
|
|
and <a href=
|
|
"http://www.w3.org/2011/12/xquery-update-30/xquery-update-30-xqueryx.xsl">
|
|
http://www.w3.org/2011/12/xquery-update-30/xquery-update-30-xqueryx.xsl</a>,
|
|
respectively.</p>
|
|
<div class="div2">
|
|
<h3><a name="id-terminology" id="id-terminology"></a>1.1
|
|
Terminology</h3>
|
|
<p>[<a name="dt-xquery-30" id="dt-xquery-30" title=
|
|
"XQuery 3.0">Definition</a>: Within this document, the term
|
|
<b>XQuery 3.0</b> refers to the language specified by <a href=
|
|
"#xquery-30">[XQuery 3.0: A Query Language]</a>.] [<a name=
|
|
"dt-data-model-30" id="dt-data-model-30" title=
|
|
"data model">Definition</a>: The term <b>data model</b> refers to
|
|
the data model specified by <a href="#xpath-datamodel-30">[XQuery
|
|
and XPath Data Model (XDM) 3.0]</a>.] [<a name="dt-xdm-instance"
|
|
id="dt-xdm-instance" title="XDM instance">Definition</a>: The term
|
|
<b>XDM instance</b> denotes an unconstrained sequence of zero or
|
|
more nodes and/or atomic values as defined by the <a title=
|
|
"data model" href="#dt-data-model-30">data model</a>.] [<a name=
|
|
"dt-node-identity" id="dt-node-identity" title=
|
|
"node identity">Definition</a>: The term <b>node identity</b>
|
|
denotes the unique identity that is a property of every node in an
|
|
<a title="XDM instance" href="#dt-xdm-instance">XDM instance</a>
|
|
(see <a href=
|
|
"http://www.w3.org/TR/xpath-datamodel-30/#node-identity">Section
|
|
2.3 Node Identity</a> <sup><small>DM30</small></sup>.)]</p>
|
|
<p>As described in <a href=
|
|
"http://www.w3.org/TR/xpath-datamodel-30/#qnames-and-notations">Section
|
|
3.3.3 QNames and NOTATIONS</a> <sup><small>DM30</small></sup>,
|
|
names in XQuery are qualified names (QNames) that consist of an
|
|
optional namespace prefix, a local name, and an optional namespace
|
|
URI. [<a name="dt-implied-namespace-binding" id=
|
|
"dt-implied-namespace-binding" title=
|
|
"implied namespace binding">Definition</a>: The <b>implied
|
|
namespace binding</b> of a QName is the association of its
|
|
namespace prefix (or absence thereof) with its namespace URI (or
|
|
absence thereof).] [<a name="dt-conflict" id="dt-conflict" title=
|
|
"conflict">Definition</a>: Two namespace bindings are said to
|
|
<b>conflict</b> if their namespace prefixes (or absence thereof)
|
|
are the same but their namespace URI's (or absence thereof) are
|
|
different.] Update operations that result in conflicting namespace
|
|
bindings generally raise errors, as described in this document.
|
|
However, if the namespace prefix of an attribute is absent, it is
|
|
in no namespace, and its implied namespace binding is not added to
|
|
the namespace bindings of its parent element. Therefore, an update
|
|
operation can create such an attribute in an element even though
|
|
its implied namespace binding conflicts with a namespace binding in
|
|
the "namespaces" property of the element.</p>
|
|
<p>In this document, examples and material labeled as "Note" are
|
|
provided for explanatory purposes and are not normative.</p>
|
|
</div>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="id-extensions" id="id-extensions"></a>2 Extensions to
|
|
XQuery 3.0</h2>
|
|
<p>The basic building block of XQuery is the expression. XQuery 3.0
|
|
provides several kinds of expressions that can be composed with
|
|
each other in arbitrary ways. An XQuery 3.0 expression takes zero
|
|
or more <a title="XDM instance" href="#dt-xdm-instance">XDM
|
|
instances</a> as input and returns an <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a> as a result. In XQuery 3.0, an
|
|
expression never modifies the state of an existing node; however,
|
|
constructor expressions create new nodes with new <a title=
|
|
"node identity" href="#dt-node-identity">node identities</a>.</p>
|
|
<p>XQuery Update Facility 3.0 introduces a new category of
|
|
expression, called an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>, that can
|
|
potentially modify the state of an existing node.</p>
|
|
<p>The extensions to XQuery 3.0 provided by XQuery Update Facility
|
|
3.0 may be characterized as follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>XQuery Update Facility 3.0 introduces five new kinds of
|
|
expressions, called insert, delete, replace, rename, and transform
|
|
expressions, and specifies the syntax and semantics of each new
|
|
kind of expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>XQuery Update Facility 3.0 classifies XQuery expressions into
|
|
the following categories:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>[<a name="dt-basic-updating-expression" id=
|
|
"dt-basic-updating-expression" title=
|
|
"basic updating expression">Definition</a>: A <b>basic updating
|
|
expression</b> is an insert, delete, replace, or rename expression,
|
|
or a call to an <a title="updating function" href=
|
|
"#dt-updating-function">updating function</a>.]</p>
|
|
</li>
|
|
<li>
|
|
<p>[<a name="dt-updating-expression" id="dt-updating-expression"
|
|
title="updating expression">Definition</a>: An <b>updating
|
|
expression</b> is a <a title="basic updating expression" href=
|
|
"#dt-basic-updating-expression">basic updating expression</a> or
|
|
any expression that directly contains an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a> (other than the modify clause of a transform
|
|
expression).]</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>The definition of an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a> is recursive.</p>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p>[<a name="dt-simple-expression" id="dt-simple-expression" title=
|
|
"simple expression">Definition</a>: A <b>simple expression</b> is
|
|
any XQuery expression that is not an <a title="updating expression"
|
|
href="#dt-updating-expression">updating expression</a>.]</p>
|
|
</li>
|
|
<li>
|
|
<p>[<a name="dt-vacuous-expression" id="dt-vacuous-expression"
|
|
title="vacuous expression">Definition</a>: Certain expressions are
|
|
defined in this specification to be <b>vacuous expressions</b>.
|
|
These all have the characteristic that they can be determined
|
|
statically to either return an empty sequence or raise an
|
|
error.]</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>Every vacuous expression is identified explicitly in this
|
|
specification. Some expressions can be determined to either return
|
|
an empty sequence or raise an error, but are nevertheless not
|
|
defined to be vacuous. For convenience, here is a list of the
|
|
vacuous expressions:</p>
|
|
<ul>
|
|
<li>
|
|
<p>A call to the built-in function <code>fn:error</code> is a
|
|
vacuous expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>An empty parenthesized expression ( ) is a vacuous
|
|
expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>A non-empty parenthesized expression is a vacuous expression if
|
|
the expression it contains is a vacuous expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>If all branches are vacuous expressions, a typeswitch or switch
|
|
expression is a vacuous expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>If both branches are vacuous expressions, a conditional
|
|
expression is a vacuous expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the try and catch expressions are vacuous expressions, a
|
|
try/catch expression is a vacuous expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>If all operands are vacuous expressions, a comma expression is a
|
|
vacuous expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the return clause of a FLWOR Expression is vacuous, a FLWOR
|
|
expression is a vacuous expression.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>XQuery Update Facility 3.0 defines the places in which each type
|
|
of expression can be used. In so doing, it makes extensions to the
|
|
syntax and semantics of certain existing expressions.</p>
|
|
</li>
|
|
</ol>
|
|
<p>The classification of each expression into one of the above
|
|
categories is performed by static analysis, according to rules
|
|
specified in this document for each type of expression.</p>
|
|
<div class="div2">
|
|
<h3><a name="id-processing-model" id="id-processing-model"></a>2.1
|
|
Extensions to the Processing Model</h3>
|
|
<p>XQuery Update Facility 3.0 defines the following extensions to
|
|
the XQuery processing model:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>In XQuery 3.0, the result of each expression is an <a title=
|
|
"XDM instance" href="#dt-xdm-instance">XDM instance</a>. XQuery
|
|
Update Facility 3.0 extends the XQuery processing model so that the
|
|
result of an expression consists of both an <a title="XDM instance"
|
|
href="#dt-xdm-instance">XDM instance</a> and a <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a> (either or both of which may be empty). [<a name=
|
|
"dt-pending-update-list" id="dt-pending-update-list" title=
|
|
"pending update list">Definition</a>: A <b>pending update list</b>
|
|
is an unordered collection of <a title="update primitive" href=
|
|
"#dt-update-primitive">update primitives</a>, which represent node
|
|
state changes that have not yet been applied.] The term "result"
|
|
used in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-errors-and-opt">Section 2.3.4
|
|
Errors and Optimization</a> <sup><small>XQ30</small></sup> includes
|
|
both the <a title="XDM instance" href="#dt-xdm-instance">XDM
|
|
instance</a> and the <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> returned by an
|
|
expression.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>In XQuery Update Facility 3.0, no expression returns both a
|
|
non-empty <a title="XDM instance" href="#dt-xdm-instance">XDM
|
|
instance</a> and a non-empty <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a>.</p>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p>XQuery Update Facility 3.0 also defines a set of <a title=
|
|
"update operation" href="#dt-update-operation">update
|
|
operations</a>. [<a name="dt-update-operation" id=
|
|
"dt-update-operation" title="update operation">Definition</a>:
|
|
<b>Update operations</b> are used in defining the semantics of
|
|
XQuery updates, but are not directly available to users. Update
|
|
operations are defined in <a href="#id-update-operations"><b>3
|
|
Update Operations</b></a>.] Update operations fall into the
|
|
following categories:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>[<a name="dt-update-primitive" id="dt-update-primitive" title=
|
|
"update primitive">Definition</a>: <b>Update primitives</b> are the
|
|
components of <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update lists</a>. Each <b>update
|
|
primitive</b> represents a node state change that has not yet been
|
|
applied.] [<a name="dt-target-node" id="dt-target-node" title=
|
|
"target node">Definition</a>: The first argument of an update
|
|
primitive, called its <b>target node</b>, is the principal node to
|
|
be affected by the update primitive.] Update primitives are held on
|
|
<a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update lists</a> until they are
|
|
made effective by a <a href=
|
|
"#id-upd-apply-updates">upd:applyUpdates</a> operation.</p>
|
|
</li>
|
|
<li>
|
|
<p>[<a name="dt-update-routine" id="dt-update-routine" title=
|
|
"update routine">Definition</a>: <b>Update routines</b> are
|
|
sequences of actions that are used in the definition of XQuery
|
|
semantics but do not appear on <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update lists</a>.] <a href=
|
|
"#id-upd-apply-updates">upd:applyUpdates</a> is an example of an
|
|
update routine.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If the outermost expression in a query returns a <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a>, <a href="#id-upd-apply-updates">upd:applyUpdates</a> is
|
|
implicitly invoked, supplying as arguments (a) the pending update
|
|
list, and (b) the value of the revalidation mode in the static
|
|
context of the main query module. This invocation of <a href=
|
|
"#id-upd-apply-updates">upd:applyUpdates</a> may raise an error
|
|
(see <a href="#id-upd-apply-updates"><b>3.2.2
|
|
upd:applyUpdates</b></a> for possible error codes.)</p>
|
|
</li>
|
|
</ol>
|
|
<p>[<a name="dt-snapshot" id="dt-snapshot" title=
|
|
"snapshot">Definition</a>: A <b>snapshot</b> is a scope within
|
|
which expressions are evaluated with respect to a fixed <a title=
|
|
"XDM instance" href="#dt-xdm-instance">XDM instance</a> and updates
|
|
are held pending.] A snapshot is terminated by invocation of the
|
|
<a href="#id-upd-apply-updates">upd:applyUpdates</a> operation.
|
|
XQuery Update Facility 3.0 defines an entire query as one
|
|
snapshot.</p>
|
|
<p>This specification defines the semantics of updates to an
|
|
<a title="XDM instance" href="#dt-xdm-instance">XDM instance</a>.
|
|
Propagation of these updates to an underlying persistent store (if
|
|
any) is beyond the scope of this specification.</p>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-data-model" id="id-data-model"></a>2.2 Extensions
|
|
to the Data Model</h3>
|
|
<p>[<a name="dt-updating-function" id="dt-updating-function" title=
|
|
"updating function">Definition</a>: <a href=
|
|
"http://www.w3.org/TR/xpath-datamodel-30/#dt-function-item">Functions</a><sup><small>DM30</small></sup>
|
|
are extended to allow <b>updating functions</b>, which can return a
|
|
non-empty <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> when
|
|
called.][<a name="dt-simple-function" id="dt-simple-function"
|
|
title="simple function">Definition</a>: If a function is not an
|
|
<b>updating function</b>, then it is a <b>simple function</b>].</p>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-annotations" id="id-annotations"></a>2.3 Extensions
|
|
to Annotations</h3>
|
|
<div class="div3">
|
|
<h4><a name="id-updating-annotation" id=
|
|
"id-updating-annotation"></a>2.3.1 Updating Annotation</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-AnnotatedDecl" id=
|
|
"doc-xquery30-AnnotatedDecl"></a>[26]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-AnnotatedDecl">AnnotatedDecl</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" (<a href=
|
|
"#doc-xquery30-CompatibilityAnnotation">CompatibilityAnnotation</a>
|
|
| <a href="#doc-xquery30-Annotation">Annotation</a>)* (<a href=
|
|
"#doc-xquery30-VarDecl">VarDecl</a> | <a href=
|
|
"#doc-xquery30-FunctionDecl">FunctionDecl</a>)</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-CompatibilityAnnotation" id=
|
|
"doc-xquery30-CompatibilityAnnotation"></a>[27]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-CompatibilityAnnotation">CompatibilityAnnotation</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"updating"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-Annotation" id=
|
|
"doc-xquery30-Annotation"></a>[28]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-Annotation">Annotation</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"%" <a href="#prod-xquery30-EQName">EQName</a> ("("
|
|
<a href="#prod-xquery30-Literal">Literal</a> ("," <a href=
|
|
"#prod-xquery30-Literal">Literal</a>)* ")")?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>XQuery Update Facility 3.0 defines the <code>%fn:updating</code>
|
|
annotation which can be used to declare an updating function. The
|
|
bare keyword <code>updating</code> is also allowed for backwards
|
|
compatibility with XQuery Update 1.0, and behaves exactly as if the
|
|
<code>%fn:updating</code> annotation was specified instead. If the
|
|
<code>%fn:updating</code> annotation is used on a <a href=
|
|
"#doc-xquery30-VarDecl">VarDecl</a>, or is used more than once on a
|
|
<a href="#doc-xquery30-FunctionDecl">FunctionDecl</a>, an error is
|
|
raised [err:TBD]. It is an error to use the
|
|
<code>%fn:updating</code> annotation more than once in a given
|
|
annotation set [err:TBD].</p>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-updating-annotation-assertion" id=
|
|
"id-updating-annotation-assertion"></a>2.3.2 Updating Annotation
|
|
Assertion</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-FunctionTest" id=
|
|
"doc-xquery30-FunctionTest"></a>[190]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-FunctionTest">FunctionTest</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-Annotation">Annotation</a>*
|
|
(<a href="#doc-xquery30-AnyFunctionTest">AnyFunctionTest</a><br />
|
|
| <a href=
|
|
"#doc-xquery30-TypedFunctionTest">TypedFunctionTest</a>)</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-AnyFunctionTest" id=
|
|
"doc-xquery30-AnyFunctionTest"></a>[191]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-AnyFunctionTest">AnyFunctionTest</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"function" "(" "*" ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-TypedFunctionTest" id=
|
|
"doc-xquery30-TypedFunctionTest"></a>[192]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TypedFunctionTest">TypedFunctionTest</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"function" "(" (<a href=
|
|
"#prod-xquery30-SequenceType">SequenceType</a> ("," <a href=
|
|
"#prod-xquery30-SequenceType">SequenceType</a>)*)? ")" "as"
|
|
<a href="#prod-xquery30-SequenceType">SequenceType</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The <code>%fn:updating</code> annotation can also be used as an
|
|
assertion on a <a href=
|
|
"#doc-xquery30-FunctionTest">FunctionTest</a> to change the kind of
|
|
function matched by the test. If the <code>%fn:updating</code>
|
|
assertion is specified on a <a href=
|
|
"#doc-xquery30-FunctionTest">FunctionTest</a>, then it matches both
|
|
<b>simple functions</b> and <b>updating functions</b>. Otherwise
|
|
the <a href="#doc-xquery30-FunctionTest">FunctionTest</a> only
|
|
matches <b>simple functions</b>. It is an error to use the
|
|
<code>%fn:updating</code> annotation more than once in a given
|
|
annotation assertion set [err:TBD].</p>
|
|
</div>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-prolog-extensions" id=
|
|
"id-prolog-extensions"></a>2.4 Extensions to the Prolog</h3>
|
|
<div class="div3">
|
|
<h4><a name="id-revalidation-declaration" id=
|
|
"id-revalidation-declaration"></a>2.4.1 Revalidation
|
|
Declaration</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-Setter" id=
|
|
"doc-xquery30-Setter"></a>[8]   </td>
|
|
<td><code><a href="#prod-xquery30-Setter">Setter</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-BoundarySpaceDecl">BoundarySpaceDecl</a> | <a href=
|
|
"#prod-xquery30-DefaultCollationDecl">DefaultCollationDecl</a> |
|
|
<a href="#prod-xquery30-BaseURIDecl">BaseURIDecl</a> | <a href=
|
|
"#prod-xquery30-ConstructionDecl">ConstructionDecl</a> | <a href=
|
|
"#prod-xquery30-OrderingModeDecl">OrderingModeDecl</a> | <a href=
|
|
"#prod-xquery30-EmptyOrderDecl">EmptyOrderDecl</a> | <a href=
|
|
"#doc-xquery30-RevalidationDecl">RevalidationDecl</a> | <a href=
|
|
"#prod-xquery30-CopyNamespacesDecl">CopyNamespacesDecl</a> |
|
|
<a href=
|
|
"#prod-xquery30-DecimalFormatDecl">DecimalFormatDecl</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-RevalidationDecl" id=
|
|
"doc-xquery30-RevalidationDecl"></a>[195]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-RevalidationDecl">RevalidationDecl</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "revalidation" ("strict" | "lax" |
|
|
"skip")</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The Prolog is extended by adding a new kind of <a href=
|
|
"#doc-xquery30-Setter">Setter</a> called a revalidation
|
|
declaration. [<a name="dt-revalidation-decl" id=
|
|
"dt-revalidation-decl" title=
|
|
"revalidation declaration">Definition</a>: A <b>revalidation
|
|
declaration</b> sets the <a title="revalidation mode" href=
|
|
"#dt-revalidation-mode">revalidation mode</a> in the static
|
|
context, overriding any implementation-defined default.] If a
|
|
Prolog contains more than one revalidation declaration, a static
|
|
error is raised [<a href="#ERRXUST0003" title=
|
|
"err:XUST0003">err:XUST0003</a>]. <a title="revalidation mode"
|
|
href="#dt-revalidation-mode">Revalidation mode</a> controls the
|
|
process by which type information is recovered for an updated
|
|
document, as described in <a href="#id-upd-revalidate"><b>3.2.3
|
|
upd:revalidate</b></a></p>
|
|
<p>Support for each of the three revalidation modes is
|
|
implementation-defined; however, an implementation must support at
|
|
least one of the three revalidation modes. If a revalidation
|
|
declaration specifies a revalidation mode that is not supported by
|
|
the current implementation, a static error is raised [<a href=
|
|
"#ERRXUST0026" title="err:XUST0026">err:XUST0026</a>].</p>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-function-declaration" id=
|
|
"id-function-declaration"></a>2.4.2 Function Declaration</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-FunctionDecl" id=
|
|
"doc-xquery30-FunctionDecl"></a>[33]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-FunctionDecl">FunctionDecl</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"function" <a href="#prod-xquery30-EQName">EQName</a> "("
|
|
<a href="#prod-xquery30-ParamList">ParamList</a>? ")" ("as"
|
|
<a href="#prod-xquery30-SequenceType">SequenceType</a>)? (<a href=
|
|
"#doc-xquery30-FunctionBody">FunctionBody</a> |
|
|
"external")</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Functions can be declared as <a title="updating function" href=
|
|
"#dt-updating-function">updating functions</a> using the
|
|
<code>%fn:updating</code> annotation, or the equivalent
|
|
backwards-compatible bare keyword <code>updating</code>. The
|
|
built-in function <code>fn:put</code> is also specified as an
|
|
<b>updating function</b>.</p>
|
|
<p>The semantics of a function declaration, described in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#FunctionDeclns">Section 4.18
|
|
Function Declaration</a> <sup><small>XQ30</small></sup>, are
|
|
extended as follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If <code>%fn:updating</code> is not specified:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>If <code>external</code> is not specified, the EnclosedExpr in
|
|
the function declaration must be a <a title="simple expression"
|
|
href="#dt-simple-expression">simple expression</a>; otherwise a
|
|
static error is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>external</code> is specified, the external function
|
|
must not return a non-empty <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a>; otherwise a
|
|
dynamic error is raised [<a href="#ERRXUDY0018" title=
|
|
"err:XUDY0018">err:XUDY0018</a>].</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>%fn:updating</code> is specified:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>A return type must not be specified [<a href="#ERRXUST0028"
|
|
title="err:XUST0028">err:XUST0028</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>external</code> is not specified, the EnclosedExpr in
|
|
the function declaration must be an <a title="updating expression"
|
|
href="#dt-updating-expression">updating expression</a> or a
|
|
<a title="vacuous expression" href="#dt-vacuous-expression">vacuous
|
|
expression</a>; otherwise a static error is raised [<a href=
|
|
"#ERRXUST0002" title="err:XUST0002">err:XUST0002</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>external</code> is specified, the external function may
|
|
return a non-empty <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> but it must not
|
|
return a non-empty <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a>; otherwise a dynamic error is
|
|
raised [<a href="#ERRXUDY0019" title=
|
|
"err:XUDY0019">err:XUDY0019</a>].</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
<p>The means by which an external function returns an <a title=
|
|
"XDM instance" href="#dt-xdm-instance">XDM instance</a> or a
|
|
<a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> is
|
|
implementation-defined.</p>
|
|
<p>The following example illustrates a declaration of an
|
|
<b>updating function</b>.</p>
|
|
<ul>
|
|
<li>
|
|
<p>This function takes an element, a QName, and an atomic value. If
|
|
the given element has an attribute with the given QName, the
|
|
function updates the attribute with the given value; otherwise it
|
|
inserts a new attribute with the given name and value.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
declare %updating function
|
|
upsert($e as element(),
|
|
$an as xs:QName,
|
|
$av as xs:anyAtomicType)
|
|
{
|
|
let $ea := $e/attribute()[fn:node-name(.) = $an]
|
|
return
|
|
if (fn:empty($ea))
|
|
then insert node attribute {$an} {$av} into $e
|
|
else replace value of node $ea with $av
|
|
}
|
|
</pre></div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-variable-declaration" id=
|
|
"id-variable-declaration"></a>2.4.3 Variable Declaration</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-VarDecl" id=
|
|
"doc-xquery30-VarDecl"></a>[29]   </td>
|
|
<td><code><a href="#prod-xquery30-VarDecl">VarDecl</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"variable" "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? ((":="
|
|
<a href="#prod-xquery30-VarValue">VarValue</a>) | ("external" (":="
|
|
<a href=
|
|
"#prod-xquery30-VarDefaultValue">VarDefaultValue</a>)?))</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The following rule is added: If the expression on the
|
|
right-hand-side of a variable declaration (the initializing
|
|
expression) is not a <a title="simple expression" href=
|
|
"#dt-simple-expression">simple expression</a>, a static error is
|
|
raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>].</p>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-context-item-declaration" id=
|
|
"id-context-item-declaration"></a>2.4.4 Context Item
|
|
Declaration</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-ContextItemDecl" id=
|
|
"doc-xquery30-ContextItemDecl"></a>[32]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ContextItemDecl">ContextItemDecl</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "context" "item" ("as" <a href=
|
|
"#prod-xquery30-ItemType">ItemType</a>)? ((":=" <a href=
|
|
"#prod-xquery30-VarValue">VarValue</a>) | ("external" (":="
|
|
<a href="#prod-xquery30-VarDefaultValue">VarDefaultValue</a>)?))</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The following rule is added: If the expression on the
|
|
right-hand-side of a context item declaration (the initializing
|
|
expression) is not a <a title="simple expression" href=
|
|
"#dt-simple-expression">simple expression</a>, a static error is
|
|
raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>].</p>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-require-feature" id="id-require-feature"></a>2.4.5
|
|
require-feature and prohibit-feature</h4>
|
|
<p>XQuery Update Facility 3.0 defines the feature name
|
|
<code>"http://www.w3.org/2011/xquery-features":xquery-update</code>
|
|
for the optional feature described by this specification. This
|
|
value can be used to explicitly require or prohibit use of the
|
|
XQuery Update Facility 3.0 optional feature using the
|
|
<code>"http://www.w3.org/2011/xquery-features":require-feature</code>
|
|
and
|
|
<code>"http://www.w3.org/2011/xquery-features":prohibit-feature</code>
|
|
option declarations.</p>
|
|
</div>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-static-context-extensions" id=
|
|
"id-static-context-extensions"></a>2.5 Extensions to the Static
|
|
Context</h3>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>The following definition is added to the XQuery static context
|
|
(documented in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#static_context">Section 2.1.1
|
|
Static Context</a> <sup><small>XQ30</small></sup>):</p>
|
|
<p>[<a name="dt-revalidation-mode" id="dt-revalidation-mode" title=
|
|
"revalidation mode">Definition</a>: <b>Revalidation mode</b>, which
|
|
may be <code>strict</code>, <code>lax</code>, or <code>skip</code>,
|
|
is a component of the static context that controls the behavior of
|
|
the <code><a href="#id-upd-revalidate">upd:revalidate</a></code>
|
|
operation.]</p>
|
|
</li>
|
|
<li>
|
|
<p>The following entry is added to the table of static context
|
|
components (documented in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-xq-static-context-components">Section
|
|
C.1 Static Context Components</a>
|
|
<sup><small>XQ30</small></sup>):</p>
|
|
<ul>
|
|
<li>
|
|
<p>Component: Revalidation mode</p>
|
|
</li>
|
|
<li>
|
|
<p>Default initial value: <code>lax</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Can be overwritten by an implementation: Yes (implementation
|
|
defined.)</p>
|
|
</li>
|
|
<li>
|
|
<p>Can be overwritten by a query: Yes, overwritable by declaration
|
|
in query prolog.</p>
|
|
</li>
|
|
<li>
|
|
<p>Scope: Module.</p>
|
|
</li>
|
|
<li>
|
|
<p>Consistency rules: Must be <code>strict</code>,
|
|
<code>lax</code>, or <code>skip</code>.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-new-expressions" id="id-new-expressions"></a>2.6
|
|
New Kinds of Expressions</h3>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-ExprSingle" id=
|
|
"doc-xquery30-ExprSingle"></a>[41]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-FLWORExpr">FLWORExpr</a><br />
|
|
| <a href="#prod-xquery30-QuantifiedExpr">QuantifiedExpr</a><br />
|
|
| <a href="#doc-xquery30-SwitchExpr">SwitchExpr</a><br />
|
|
| <a href="#doc-xquery30-TypeswitchExpr">TypeswitchExpr</a><br />
|
|
| <a href="#doc-xquery30-IfExpr">IfExpr</a><br />
|
|
| <a href="#doc-xquery30-TryCatchExpr">TryCatchExpr</a><br />
|
|
| <a href="#doc-xquery30-InsertExpr">InsertExpr</a><br />
|
|
| <a href="#doc-xquery30-DeleteExpr">DeleteExpr</a><br />
|
|
| <a href="#doc-xquery30-RenameExpr">RenameExpr</a><br />
|
|
| <a href="#doc-xquery30-ReplaceExpr">ReplaceExpr</a><br />
|
|
| <a href="#doc-xquery30-TransformExpr">TransformExpr</a><br />
|
|
| <a href="#prod-xquery30-OrExpr">OrExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>XQuery Update Facility 3.0 extends the syntax of <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a> by adding five new kinds
|
|
of expressions, called insert, delete, replace, rename, and
|
|
transform expressions. The syntax and semantics of these
|
|
expressions are described in the following sections.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>In general, <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expressions</a> cause a loss of
|
|
type information from nodes that are affected by the update. Type
|
|
information for these nodes may be recovered by a revalidation
|
|
process at the end of the <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a>. For more details on type loss and
|
|
recovery, see the <a title="update primitive" href=
|
|
"#dt-update-primitive">update primitives</a> associated with each
|
|
updating expression; see also <a href=
|
|
"#id-upd-remove-type"><b>3.2.4 upd:removeType</b></a> and <a href=
|
|
"#id-upd-revalidate"><b>3.2.3 upd:revalidate</b></a>.</p>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-insert" id="id-insert"></a>2.6.1 Insert</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-InsertExpr" id=
|
|
"doc-xquery30-InsertExpr"></a>[197]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-InsertExpr">InsertExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"insert" ("node" | "nodes") <a href=
|
|
"#doc-xquery30-SourceExpr">SourceExpr</a> <a href=
|
|
"#doc-xquery30-InsertExprTargetChoice">InsertExprTargetChoice</a>
|
|
<a href="#doc-xquery30-TargetExpr">TargetExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-InsertExprTargetChoice" id=
|
|
"doc-xquery30-InsertExprTargetChoice"></a>[196]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-InsertExprTargetChoice">InsertExprTargetChoice</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(("as" ("first" | "last"))? "into")<br />
|
|
| "after"<br />
|
|
| "before"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-SourceExpr" id=
|
|
"doc-xquery30-SourceExpr"></a>[201]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-SourceExpr">SourceExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-TargetExpr" id=
|
|
"doc-xquery30-TargetExpr"></a>[202]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TargetExpr">TargetExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>An insert expression is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a> that inserts
|
|
copies of zero or more nodes into a designated position with
|
|
respect to a target node. The keywords <code>node</code> and
|
|
<code>nodes</code> may be used interchangeably, regardless of how
|
|
many nodes are actually inserted. The position of the inserted
|
|
nodes is determined as follows:</p>
|
|
<ul>
|
|
<li>
|
|
<p>If <code>before</code> (or <code>after</code>) is specified:</p>
|
|
<ul>
|
|
<li>
|
|
<p>The inserted nodes become the preceding (or following) siblings
|
|
of the target node.</p>
|
|
</li>
|
|
<li>
|
|
<p>If multiple nodes are inserted by a single insert expression,
|
|
the nodes remain adjacent and their order preserves the node
|
|
ordering of the source expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>If multiple groups of nodes are inserted by multiple insert
|
|
expressions in the same <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a>, adjacency and ordering of nodes within
|
|
each group is preserved but ordering among the groups is
|
|
implementation-dependent.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>If <code>as first into</code> (or <code>as last into</code>) is
|
|
specified:</p>
|
|
<ul>
|
|
<li>
|
|
<p>The inserted nodes become the first (or last) children of the
|
|
target node.</p>
|
|
</li>
|
|
<li>
|
|
<p>If multiple nodes are inserted by a single insert expression,
|
|
the nodes remain adjacent and their order preserves the node
|
|
ordering of the source expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>If multiple groups of nodes are inserted by multiple insert
|
|
expressions in the same <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a>, adjacency and ordering of nodes within
|
|
each group is preserved but ordering among the groups is
|
|
implementation-dependent.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>If <code>into</code> is specified without <code>as first</code>
|
|
or <code>as last</code>:</p>
|
|
<ul>
|
|
<li>
|
|
<p>The inserted nodes become children of the target node.</p>
|
|
</li>
|
|
<li>
|
|
<p>If multiple nodes are inserted by a single insert expression,
|
|
their order preserves the node ordering of the source
|
|
expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>The positions of the inserted nodes are chosen so as not to
|
|
interfere with the intended position of nodes that are inserted
|
|
with the specification <code>before</code>, <code>after</code>,
|
|
<code>as first into</code>, or <code>as last into</code>. For
|
|
example, If node B is inserted "after node A", no other node will
|
|
be inserted between nodes A and B unless it is also inserted "after
|
|
node A".</p>
|
|
</li>
|
|
<li>
|
|
<p>Subject to the above constraints, the positions of the inserted
|
|
nodes among the children of the target node are
|
|
implementation-dependent.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p>Examples:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Insert a <code>year</code> element after the publisher of the
|
|
first book.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
insert node <year>2005</year>
|
|
after fn:doc("bib.xml")/books/book[1]/publisher
|
|
</pre></div>
|
|
</li>
|
|
<li>
|
|
<p>Navigating by means of several bound variables, insert a new
|
|
police report into the list of police reports for a particular
|
|
accident.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
insert node $new-police-report
|
|
as last into fn:doc("insurance.xml")/policies
|
|
/policy[id = $pid]
|
|
/driver[license = $license]
|
|
/accident[date = $accdate]
|
|
/police-reports
|
|
</pre></div>
|
|
</li>
|
|
</ul>
|
|
<p>The semantics of an insert expression are as follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p><a href="#doc-xquery30-SourceExpr">SourceExpr</a> must be a
|
|
<a title="simple expression" href="#dt-simple-expression">simple
|
|
expression</a>; otherwise a static error is raised [<a href=
|
|
"#ERRXUST0001" title="err:XUST0001">err:XUST0001</a>]. <a href=
|
|
"#doc-xquery30-SourceExpr">SourceExpr</a> is evaluated as though it
|
|
were an enclosed expression in an element constructor (see Rule 1e
|
|
in <a href="http://www.w3.org/TR/xquery-30/#id-content">Section
|
|
3.9.1.3 Content</a> <sup><small>XQ30</small></sup>). The result of
|
|
this step is either an error or a sequence of nodes to be inserted,
|
|
called the <b>insertion sequence</b>. If the insertion sequence
|
|
contains a document node, the document node is replaced in the
|
|
insertion sequence by its children. If the insertion sequence
|
|
contains an attribute node following a node that is not an
|
|
attribute node, a type error is raised [<a href="#ERRXUTY0004"
|
|
title="err:XUTY0004">err:XUTY0004</a>]. Let <code>$alist</code> be
|
|
the sequence of attribute nodes in the insertion sequence. Let
|
|
<code>$clist</code> be the remainder of the insertion sequence, in
|
|
its original order.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>Either <code>$alist</code> or <code>$clist</code> or both may be
|
|
empty.</p>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p>The target expression must be a <a title="simple expression"
|
|
href="#dt-simple-expression">simple expression</a>; otherwise a
|
|
static error is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>]. The target expression is
|
|
evaluated and checked as follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>If the result is an empty sequence, [<a href="#ERRXUDY0027"
|
|
title="err:XUDY0027">err:XUDY0027</a>] is raised.</p>
|
|
</li>
|
|
<li>
|
|
<p>If any form of <code>into</code> is specified, the result must
|
|
be a single element or document node; any other non-empty result
|
|
raises a type error [<a href="#ERRXUTY0005" title=
|
|
"err:XUTY0005">err:XUTY0005</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>before</code> or <code>after</code> is specified, the
|
|
result must be a single element, text, comment, or processing
|
|
instruction node; any other non-empty result raises a type error
|
|
[<a href="#ERRXUTY0006" title="err:XUTY0006">err:XUTY0006</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>before</code> or <code>after</code> is specified, the
|
|
node returned by the target expression must have a non-empty
|
|
<code>parent</code> property [<a href="#ERRXUDY0029" title=
|
|
"err:XUDY0029">err:XUDY0029</a>].</p>
|
|
</li>
|
|
</ol>
|
|
<p>Let <code>$target</code> be the node returned by the target
|
|
expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$alist</code> is not empty and any form of
|
|
<code>into</code> is specified, the following checks are
|
|
performed:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>$target</code> must be an element node [<a href=
|
|
"#ERRXUTY0022" title="err:XUTY0022">err:XUTY0022</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>No attribute node in <code>$alist</code> may have a QName whose
|
|
<a title="implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace binding</a>
|
|
<a title="conflict" href="#dt-conflict">conflicts</a> with a
|
|
namespace binding in the "namespaces" property of
|
|
<code>$target</code> [<a href="#ERRXUDY0023" title=
|
|
"err:XUDY0023">err:XUDY0023</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Multiple attribute nodes in <code>$alist</code> may not have
|
|
QNames whose <a title="implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace bindings</a>
|
|
<a title="conflict" href="#dt-conflict">conflict</a> with each
|
|
other [<a href="#ERRXUDY0024" title=
|
|
"err:XUDY0024">err:XUDY0024</a>].</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$alist</code> is not empty and <code>before</code> or
|
|
<code>after</code> is specified, the following checks are
|
|
performed:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>parent($target)</code> must be an element node [<a href=
|
|
"#ERRXUDY0030" title="err:XUDY0030">err:XUDY0030</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>No attribute node in <code>$alist</code> may have a QName whose
|
|
<a title="implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace binding</a>
|
|
<a title="conflict" href="#dt-conflict">conflicts</a> with a
|
|
namespace binding in the "namespaces" property of
|
|
<code>parent($target)</code> [<a href="#ERRXUDY0023" title=
|
|
"err:XUDY0023">err:XUDY0023</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Multiple attribute nodes in <code>$alist</code> may not have
|
|
QNames whose <a title="implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace bindings</a>
|
|
<a title="conflict" href="#dt-conflict">conflict</a> with each
|
|
other [<a href="#ERRXUDY0024" title=
|
|
"err:XUDY0024">err:XUDY0024</a>].</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>The result of the insert expression is an empty <a title=
|
|
"XDM instance" href="#dt-xdm-instance">XDM instance</a> and a
|
|
<a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> constructed as
|
|
follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>If <code>as first into</code> is specified, the <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a> consists of the following <a title="update primitive"
|
|
href="#dt-update-primitive">update primitives</a>:</p>
|
|
<ol class="enumlr">
|
|
<li>
|
|
<p>If <code>$alist</code> is not empty, <code><a href=
|
|
"#id-upd-insert-attributes">upd:insertAttributes</a>($target,
|
|
$alist)</code></p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$clist</code> is not empty, <code><a href=
|
|
"#id-upd-insert-into-as-first">upd:insertIntoAsFirst</a>($target,
|
|
$clist)</code></p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>as last into</code> is specified, the <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a> consists of the following <a title="update primitive"
|
|
href="#dt-update-primitive">update primitives</a>:</p>
|
|
<ol class="enumlr">
|
|
<li>
|
|
<p>If <code>$alist</code> is not empty, <code><a href=
|
|
"#id-upd-insert-attributes">upd:insertAttributes</a>($target,
|
|
$alist)</code></p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$clist</code> is not empty, <code><a href=
|
|
"#id-upd-insert-into-as-last">upd:insertIntoAsLast($target,
|
|
$clist)</a></code></p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>into</code> is specified with neither <code>as
|
|
first</code> nor <code>as last</code>, the <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a> consists of the following <a title="update primitive"
|
|
href="#dt-update-primitive">update primitives</a>:</p>
|
|
<ol class="enumlr">
|
|
<li>
|
|
<p>If <code>$alist</code> is not empty, <code><a href=
|
|
"#id-upd-insert-attributes">upd:insertAttributes</a>($target,
|
|
$alist)</code></p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$clist</code> is not empty, <code><a href=
|
|
"#id-upd-insert-into">upd:insertInto</a>($target,
|
|
$clist)</code></p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>before</code> is specified, let <code>$parent</code> be
|
|
the parent node of <code>$target</code>. The <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a> consists of the following <a title="update primitive"
|
|
href="#dt-update-primitive">update primitives</a>:</p>
|
|
<ol class="enumlr">
|
|
<li>
|
|
<p>If <code>$alist</code> is not empty, <code><a href=
|
|
"#id-upd-insert-attributes">upd:insertAttributes</a>($parent,
|
|
$alist)</code></p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$clist</code> is not empty, <code><a href=
|
|
"#id-upd-insert-before">upd:insertBefore($target,
|
|
$clist)</a></code></p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>after</code> is specified, let <code>$parent</code> be
|
|
the parent node of <code>$target</code>. The <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a> consists of the following <a title="update primitive"
|
|
href="#dt-update-primitive">update primitives</a>:</p>
|
|
<ol class="enumlr">
|
|
<li>
|
|
<p>If <code>$alist</code> is not empty, <code><a href=
|
|
"#id-upd-insert-attributes">upd:insertAttributes</a>($parent,
|
|
$alist)</code></p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$clist</code> is not empty, <code><a href=
|
|
"#id-upd-insert-after">upd:insertAfter</a>($target,
|
|
$clist)</code></p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-delete" id="id-delete"></a>2.6.2 Delete</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-DeleteExpr" id=
|
|
"doc-xquery30-DeleteExpr"></a>[198]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-DeleteExpr">DeleteExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"delete" ("node" | "nodes") <a href=
|
|
"#doc-xquery30-TargetExpr">TargetExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="noid_d3e1450.doc-xquery30-TargetExpr" id=
|
|
"noid_d3e1450.doc-xquery30-TargetExpr"></a>[202]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TargetExpr">TargetExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>A delete expression deletes zero or more nodes from an <a title=
|
|
"XDM instance" href="#dt-xdm-instance">XDM instance</a>. The
|
|
keywords <code>node</code> and <code>nodes</code> may be used
|
|
interchangeably, regardless of how many nodes are actually deleted.
|
|
A delete expression is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>.</p>
|
|
<p>Examples:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Delete the last author of the first book in a given
|
|
bibliography.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
delete node fn:doc("bib.xml")/books/book[1]/author[last()]
|
|
</pre></div>
|
|
</li>
|
|
<li>
|
|
<p>Delete all email messages that are more than 365 days old.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
delete nodes /email/message
|
|
[fn:currentDate() - date > xs:dayTimeDuration("P365D")]
|
|
</pre></div>
|
|
</li>
|
|
</ul>
|
|
<p>The semantics of a delete expression are as follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>The target expression must be a <a title="simple expression"
|
|
href="#dt-simple-expression">simple expression</a>; otherwise a
|
|
static error is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>]. The target expression is
|
|
evaluated. The result must be a sequence of zero or more nodes;
|
|
otherwise a type error is raised [<a href="#ERRXUTY0007" title=
|
|
"err:XUTY0007">err:XUTY0007</a>]. Let <code>$tlist</code> be the
|
|
list of nodes returned by the target expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>If any node in <code>$tlist</code> has no parent, it is removed
|
|
from <code>$tlist</code> (and is thus ignored in the following
|
|
step).</p>
|
|
</li>
|
|
<li>
|
|
<p>A new <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> is created. For
|
|
each node <code>$tnode</code> in <code>$tlist</code>, the following
|
|
<a title="update primitive" href="#dt-update-primitive">update
|
|
primitive</a> is appended to the pending update list:
|
|
<code>upd:delete($tnode)</code>. The resulting pending update list
|
|
(together with an empty <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a>) is the result of the delete
|
|
expression.</p>
|
|
</li>
|
|
</ol>
|
|
<div class="note">
|
|
<p class="prefix"><b>Notes:</b></p>
|
|
<ul>
|
|
<li>
|
|
<p>Since node deletions do not become effective until the end of a
|
|
<a title="snapshot" href="#dt-snapshot">snapshot</a>, they have no
|
|
effect on variable bindings or on the set of available documents or
|
|
collections within the current query.</p>
|
|
</li>
|
|
<li>
|
|
<p>The semantics of a delete expression are defined in terms of
|
|
their effect on an <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a>: the deleted nodes are detached
|
|
from their parents after completion of the current query. The
|
|
effects of a delete expression on persistent storage are beyond the
|
|
scope of this specification.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-replace" id="id-replace"></a>2.6.3 Replace</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-ReplaceExpr" id=
|
|
"doc-xquery30-ReplaceExpr"></a>[199]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ReplaceExpr">ReplaceExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"replace" ("value" "of")? "node" <a href=
|
|
"#doc-xquery30-TargetExpr">TargetExpr</a> "with" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="noid_d3e1545.doc-xquery30-TargetExpr" id=
|
|
"noid_d3e1545.doc-xquery30-TargetExpr"></a>[202]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TargetExpr">TargetExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>A replace expression is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>. A replace
|
|
expression has two forms, depending on whether <code>value
|
|
of</code> is specified.</p>
|
|
<div class="div4">
|
|
<h5><a name="id-replacing-node" id="id-replacing-node"></a>2.6.3.1
|
|
Replacing a Node</h5>
|
|
<p>If <code>value of</code> is not specified, a replace expression
|
|
replaces one node with a new sequence of zero or more nodes. The
|
|
replacement nodes occupy the position in the node hierarchy that
|
|
was formerly occupied by the node that was replaced. For this
|
|
reason, an attribute node can be replaced only by zero or more
|
|
attribute nodes, and an element, text, comment, or processing
|
|
instruction node can be replaced only by zero or more element,
|
|
text, comment, or processing instruction nodes. Example:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Replace the publisher of the first book with the publisher of
|
|
the second book.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
replace node fn:doc("bib.xml")/books/book[1]/publisher
|
|
with fn:doc("bib.xml")/books/book[2]/publisher
|
|
</pre></div>
|
|
</li>
|
|
</ul>
|
|
<p>The semantics of this form of replace expression are as
|
|
follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>The expression following the keyword <code>with</code> must be a
|
|
<a title="simple expression" href="#dt-simple-expression">simple
|
|
expression</a>; otherwise a static error is raised [<a href=
|
|
"#ERRXUST0001" title="err:XUST0001">err:XUST0001</a>]. This
|
|
expression is evaluated as though it were an enclosed expression in
|
|
an element constructor (see Rule 1e in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-content">Section 3.9.1.3
|
|
Content</a> <sup><small>XQ30</small></sup>). Let
|
|
<code>$rlist</code> be the node sequence that results from this
|
|
evaluation. If <code>$rlist</code> contains a document node, the
|
|
document node is replaced in <code>$rlist</code> by its
|
|
children.</p>
|
|
</li>
|
|
<li>
|
|
<p>The target expression must be a <a title="simple expression"
|
|
href="#dt-simple-expression">simple expression</a>; otherwise a
|
|
static error is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>]. The target expression is
|
|
evaluated and checked as follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>If the result is an empty sequence, [<a href="#ERRXUDY0027"
|
|
title="err:XUDY0027">err:XUDY0027</a>] is raised.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the result is non-empty and does not consist of a single
|
|
element, attribute, text, comment, or processing instruction node,
|
|
[<a href="#ERRXUTY0008" title="err:XUTY0008">err:XUTY0008</a>] is
|
|
raised.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the result consists of a node whose parent property is empty,
|
|
[<a href="#ERRXUDY0009" title="err:XUDY0009">err:XUDY0009</a>] is
|
|
raised.</p>
|
|
</li>
|
|
</ol>
|
|
<p>Let <code>$target</code> be the node returned by the target
|
|
expression, and let <code>$parent</code> be its parent node.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is an element, text, comment, or
|
|
processing instruction node, then <code>$rlist</code> must consist
|
|
exclusively of zero or more element, text, comment, or processing
|
|
instruction nodes [<a href="#ERRXUTY0010" title=
|
|
"err:XUTY0010">err:XUTY0010</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is an attribute node, then:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>$rlist</code> must consist exclusively of zero or more
|
|
attribute nodes [<a href="#ERRXUTY0011" title=
|
|
"err:XUTY0011">err:XUTY0011</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>No attribute node in <code>$rlist</code> may have a QName whose
|
|
<a title="implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace binding</a>
|
|
<a title="conflict" href="#dt-conflict">conflicts</a> with a
|
|
namespace binding in the "namespaces" property of
|
|
<code>$parent</code> [<a href="#ERRXUDY0023" title=
|
|
"err:XUDY0023">err:XUDY0023</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Multiple attribute nodes in <code>$rlist</code> may not have
|
|
QNames whose <a title="implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace bindings</a>
|
|
<a title="conflict" href="#dt-conflict">conflict</a> with each
|
|
other [<a href="#ERRXUDY0024" title=
|
|
"err:XUDY0024">err:XUDY0024</a>].</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>The result of the replace expression is an empty <a title=
|
|
"XDM instance" href="#dt-xdm-instance">XDM instance</a> and a
|
|
<a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> consisting of the
|
|
following <a title="update primitive" href=
|
|
"#dt-update-primitive">update primitive</a>: <code><a href=
|
|
"#id-upd-replacenode">upd:replaceNode</a>($target,
|
|
$rlist)</code></p>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<div class="div4">
|
|
<h5><a name="id-replacing-node-value" id=
|
|
"id-replacing-node-value"></a>2.6.3.2 Replacing the Value of a
|
|
Node</h5>
|
|
<p>If <code>value of</code> is specified, a replace expression is
|
|
used to modify the value of a node while preserving its <a title=
|
|
"node identity" href="#dt-node-identity">node identity</a>.
|
|
Example:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Increase the price of the first book by ten percent.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
replace value of node fn:doc("bib.xml")/books/book[1]/price
|
|
with fn:doc("bib.xml")/books/book[1]/price * 1.1
|
|
</pre></div>
|
|
</li>
|
|
</ul>
|
|
<p>The semantics of this form of replace expression are as
|
|
follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>The expression following the keyword <code>with</code> must be a
|
|
<a title="simple expression" href="#dt-simple-expression">simple
|
|
expression</a>; otherwise a static error is raised [<a href=
|
|
"#ERRXUST0001" title="err:XUST0001">err:XUST0001</a>]. This
|
|
expression is evaluated as though it were the content expression of
|
|
a text node constructor (see Section 3.7.3.4 of <a href=
|
|
"#xquery-30">[XQuery 3.0: A Query Language]</a>.) The result of
|
|
this step, in the absence of errors, is either a single text node
|
|
or an empty sequence. Let <code>$text</code> be the result of this
|
|
step.</p>
|
|
</li>
|
|
<li>
|
|
<p>The target expression must be a <a title="simple expression"
|
|
href="#dt-simple-expression">simple expression</a>; otherwise a
|
|
static error is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>]. The target expression is
|
|
evaluated and checked as follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>If the result is an empty sequence, [<a href="#ERRXUDY0027"
|
|
title="err:XUDY0027">err:XUDY0027</a>] is raised.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the result is non-empty and does not consist of a single
|
|
element, attribute, text, comment, or processing instruction node,
|
|
[<a href="#ERRXUTY0008" title="err:XUTY0008">err:XUTY0008</a>] is
|
|
raised.</p>
|
|
</li>
|
|
</ol>
|
|
<p>Let <code>$target</code> be the node returned by the target
|
|
expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is an element node, the result of the
|
|
replace expression is an empty <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a> and a <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a> consisting of the following <a title="update primitive"
|
|
href="#dt-update-primitive">update primitive</a>: <code><a href=
|
|
"#id-upd-replace-element-content">upd:replaceElementContent</a>($target,
|
|
$text)</code></p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is an attribute, text, comment, or
|
|
processing instruction node, let <code>$string</code> be the string
|
|
value of the text node constructed in Step 1. If Step 1 did not
|
|
construct a text node, let <code>$string</code> be a zero-length
|
|
string. Then:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>If <code>$target</code> is a comment node, and
|
|
<code>$string</code> contains two adjacent hyphens or ends with a
|
|
hyphen, a dynamic error is raised [<a href="#ERRXQDY0072" title=
|
|
"err:XQDY0072">err:XQDY0072</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is a processing instruction node, and
|
|
<code>$string</code> contains the substring "<code>?></code>", a
|
|
dynamic error is raised [<a href="#ERRXQDY0026" title=
|
|
"err:XQDY0026">err:XQDY0026</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>In the absence of errors, the result of a replace expression is
|
|
an empty <a title="XDM instance" href="#dt-xdm-instance">XDM
|
|
instance</a> and a <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> containing the
|
|
following <a title="update primitive" href=
|
|
"#dt-update-primitive">update primitive</a>: <code><a href=
|
|
"#id-upd-replace-value">upd:replaceValue</a>($target,
|
|
$string)</code>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-rename" id="id-rename"></a>2.6.4 Rename</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-RenameExpr" id=
|
|
"doc-xquery30-RenameExpr"></a>[200]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-RenameExpr">RenameExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"rename" "node" <a href=
|
|
"#doc-xquery30-TargetExpr">TargetExpr</a> "as" <a href=
|
|
"#doc-xquery30-NewNameExpr">NewNameExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="noid_d3e1839.doc-xquery30-TargetExpr" id=
|
|
"noid_d3e1839.doc-xquery30-TargetExpr"></a>[202]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TargetExpr">TargetExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-NewNameExpr" id=
|
|
"doc-xquery30-NewNameExpr"></a>[203]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-NewNameExpr">NewNameExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>A rename expression replaces the <code>name</code> property of a
|
|
<a title="data model" href="#dt-data-model-30">data model</a> node
|
|
with a new QName. A rename expression is an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a>.</p>
|
|
<p>Examples:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Rename the first <code>author</code> element of the first book
|
|
to <code>principal-author</code>.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
rename node fn:doc("bib.xml")/books/book[1]/author[1]
|
|
as "principal-author"
|
|
</pre></div>
|
|
</li>
|
|
<li>
|
|
<p>Rename the first <code>author</code> element of the first book
|
|
to the QName that is the value of the variable
|
|
<code>$newname</code>.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
rename node fn:doc("bib.xml")/books/book[1]/author[1]
|
|
as $newname
|
|
</pre></div>
|
|
</li>
|
|
</ul>
|
|
<p>The semantics of a rename expression are as follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>The target expression must be a <a title="simple expression"
|
|
href="#dt-simple-expression">simple expression</a>; otherwise a
|
|
static error is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>]. The target expression is
|
|
evaluated and checked as follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>If the result is an empty sequence, [<a href="#ERRXUDY0027"
|
|
title="err:XUDY0027">err:XUDY0027</a>] is raised.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the result is non-empty and does not consist of a single
|
|
element, attribute, or processing instruction node, [<a href=
|
|
"#ERRXUTY0012" title="err:XUTY0012">err:XUTY0012</a>] is
|
|
raised.</p>
|
|
</li>
|
|
</ol>
|
|
<p>Let <code>$target</code> be the node returned by the target
|
|
expression.</p>
|
|
</li>
|
|
<li>
|
|
<p><a href="#doc-xquery30-NewNameExpr">NewNameExpr</a> must be a
|
|
<a title="simple expression" href="#dt-simple-expression">simple
|
|
expression</a>; otherwise a static error is raised [<a href=
|
|
"#ERRXUST0001" title="err:XUST0001">err:XUST0001</a>]. <a href=
|
|
"#doc-xquery30-NewNameExpr">NewNameExpr</a> is processed as
|
|
follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>If <code>$target</code> is an element node, let
|
|
<code>$QName</code> be the result of evaluating <a href=
|
|
"#doc-xquery30-NewNameExpr">NewNameExpr</a> as though it were the
|
|
name expression of a computed element constructor (see <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-computedElements">Section
|
|
3.9.3.1 Computed Element Constructors</a>
|
|
<sup><small>XQ30</small></sup>). If the namespace binding of
|
|
<code>$QName</code> conflicts with any namespace binding in the
|
|
<code>namespaces</code> property of <code>$target</code>, a dynamic
|
|
error is raised [<a href="#ERRXUDY0023" title=
|
|
"err:XUDY0023">err:XUDY0023</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is an attribute node, let
|
|
<code>$QName</code> be the result of evaluating <a href=
|
|
"#doc-xquery30-NewNameExpr">NewNameExpr</a> as though it were the
|
|
name expression of a computed attribute constructor (see <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-computedAttributes">Section
|
|
3.9.3.2 Computed Attribute Constructors</a>
|
|
<sup><small>XQ30</small></sup>). If <code>$QName</code> has a
|
|
non-absent namespace URI, and if the namespace binding of
|
|
<code>$QName</code> conflicts with any namespace binding in the
|
|
<code>namespaces</code> property of the parent (if any) of
|
|
<code>$target</code>, a dynamic error is raised [<a href=
|
|
"#ERRXUDY0023" title="err:XUDY0023">err:XUDY0023</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is a processing instruction node, let
|
|
<code>$NCName</code> be the result of evaluating <a href=
|
|
"#doc-xquery30-NewNameExpr">NewNameExpr</a> as though it were the
|
|
name expression of a computed processing instruction constructor
|
|
(see <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-computed-pis">Section 3.9.3.5
|
|
Computed Processing Instruction Constructors</a>
|
|
<sup><small>XQ30</small></sup>), and let <code>$QName</code> be
|
|
defined as <code>fn:QName((), $NCName)</code>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>The result of the rename expression is an empty <a title=
|
|
"XDM instance" href="#dt-xdm-instance">XDM instance</a> and a
|
|
<a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> containing the
|
|
following <a title="update primitive" href=
|
|
"#dt-update-primitive">update primitive</a>: <code><a href=
|
|
"#id-upd-rename">upd:rename</a>($target, $QName)</code>.</p>
|
|
</li>
|
|
</ol>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>The effects of a rename expression are limited to its target
|
|
node. Attributes and descendants of the target node are not
|
|
affected. If a global change of names or namespaces is intended,
|
|
some form of explicit iteration must be used. The following example
|
|
illustrates such a global change. The example operates on the node
|
|
bound to variable <code>$root</code> and all its attributes and
|
|
descendants, changing all QNames with the prefix <code>abc</code>
|
|
to have a new prefix <code>xyz</code> and a new namespace URI
|
|
<code>http://xyz/ns</code>.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
for $node in $root//abc:*
|
|
let $localName := fn:local-name($node),
|
|
$newQName := fn:concat("xyz:", $localName)
|
|
return (
|
|
rename node $node as fn:QName("http://xyz/ns", $newQName),
|
|
for $attr in $node/@abc:*
|
|
let $attrLocalName := fn:local-name($attr),
|
|
$attrNewQName := fn:concat("xyz:", $attrLocalName)
|
|
return
|
|
rename node $attr as fn:QName("http://xyz/ns", $attrNewQName)
|
|
)
|
|
</pre></div>
|
|
</div>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-transform" id="id-transform"></a>2.6.5
|
|
Transform</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-TransformExpr" id=
|
|
"doc-xquery30-TransformExpr"></a>[204]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TransformExpr">TransformExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"copy" "$" <a href="#prod-xquery30-VarName">VarName</a>
|
|
":=" <a href="#doc-xquery30-ExprSingle">ExprSingle</a> ("," "$"
|
|
<a href="#prod-xquery30-VarName">VarName</a> ":=" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a>)* "modify" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a> "return" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>A transform expression can be used to create modified copies of
|
|
existing nodes in an <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a>. Each node created by a
|
|
transform expression has a new <a title="node identity" href=
|
|
"#dt-node-identity">node identity</a>. The result of a transform
|
|
expression is an <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a> that may include both nodes
|
|
that were created by the transform expression and other, previously
|
|
existing nodes. A transform expression is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a> because it does not modify the value of any existing
|
|
nodes.</p>
|
|
<p>Examples:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Return a sequence consisting of all <code>employee</code>
|
|
elements that have Java as a skill, excluding their
|
|
<code>salary</code> child-elements:</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
for $e in //employee[skill = "Java"]
|
|
return
|
|
copy $je := $e
|
|
modify delete node $je/salary
|
|
return $je
|
|
</pre></div>
|
|
</li>
|
|
<li>
|
|
<p>The following example copies a node, modifies the copy, and
|
|
returns both the original node and the modified copy:</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
let $oldx := /a/b/x
|
|
return
|
|
copy $newx := $oldx
|
|
modify (rename node $newx as "newx",
|
|
replace value of node $newx with $newx * 2)
|
|
return ($oldx, $newx)
|
|
</pre></div>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>No persistent changes to the underlying data result from this
|
|
example.</p>
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
<p>A transform expression consists of three clauses, denoted by the
|
|
keywords <code>copy</code>, <code>modify</code>, and
|
|
<code>return</code>. The semantics of a transform expression are as
|
|
follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>The <code>copy</code> clause contains one or more variable
|
|
bindings, each of which consists of a variable name and an
|
|
expression called the <b>source expression</b>. Each variable
|
|
binding is processed as follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>The source expression must be a <a title="simple expression"
|
|
href="#dt-simple-expression">simple expression</a>; otherwise a
|
|
static error is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>The result of evaluating the source expression must be a single
|
|
node [<a href="#ERRXUTY0013" title=
|
|
"err:XUTY0013">err:XUTY0013</a>]. Let <code>$node</code> be this
|
|
single node.</p>
|
|
</li>
|
|
<li>
|
|
<p>A new copy is made of <code>$node</code> and all nodes that have
|
|
<code>$node</code> as an ancestor, collectively referred to as
|
|
<b>copied nodes</b>. Each copied node receives a new node identity.
|
|
The <code>parent</code>, <code>children</code>, and
|
|
<code>attributes</code> properties of the copied nodes are set so
|
|
as to preserve their inter-node relationships. The parent property
|
|
of the copy of <code>$node</code> is set to empty. Other properties
|
|
of the copied nodes are determined as follows:</p>
|
|
<ol class="enumlr">
|
|
<li>
|
|
<p>For a copied element node, the <code>type-name</code> property
|
|
is set to <code>xs:untyped</code>, and the <code>nilled</code>,
|
|
<code>is-id</code>, and <code>is-idrefs</code> properties are set
|
|
to <code>false</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>For a copied attribute node, the <code>type-name</code> property
|
|
is set to <code>xs:untypedAtomic</code> and the
|
|
<code>is-idrefs</code> property is set to <code>false</code>. The
|
|
<code>is-id</code> property is set to <code>true</code> if the
|
|
qualified name of the attribute node is <code>xml:id</code>;
|
|
otherwise it is set to <code>false</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>The string value of each copied element and attribute node
|
|
remains unchanged, and its typed value becomes equal to its string
|
|
value as an instance of <code>xs:untypedAtomic</code>.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>Implementations that store only the typed value of a node are
|
|
required at this point to convert the typed value to a string
|
|
form.</p>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p>If <code>copy-namespaces mode</code> in the static context
|
|
specifies <code>preserve</code>, all in-scope-namespaces of the
|
|
original element are retained in the new copy. If
|
|
<code>copy-namespaces</code> mode specifies
|
|
<code>no-preserve</code>, the new copy retains only those in-scope
|
|
namespaces of the original element that are used in the names of
|
|
the element and its attributes.</p>
|
|
</li>
|
|
<li>
|
|
<p>All other properties of the copied nodes are preserved.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>The variable name is bound to the top-level copied node
|
|
generated in the previous step. The scope of this variable binding
|
|
includes all subexpressions of the containing transform expression
|
|
that appear after the variable binding clause, including the source
|
|
expressions of later variable bindings, but it does not include the
|
|
source expression to which the current variable name is bound.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>The <code>modify</code> clause must be an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a> or a <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expressions</a>; otherwise a
|
|
static error is raised [<a href="#ERRXUST0002" title=
|
|
"err:XUST0002">err:XUST0002</a>]. The expression in the
|
|
<code>modify</code> clause is evaluated, resulting in a <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a>. If the <a title="target node" href=
|
|
"#dt-target-node">target node</a> of any <a title=
|
|
"update primitive" href="#dt-update-primitive">update primitive</a>
|
|
on this pending update list is a node that was not newly created in
|
|
Step 1, a dynamic error is raised [<a href="#ERRXUDY0014" title=
|
|
"err:XUDY0014">err:XUDY0014</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Let <code>$revalidation-mode</code> be the value of the
|
|
revalidation mode in the static context of the transform
|
|
expression. The following <a title="update operation" href=
|
|
"#dt-update-operation">update operation</a> is invoked:
|
|
<code><a href="#id-upd-apply-updates">upd:applyUpdates</a>($pul,
|
|
$revalidation-mode, $inherit-namespaces)</code>. The effect of this
|
|
operation is to make the updates specified in the
|
|
<code>modify</code> clause effective on the copied nodes.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>In the event of incompatible updates, the <a href=
|
|
"#id-upd-apply-updates">upd:applyUpdates</a> operation may raise an
|
|
error, as described in <a href="#id-upd-apply-updates"><b>3.2.2
|
|
upd:applyUpdates</b></a>.</p>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p>The <code>return</code> clause must contain a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>; otherwise a static error is raised [<a href=
|
|
"#ERRXUST0001" title="err:XUST0001">err:XUST0001</a>]. The
|
|
<code>return</code> clause is evaluated, and its result is the
|
|
result of the transform expression. During evaluation of the
|
|
<code>return</code> clause, changes applied to copied nodes by the
|
|
preceding step are visible.</p>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-compatibility" id="id-compatibility"></a>2.6.6
|
|
Compatibility of Updating Expressions</h4>
|
|
<p>The rules defining compatibility of <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expressions</a> within a <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a> are defined in <a href=
|
|
"#id-upd-apply-updates"><b>3.2.2 upd:applyUpdates</b></a>.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>The effect of these rules is as follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If any node is affected by more than one <code>rename</code>
|
|
expression within a <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a>, a dynamic error is raised [<a href=
|
|
"#ERRXUDY0015" title="err:XUDY0015">err:XUDY0015</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If any node is affected by more than one <code>replace</code>
|
|
expression (without <code>value of</code> being specified) within a
|
|
<a title="snapshot" href="#dt-snapshot">snapshot</a>, a dynamic
|
|
error is raised [<a href="#ERRXUDY0016" title=
|
|
"err:XUDY0016">err:XUDY0016</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If any node is affected by more than one <code>replace value
|
|
of</code> expression within a <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a>, a dynamic error is raised [<a href=
|
|
"#ERRXUDY0017" title="err:XUDY0017">err:XUDY0017</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If multiple calls to <code>fn:put</code> operate on the same URI
|
|
in the same <a title="snapshot" href="#dt-snapshot">snapshot</a>, a
|
|
dynamic error is raised [<a href="#ERRXUDY0031" title=
|
|
"err:XUDY0031">err:XUDY0031</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Within a given <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a>, if an element node <code>E</code> is
|
|
the target of a <code>replace value of</code> expression, and the
|
|
children of <code>E</code> are also modified by other expressions,
|
|
the final children of <code>E</code> are determined by the
|
|
<code>replace value of</code> expression. For example:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Suppose that <code>$A</code> is bound to an element node that
|
|
has a child element named <code>B</code>. Suppose that the
|
|
following expressions are evaluated in the same <a title="snapshot"
|
|
href="#dt-snapshot">snapshot</a>:</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
replace node $A/B with <C>Hello</C>,
|
|
replace value of node $A with <D>Goodbye</D>
|
|
</pre></div>
|
|
<p>The expressions on the left and right side of the comma can be
|
|
evaluated in any order. No error is raised. At the end of the
|
|
<a title="snapshot" href="#dt-snapshot">snapshot</a>, the children
|
|
of <code>$A</code> will consist of a single text node with the
|
|
content <code>"Goodbye"</code>.</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-extensions-to-existing" id=
|
|
"id-extensions-to-existing"></a>2.7 Extensions to Existing
|
|
Expressions</h3>
|
|
<p>XQuery Update Facility 3.0 provides extensions to the semantics
|
|
of several existing kinds of XQuery expressions, as specified in
|
|
this section.</p>
|
|
<div class="div3">
|
|
<h4><a name="id-flwor-expr" id="id-flwor-expr"></a>2.7.1 FLWOR
|
|
Expression</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-FLWORExpr" id=
|
|
"doc-xquery30-FLWORExpr"></a>[42]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-FLWORExpr">FLWORExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-InitialClause">InitialClause</a>
|
|
<a href="#doc-xquery30-IntermediateClause">IntermediateClause</a>*
|
|
<a href="#doc-xquery30-ReturnClause">ReturnClause</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-InitialClause" id=
|
|
"doc-xquery30-InitialClause"></a>[43]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-InitialClause">InitialClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-ForClause">ForClause</a> |
|
|
<a href="#doc-xquery30-LetClause">LetClause</a> | <a href=
|
|
"#doc-xquery30-WindowClause">WindowClause</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-IntermediateClause" id=
|
|
"doc-xquery30-IntermediateClause"></a>[44]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-IntermediateClause">IntermediateClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-InitialClause">InitialClause</a> |
|
|
<a href="#doc-xquery30-WhereClause">WhereClause</a> | <a href=
|
|
"#doc-xquery30-GroupByClause">GroupByClause</a> | <a href=
|
|
"#doc-xquery30-OrderByClause">OrderByClause</a> | <a href=
|
|
"#doc-xquery30-CountClause">CountClause</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-ForClause" id=
|
|
"doc-xquery30-ForClause"></a>[45]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ForClause">ForClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"for" <a href="#doc-xquery30-ForBinding">ForBinding</a>
|
|
("," <a href=
|
|
"#doc-xquery30-ForBinding">ForBinding</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-ForBinding" id=
|
|
"doc-xquery30-ForBinding"></a>[46]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ForBinding">ForBinding</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"$" <a href="#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? <a href=
|
|
"#doc-xquery30-AllowingEmpty">AllowingEmpty</a>? <a href=
|
|
"#doc-xquery30-PositionalVar">PositionalVar</a>? "in" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-AllowingEmpty" id=
|
|
"doc-xquery30-AllowingEmpty"></a>[47]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-AllowingEmpty">AllowingEmpty</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"allowing" "empty"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-PositionalVar" id=
|
|
"doc-xquery30-PositionalVar"></a>[48]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-PositionalVar">PositionalVar</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"at" "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-LetClause" id=
|
|
"doc-xquery30-LetClause"></a>[49]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-LetClause">LetClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"let" <a href="#doc-xquery30-LetBinding">LetBinding</a>
|
|
("," <a href=
|
|
"#doc-xquery30-LetBinding">LetBinding</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-LetBinding" id=
|
|
"doc-xquery30-LetBinding"></a>[50]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-LetBinding">LetBinding</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"$" <a href="#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? ":=" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-WindowClause" id=
|
|
"doc-xquery30-WindowClause"></a>[51]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-WindowClause">WindowClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"for" (<a href=
|
|
"#doc-xquery30-TumblingWindowClause">TumblingWindowClause</a> |
|
|
<a href=
|
|
"#doc-xquery30-SlidingWindowClause">SlidingWindowClause</a>)</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-TumblingWindowClause" id=
|
|
"doc-xquery30-TumblingWindowClause"></a>[52]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TumblingWindowClause">TumblingWindowClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"tumbling" "window" "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? "in" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a> <a href=
|
|
"#doc-xquery30-WindowStartCondition">WindowStartCondition</a>
|
|
<a href=
|
|
"#doc-xquery30-WindowEndCondition">WindowEndCondition</a>?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-SlidingWindowClause" id=
|
|
"doc-xquery30-SlidingWindowClause"></a>[53]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-SlidingWindowClause">SlidingWindowClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"sliding" "window" "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? "in" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a> <a href=
|
|
"#doc-xquery30-WindowStartCondition">WindowStartCondition</a>
|
|
<a href=
|
|
"#doc-xquery30-WindowEndCondition">WindowEndCondition</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-WindowStartCondition" id=
|
|
"doc-xquery30-WindowStartCondition"></a>[54]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-WindowStartCondition">WindowStartCondition</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"start" <a href="#doc-xquery30-WindowVars">WindowVars</a>
|
|
"when" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-WindowEndCondition" id=
|
|
"doc-xquery30-WindowEndCondition"></a>[55]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-WindowEndCondition">WindowEndCondition</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"only"? "end" <a href=
|
|
"#doc-xquery30-WindowVars">WindowVars</a> "when" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-WindowVars" id=
|
|
"doc-xquery30-WindowVars"></a>[56]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-WindowVars">WindowVars</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("$" <a href=
|
|
"#doc-xquery30-CurrentItem">CurrentItem</a>)? <a href=
|
|
"#doc-xquery30-PositionalVar">PositionalVar</a>? ("previous" "$"
|
|
<a href="#doc-xquery30-PreviousItem">PreviousItem</a>)? ("next" "$"
|
|
<a href="#doc-xquery30-NextItem">NextItem</a>)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-CurrentItem" id=
|
|
"doc-xquery30-CurrentItem"></a>[57]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-CurrentItem">CurrentItem</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-PreviousItem" id=
|
|
"doc-xquery30-PreviousItem"></a>[58]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-PreviousItem">PreviousItem</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-NextItem" id=
|
|
"doc-xquery30-NextItem"></a>[59]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-NextItem">NextItem</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-CountClause" id=
|
|
"doc-xquery30-CountClause"></a>[60]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-CountClause">CountClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"count" "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-WhereClause" id=
|
|
"doc-xquery30-WhereClause"></a>[61]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-WhereClause">WhereClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"where" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-GroupByClause" id=
|
|
"doc-xquery30-GroupByClause"></a>[62]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-GroupByClause">GroupByClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"group" "by" <a href=
|
|
"#doc-xquery30-GroupingSpecList">GroupingSpecList</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-GroupingSpecList" id=
|
|
"doc-xquery30-GroupingSpecList"></a>[63]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-GroupingSpecList">GroupingSpecList</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-GroupingSpec">GroupingSpec</a>
|
|
("," <a href=
|
|
"#doc-xquery30-GroupingSpec">GroupingSpec</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-GroupingSpec" id=
|
|
"doc-xquery30-GroupingSpec"></a>[64]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-GroupingSpec">GroupingSpec</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"$" <a href="#prod-xquery30-VarName">VarName</a>
|
|
(<a href="#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? ":="
|
|
<a href="#doc-xquery30-ExprSingle">ExprSingle</a>)? ("collation"
|
|
<a href="#prod-xquery30-URILiteral">URILiteral</a>)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-OrderByClause" id=
|
|
"doc-xquery30-OrderByClause"></a>[65]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-OrderByClause">OrderByClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(("order" "by") | ("stable" "order" "by")) <a href=
|
|
"#doc-xquery30-OrderSpecList">OrderSpecList</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-OrderSpecList" id=
|
|
"doc-xquery30-OrderSpecList"></a>[66]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-OrderSpecList">OrderSpecList</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-OrderSpec">OrderSpec</a> (","
|
|
<a href="#doc-xquery30-OrderSpec">OrderSpec</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-OrderSpec" id=
|
|
"doc-xquery30-OrderSpec"></a>[67]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-OrderSpec">OrderSpec</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-ExprSingle">ExprSingle</a>
|
|
<a href="#doc-xquery30-OrderModifier">OrderModifier</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-OrderModifier" id=
|
|
"doc-xquery30-OrderModifier"></a>[68]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-OrderModifier">OrderModifier</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("ascending" | "descending")? ("empty" ("greatest" |
|
|
"least"))? ("collation" <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a>)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-ReturnClause" id=
|
|
"doc-xquery30-ReturnClause"></a>[69]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ReturnClause">ReturnClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"return" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The syntax of the FLWOR expression is not changed. Its semantics
|
|
are extended as follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If a <a href="#doc-xquery30-ForClause">ForClause</a>, <a href=
|
|
"#doc-xquery30-LetClause">LetClause</a>, <a href=
|
|
"#doc-xquery30-WindowClause">WindowClause</a>, <a href=
|
|
"#doc-xquery30-WhereClause">WhereClause</a>, <a href=
|
|
"#doc-xquery30-GroupByClause">GroupByClause</a>, or <a href=
|
|
"#doc-xquery30-OrderByClause">OrderByClause</a> contains an
|
|
<a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>, a static error
|
|
is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>The <a href="#doc-xquery30-ReturnClause">ReturnClause</a> may
|
|
contain any category of expression. The category of the FLWOR
|
|
expression is the same as the category of the expression in its
|
|
<a href="#doc-xquery30-ReturnClause">ReturnClause</a> (simple,
|
|
vacuous, or updating.)</p>
|
|
</li>
|
|
<li>
|
|
<p>If the <a href="#doc-xquery30-ReturnClause">ReturnClause</a>
|
|
contains a <a title="simple expression" href=
|
|
"#dt-simple-expression">simple expression</a>, the semantics of the
|
|
FLWOR expression are as specified in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-flwor-expressions">Section 3.10
|
|
FLWOR Expressions</a> <sup><small>XQ30</small></sup>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the <a href="#doc-xquery30-ReturnClause">ReturnClause</a>
|
|
contains an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>, the semantics of
|
|
the FLWOR expression are as follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>The semantics of all clauses other than the <a href=
|
|
"#doc-xquery30-ReturnClause">ReturnClause</a> are as specified in
|
|
<a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-flwor-expressions">Section 3.10
|
|
FLWOR Expressions</a> <sup><small>XQ30</small></sup>. These clauses
|
|
generate a stream of tuples of bound variables.</p>
|
|
</li>
|
|
<li>
|
|
<p>For each tuple generated by the previous step, the updating
|
|
expression in the <a href=
|
|
"#doc-xquery30-ReturnClause">ReturnClause</a> is evaluated,
|
|
resulting in a <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>All the <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update lists</a> generated by the
|
|
previous step are merged by successive invocations of the
|
|
<code><a href="#id-upd-merge-updates">upd:mergeUpdates</a></code>
|
|
operation. The resulting merged pending update list is the result
|
|
of the FLWOR expression.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>In the event of incompatible updates, the <code><a href=
|
|
"#id-upd-merge-updates">upd:mergeUpdates</a></code> operation may
|
|
raise an error, as described in <a href=
|
|
"#id-upd-merge-updates"><b>3.2.1 upd:mergeUpdates</b></a>.</p>
|
|
</div>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
<p>The following example illustrates the use of an updating
|
|
expression in a FLWOR expression:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Update an inventory of parts according to a set of changes
|
|
provided in the bound variable <code>$changes</code>. Both
|
|
<code>/inventory</code> and <code>$changes</code> contain a set of
|
|
<code>part</code> elements, each with a <code>partno</code> and a
|
|
<code>quantity</code>.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
for $p in /inventory/part
|
|
let $deltap := $changes/part[partno eq $p/partno]
|
|
return
|
|
replace value of node $p/quantity
|
|
with $p/quantity + $deltap/quantity
|
|
</pre></div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-typeswitch-expr" id="id-typeswitch-expr"></a>2.7.2
|
|
Typeswitch Expression</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-TypeswitchExpr" id=
|
|
"doc-xquery30-TypeswitchExpr"></a>[74]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TypeswitchExpr">TypeswitchExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"typeswitch" "(" <a href="#doc-xquery30-Expr">Expr</a>
|
|
")" <a href="#doc-xquery30-CaseClause">CaseClause</a>+ "default"
|
|
("$" <a href="#prod-xquery30-VarName">VarName</a>)? "return"
|
|
<a href="#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-CaseClause" id=
|
|
"doc-xquery30-CaseClause"></a>[75]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-CaseClause">CaseClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"case" ("$" <a href="#prod-xquery30-VarName">VarName</a>
|
|
"as")? <a href=
|
|
"#doc-xquery30-SequenceTypeUnion">SequenceTypeUnion</a> "return"
|
|
<a href="#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-SequenceTypeUnion" id=
|
|
"doc-xquery30-SequenceTypeUnion"></a>[76]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-SequenceTypeUnion">SequenceTypeUnion</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-SequenceType">SequenceType</a>
|
|
("|" <a href=
|
|
"#prod-xquery30-SequenceType">SequenceType</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The syntax of the typeswitch expression is not changed. Its
|
|
semantics are extended as follows. Let the expressions in the
|
|
<code>case</code> and <code>default</code> clauses be called
|
|
<b>branches</b>. Then:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If the operand expression of a typeswitch is an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a>, a static error is raised [<a href="#ERRXUST0001"
|
|
title="err:XUST0001">err:XUST0001</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If any branch is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>, then all
|
|
branches must be <a title="updating expression" href=
|
|
"#dt-updating-expression">updating</a> or <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous
|
|
expressions</a> [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>]. In this case, the typeswitch
|
|
expression is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If all branches are <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expressions</a>, the typeswitch
|
|
expression is a <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Otherwise, the typeswitch expression is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the typeswitch expression is a <a title="simple expression"
|
|
href="#dt-simple-expression">simple</a> (including <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous</a>)
|
|
expression, its semantics are as specified in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-typeswitch">Section 3.16.2
|
|
Typeswitch</a> <sup><small>XQ30</small></sup>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the typeswitch expression is an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a>, then selection of the effective case and binding of
|
|
variables are performed as specified in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-typeswitch">Section 3.16.2
|
|
Typeswitch</a> <sup><small>XQ30</small></sup>. The expression in
|
|
the <code>return</code> clause of the effective case (or default)
|
|
is then evaluated, resulting in a <a title="pending update list"
|
|
href="#dt-pending-update-list">pending update list</a>, which
|
|
serves as the result of the typeswitch expression.</p>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-switch-expr" id="id-switch-expr"></a>2.7.3 Switch
|
|
Expression</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-SwitchExpr" id=
|
|
"doc-xquery30-SwitchExpr"></a>[71]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-SwitchExpr">SwitchExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"switch" "(" <a href="#doc-xquery30-Expr">Expr</a> ")"
|
|
<a href="#doc-xquery30-SwitchCaseClause">SwitchCaseClause</a>+
|
|
"default" "return" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-SwitchCaseClause" id=
|
|
"doc-xquery30-SwitchCaseClause"></a>[72]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-SwitchCaseClause">SwitchCaseClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("case" <a href=
|
|
"#doc-xquery30-SwitchCaseOperand">SwitchCaseOperand</a>)+ "return"
|
|
<a href="#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-SwitchCaseOperand" id=
|
|
"doc-xquery30-SwitchCaseOperand"></a>[73]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-SwitchCaseOperand">SwitchCaseOperand</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The syntax of the switch expression is not changed. Its
|
|
semantics are extended as follows. Let the return expressions in
|
|
the <code>case</code> and <code>default</code> clauses be called
|
|
<b>branches</b>. Then:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If the <b>switch operand expression</b> or any <a href=
|
|
"#doc-xquery30-SwitchCaseOperand">SwitchCaseOperand</a> is an
|
|
<a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>, a static error
|
|
is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If any <b>branch</b> is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>, then all
|
|
branches must be <a title="updating expression" href=
|
|
"#dt-updating-expression">updating</a> or <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous
|
|
expressions</a> [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>]. In this case, the switch
|
|
expression is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If all branches are <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expressions</a>, the switch
|
|
expression is a <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Otherwise, the switch expression is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the switch expression is a <a title="simple expression" href=
|
|
"#dt-simple-expression">simple</a> (including <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous</a>)
|
|
expression, its semantics are as specified in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-switch">Section 3.13 Switch
|
|
Expression</a> <sup><small>XQ30</small></sup>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the switch expression is an <a title="updating expression"
|
|
href="#dt-updating-expression">updating expression</a>, then
|
|
selection of the effective case is performed as specified in
|
|
<a href="http://www.w3.org/TR/xquery-30/#id-switch">Section 3.13
|
|
Switch Expression</a> <sup><small>XQ30</small></sup>. The
|
|
expression in the <code>return</code> clause of the effective case
|
|
(or default) is then evaluated, resulting in a <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a>, which serves as the result of the switch expression.</p>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-conditional-expr" id=
|
|
"id-conditional-expr"></a>2.7.4 Conditional Expression</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-IfExpr" id=
|
|
"doc-xquery30-IfExpr"></a>[77]   </td>
|
|
<td><code><a href="#prod-xquery30-IfExpr">IfExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"if" "(" <a href="#doc-xquery30-Expr">Expr</a> ")" "then"
|
|
<a href="#doc-xquery30-ExprSingle">ExprSingle</a> "else" <a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The semantics of conditional expressions are extended as
|
|
follows. Let the expressions in the <code>then</code> and
|
|
<code>else</code> clauses be called <b>branches</b>. Then:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If the if-clause contains an <a title="updating expression"
|
|
href="#dt-updating-expression">updating expression</a>, a static
|
|
error is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If either branch is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>, then both
|
|
branches must be <a title="updating expression" href=
|
|
"#dt-updating-expression">updating</a> or <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous
|
|
expressions</a> [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>]. In this case, the conditional
|
|
expression is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If both branches are <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expressions</a>, the conditional
|
|
expression is a <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Otherwise, the conditional expression is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the conditional expression is a <a title="simple expression"
|
|
href="#dt-simple-expression">simple</a> (including <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous</a>)
|
|
expression, its semantics are as specified in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-conditionals">Section 3.12
|
|
Conditional Expressions</a> <sup><small>XQ30</small></sup>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the conditional expression is an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a>, then selection of the effective branch performed as
|
|
specified in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-conditionals">Section 3.12
|
|
Conditional Expressions</a> <sup><small>XQ30</small></sup>. The
|
|
result of the conditional expression is the <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a> returned by the selected branch.</p>
|
|
</li>
|
|
</ol>
|
|
<p>The following example illustrates the use of updating
|
|
expressions in a conditional expression:</p>
|
|
<ul>
|
|
<li>
|
|
<p>If the element bound to variable <code>$e</code> has a
|
|
<code>last-updated</code> attribute, update its value to the
|
|
current date; otherwise insert such an attribute.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
if ($e/@last-updated)
|
|
then replace value of node
|
|
$e/last-updated with fn:currentDate()
|
|
else insert node
|
|
attribute last-updated {fn:currentDate()} into $e
|
|
</pre></div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-try-catch" id="id-try-catch"></a>2.7.5 Try/Catch
|
|
Expression</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-TryCatchExpr" id=
|
|
"doc-xquery30-TryCatchExpr"></a>[78]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TryCatchExpr">TryCatchExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-TryClause">TryClause</a> <a href=
|
|
"#doc-xquery30-CatchClause">CatchClause</a>+</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-TryClause" id=
|
|
"doc-xquery30-TryClause"></a>[79]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TryClause">TryClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"try" "{" <a href=
|
|
"#doc-xquery30-TryTargetExpr">TryTargetExpr</a> "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-TryTargetExpr" id=
|
|
"doc-xquery30-TryTargetExpr"></a>[80]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TryTargetExpr">TryTargetExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-Expr">Expr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-CatchClause" id=
|
|
"doc-xquery30-CatchClause"></a>[81]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-CatchClause">CatchClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"catch" <a href=
|
|
"#doc-xquery30-CatchErrorList">CatchErrorList</a> "{" <a href=
|
|
"#doc-xquery30-Expr">Expr</a> "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-CatchErrorList" id=
|
|
"doc-xquery30-CatchErrorList"></a>[82]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-CatchErrorList">CatchErrorList</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-NameTest">NameTest</a> ("|"
|
|
<a href="#prod-xquery30-NameTest">NameTest</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The semantics of try/catch expressions are extended as
|
|
follows.</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If either the <a href=
|
|
"#doc-xquery30-TryTargetExpr">TryTargetExpr</a> or any of the catch
|
|
expressions are <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expressions</a>, then the others
|
|
must be <a title="updating expression" href=
|
|
"#dt-updating-expression">updating</a> or <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous</a>
|
|
[<a href="#ERRXUST0001" title="err:XUST0001">err:XUST0001</a>]. In
|
|
this case, the try/catch expression is an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the <a href="#doc-xquery30-TryTargetExpr">TryTargetExpr</a>
|
|
and all the catch expressions are <a title="vacuous expression"
|
|
href="#dt-vacuous-expression">vacuous expressions</a>, then the
|
|
try/catch expression is a <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Otherwise, the try/catch expression is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the try/catch expression is a <a title="simple expression"
|
|
href="#dt-simple-expression">simple</a> (including <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous</a>)
|
|
expression, its semantics are as specified in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-try-catch">Section 3.15
|
|
Try/Catch Expressions</a> <sup><small>XQ30</small></sup>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the try/catch expression is an <a title="updating expression"
|
|
href="#dt-updating-expression">updating expression</a>, then the
|
|
<a href="#doc-xquery30-TryTargetExpr">TryTargetExpr</a> is
|
|
evaluated, resulting in a <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> or raising an
|
|
error. If the <a href=
|
|
"#doc-xquery30-TryTargetExpr">TryTargetExpr</a> did not raise an
|
|
error, the result of the try/catch expression is the <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a> returned by it. However if it raises an error, then any
|
|
pending updates from the <a href=
|
|
"#doc-xquery30-TryTargetExpr">TryTargetExpr</a> are discarded, and
|
|
the result of the try/catch expression is the <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
list</a> returned by executing the <a href=
|
|
"#doc-xquery30-CatchClause">CatchClause</a> matching the error, as
|
|
defined in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-try-catch">Section 3.15
|
|
Try/Catch Expressions</a> <sup><small>XQ30</small></sup>.</p>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-comma-expr" id="id-comma-expr"></a>2.7.6 Comma
|
|
Expression</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-Expr" id=
|
|
"doc-xquery30-Expr"></a>[40]   </td>
|
|
<td><code><a href="#prod-xquery30-Expr">Expr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-ExprSingle">ExprSingle</a> (","
|
|
<a href="#doc-xquery30-ExprSingle">ExprSingle</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The semantics of comma expressions (composed of one or more
|
|
expressions concatenated by the comma operator, as described in
|
|
<a href="http://www.w3.org/TR/xquery-30/#construct_seq">Section
|
|
3.4.1 Constructing Sequences</a> <sup><small>XQ30</small></sup>)
|
|
are extended as follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If any operand is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>, then all
|
|
operands must be <a title="updating expression" href=
|
|
"#dt-updating-expression">updating</a> or <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous
|
|
expressions</a> [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>]. In this case, the comma
|
|
expression is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If all operands are <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expressions</a>, the comma
|
|
expression is a <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Otherwise, the comma expression is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the comma expression is a <a title="simple expression" href=
|
|
"#dt-simple-expression">simple</a> (including <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous</a>)
|
|
expression, its semantics are as specified in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#construct_seq">Section 3.4.1
|
|
Constructing Sequences</a> <sup><small>XQ30</small></sup>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the comma expression is an <a title="updating expression"
|
|
href="#dt-updating-expression">updating expression</a>, its operand
|
|
expressions are evaluated (in any order), and the <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
lists</a> returned by the operand expressions are merged by the
|
|
<code><a href="#id-upd-merge-updates">upd:mergeUpdates</a></code>
|
|
operation. The resulting merged <a title="pending update list"
|
|
href="#dt-pending-update-list">pending update list</a> is the
|
|
result of the comma expression.</p>
|
|
</li>
|
|
</ol>
|
|
<p>The following example illustrates the use of an updating comma
|
|
expression:</p>
|
|
<ul>
|
|
<li>
|
|
<p>This example makes the value of an element empty and gives the
|
|
element an <code>xsi:nil="true"</code> attribute. Both of these
|
|
operations may be necessary in order to preserve the validity of
|
|
the element.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
let $q := /inventory/item[serialno = "123456"]/quantity
|
|
return
|
|
( replace value of node $q with ( ),
|
|
insert node attribute xsi:nil {"true"} into $q )
|
|
</pre></div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-parenthesized-expr" id=
|
|
"id-parenthesized-expr"></a>2.7.7 Parenthesized Expression</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-ParenthesizedExpr" id=
|
|
"doc-xquery30-ParenthesizedExpr"></a>[128]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ParenthesizedExpr">ParenthesizedExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"(" <a href="#doc-xquery30-Expr">Expr</a>?
|
|
")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The semantics of a parenthesized expression (any XQuery
|
|
expression enclosed in parentheses) are extended as follows:</p>
|
|
<p>The category of a parenthesized expression is the same as the
|
|
category of the expression enclosed in parentheses, which may have
|
|
any category. The result of a parenthesized expression is also the
|
|
same as the result of the expression enclosed in parentheses.</p>
|
|
<p>An empty parenthesized expression <code>( )</code> is a
|
|
<a title="vacuous expression" href="#dt-vacuous-expression">vacuous
|
|
expression</a>. Its result is an empty sequence and an empty
|
|
<a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a>.</p>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-extension-expr" id="id-extension-expr"></a>2.7.8
|
|
Extension Expression</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-ExtensionExpr" id=
|
|
"doc-xquery30-ExtensionExpr"></a>[103]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ExtensionExpr">ExtensionExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Pragma">Pragma</a>+ "{" <a href=
|
|
"#doc-xquery30-Expr">Expr</a>? "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The semantics of an extension (pragma) expression are extended
|
|
as follows:</p>
|
|
<p>The category of an extension expression is the same as the
|
|
category of the enclosed expression, which may have any category.
|
|
The semantics of an extension expression are implementation
|
|
defined.</p>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-inline-function" id="id-inline-function"></a>2.7.9
|
|
Inline Functions</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-InlineFunctionExpr" id=
|
|
"doc-xquery30-InlineFunctionExpr"></a>[164]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-InlineFunctionExpr">InlineFunctionExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-Annotation">Annotation</a>*
|
|
"function" "(" <a href="#prod-xquery30-ParamList">ParamList</a>?
|
|
")" ("as" <a href="#prod-xquery30-SequenceType">SequenceType</a>)?
|
|
<a href="#doc-xquery30-FunctionBody">FunctionBody</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-FunctionBody" id=
|
|
"doc-xquery30-FunctionBody"></a>[36]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-FunctionBody">FunctionBody</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-EnclosedExpr">EnclosedExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The <code>%fn:updating</code> annotation can be specified at the
|
|
start of the inline function expression. Doing so creates an
|
|
<a title="updating function" href="#dt-updating-function">updating
|
|
function</a>.</p>
|
|
<p>The semantics of an inline function expression are extended as
|
|
follows:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If <code>%fn:updating</code> is not specified:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>The <a href="#doc-xquery30-FunctionBody">FunctionBody</a> must
|
|
not be an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a> [<a href=
|
|
"#ERRXUST0001" title="err:XUST0001">err:XUST0001</a>]</p>
|
|
</li>
|
|
<li>
|
|
<p>The inline function expression will be a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>, returning a <a title="simple function" href=
|
|
"#dt-simple-function">simple function</a>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>%fn:updating</code> is specified:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>A return type must not be specified [<a href="#ERRXUST0028"
|
|
title="err:XUST0028">err:XUST0028</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>The <a href="#doc-xquery30-FunctionBody">FunctionBody</a> must
|
|
be an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating</a> or <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous
|
|
expression</a> [<a href="#ERRXUST0002" title=
|
|
"err:XUST0002">err:XUST0002</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>The inline function expression will be a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>, returning an <a title="updating function" href=
|
|
"#dt-updating-function">updating function</a>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-function-call" id="id-function-call"></a>2.7.10
|
|
Function Calls</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-FunctionCall" id=
|
|
"doc-xquery30-FunctionCall"></a>[132]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-FunctionCall">FunctionCall</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a> <a href=
|
|
"#doc-xquery30-ArgumentList">ArgumentList</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-ArgumentList" id=
|
|
"doc-xquery30-ArgumentList"></a>[120]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ArgumentList">ArgumentList</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"(" (<a href="#doc-xquery30-Argument">Argument</a> (","
|
|
<a href="#doc-xquery30-Argument">Argument</a>)*)? ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-Argument" id=
|
|
"doc-xquery30-Argument"></a>[133]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-Argument">Argument</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-ExprSingle">ExprSingle</a> |
|
|
<a href=
|
|
"#doc-xquery30-ArgumentPlaceholder">ArgumentPlaceholder</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-ArgumentPlaceholder" id=
|
|
"doc-xquery30-ArgumentPlaceholder"></a>[134]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ArgumentPlaceholder">ArgumentPlaceholder</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"?"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The semantics of a function call or partial function application
|
|
are extended as follows:</p>
|
|
<p>The function call is evaluated as specified in <a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-function-calls">Section 3.1.5
|
|
Static Function Calls</a> <sup><small>XQ30</small></sup>. If any
|
|
<a href="http://www.w3.org/TR/xquery-30/#dt-arg-expr">argument
|
|
expression</a><sup><small>XQ30</small></sup> of the function call
|
|
is an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>, a static error
|
|
is raised [<a href="#ERRXUST0001" title=
|
|
"err:XUST0001">err:XUST0001</a>].</p>
|
|
<p>The expression category of a partial function application is as
|
|
follows:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Partial application of an <a title="updating function" href=
|
|
"#dt-updating-function">updating function</a> is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>, returning an <a title="updating function" href=
|
|
"#dt-updating-function">updating function</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Partial application of any other function is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a> returning a <a title="simple function" href=
|
|
"#dt-simple-function">simple function</a>.</p>
|
|
</li>
|
|
</ul>
|
|
<p>The expression category of a function call is as follows:</p>
|
|
<ul>
|
|
<li>
|
|
<p>A call to the built-in function <code>fn:error</code> is a
|
|
<a title="vacuous expression" href="#dt-vacuous-expression">vacuous
|
|
expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>A call to an <a title="updating function" href=
|
|
"#dt-updating-function">updating function</a> is an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>A call to any other function is a <a title="simple expression"
|
|
href="#dt-simple-expression">simple expression</a>.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>This includes calls to built-in functions other than
|
|
<code>fn:error</code> and calls to user-defined functions that were
|
|
not declared to be <code>updating</code>.</p>
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-dynamic-function-invocation" id=
|
|
"id-dynamic-function-invocation"></a>2.7.11 Dynamic Function
|
|
Invocation</h4>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="doc-xquery30-PostfixExpr" id=
|
|
"doc-xquery30-PostfixExpr"></a>[119]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-PostfixExpr">PostfixExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-PrimaryExpr">PrimaryExpr</a>
|
|
(<a href="#prod-xquery30-Predicate">Predicate</a> | <a href=
|
|
"#doc-xquery30-ArgumentList">ArgumentList</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="noid_d3e3251.doc-xquery30-ArgumentList" id=
|
|
"noid_d3e3251.doc-xquery30-ArgumentList"></a>[120]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ArgumentList">ArgumentList</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"(" (<a href="#doc-xquery30-Argument">Argument</a> (","
|
|
<a href="#doc-xquery30-Argument">Argument</a>)*)? ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="noid_d3e3252.doc-xquery30-Argument" id=
|
|
"noid_d3e3252.doc-xquery30-Argument"></a>[133]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-Argument">Argument</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#doc-xquery30-ExprSingle">ExprSingle</a> |
|
|
<a href=
|
|
"#doc-xquery30-ArgumentPlaceholder">ArgumentPlaceholder</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="noid_d3e3253.doc-xquery30-ArgumentPlaceholder" id=
|
|
"noid_d3e3253.doc-xquery30-ArgumentPlaceholder"></a>[134]   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ArgumentPlaceholder">ArgumentPlaceholder</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"?"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The semantics of a dynamic function invocation (or partial
|
|
function application) are extended as follows:</p>
|
|
<p>The dynamic function invocation is evaluated as specified in
|
|
<a href=
|
|
"http://www.w3.org/TR/xquery-30/#id-dynamic-function-invocation">Section
|
|
3.2.2 Dynamic Function Call</a> <sup><small>XQ30</small></sup>. If
|
|
the PrimaryExpr or any <a href=
|
|
"http://www.w3.org/TR/xquery-30/#dt-arg-expr">argument
|
|
expression</a><sup><small>XQ30</small></sup> is an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a>, a static error is raised [<a href="#ERRXUST0001"
|
|
title="err:XUST0001">err:XUST0001</a>].</p>
|
|
<p>The expression category of a partial function application of a
|
|
function is as follows:</p>
|
|
<ul>
|
|
<li>
|
|
<p>Partial application of an <a title="updating function" href=
|
|
"#dt-updating-function">updating function</a> is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>, returning an <a title="updating function" href=
|
|
"#dt-updating-function">updating function</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Partial application of any a <a title="simple function" href=
|
|
"#dt-simple-function">simple function</a> is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a> returning a <a title="simple function" href=
|
|
"#dt-simple-function">simple function</a>.</p>
|
|
</li>
|
|
</ul>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>The XQuery Working Group is aware that in general it cannot be
|
|
determined statically whether a dynamic function invocation is an
|
|
updating expression or not, since the criterion is based on the
|
|
(dynamic) result of the PrimaryExpr. The Working Group intends to
|
|
address this issue in a later version of this specification.</p>
|
|
</div>
|
|
<p>The expression category of a dynamic function invocation is as
|
|
follows:</p>
|
|
<ul>
|
|
<li>
|
|
<p>If the <b>function</b> returned by the PrimaryExpr is an
|
|
<a title="updating function" href="#dt-updating-function">updating
|
|
function</a>, the dynamic function invocation is an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Otherwise the dynamic function invocation is a <a title=
|
|
"simple expression" href="#dt-simple-expression">simple
|
|
expression</a>.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-other-expr" id="id-other-expr"></a>2.7.12 Other
|
|
Expressions</h4>
|
|
<p>The semantics of all XQuery expressions other than FLWOR
|
|
expressions, typeswitch expressions, conditional expressions, comma
|
|
expressions, parenthesized expressions, and function calls are
|
|
extended as follows:</p>
|
|
<p>If any operand of this expression is an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a>, a static error is raised [<a href="#ERRXUST0001"
|
|
title="err:XUST0001">err:XUST0001</a>].</p>
|
|
</div>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-new-functions" id="id-new-functions"></a>2.8
|
|
Extensions to Built-in Function Library</h3>
|
|
<p>XQuery Update Facility 3.0 provides extensions to XQuery
|
|
built-in function library, as specified in this section.</p>
|
|
<div class="div3">
|
|
<h4><a name="id-func-put" id="id-func-put"></a>2.8.1 fn:put</h4>
|
|
<p><em>empty-sequence()</em> <b>put</b>(<var>node()</var>,
|
|
<var>xs:string</var>)</p>
|
|
<p><b>Summary:</b> Stores a document or element to the location
|
|
specified by <code>$uri</code>. This function is normally invoked
|
|
to create a resource on an external storage system such as a file
|
|
system or a database.</p>
|
|
<p>The external effects of <code>fn:put</code> are
|
|
implementation-defined, since they occur outside the domain of
|
|
XQuery. The intent is that, if <code>fn:put</code> is invoked on a
|
|
document node and no error is raised, a subsequent query can access
|
|
the stored document by invoking <code>fn:doc</code> with the same
|
|
URI.</p>
|
|
<p><b>Semantics:</b></p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p><code>fn:put</code> is an updating function.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$node</code> is not a document node or an element node,
|
|
and the implementation does not support <code>fn:put</code> on the
|
|
given node kind, a dynamic error is raised [<a href="#ERRFOUP0001"
|
|
title="err:FOUP0001">err:FOUP0001</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$uri</code> is not a valid lexical representation of
|
|
the <code>xs:anyURI</code> type, a dynamic error is raised
|
|
[<a href="#ERRFOUP0002" title="err:FOUP0002">err:FOUP0002</a>]. If
|
|
<code>$uri</code> is a relative URI reference, it is resolved
|
|
relative to the value of the base URI property in the static
|
|
context.</p>
|
|
</li>
|
|
<li>
|
|
<p>The result of a call to <code>fn:put</code> is an empty
|
|
<a title="XDM instance" href="#dt-xdm-instance">XDM instance</a>
|
|
and a <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> containing the
|
|
following <a title="update primitive" href=
|
|
"#dt-update-primitive">update primitive</a>: <code><a href=
|
|
"#id-upd-put">upd:put</a>($node, $uri)</code>.</p>
|
|
</li>
|
|
</ol>
|
|
<div class="note">
|
|
<p class="prefix"><b>Notes:</b></p>
|
|
<ul>
|
|
<li>
|
|
<p>The results of <code>fn:put</code> do not become effective until
|
|
after completion of the current <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a>. The <code>fn:put</code> function has
|
|
no effect on the set of available documents or collections seen by
|
|
the current <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If a node that is an operand of <code>fn:put</code> is affected
|
|
by updating expressions in the current <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a>, the <code>fn:put</code> function
|
|
operates on the node after these updating expressions are made
|
|
effective. As a result, after completion of the current <a title=
|
|
"snapshot" href="#dt-snapshot">snapshot</a>, the effects of updates
|
|
to <code>$node</code> can be seen via <code>$uri</code>. (For
|
|
details on application of updates, see <a href=
|
|
"#id-upd-apply-updates"><b>3.2.2 upd:applyUpdates</b></a>.)</p>
|
|
</li>
|
|
<li>
|
|
<p>If multiple calls to <code>fn:put</code> in the same <a title=
|
|
"snapshot" href="#dt-snapshot">snapshot</a> operate on the same URI
|
|
(after any necessary resolution of relative URIs), a dynamic error
|
|
[<a href="#ERRXUDY0031" title="err:XUDY0031">err:XUDY0031</a>] is
|
|
raised. The dynamic error is raised by an expression at some level
|
|
of the query that contains more than one call to
|
|
<code>fn:put</code>. For a normative description of this error, see
|
|
<a href="#id-upd-merge-updates"><b>3.2.1 upd:mergeUpdates</b></a>
|
|
and <a href="#id-upd-apply-updates"><b>3.2.2
|
|
upd:applyUpdates</b></a>.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="id-update-operations" id="id-update-operations"></a>3
|
|
Update Operations</h2>
|
|
<p>This section describes the update operations defined by XQuery
|
|
Update Facility 3.0. Although these update operations are described
|
|
using a functional notation, they are not true functions because
|
|
many of them have no return value. These update operations are used
|
|
in defining the semantics of XQuery expressions, but they are not
|
|
directly available to users.</p>
|
|
<p>Update operations consist of <a title="update primitive" href=
|
|
"#dt-update-primitive">update primitives</a>, which are the
|
|
components of <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update lists</a>, and <a title=
|
|
"update routine" href="#dt-update-routine">update routines</a>,
|
|
which are used in defining XQuery semantics but do not appear on
|
|
<a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update lists</a>.</p>
|
|
<div class="div2">
|
|
<h3><a name="id-update-primitives" id=
|
|
"id-update-primitives"></a>3.1 Update Primitives</h3>
|
|
<p>The update primitives described in this section may be held on
|
|
<a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update lists</a>. When an update
|
|
primitive is held on a pending update list, its node operands are
|
|
represented by their <a title="node identity" href=
|
|
"#dt-node-identity">node identities</a>. The semantics of an update
|
|
primitive do not become effective until their pending update list
|
|
is processed by the <code>upd:applyUpdates</code> routine.</p>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-insert-before" id=
|
|
"id-upd-insert-before"></a>3.1.1 upd:insertBefore</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:insertBefore(
|
|
$target as node(),
|
|
$content as node()+)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Inserts <code>$content</code> immediately before
|
|
<code>$target</code>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$target</code> must be an element, text, processing
|
|
instruction, or comment node with a non-empty <code>parent</code>
|
|
property. <code>$content</code> must be a sequence containing only
|
|
element, text, processing instruction, and comment nodes.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>Effects on nodes in <code>$content</code>:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>For each node in <code>$content</code>, the <code>parent</code>
|
|
property is set to <code>parent($target)</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the <code>type-name</code> property of
|
|
<code>parent($target)</code> is <code>xs:untyped</code>, then
|
|
<code><a href=
|
|
"#id-upd-set-to-untyped">upd:setToUntyped()</a></code> is invoked
|
|
on each element or attribute node in <code>$content</code>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>Effects on <code>parent($target)</code>:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>The <code>children</code> property of
|
|
<code>parent($target)</code> is modified to add the nodes in
|
|
<code>$content</code> just before <code>$target</code>, preserving
|
|
their order.</p>
|
|
</li>
|
|
<li>
|
|
<p>If at least one of the nodes in <code>$content</code> is an
|
|
element or text node, <code><a href=
|
|
"#id-upd-remove-type">upd:removeType</a>(parent($target))</code> is
|
|
invoked.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>All the namespace bindings of <code>parent($target)</code> are
|
|
<a title="mark" href="#dt-mark">marked for namespace
|
|
propagation</a>.</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-insert-after" id=
|
|
"id-upd-insert-after"></a>3.1.2 upd:insertAfter</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:insertAfter(
|
|
$target as node(),
|
|
$content as node()+)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Inserts <code>$content</code> immediately after
|
|
<code>$target</code>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$target</code> must be an element, text, processing
|
|
instruction, or comment node with a non-empty <code>parent</code>
|
|
property. <code>$content</code> must be a sequence containing only
|
|
element, text, processing instruction, and comment nodes.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<p>The semantics of <code>upd:insertAfter</code> are identical to
|
|
the semantics of <code>upd:insertBefore</code>, except that Rule 2a
|
|
is changed as follows:</p>
|
|
<ul>
|
|
<li>
|
|
<p>The <code>children</code> property of
|
|
<code>parent($target)</code> is modified to add the nodes in
|
|
<code>$content</code> just after <code>$target</code>, preserving
|
|
their order.</p>
|
|
</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-insert-into" id="id-upd-insert-into"></a>3.1.3
|
|
upd:insertInto</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:insertInto(
|
|
$target as node(),
|
|
$content as node()+)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Inserts <code>$content</code> as the children of
|
|
<code>$target</code>, in an implementation-dependent position.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$target</code> must be an element or document node.
|
|
<code>$content</code> must be a sequence containing only element,
|
|
text, processing instruction, and comment nodes.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<p>The semantics of <code>upd:insertInto</code> are identical to
|
|
the semantics of <code>upd:insertBefore</code>, except that
|
|
<code>$target</code> is substituted everywhere for
|
|
<code>parent($target)</code>, and Rule 2a is changed as
|
|
follows:</p>
|
|
<ul>
|
|
<li>
|
|
<p>The <code>children</code> property of <code>$target</code> is
|
|
changed to add the nodes in <code>$content</code> in
|
|
implementation-dependent positions, preserving their relative
|
|
order.</p>
|
|
</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-insert-into-as-first" id=
|
|
"id-upd-insert-into-as-first"></a>3.1.4 upd:insertIntoAsFirst</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:insertIntoAsFirst(
|
|
$target as node(),
|
|
$content as node()+)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Inserts <code>$content</code> as the first children of
|
|
<code>$target</code>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$target</code> must be an element or document node.
|
|
<code>$content</code> must be a sequence containing only element,
|
|
text, processing instruction, and comment nodes.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<p>The semantics of <code>upd:insertIntoAsFirst</code> are
|
|
identical to the semantics of <code>upd:insertBefore</code>, except
|
|
that <code>$target</code> is substituted everywhere for
|
|
<code>parent($target)</code>, and Rule 2a is changed as
|
|
follows:</p>
|
|
<ul>
|
|
<li>
|
|
<p>The <code>children</code> property of <code>$target</code> is
|
|
changed to add the nodes in <code>$content</code> as the first
|
|
children, preserving their order.</p>
|
|
</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-insert-into-as-last" id=
|
|
"id-upd-insert-into-as-last"></a>3.1.5 upd:insertIntoAsLast</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:insertIntoAsLast(
|
|
$target as node(),
|
|
$content as node()+)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Inserts <code>$content</code> as the last children of
|
|
<code>$target</code>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$target</code> must be an element or document node.
|
|
<code>$content</code> must be a sequence containing only element,
|
|
text, processing instruction, and comment nodes.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<p>The semantics of <code>upd:insertIntoAsLast</code> are identical
|
|
to the semantics of <code>upd:insertBefore</code>, except that
|
|
<code>$target</code> is substituted everywhere for
|
|
<code>parent($target)</code>, and Rule 2a is changed as
|
|
follows:</p>
|
|
<ul>
|
|
<li>
|
|
<p>The <code>children</code> property of <code>$target</code> is
|
|
changed to add the nodes in <code>$content</code> as the last
|
|
children, preserving their order.</p>
|
|
</li>
|
|
</ul>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-insert-attributes" id=
|
|
"id-upd-insert-attributes"></a>3.1.6 upd:insertAttributes</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:insertAttributes(
|
|
$target as element(),
|
|
$content as attribute()+)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Inserts <code>$content</code> as attributes of
|
|
<code>$target</code>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p>None</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>For each node <code>$A</code> in <code>$content</code>:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>The <code>parent</code> property of <code>$A</code> is set to
|
|
<code>$target</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the <code>type-name</code> property of <code>$target</code>
|
|
is <code>xs:untyped</code>, then <code><a href=
|
|
"#id-upd-set-to-untyped">upd:setToUntyped</a>($A)</code> is
|
|
invoked.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>The following properties of <code>$target</code> are
|
|
changed:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>attributes</code>: Modified to add the nodes in
|
|
<code>$content</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>namespaces:</code> Modified to add namespace bindings for
|
|
any attribute namespace prefixes in <code>$content</code> that did
|
|
not already have bindings. These bindings are <a title="mark" href=
|
|
"#dt-mark">marked for namespace propagation</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code><a href=
|
|
"#id-upd-remove-type">upd:removeType</a>($target)</code> is
|
|
invoked.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-delete" id="id-upd-delete"></a>3.1.7
|
|
upd:delete</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:delete(
|
|
$target as node())
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p>None</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If <code>$target</code> has a parent node <code>$P</code>,
|
|
then:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>The <code>parent</code> property of <code>$target</code> is set
|
|
to empty.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is an attribute node, the
|
|
<code>attributes</code> property of <code>$P</code> is modified to
|
|
remove <code>$target</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is a non-attribute node, the
|
|
<code>children</code> property of <code>$P</code> is modified to
|
|
remove <code>$target</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is an element, attribute, or text node,
|
|
and <code>$P</code> is an element node, then <code><a href=
|
|
"#id-upd-remove-type">upd:removeType</a>($P)</code> is invoked.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> has no parent, the <a title=
|
|
"XDM instance" href="#dt-xdm-instance">XDM instance</a> is
|
|
unchanged.</p>
|
|
</li>
|
|
</ol>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>Deleted nodes are detached from their parent nodes; however, a
|
|
node deletion has no effect on variable bindings or on the set of
|
|
available documents or collections during processing of the current
|
|
query.</p>
|
|
</div>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>Multiple <code>upd:delete</code> operations may be applied to
|
|
the same node during execution of a query; this is not an
|
|
error.</p>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-replacenode" id="id-upd-replacenode"></a>3.1.8
|
|
upd:replaceNode</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:replaceNode(
|
|
$target as node(),
|
|
$replacement as node()*)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Replaces <code>$target</code> with
|
|
<code>$replacement</code>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$target</code> must be a node that has a parent. If
|
|
<code>$target</code> is an attribute node,
|
|
<code>$replacement</code> must consist of zero or more attribute
|
|
nodes. If <code>$target</code> is an element, text, comment, or
|
|
processing instruction node, <code>$replacement</code> must be
|
|
consist of zero or more element, text, comment, or processing
|
|
instruction nodes.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>Effects on nodes in <code>$replacement</code>:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>For each node in <code>$replacement</code>, the
|
|
<code>parent</code> property is set to
|
|
<code>parent($target)</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If the <code>type-name</code> property of
|
|
<code>parent($target)</code> is <code>xs:untyped</code>, then
|
|
<code><a href=
|
|
"#id-upd-set-to-untyped">upd:setToUntyped</a>()</code> is invoked
|
|
on each node in <code>$replacement</code>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>Effect on <code>$target</code>:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>The <code>parent</code> property of <code>$target</code> is set
|
|
to empty.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>Effects on <code>parent($target)</code>:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>If <code>$target</code> is an attribute node, the
|
|
<code>attributes</code> property of <code>parent($target)</code> is
|
|
modified by removing <code>$target</code> and adding the nodes in
|
|
<code>$replacement</code> (if any).</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is an attribute node, the
|
|
<code>namespaces</code> property of <code>parent($target)</code> is
|
|
modified to add namespace bindings for any attribute namespace
|
|
prefixes in <code>$replacement</code> that did not already have
|
|
bindings. These bindings are <a title="mark" href="#dt-mark">marked
|
|
for namespace propagation</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is an element, text, comment, or
|
|
processing instruction node, the <code>children</code> property of
|
|
<code>parent($target)</code> is modified by removing
|
|
<code>$target</code> and adding the nodes in
|
|
<code>$replacement</code> (if any) in the former position of
|
|
<code>$target</code>, preserving their order.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> or any node in <code>$replacement</code>
|
|
is an element, attribute, or text node, <code><a href=
|
|
"#id-upd-remove-type">upd:removeType</a>(parent($target))</code> is
|
|
invoked.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-replace-value" id=
|
|
"id-upd-replace-value"></a>3.1.9 upd:replaceValue</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:replaceValue(
|
|
$target as node(),
|
|
$string-value as xs:string)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Replaces the string value of <code>$target</code> with
|
|
<code>$string-value</code>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$target</code> must be an attribute, text, comment, or
|
|
processing instruction node.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If <code>$target</code> is an attribute node:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>string-value</code> of <code>$target</code> is set to
|
|
<code>$string-value</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code><a href=
|
|
"#id-upd-remove-type">upd:removeType</a>($target)</code> is
|
|
invoked.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is a text, comment, or processing
|
|
instruction node: <code>content</code> of <code>$target</code> is
|
|
set to <code>$string-value</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is a text node that has a parent,
|
|
<code><a href=
|
|
"#id-upd-remove-type">upd:removeType</a>(parent($target))</code> is
|
|
invoked.</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-replace-element-content" id=
|
|
"id-upd-replace-element-content"></a>3.1.10
|
|
upd:replaceElementContent</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:replaceElementContent(
|
|
$target as element(),
|
|
$text as text()?)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Replaces the existing children of the element node
|
|
<code>$target</code> by the optional text node <code>$text</code>.
|
|
The attributes of <code>$target</code> are not affected.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p>None.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>For each node <code>$C</code> that is a child of
|
|
<code>$target</code>, the <code>parent</code> property of
|
|
<code>$C</code> is set to empty.</p>
|
|
</li>
|
|
<li>
|
|
<p>The <code>parent</code> property of <code>$text</code> is set to
|
|
<code>$target</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Effects on <code>$target</code>:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>children</code> is set to consist exclusively of
|
|
<code>$text</code>. If <code>$text</code> is an empty sequence,
|
|
then <code>$target</code> has no children.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>typed-value</code> and <code>string-value</code> are set
|
|
to the <code>content</code> property of <code>$text</code>. If
|
|
<code>$text</code> is an empty sequence, then
|
|
<code>typed-value</code> is an empty sequence and
|
|
<code>string-value</code> is an empty string.</p>
|
|
</li>
|
|
<li>
|
|
<p><code><a href=
|
|
"#id-upd-remove-type">upd:removeType($target)</a></code> is
|
|
invoked.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-rename" id="id-upd-rename"></a>3.1.11
|
|
upd:rename</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:rename(
|
|
$target as node(),
|
|
$newName as xs:QName)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Changes the node-name of <code>$target</code> to
|
|
<code>$newName</code>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$target</code> must be an element, attribute, or
|
|
processing instruction node.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If <code>$target</code> is an element node:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>node-name</code> of <code>$target</code> is set to
|
|
<code>$newName</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code><a href=
|
|
"#id-upd-remove-type">upd:removeType</a>($target)</code> is
|
|
invoked.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$newname</code> has no prefix and no namespace URI, the
|
|
<code>namespaces</code> property of <code>$target</code> is
|
|
modified by removing the binding (if any) for the empty prefix.</p>
|
|
</li>
|
|
<li>
|
|
<p>The <code>namespaces</code> property of <code>$target</code> is
|
|
modified to add a namespace binding derived from
|
|
<code>$newName</code>, if this binding did not already exist. This
|
|
binding is <a title="mark" href="#dt-mark">marked for namespace
|
|
propagation</a>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is an attribute node:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>node-name</code> of <code>$target</code> is set to
|
|
<code>$newName</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code><a href=
|
|
"#id-upd-remove-type">upd:removeType</a>($target)</code> is
|
|
invoked.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$newName</code> is <code>xml:id</code>, the
|
|
<code>is-id</code> property of <code>$target</code> is set to
|
|
<code>true</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> has a parent, the
|
|
<code>namespaces</code> property of <code>parent($target)</code> is
|
|
modified to add a namespace binding derived from
|
|
<code>$newName</code>, if this binding did not already exist. This
|
|
binding is <a title="mark" href="#dt-mark">marked for namespace
|
|
propagation</a>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$target</code> is a processing instruction node, its
|
|
<code>target</code> property is set to the local part of
|
|
<code>$newName</code>.</p>
|
|
</li>
|
|
</ol>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>At the end of a <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a>, if multiple attribute nodes with the
|
|
same parent have the same qualified name, an error will be raised
|
|
by <code>upd:applyUpdates</code>.</p>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-put" id="id-upd-put"></a>3.1.12 upd:put</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:put(
|
|
$node as node(),
|
|
$uri as xs:string)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>The XDM node tree rooted at <code>$node</code> is stored to the
|
|
location specified by <code>$uri</code>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$uri</code> must be a valid absolute URI.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<p>The external effects of <code>upd:put</code> are
|
|
implementation-defined, since they occur outside the domain of
|
|
XQuery. The intent is that, if <code>upd:put</code> is invoked on a
|
|
document node and no error is raised, a subsequent query can access
|
|
the stored document by invoking <code>fn:doc</code> with the same
|
|
URI.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-update-routines" id="id-update-routines"></a>3.2
|
|
Update Routines</h3>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-merge-updates" id=
|
|
"id-upd-merge-updates"></a>3.2.1 upd:mergeUpdates</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:mergeUpdates(
|
|
$pul1 as pending-update-list,
|
|
$pul2 as pending-update-list)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Merges two <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update lists</a>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p>None.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>The two <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update lists</a> are merged and a
|
|
single pending update list containing all the update primitives
|
|
from both lists is returned.</p>
|
|
</li>
|
|
<li>
|
|
<p>Optionally, <code>upd:mergeUpdates</code> may raise a dynamic
|
|
error if any of the following conditions are detected:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>Two or more <code>upd:rename</code> primitives on the merged
|
|
list have the same target node [<a href="#ERRXUDY0015" title=
|
|
"err:XUDY0015">err:XUDY0015</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Two or more <code>upd:replaceNode</code> primitives on the
|
|
merged list have the same target node [<a href="#ERRXUDY0016"
|
|
title="err:XUDY0016">err:XUDY0016</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Two or more <code>upd:replaceValue</code> primitives on the
|
|
merged list have the same target node [<a href="#ERRXUDY0017"
|
|
title="err:XUDY0017">err:XUDY0017</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Two or more <code>upd:replaceElementContent</code> primitives on
|
|
the merged list have the same target node [<a href="#ERRXUDY0017"
|
|
title="err:XUDY0017">err:XUDY0017</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Two or more <code>upd:put</code> primitives on the merged list
|
|
have the same <code>$uri</code> operand [<a href="#ERRXUDY0031"
|
|
title="err:XUDY0031">err:XUDY0031</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Two or more primitives on the merged list create <a title=
|
|
"conflict" href="#dt-conflict">conflicting</a> namespace bindings
|
|
for the same element node [<a href="#ERRXUDY0024" title=
|
|
"err:XUDY0024">err:XUDY0024</a>]. The following kinds of primitives
|
|
create namespace bindings:</p>
|
|
<ol class="enumlr">
|
|
<li>
|
|
<p><code>upd:insertAttributes</code> creates one namespace binding
|
|
on the <code>$target</code> element corresponding to the <a title=
|
|
"implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace binding</a> of
|
|
the name of each attribute node in <code>$content</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>upd:replaceNode</code> creates one namespace binding on
|
|
the <code>$target</code> element corresponding to the <a title=
|
|
"implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace binding</a> of
|
|
the name of each attribute node in <code>$replacement</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>upd:rename</code> creates a namespace binding on
|
|
<code>$target</code>, or on the parent (if any) of
|
|
<code>$target</code> if <code>$target</code> is an attribute node,
|
|
corresponding to the <a title="implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace binding</a> of
|
|
<code>$newName</code>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-apply-updates" id=
|
|
"id-upd-apply-updates"></a>3.2.2 upd:applyUpdates</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:applyUpdates(
|
|
$pul as pending-update-list,
|
|
$revalidation-mode as xs:string,
|
|
$inherit-namespaces as xs:boolean)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>This routine ends a <a title="snapshot" href=
|
|
"#dt-snapshot">snapshot</a> by making effective the semantics of
|
|
all the update primitives on a <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> and by
|
|
revalidating the resulting <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a>.</p>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$revalidation-mode</code> must be <code>"strict"</code>,
|
|
<code>"lax"</code>, or <code>"skip"</code></p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>Checks the update primitives on <code>$pul</code> for
|
|
compatibility. Raises a dynamic error if any of the following
|
|
conditions are detected:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>Two or more <code>upd:rename</code> primitives on
|
|
<code>$pul</code> have the same target node [<a href="#ERRXUDY0015"
|
|
title="err:XUDY0015">err:XUDY0015</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Two or more <code>upd:replaceNode</code> primitives on
|
|
<code>$pul</code> have the same target node [<a href="#ERRXUDY0016"
|
|
title="err:XUDY0016">err:XUDY0016</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Two or more <code>upd:replaceValue</code> primitives on
|
|
<code>$pul</code> have the same target node [<a href="#ERRXUDY0017"
|
|
title="err:XUDY0017">err:XUDY0017</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Two or more <code>upd:replaceElementContent</code> primitives on
|
|
<code>$pul</code> have the same target node [<a href="#ERRXUDY0017"
|
|
title="err:XUDY0017">err:XUDY0017</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Two or more <code>upd:put</code> primitives on the merged list
|
|
have the same <code>$uri</code> operand [<a href="#ERRXUDY0031"
|
|
title="err:XUDY0031">err:XUDY0031</a>].</p>
|
|
</li>
|
|
<li>
|
|
<p>Two or more primitives on <code>$pul</code> create <a title=
|
|
"conflict" href="#dt-conflict">conflicting</a> namespace bindings
|
|
for the same element node [<a href="#ERRXUDY0024" title=
|
|
"err:XUDY0024">err:XUDY0024</a>]. The following kinds of primitives
|
|
create namespace bindings:</p>
|
|
<ol class="enumlr">
|
|
<li>
|
|
<p><code>upd:insertAttributes</code> creates one namespace binding
|
|
on the <code>$target</code> element corresponding to the <a title=
|
|
"implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace binding</a> of
|
|
the name of each attribute node in <code>$content</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>upd:replaceNode</code> creates one namespace binding on
|
|
the <code>$target</code> element corresponding to the <a title=
|
|
"implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace binding</a> of
|
|
the name of each attribute node in <code>$replacement</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>upd:rename</code> creates a namespace binding on
|
|
<code>$target</code>, or on the parent (if any) of
|
|
<code>$target</code> if <code>$target</code> is an attribute node,
|
|
corresponding to the <a title="implied namespace binding" href=
|
|
"#dt-implied-namespace-binding">implied namespace binding</a> of
|
|
<code>$newName</code>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>The semantics of all <a title="update primitive" href=
|
|
"#dt-update-primitive">update primitives</a> on <code>$pul</code>,
|
|
other than <code>upd:put</code> primitives, are made effective in
|
|
the following order:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>First, all <code>upd:insertInto</code>,
|
|
<code>upd:insertAttributes</code>, <code>upd:replaceValue</code>,
|
|
and <code>upd:rename</code> primitives are applied.</p>
|
|
</li>
|
|
<li>
|
|
<p>Next, all <code>upd:insertBefore</code>,
|
|
<code>upd:insertAfter</code>, <code>upd:insertIntoAsFirst</code>,
|
|
and <code>upd:insertIntoAsLast</code> primitives are applied.</p>
|
|
</li>
|
|
<li>
|
|
<p>Next, all <code>upd:replaceNode</code> primitives are
|
|
applied.</p>
|
|
</li>
|
|
<li>
|
|
<p>Next, all <code>upd:replaceElementContent</code> primitives are
|
|
applied.</p>
|
|
</li>
|
|
<li>
|
|
<p>Next, all <code>upd:delete</code> primitives are applied.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If, as a net result of the above steps, the
|
|
<code>children</code> property of some node contains adjacent text
|
|
nodes, these adjacent text nodes are merged into a single text
|
|
node. The string-value of the resulting text node is the
|
|
concatenated string-values of the adjacent text nodes, with no
|
|
intervening space added. The <a title="node identity" href=
|
|
"#dt-node-identity">node identity</a> of the resulting text node is
|
|
implementation-dependent.</p>
|
|
</li>
|
|
<li>
|
|
<p>If, as a net result of the above steps, the
|
|
<code>children</code> property of some node contains an empty text
|
|
node, that empty text node is deleted from the
|
|
<code>children</code> property.</p>
|
|
</li>
|
|
<li>
|
|
<p>If, after applying the updates, any <a title="XDM instance"
|
|
href="#dt-xdm-instance">XDM instance</a> (including a node that has
|
|
been deleted or detached from its parent, or that is a descendant
|
|
of such a node) violates any constraint specified in <a href=
|
|
"#xpath-datamodel-30">[XQuery and XPath Data Model (XDM) 3.0]</a>,
|
|
a dynamic error is raised [<a href="#ERRXUDY0021" title=
|
|
"err:XUDY0021">err:XUDY0021</a>].</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>For example, a data model constraint violation might occur if
|
|
multiple attributes with the same parent have the same qualified
|
|
name (see <a href=
|
|
"http://www.w3.org/TR/xpath-datamodel/#ElementNodeOverview">Section
|
|
6.2.1 Overview</a><sup><small>DM</small></sup>.)</p>
|
|
</div>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>During processing of a <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a>, an <a title=
|
|
"XDM instance" href="#dt-xdm-instance">XDM instance</a> may
|
|
temporarily violate a data model constraint. An error is raised
|
|
only if a constraint remains unsatisfied after all update
|
|
primitives other than <code>upd:put</code> have been applied.</p>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$inherit-namespaces</code> is <code>true</code>, then
|
|
<code><a href=
|
|
"#id-upd-propagate-namespace">upd:propagate-namespace</a>($element,
|
|
$prefix, $uri)</code> is invoked for each namespace binding that
|
|
was <a title="mark" href="#dt-mark">marked for namespace
|
|
propagation</a>, where <code>$element</code> is the element node on
|
|
which the namespace binding appears, <code>$prefix</code> is the
|
|
namespace prefix, and <code>$uri</code> is the namespace URI. Each
|
|
of these nodes is then unmarked.</p>
|
|
</li>
|
|
<li>
|
|
<p>For each document or element node <code>$top</code> that was
|
|
<a title="mark" href="#dt-mark">marked for revalidation</a> by one
|
|
of the earlier steps, <code>upd:revalidate($top,
|
|
$revalidation-mode)</code> is invoked. Each of these nodes is then
|
|
unmarked.</p>
|
|
</li>
|
|
<li>
|
|
<p>As the final step, all <code>upd:put</code> primitives on
|
|
<code>$pul</code> are applied.</p>
|
|
</li>
|
|
<li>
|
|
<p>The <code>upd:applyUpdates</code> operation is atomic with
|
|
respect to the data model. In other words, if
|
|
<code>upd:applyUpdates</code> terminates normally, the resulting
|
|
<a title="XDM instance" href="#dt-xdm-instance">XDM instance</a>
|
|
reflects the result of all update primitives; but if
|
|
<code>upd:applyUpdates</code> raises an error, the resulting
|
|
<a title="XDM instance" href="#dt-xdm-instance">XDM instance</a>
|
|
reflects no changes. Atomicity is guaranteed only with respect to
|
|
operations on XDM instances, and only with respect to error
|
|
conditions specified in this document.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>The results of implementation-dependent error conditions such as
|
|
exceeding resource limits are beyond the scope of this
|
|
specification.</p>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p>Propagation of XDM changes to an underlying persistent store is
|
|
beyond the scope of this specification. For example, the effect on
|
|
persistent storage of deleting a node that has no parent is beyond
|
|
the scope of this specification.</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-revalidate" id="id-upd-revalidate"></a>3.2.3
|
|
upd:revalidate</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:revalidate(
|
|
$top as node(),
|
|
$revalidation-mode as xs:string)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$top</code> must be a document node or an element
|
|
node.</p>
|
|
<p><code>$revalidation-mode</code> must be <code>"strict"</code>,
|
|
<code>"lax"</code>, or <code>"skip"</code>.</p>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Schema validation is applied to the subtree rooted at
|
|
<code>$top</code> in order to recover the types of updated nodes
|
|
while preserving their <a title="node identity" href=
|
|
"#dt-node-identity">node identities</a>.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<p>If <code>$revalidation-mode</code> is <code>skip</code>,
|
|
<code>upd:revalidate</code> performs no action. Otherwise:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If <code>$revalidation-mode</code> is <code>lax</code>, define
|
|
<code>$topV</code> as the result of the XQuery expression
|
|
<code>validate lax {$top}</code>. If
|
|
<code>$revalidation-mode</code> is <code>strict</code>, define
|
|
<code>$topV</code> as the result of the XQuery expression
|
|
<code>validate strict {$top}</code>. During computation of
|
|
<code>$topV</code>, it is necessary to maintain a mapping between
|
|
each node in <code>$topV</code> and the corresponding node (if any)
|
|
in the subtree rooted at <code>$top</code> (this mapping is
|
|
maintained in an implementation-dependent way.)</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<ul>
|
|
<li>
|
|
<p>This step may raise an error [<a href=
|
|
"http://www.w3.org/TR/xquery/#ERRXQDY0027" title=
|
|
"err:XQDY0027">err:XQDY0027</a>]<sup><small>XQ</small></sup> if
|
|
<code>$top</code> is found to be invalid.</p>
|
|
</li>
|
|
<li>
|
|
<p>Some of the nodes in <code>$topV</code> (for example, default
|
|
attributes generated by the validation process) may have no
|
|
corresponding nodes in <code>$top</code>.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p>For each node <code>$nV</code> in <code>$topV</code> that has a
|
|
corresponding node <code>$n</code> in <code>$top</code>, replace
|
|
the following properties of <code>$n</code> with the corresponding
|
|
properties of <code>$nV</code>: <code>type-name</code>,
|
|
<code>typed-value</code>, <code>string-value</code>,
|
|
<code>is-id</code>, <code>is-idrefs</code>,
|
|
<code>namespace-bindings</code>, <code>nilled</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>For each node <code>$nV</code> in <code>$topV</code> that does
|
|
not have a corresponding node in <code>$top</code>, insert the node
|
|
<code>$nV</code> into the subtree rooted at <code>$top</code> as a
|
|
child or attribute of the node corresponding to the parent of
|
|
<code>$nV</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>The result of <code>upd:revalidate</code> is to modify the
|
|
properties of the nodes rooted at <code>$top</code> and possibly to
|
|
add some new nodes to this subtree. When the revalidation process
|
|
is complete, <code>$topV</code> can be discarded.</p>
|
|
</li>
|
|
</ol>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>After revalidation, the type annotations of the nodes in the
|
|
validated subtree are consistent with their content. It is expected
|
|
that implementations will optimize the revalidation process by
|
|
taking into account which nodes have been modified since they were
|
|
last validated.</p>
|
|
</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-remove-type" id="id-upd-remove-type"></a>3.2.4
|
|
upd:removeType</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:removeType(
|
|
$N as node())
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$N</code> must be an element or attribute node</p>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>This routine is applied to a node whose name or content has been
|
|
modified, in order to remove specific type information from the
|
|
node and its ancestors, pending revalidation.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If <code>$N</code> is an element node, its properties are
|
|
changed as follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p>If <code>type-name</code> is not equal to
|
|
<code>xs:untyped</code>, then</p>
|
|
<ol class="enumlr">
|
|
<li>
|
|
<p><code>type-name</code> is set to <code>xs:anyType</code></p>
|
|
</li>
|
|
<li>
|
|
<p>If the parent of <code>N</code> is an element node, then
|
|
<code>upd:removeType(parent($N))</code> is invoked.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p><code>string-value</code> is set equal to the concatenated
|
|
contents of the text node descendants, in document order.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>typed-value</code> is set equal to the
|
|
<code>string-value</code> property, as an instance of
|
|
<code>xs:untypedAtomic</code>.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>The <a title="data model" href="#dt-data-model-30">data
|
|
model</a> allows some flexibility to implementations regarding
|
|
whether <code>string-value</code> and/or <code>typed-value</code>
|
|
are stored or computed dynamically.</p>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p><code>nilled</code>, <code>is-id</code>, and
|
|
<code>is-idrefs</code> are set to <code>false</code>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$N</code> is an attribute node, its properties are
|
|
changed as follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>type-name</code> is set to
|
|
<code>xs:untypedAtomic</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>typed-value</code> is set equal to the
|
|
<code>string-value</code> property, as an instance of
|
|
<code>xs:untypedAtomic</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>is-id</code> and <code>is-idrefs</code> are set to
|
|
<code>false</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$N</code> has a parent,
|
|
<code>upd:removeType(parent($N))</code> is invoked.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>The topmost ancestor of <code>$N</code> is <a title="mark" href=
|
|
"#dt-mark">marked</a> for revalidation.</p>
|
|
<p>[<a name="dt-mark" id="dt-mark" title="mark">Definition</a>: To
|
|
<b>mark</b> a node means to identify the node as participating in a
|
|
later operation.] Marking of nodes is accomplished in an
|
|
implementation-dependent way--for example, an implementation might
|
|
maintain a list of marked nodes.</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-set-to-untyped" id=
|
|
"id-upd-set-to-untyped"></a>3.2.5 upd:setToUntyped</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:setToUntyped(
|
|
$N as node())
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p><code>$N</code> must be an element or attribute node</p>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>This routine is applied to a node that has been inserted into an
|
|
untyped context, which requires that the node and its descendants
|
|
be untyped as well.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>If <code>$N</code> is an element node, its properties are
|
|
changed as follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>type-name</code> is set to <code>xs:untyped</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>typed-value</code> is set equal to the
|
|
<code>string-value</code> property, as an instance of
|
|
<code>xs:untypedAtomic</code>.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>The <a title="data model" href="#dt-data-model-30">data
|
|
model</a> allows some flexibility to implementations regarding
|
|
whether <code>string-value</code> and/or <code>typed-value</code>
|
|
are stored or computed dynamically.</p>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<p><code>nilled</code>, <code>is-id</code>, and
|
|
<code>is-idrefs</code> are set to <code>false</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>upd:setToUntyped()</code> is invoked on the attributes and
|
|
child element nodes of <code>$N</code>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
<li>
|
|
<p>If <code>$N</code> is an attribute node, its properties are
|
|
changed as follows:</p>
|
|
<ol class="enumla">
|
|
<li>
|
|
<p><code>type-name</code> is set to
|
|
<code>xs:untypedAtomic</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>typed-value</code> is set equal to the
|
|
<code>string-value</code> property, as an instance of
|
|
<code>xs:untypedAtomic</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>is-idrefs</code> is set to <code>false</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>is-id</code> is set to <code>false</code> if the attribute
|
|
name is not <code>xml:id</code>.</p>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-upd-propagate-namespace" id=
|
|
"id-upd-propagate-namespace"></a>3.2.6 upd:propagateNamespace</h4>
|
|
<dl>
|
|
<dt class="label">Parameters</dt>
|
|
<dd>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
upd:propagateNamespace(
|
|
$element as element(),
|
|
$prefix as xs:NCName,
|
|
$uri as xs:anyURI)
|
|
</pre></div>
|
|
</dd>
|
|
<dt class="label">Constraints</dt>
|
|
<dd>
|
|
<p>None</p>
|
|
</dd>
|
|
<dt class="label">Summary</dt>
|
|
<dd>
|
|
<p>Propagates a namespace binding to all descendants of an
|
|
element.</p>
|
|
</dd>
|
|
<dt class="label">Semantics</dt>
|
|
<dd>
|
|
<p>For each element <code>$child</code> among the children of
|
|
<code>$element</code> that does not have a namespace binding for
|
|
<code>$prefix</code>,</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>add a namespace binding <code>($prefix, $uri)</code> to
|
|
<code>$child</code></p>
|
|
</li>
|
|
<li>
|
|
<p>call <code>upd:propagateNamespace($child, $prefix,
|
|
$uri)</code></p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="id-xquery-update-conformance" id=
|
|
"id-xquery-update-conformance"></a>4 Conformance</h2>
|
|
<p>This section defines the conformance criteria for an XQuery
|
|
processor. In this section, the following terms are used to
|
|
indicate the requirement levels defined in <a href="#RFC2119">[RFC
|
|
2119]</a>. [<a name="must" id="must" title="must">Definition</a>:
|
|
<b>MUST</b> means that the item is an absolute requirement of the
|
|
specification.] [<a name="may" id="may" title="may">Definition</a>:
|
|
<b>MAY</b> means that an item is truly optional.] [<a name="should"
|
|
id="should" title="should">Definition</a>: <b>SHOULD</b> means that
|
|
there may exist valid reasons in particular circumstances to ignore
|
|
a particular item, but the full implications must be understood and
|
|
carefully weighed before choosing a different course.]</p>
|
|
<p>An XQuery processor that claims to conform to this specification
|
|
<a title="must" href="#must">MUST</a> include a claim of Minimal
|
|
Conformance as defined in <a href="#id-minimal-conformance"><b>4.1
|
|
Minimal Conformance</b></a>. In addition to a claim of Minimal
|
|
Conformance, it <a title="may" href="#may">MAY</a> claim
|
|
conformance to one or more optional features defined in <a href=
|
|
"#id-conform-optional-features"><b>4.2 Optional
|
|
Features</b></a>.</p>
|
|
<div class="div2">
|
|
<h3><a name="id-minimal-conformance" id=
|
|
"id-minimal-conformance"></a>4.1 Minimal Conformance</h3>
|
|
<p>Minimal Conformance to this specification <a title="must" href=
|
|
"#must">MUST</a> include all of the following items:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>Minimal Conformance to <a href="#xquery-30">[XQuery 3.0: A Query
|
|
Language]</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>Support for everything specified in this document except those
|
|
features specified in <a href=
|
|
"#id-conform-optional-features"><b>4.2 Optional Features</b></a> to
|
|
be optional and <a href="#id-xquf-xqueryx"><b>E XML Syntax
|
|
(XQueryX) for XQuery Update Facility 3.0</b></a>. If an
|
|
implementation does not provide a given optional feature, it
|
|
<a title="must" href="#must">MUST</a> implement any requirements
|
|
specified in <a href="#id-conform-optional-features"><b>4.2
|
|
Optional Features</b></a> for implementations that do not provide
|
|
that feature.</p>
|
|
</li>
|
|
<li>
|
|
<p>A definition of every item specified to be
|
|
implementation-defined, unless that item is part of an optional
|
|
feature that is not supported by the implementation. A list of
|
|
implementation-defined items can be found in <a href=
|
|
"#id-impl-defs"><b>B Implementation-Defined Items</b></a>.</p>
|
|
<div class="note">
|
|
<p class="prefix"><b>Note:</b></p>
|
|
<p>Implementations are not required to define items specified to be
|
|
implementation-dependent.</p>
|
|
</div>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-conform-optional-features" id=
|
|
"id-conform-optional-features"></a>4.2 Optional Features</h3>
|
|
<p>An implementation of XQuery that includes the Update Facility
|
|
<a title="may" href="#may">MAY</a> also support the Optional
|
|
Features of <a href="#xquery-30">[XQuery 3.0: A Query
|
|
Language]</a>. These are Schema Import Feature, Schema Validation
|
|
Feature, Full Axis Feature, Module Feature, and Serialization
|
|
Feature.</p>
|
|
</div>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="id-xqueryx-update-conformance" id=
|
|
"id-xqueryx-update-conformance"></a>5 XQueryX Conformance</h2>
|
|
<p>This section defines the conformance criteria for an XQueryX
|
|
processor that includes the Update Facility.</p>
|
|
<p>In this section, the terms <a title="must" href=
|
|
"#must">MUST</a>, <a title="may" href="#may">MAY</a>, and <a title=
|
|
"should" href="#should">SHOULD</a> are used as defined in <a href=
|
|
"#id-xquery-update-conformance"><b>4 Conformance</b></a>.</p>
|
|
<p>An XQueryX processor that claims to conform to this
|
|
specification <a title="must" href="#must">MUST</a> implement the
|
|
XQueryX syntax as defined in <a href="#id-xquf-xqueryx"><b>E XML
|
|
Syntax (XQueryX) for XQuery Update Facility 3.0</b></a> and include
|
|
a claim of Minimal Conformance as defined in <a href=
|
|
"#id-xquery-update-conformance"><b>4 Conformance</b></a>. In
|
|
addition to a claim of Minimal Conformance, it <a title="may" href=
|
|
"#may">MAY</a> claim conformance to one or more optional features
|
|
defined in <a href="#id-conform-optional-features"><b>4.2 Optional
|
|
Features</b></a>.</p>
|
|
</div>
|
|
</div>
|
|
<div class="back">
|
|
<div class="div1">
|
|
<h2><a name="id-grammar" id="id-grammar"></a>A EBNF for XQuery 3.0
|
|
Grammar with Update extensions</h2>
|
|
<p>The EBNF in this document and in this section is aligned with
|
|
the current XML Query 3.0 grammar (see <a href="#xquery-30">[XQuery
|
|
3.0: A Query Language]</a>).</p>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Module" id=
|
|
"prod-xquery30-Module"></a>[1]   </td>
|
|
<td><code>Module</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-VersionDecl">VersionDecl</a>?
|
|
(<a href="#prod-xquery30-LibraryModule">LibraryModule</a> |
|
|
<a href="#prod-xquery30-MainModule">MainModule</a>)</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-VersionDecl" id=
|
|
"prod-xquery30-VersionDecl"></a>[2]   </td>
|
|
<td><code>VersionDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"xquery" (("encoding" <a href=
|
|
"#prod-xquery30-StringLiteral">StringLiteral</a>) | ("version"
|
|
<a href="#prod-xquery30-StringLiteral">StringLiteral</a>
|
|
("encoding" <a href=
|
|
"#prod-xquery30-StringLiteral">StringLiteral</a>)?)) <a href=
|
|
"#prod-xquery30-Separator">Separator</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-MainModule" id=
|
|
"prod-xquery30-MainModule"></a>[3]   </td>
|
|
<td><code>MainModule</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Prolog">Prolog</a> <a href=
|
|
"#prod-xquery30-QueryBody">QueryBody</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-LibraryModule" id=
|
|
"prod-xquery30-LibraryModule"></a>[4]   </td>
|
|
<td><code>LibraryModule</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-ModuleDecl">ModuleDecl</a>
|
|
<a href="#prod-xquery30-Prolog">Prolog</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ModuleDecl" id=
|
|
"prod-xquery30-ModuleDecl"></a>[5]   </td>
|
|
<td><code>ModuleDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"module" "namespace" <a href=
|
|
"#prod-xquery30-NCName">NCName</a> "=" <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a> <a href=
|
|
"#prod-xquery30-Separator">Separator</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Prolog" id=
|
|
"prod-xquery30-Prolog"></a>[6]   </td>
|
|
<td><code>Prolog</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>((<a href=
|
|
"#prod-xquery30-DefaultNamespaceDecl">DefaultNamespaceDecl</a> |
|
|
<a href="#prod-xquery30-Setter">Setter</a> | <a href=
|
|
"#prod-xquery30-NamespaceDecl">NamespaceDecl</a> | <a href=
|
|
"#prod-xquery30-Import">Import</a>) <a href=
|
|
"#prod-xquery30-Separator">Separator</a>)* ((<a href=
|
|
"#prod-xquery30-ContextItemDecl">ContextItemDecl</a> | <a href=
|
|
"#prod-xquery30-AnnotatedDecl">AnnotatedDecl</a> | <a href=
|
|
"#prod-xquery30-OptionDecl">OptionDecl</a>) <a href=
|
|
"#prod-xquery30-Separator">Separator</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Separator" id=
|
|
"prod-xquery30-Separator"></a>[7]   </td>
|
|
<td><code>Separator</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>";"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Setter" id=
|
|
"prod-xquery30-Setter"></a>[8]   </td>
|
|
<td><code><a href="#doc-xquery30-Setter">Setter</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-BoundarySpaceDecl">BoundarySpaceDecl</a> | <a href=
|
|
"#prod-xquery30-DefaultCollationDecl">DefaultCollationDecl</a> |
|
|
<a href="#prod-xquery30-BaseURIDecl">BaseURIDecl</a> | <a href=
|
|
"#prod-xquery30-ConstructionDecl">ConstructionDecl</a> | <a href=
|
|
"#prod-xquery30-OrderingModeDecl">OrderingModeDecl</a> | <a href=
|
|
"#prod-xquery30-EmptyOrderDecl">EmptyOrderDecl</a> | <a href=
|
|
"#prod-xquery30-RevalidationDecl">RevalidationDecl</a> | <a href=
|
|
"#prod-xquery30-CopyNamespacesDecl">CopyNamespacesDecl</a> |
|
|
<a href=
|
|
"#prod-xquery30-DecimalFormatDecl">DecimalFormatDecl</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-BoundarySpaceDecl" id=
|
|
"prod-xquery30-BoundarySpaceDecl"></a>[9]   </td>
|
|
<td><code>BoundarySpaceDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "boundary-space" ("preserve" |
|
|
"strip")</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DefaultCollationDecl" id=
|
|
"prod-xquery30-DefaultCollationDecl"></a>[10]   </td>
|
|
<td><code>DefaultCollationDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "default" "collation" <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-BaseURIDecl" id=
|
|
"prod-xquery30-BaseURIDecl"></a>[11]   </td>
|
|
<td><code>BaseURIDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "base-uri" <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ConstructionDecl" id=
|
|
"prod-xquery30-ConstructionDecl"></a>[12]   </td>
|
|
<td><code>ConstructionDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "construction" ("strip" |
|
|
"preserve")</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-OrderingModeDecl" id=
|
|
"prod-xquery30-OrderingModeDecl"></a>[13]   </td>
|
|
<td><code>OrderingModeDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "ordering" ("ordered" |
|
|
"unordered")</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-EmptyOrderDecl" id=
|
|
"prod-xquery30-EmptyOrderDecl"></a>[14]   </td>
|
|
<td><code>EmptyOrderDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "default" "order" "empty" ("greatest" |
|
|
"least")</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CopyNamespacesDecl" id=
|
|
"prod-xquery30-CopyNamespacesDecl"></a>[15]   </td>
|
|
<td><code>CopyNamespacesDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "copy-namespaces" <a href=
|
|
"#prod-xquery30-PreserveMode">PreserveMode</a> "," <a href=
|
|
"#prod-xquery30-InheritMode">InheritMode</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PreserveMode" id=
|
|
"prod-xquery30-PreserveMode"></a>[16]   </td>
|
|
<td><code>PreserveMode</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"preserve" | "no-preserve"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-InheritMode" id=
|
|
"prod-xquery30-InheritMode"></a>[17]   </td>
|
|
<td><code>InheritMode</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"inherit" | "no-inherit"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DecimalFormatDecl" id=
|
|
"prod-xquery30-DecimalFormatDecl"></a>[18]   </td>
|
|
<td><code>DecimalFormatDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" (("decimal-format" <a href=
|
|
"#prod-xquery30-EQName">EQName</a>) | ("default" "decimal-format"))
|
|
(<a href="#prod-xquery30-DFPropertyName">DFPropertyName</a> "="
|
|
<a href=
|
|
"#prod-xquery30-StringLiteral">StringLiteral</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DFPropertyName" id=
|
|
"prod-xquery30-DFPropertyName"></a>[19]   </td>
|
|
<td><code>DFPropertyName</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"decimal-separator" | "grouping-separator" | "infinity" |
|
|
"minus-sign" | "NaN" | "percent" | "per-mille" | "zero-digit" |
|
|
"digit" | "pattern-separator"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Import" id=
|
|
"prod-xquery30-Import"></a>[20]   </td>
|
|
<td><code>Import</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-SchemaImport">SchemaImport</a> |
|
|
<a href="#prod-xquery30-ModuleImport">ModuleImport</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SchemaImport" id=
|
|
"prod-xquery30-SchemaImport"></a>[21]   </td>
|
|
<td><code>SchemaImport</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"import" "schema" <a href=
|
|
"#prod-xquery30-SchemaPrefix">SchemaPrefix</a>? <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a> ("at" <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a> ("," <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a>)*)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SchemaPrefix" id=
|
|
"prod-xquery30-SchemaPrefix"></a>[22]   </td>
|
|
<td><code>SchemaPrefix</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("namespace" <a href="#prod-xquery30-NCName">NCName</a>
|
|
"=") | ("default" "element" "namespace")</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ModuleImport" id=
|
|
"prod-xquery30-ModuleImport"></a>[23]   </td>
|
|
<td><code>ModuleImport</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"import" "module" ("namespace" <a href=
|
|
"#prod-xquery30-NCName">NCName</a> "=")? <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a> ("at" <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a> ("," <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a>)*)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-NamespaceDecl" id=
|
|
"prod-xquery30-NamespaceDecl"></a>[24]   </td>
|
|
<td><code>NamespaceDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "namespace" <a href=
|
|
"#prod-xquery30-NCName">NCName</a> "=" <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DefaultNamespaceDecl" id=
|
|
"prod-xquery30-DefaultNamespaceDecl"></a>[25]   </td>
|
|
<td><code>DefaultNamespaceDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "default" ("element" | "function") "namespace"
|
|
<a href="#prod-xquery30-URILiteral">URILiteral</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AnnotatedDecl" id=
|
|
"prod-xquery30-AnnotatedDecl"></a>[26]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-AnnotatedDecl">AnnotatedDecl</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" (<a href=
|
|
"#prod-xquery30-CompatibilityAnnotation">CompatibilityAnnotation</a>
|
|
| <a href="#prod-xquery30-Annotation">Annotation</a>)* (<a href=
|
|
"#prod-xquery30-VarDecl">VarDecl</a> | <a href=
|
|
"#prod-xquery30-FunctionDecl">FunctionDecl</a>)</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CompatibilityAnnotation" id=
|
|
"prod-xquery30-CompatibilityAnnotation"></a>[27]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-CompatibilityAnnotation">CompatibilityAnnotation</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"updating"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Annotation" id=
|
|
"prod-xquery30-Annotation"></a>[28]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-Annotation">Annotation</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"%" <a href="#prod-xquery30-EQName">EQName</a> ("("
|
|
<a href="#prod-xquery30-Literal">Literal</a> ("," <a href=
|
|
"#prod-xquery30-Literal">Literal</a>)* ")")?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-VarDecl" id=
|
|
"prod-xquery30-VarDecl"></a>[29]   </td>
|
|
<td><code><a href="#doc-xquery30-VarDecl">VarDecl</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"variable" "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? ((":="
|
|
<a href="#prod-xquery30-VarValue">VarValue</a>) | ("external" (":="
|
|
<a href=
|
|
"#prod-xquery30-VarDefaultValue">VarDefaultValue</a>)?))</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-VarValue" id=
|
|
"prod-xquery30-VarValue"></a>[30]   </td>
|
|
<td><code>VarValue</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-VarDefaultValue" id=
|
|
"prod-xquery30-VarDefaultValue"></a>[31]   </td>
|
|
<td><code>VarDefaultValue</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ContextItemDecl" id=
|
|
"prod-xquery30-ContextItemDecl"></a>[32]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ContextItemDecl">ContextItemDecl</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "context" "item" ("as" <a href=
|
|
"#prod-xquery30-ItemType">ItemType</a>)? ((":=" <a href=
|
|
"#prod-xquery30-VarValue">VarValue</a>) | ("external" (":="
|
|
<a href="#prod-xquery30-VarDefaultValue">VarDefaultValue</a>)?))</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-FunctionDecl" id=
|
|
"prod-xquery30-FunctionDecl"></a>[33]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-FunctionDecl">FunctionDecl</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"function" <a href="#prod-xquery30-EQName">EQName</a> "("
|
|
<a href="#prod-xquery30-ParamList">ParamList</a>? ")" ("as"
|
|
<a href="#prod-xquery30-SequenceType">SequenceType</a>)? (<a href=
|
|
"#prod-xquery30-FunctionBody">FunctionBody</a> |
|
|
"external")</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-reserved-function-names">gn:
|
|
reserved-function-names</a><sup><small>XQ</small></sup></span>
|
|
*/</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ParamList" id=
|
|
"prod-xquery30-ParamList"></a>[34]   </td>
|
|
<td><code>ParamList</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Param">Param</a> ("," <a href=
|
|
"#prod-xquery30-Param">Param</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Param" id=
|
|
"prod-xquery30-Param"></a>[35]   </td>
|
|
<td><code>Param</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"$" <a href="#prod-xquery30-EQName">EQName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-FunctionBody" id=
|
|
"prod-xquery30-FunctionBody"></a>[36]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-FunctionBody">FunctionBody</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-EnclosedExpr">EnclosedExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-EnclosedExpr" id=
|
|
"prod-xquery30-EnclosedExpr"></a>[37]   </td>
|
|
<td><code>EnclosedExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"{" <a href="#prod-xquery30-Expr">Expr</a>
|
|
"}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-OptionDecl" id=
|
|
"prod-xquery30-OptionDecl"></a>[38]   </td>
|
|
<td><code>OptionDecl</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "option" <a href=
|
|
"#prod-xquery30-EQName">EQName</a> <a href=
|
|
"#prod-xquery30-StringLiteral">StringLiteral</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-QueryBody" id=
|
|
"prod-xquery30-QueryBody"></a>[39]   </td>
|
|
<td><code>QueryBody</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Expr">Expr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Expr" id=
|
|
"prod-xquery30-Expr"></a>[40]   </td>
|
|
<td><code><a href="#doc-xquery30-Expr">Expr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-ExprSingle">ExprSingle</a> (","
|
|
<a href="#prod-xquery30-ExprSingle">ExprSingle</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ExprSingle" id=
|
|
"prod-xquery30-ExprSingle"></a>[41]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-FLWORExpr">FLWORExpr</a><br />
|
|
| <a href="#prod-xquery30-QuantifiedExpr">QuantifiedExpr</a><br />
|
|
| <a href="#prod-xquery30-SwitchExpr">SwitchExpr</a><br />
|
|
| <a href="#prod-xquery30-TypeswitchExpr">TypeswitchExpr</a><br />
|
|
| <a href="#prod-xquery30-IfExpr">IfExpr</a><br />
|
|
| <a href="#prod-xquery30-TryCatchExpr">TryCatchExpr</a><br />
|
|
| <a href="#prod-xquery30-InsertExpr">InsertExpr</a><br />
|
|
| <a href="#prod-xquery30-DeleteExpr">DeleteExpr</a><br />
|
|
| <a href="#prod-xquery30-RenameExpr">RenameExpr</a><br />
|
|
| <a href="#prod-xquery30-ReplaceExpr">ReplaceExpr</a><br />
|
|
| <a href="#prod-xquery30-TransformExpr">TransformExpr</a><br />
|
|
| <a href="#prod-xquery30-OrExpr">OrExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-FLWORExpr" id=
|
|
"prod-xquery30-FLWORExpr"></a>[42]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-FLWORExpr">FLWORExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-InitialClause">InitialClause</a>
|
|
<a href="#prod-xquery30-IntermediateClause">IntermediateClause</a>*
|
|
<a href="#prod-xquery30-ReturnClause">ReturnClause</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-InitialClause" id=
|
|
"prod-xquery30-InitialClause"></a>[43]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-InitialClause">InitialClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-ForClause">ForClause</a> |
|
|
<a href="#prod-xquery30-LetClause">LetClause</a> | <a href=
|
|
"#prod-xquery30-WindowClause">WindowClause</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-IntermediateClause" id=
|
|
"prod-xquery30-IntermediateClause"></a>[44]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-IntermediateClause">IntermediateClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-InitialClause">InitialClause</a>
|
|
| <a href="#prod-xquery30-WhereClause">WhereClause</a> | <a href=
|
|
"#prod-xquery30-GroupByClause">GroupByClause</a> | <a href=
|
|
"#prod-xquery30-OrderByClause">OrderByClause</a> | <a href=
|
|
"#prod-xquery30-CountClause">CountClause</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ForClause" id=
|
|
"prod-xquery30-ForClause"></a>[45]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ForClause">ForClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"for" <a href="#prod-xquery30-ForBinding">ForBinding</a>
|
|
("," <a href=
|
|
"#prod-xquery30-ForBinding">ForBinding</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ForBinding" id=
|
|
"prod-xquery30-ForBinding"></a>[46]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ForBinding">ForBinding</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"$" <a href="#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? <a href=
|
|
"#prod-xquery30-AllowingEmpty">AllowingEmpty</a>? <a href=
|
|
"#prod-xquery30-PositionalVar">PositionalVar</a>? "in" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AllowingEmpty" id=
|
|
"prod-xquery30-AllowingEmpty"></a>[47]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-AllowingEmpty">AllowingEmpty</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"allowing" "empty"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PositionalVar" id=
|
|
"prod-xquery30-PositionalVar"></a>[48]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-PositionalVar">PositionalVar</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"at" "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-LetClause" id=
|
|
"prod-xquery30-LetClause"></a>[49]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-LetClause">LetClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"let" <a href="#prod-xquery30-LetBinding">LetBinding</a>
|
|
("," <a href=
|
|
"#prod-xquery30-LetBinding">LetBinding</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-LetBinding" id=
|
|
"prod-xquery30-LetBinding"></a>[50]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-LetBinding">LetBinding</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"$" <a href="#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? ":=" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-WindowClause" id=
|
|
"prod-xquery30-WindowClause"></a>[51]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-WindowClause">WindowClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"for" (<a href=
|
|
"#prod-xquery30-TumblingWindowClause">TumblingWindowClause</a> |
|
|
<a href=
|
|
"#prod-xquery30-SlidingWindowClause">SlidingWindowClause</a>)</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TumblingWindowClause" id=
|
|
"prod-xquery30-TumblingWindowClause"></a>[52]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-TumblingWindowClause">TumblingWindowClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"tumbling" "window" "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? "in" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a> <a href=
|
|
"#prod-xquery30-WindowStartCondition">WindowStartCondition</a>
|
|
<a href=
|
|
"#prod-xquery30-WindowEndCondition">WindowEndCondition</a>?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SlidingWindowClause" id=
|
|
"prod-xquery30-SlidingWindowClause"></a>[53]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-SlidingWindowClause">SlidingWindowClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"sliding" "window" "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? "in" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a> <a href=
|
|
"#prod-xquery30-WindowStartCondition">WindowStartCondition</a>
|
|
<a href=
|
|
"#prod-xquery30-WindowEndCondition">WindowEndCondition</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-WindowStartCondition" id=
|
|
"prod-xquery30-WindowStartCondition"></a>[54]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-WindowStartCondition">WindowStartCondition</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"start" <a href=
|
|
"#prod-xquery30-WindowVars">WindowVars</a> "when" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-WindowEndCondition" id=
|
|
"prod-xquery30-WindowEndCondition"></a>[55]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-WindowEndCondition">WindowEndCondition</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"only"? "end" <a href=
|
|
"#prod-xquery30-WindowVars">WindowVars</a> "when" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-WindowVars" id=
|
|
"prod-xquery30-WindowVars"></a>[56]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-WindowVars">WindowVars</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("$" <a href=
|
|
"#prod-xquery30-CurrentItem">CurrentItem</a>)? <a href=
|
|
"#prod-xquery30-PositionalVar">PositionalVar</a>? ("previous" "$"
|
|
<a href="#prod-xquery30-PreviousItem">PreviousItem</a>)? ("next"
|
|
"$" <a href="#prod-xquery30-NextItem">NextItem</a>)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CurrentItem" id=
|
|
"prod-xquery30-CurrentItem"></a>[57]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-CurrentItem">CurrentItem</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PreviousItem" id=
|
|
"prod-xquery30-PreviousItem"></a>[58]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-PreviousItem">PreviousItem</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-NextItem" id=
|
|
"prod-xquery30-NextItem"></a>[59]   </td>
|
|
<td><code><a href="#doc-xquery30-NextItem">NextItem</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CountClause" id=
|
|
"prod-xquery30-CountClause"></a>[60]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-CountClause">CountClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"count" "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-WhereClause" id=
|
|
"prod-xquery30-WhereClause"></a>[61]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-WhereClause">WhereClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"where" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-GroupByClause" id=
|
|
"prod-xquery30-GroupByClause"></a>[62]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-GroupByClause">GroupByClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"group" "by" <a href=
|
|
"#prod-xquery30-GroupingSpecList">GroupingSpecList</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-GroupingSpecList" id=
|
|
"prod-xquery30-GroupingSpecList"></a>[63]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-GroupingSpecList">GroupingSpecList</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-GroupingSpec">GroupingSpec</a>
|
|
("," <a href=
|
|
"#prod-xquery30-GroupingSpec">GroupingSpec</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-GroupingSpec" id=
|
|
"prod-xquery30-GroupingSpec"></a>[64]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-GroupingSpec">GroupingSpec</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"$" <a href="#prod-xquery30-VarName">VarName</a>
|
|
(<a href="#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? ":="
|
|
<a href="#prod-xquery30-ExprSingle">ExprSingle</a>)? ("collation"
|
|
<a href="#prod-xquery30-URILiteral">URILiteral</a>)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-OrderByClause" id=
|
|
"prod-xquery30-OrderByClause"></a>[65]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-OrderByClause">OrderByClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(("order" "by") | ("stable" "order" "by")) <a href=
|
|
"#prod-xquery30-OrderSpecList">OrderSpecList</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-OrderSpecList" id=
|
|
"prod-xquery30-OrderSpecList"></a>[66]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-OrderSpecList">OrderSpecList</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-OrderSpec">OrderSpec</a> (","
|
|
<a href="#prod-xquery30-OrderSpec">OrderSpec</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-OrderSpec" id=
|
|
"prod-xquery30-OrderSpec"></a>[67]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-OrderSpec">OrderSpec</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-ExprSingle">ExprSingle</a>
|
|
<a href=
|
|
"#prod-xquery30-OrderModifier">OrderModifier</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-OrderModifier" id=
|
|
"prod-xquery30-OrderModifier"></a>[68]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-OrderModifier">OrderModifier</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("ascending" | "descending")? ("empty" ("greatest" |
|
|
"least"))? ("collation" <a href=
|
|
"#prod-xquery30-URILiteral">URILiteral</a>)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ReturnClause" id=
|
|
"prod-xquery30-ReturnClause"></a>[69]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ReturnClause">ReturnClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"return" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-QuantifiedExpr" id=
|
|
"prod-xquery30-QuantifiedExpr"></a>[70]   </td>
|
|
<td><code>QuantifiedExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("some" | "every") "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? "in" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a> ("," "$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a> <a href=
|
|
"#prod-xquery30-TypeDeclaration">TypeDeclaration</a>? "in" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a>)* "satisfies" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SwitchExpr" id=
|
|
"prod-xquery30-SwitchExpr"></a>[71]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-SwitchExpr">SwitchExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"switch" "(" <a href="#prod-xquery30-Expr">Expr</a> ")"
|
|
<a href="#prod-xquery30-SwitchCaseClause">SwitchCaseClause</a>+
|
|
"default" "return" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SwitchCaseClause" id=
|
|
"prod-xquery30-SwitchCaseClause"></a>[72]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-SwitchCaseClause">SwitchCaseClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("case" <a href=
|
|
"#prod-xquery30-SwitchCaseOperand">SwitchCaseOperand</a>)+ "return"
|
|
<a href="#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SwitchCaseOperand" id=
|
|
"prod-xquery30-SwitchCaseOperand"></a>[73]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-SwitchCaseOperand">SwitchCaseOperand</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TypeswitchExpr" id=
|
|
"prod-xquery30-TypeswitchExpr"></a>[74]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-TypeswitchExpr">TypeswitchExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"typeswitch" "(" <a href="#prod-xquery30-Expr">Expr</a>
|
|
")" <a href="#prod-xquery30-CaseClause">CaseClause</a>+ "default"
|
|
("$" <a href="#prod-xquery30-VarName">VarName</a>)? "return"
|
|
<a href="#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CaseClause" id=
|
|
"prod-xquery30-CaseClause"></a>[75]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-CaseClause">CaseClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"case" ("$" <a href="#prod-xquery30-VarName">VarName</a>
|
|
"as")? <a href=
|
|
"#prod-xquery30-SequenceTypeUnion">SequenceTypeUnion</a> "return"
|
|
<a href="#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SequenceTypeUnion" id=
|
|
"prod-xquery30-SequenceTypeUnion"></a>[76]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-SequenceTypeUnion">SequenceTypeUnion</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-SequenceType">SequenceType</a>
|
|
("|" <a href=
|
|
"#prod-xquery30-SequenceType">SequenceType</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-IfExpr" id=
|
|
"prod-xquery30-IfExpr"></a>[77]   </td>
|
|
<td><code><a href="#doc-xquery30-IfExpr">IfExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"if" "(" <a href="#prod-xquery30-Expr">Expr</a> ")"
|
|
"then" <a href="#prod-xquery30-ExprSingle">ExprSingle</a> "else"
|
|
<a href="#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TryCatchExpr" id=
|
|
"prod-xquery30-TryCatchExpr"></a>[78]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-TryCatchExpr">TryCatchExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-TryClause">TryClause</a> <a href=
|
|
"#prod-xquery30-CatchClause">CatchClause</a>+</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TryClause" id=
|
|
"prod-xquery30-TryClause"></a>[79]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-TryClause">TryClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"try" "{" <a href=
|
|
"#prod-xquery30-TryTargetExpr">TryTargetExpr</a> "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TryTargetExpr" id=
|
|
"prod-xquery30-TryTargetExpr"></a>[80]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-TryTargetExpr">TryTargetExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Expr">Expr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CatchClause" id=
|
|
"prod-xquery30-CatchClause"></a>[81]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-CatchClause">CatchClause</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"catch" <a href=
|
|
"#prod-xquery30-CatchErrorList">CatchErrorList</a> "{" <a href=
|
|
"#prod-xquery30-Expr">Expr</a> "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CatchErrorList" id=
|
|
"prod-xquery30-CatchErrorList"></a>[82]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-CatchErrorList">CatchErrorList</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-NameTest">NameTest</a> ("|"
|
|
<a href="#prod-xquery30-NameTest">NameTest</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-OrExpr" id=
|
|
"prod-xquery30-OrExpr"></a>[83]   </td>
|
|
<td><code>OrExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-AndExpr">AndExpr</a> ( "or"
|
|
<a href="#prod-xquery30-AndExpr">AndExpr</a> )*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AndExpr" id=
|
|
"prod-xquery30-AndExpr"></a>[84]   </td>
|
|
<td><code>AndExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ComparisonExpr">ComparisonExpr</a> ( "and" <a href=
|
|
"#prod-xquery30-ComparisonExpr">ComparisonExpr</a> )*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ComparisonExpr" id=
|
|
"prod-xquery30-ComparisonExpr"></a>[85]   </td>
|
|
<td><code>ComparisonExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-StringConcatExpr">StringConcatExpr</a> ( (<a href=
|
|
"#prod-xquery30-ValueComp">ValueComp</a><br />
|
|
| <a href="#prod-xquery30-GeneralComp">GeneralComp</a><br />
|
|
| <a href="#prod-xquery30-NodeComp">NodeComp</a>) <a href=
|
|
"#prod-xquery30-StringConcatExpr">StringConcatExpr</a>
|
|
)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-StringConcatExpr" id=
|
|
"prod-xquery30-StringConcatExpr"></a>[86]   </td>
|
|
<td><code>StringConcatExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-RangeExpr">RangeExpr</a> ( "||"
|
|
<a href="#prod-xquery30-RangeExpr">RangeExpr</a> )*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-RangeExpr" id=
|
|
"prod-xquery30-RangeExpr"></a>[87]   </td>
|
|
<td><code>RangeExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-AdditiveExpr">AdditiveExpr</a> (
|
|
"to" <a href="#prod-xquery30-AdditiveExpr">AdditiveExpr</a>
|
|
)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AdditiveExpr" id=
|
|
"prod-xquery30-AdditiveExpr"></a>[88]   </td>
|
|
<td><code>AdditiveExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-MultiplicativeExpr">MultiplicativeExpr</a> ( ("+" |
|
|
"-") <a href=
|
|
"#prod-xquery30-MultiplicativeExpr">MultiplicativeExpr</a>
|
|
)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-MultiplicativeExpr" id=
|
|
"prod-xquery30-MultiplicativeExpr"></a>[89]   </td>
|
|
<td><code>MultiplicativeExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-UnionExpr">UnionExpr</a> ( ("*" |
|
|
"div" | "idiv" | "mod") <a href=
|
|
"#prod-xquery30-UnionExpr">UnionExpr</a> )*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-UnionExpr" id=
|
|
"prod-xquery30-UnionExpr"></a>[90]   </td>
|
|
<td><code>UnionExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-IntersectExceptExpr">IntersectExceptExpr</a> (
|
|
("union" | "|") <a href=
|
|
"#prod-xquery30-IntersectExceptExpr">IntersectExceptExpr</a>
|
|
)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-IntersectExceptExpr" id=
|
|
"prod-xquery30-IntersectExceptExpr"></a>[91]   </td>
|
|
<td><code>IntersectExceptExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-InstanceofExpr">InstanceofExpr</a> ( ("intersect" |
|
|
"except") <a href=
|
|
"#prod-xquery30-InstanceofExpr">InstanceofExpr</a> )*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-InstanceofExpr" id=
|
|
"prod-xquery30-InstanceofExpr"></a>[92]   </td>
|
|
<td><code>InstanceofExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-TreatExpr">TreatExpr</a> (
|
|
"instance" "of" <a href=
|
|
"#prod-xquery30-SequenceType">SequenceType</a> )?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TreatExpr" id=
|
|
"prod-xquery30-TreatExpr"></a>[93]   </td>
|
|
<td><code>TreatExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-CastableExpr">CastableExpr</a> (
|
|
"treat" "as" <a href="#prod-xquery30-SequenceType">SequenceType</a>
|
|
)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CastableExpr" id=
|
|
"prod-xquery30-CastableExpr"></a>[94]   </td>
|
|
<td><code>CastableExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-CastExpr">CastExpr</a> (
|
|
"castable" "as" <a href="#prod-xquery30-SingleType">SingleType</a>
|
|
)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CastExpr" id=
|
|
"prod-xquery30-CastExpr"></a>[95]   </td>
|
|
<td><code>CastExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-UnaryExpr">UnaryExpr</a> ( "cast"
|
|
"as" <a href="#prod-xquery30-SingleType">SingleType</a>
|
|
)?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-UnaryExpr" id=
|
|
"prod-xquery30-UnaryExpr"></a>[96]   </td>
|
|
<td><code>UnaryExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("-" | "+")* <a href=
|
|
"#prod-xquery30-ValueExpr">ValueExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ValueExpr" id=
|
|
"prod-xquery30-ValueExpr"></a>[97]   </td>
|
|
<td><code>ValueExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-ValidateExpr">ValidateExpr</a> |
|
|
<a href="#prod-xquery30-PathExpr">PathExpr</a> | <a href=
|
|
"#prod-xquery30-ExtensionExpr">ExtensionExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-GeneralComp" id=
|
|
"prod-xquery30-GeneralComp"></a>[98]   </td>
|
|
<td><code>GeneralComp</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"=" | "!=" | "<" | "<=" | ">" |
|
|
">="</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ValueComp" id=
|
|
"prod-xquery30-ValueComp"></a>[99]   </td>
|
|
<td><code>ValueComp</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"eq" | "ne" | "lt" | "le" | "gt" | "ge"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-NodeComp" id=
|
|
"prod-xquery30-NodeComp"></a>[100]   </td>
|
|
<td><code>NodeComp</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"is" | "<<" | ">>"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ValidateExpr" id=
|
|
"prod-xquery30-ValidateExpr"></a>[101]   </td>
|
|
<td><code>ValidateExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"validate" (<a href=
|
|
"#prod-xquery30-ValidationMode">ValidationMode</a> | ("type"
|
|
<a href="#prod-xquery30-TypeName">TypeName</a>))? "{" <a href=
|
|
"#prod-xquery30-Expr">Expr</a> "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ValidationMode" id=
|
|
"prod-xquery30-ValidationMode"></a>[102]   </td>
|
|
<td><code>ValidationMode</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"lax" | "strict"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ExtensionExpr" id=
|
|
"prod-xquery30-ExtensionExpr"></a>[103]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ExtensionExpr">ExtensionExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Pragma">Pragma</a>+ "{" <a href=
|
|
"#prod-xquery30-Expr">Expr</a>? "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Pragma" id=
|
|
"prod-xquery30-Pragma"></a>[104]   </td>
|
|
<td><code>Pragma</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"(#" <a href="#prod-xquery30-S">S</a>? <a href=
|
|
"#prod-xquery30-EQName">EQName</a> (<a href=
|
|
"#prod-xquery30-S">S</a> <a href=
|
|
"#prod-xquery30-PragmaContents">PragmaContents</a>)?
|
|
"#)"</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PragmaContents" id=
|
|
"prod-xquery30-PragmaContents"></a>[105]   </td>
|
|
<td><code>PragmaContents</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-Char">Char</a>* - (Char* '#)'
|
|
Char*))</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PathExpr" id=
|
|
"prod-xquery30-PathExpr"></a>[106]   </td>
|
|
<td><code>PathExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("/" <a href=
|
|
"#prod-xquery30-RelativePathExpr">RelativePathExpr</a>?)<br />
|
|
| ("//" <a href=
|
|
"#prod-xquery30-RelativePathExpr">RelativePathExpr</a>)<br />
|
|
| <a href=
|
|
"#prod-xquery30-RelativePathExpr">RelativePathExpr</a></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-leading-lone-slash">gn:
|
|
leading-lone-slash</a><sup><small>XQ</small></sup></span>
|
|
*/</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-RelativePathExpr" id=
|
|
"prod-xquery30-RelativePathExpr"></a>[107]   </td>
|
|
<td><code>RelativePathExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-StepExpr">StepExpr</a> (("/" |
|
|
"//" | "!") <a href=
|
|
"#prod-xquery30-StepExpr">StepExpr</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-StepExpr" id=
|
|
"prod-xquery30-StepExpr"></a>[108]   </td>
|
|
<td><code>StepExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-PostfixExpr">PostfixExpr</a> |
|
|
<a href="#prod-xquery30-AxisStep">AxisStep</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AxisStep" id=
|
|
"prod-xquery30-AxisStep"></a>[109]   </td>
|
|
<td><code>AxisStep</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-ReverseStep">ReverseStep</a> |
|
|
<a href="#prod-xquery30-ForwardStep">ForwardStep</a>) <a href=
|
|
"#prod-xquery30-PredicateList">PredicateList</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ForwardStep" id=
|
|
"prod-xquery30-ForwardStep"></a>[110]   </td>
|
|
<td><code>ForwardStep</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-ForwardAxis">ForwardAxis</a>
|
|
<a href="#prod-xquery30-NodeTest">NodeTest</a>) | <a href=
|
|
"#prod-xquery30-AbbrevForwardStep">AbbrevForwardStep</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ForwardAxis" id=
|
|
"prod-xquery30-ForwardAxis"></a>[111]   </td>
|
|
<td><code>ForwardAxis</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("child" "::")<br />
|
|
| ("descendant" "::")<br />
|
|
| ("attribute" "::")<br />
|
|
| ("self" "::")<br />
|
|
| ("descendant-or-self" "::")<br />
|
|
| ("following-sibling" "::")<br />
|
|
| ("following" "::")</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AbbrevForwardStep" id=
|
|
"prod-xquery30-AbbrevForwardStep"></a>[112]   </td>
|
|
<td><code>AbbrevForwardStep</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"@"? <a href=
|
|
"#prod-xquery30-NodeTest">NodeTest</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ReverseStep" id=
|
|
"prod-xquery30-ReverseStep"></a>[113]   </td>
|
|
<td><code>ReverseStep</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-ReverseAxis">ReverseAxis</a>
|
|
<a href="#prod-xquery30-NodeTest">NodeTest</a>) | <a href=
|
|
"#prod-xquery30-AbbrevReverseStep">AbbrevReverseStep</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ReverseAxis" id=
|
|
"prod-xquery30-ReverseAxis"></a>[114]   </td>
|
|
<td><code>ReverseAxis</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("parent" "::")<br />
|
|
| ("ancestor" "::")<br />
|
|
| ("preceding-sibling" "::")<br />
|
|
| ("preceding" "::")<br />
|
|
| ("ancestor-or-self" "::")</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AbbrevReverseStep" id=
|
|
"prod-xquery30-AbbrevReverseStep"></a>[115]   </td>
|
|
<td><code>AbbrevReverseStep</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>".."</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-NodeTest" id=
|
|
"prod-xquery30-NodeTest"></a>[116]   </td>
|
|
<td><code>NodeTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-KindTest">KindTest</a> | <a href=
|
|
"#prod-xquery30-NameTest">NameTest</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-NameTest" id=
|
|
"prod-xquery30-NameTest"></a>[117]   </td>
|
|
<td><code>NameTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a> | <a href=
|
|
"#prod-xquery30-Wildcard">Wildcard</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Wildcard" id=
|
|
"prod-xquery30-Wildcard"></a>[118]   </td>
|
|
<td><code>Wildcard</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"*"<br />
|
|
| (<a href="#prod-xquery30-NCName">NCName</a> ":" "*")<br />
|
|
| ("*" ":" <a href="#prod-xquery30-NCName">NCName</a>)<br />
|
|
| (<a href="#prod-xquery30-URILiteral">URILiteral</a> ":"
|
|
"*")</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PostfixExpr" id=
|
|
"prod-xquery30-PostfixExpr"></a>[119]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-PostfixExpr">PostfixExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-PrimaryExpr">PrimaryExpr</a>
|
|
(<a href="#prod-xquery30-Predicate">Predicate</a> | <a href=
|
|
"#prod-xquery30-ArgumentList">ArgumentList</a>)*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ArgumentList" id=
|
|
"prod-xquery30-ArgumentList"></a>[120]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ArgumentList">ArgumentList</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"(" (<a href="#prod-xquery30-Argument">Argument</a> (","
|
|
<a href="#prod-xquery30-Argument">Argument</a>)*)? ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PredicateList" id=
|
|
"prod-xquery30-PredicateList"></a>[121]   </td>
|
|
<td><code>PredicateList</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-Predicate">Predicate</a>*</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Predicate" id=
|
|
"prod-xquery30-Predicate"></a>[122]   </td>
|
|
<td><code>Predicate</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"[" <a href="#prod-xquery30-Expr">Expr</a>
|
|
"]"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PrimaryExpr" id=
|
|
"prod-xquery30-PrimaryExpr"></a>[123]   </td>
|
|
<td><code>PrimaryExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Literal">Literal</a><br />
|
|
| <a href="#prod-xquery30-VarRef">VarRef</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-ParenthesizedExpr">ParenthesizedExpr</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-ContextItemExpr">ContextItemExpr</a><br />
|
|
| <a href="#prod-xquery30-FunctionCall">FunctionCall</a><br />
|
|
| <a href="#prod-xquery30-OrderedExpr">OrderedExpr</a><br />
|
|
| <a href="#prod-xquery30-UnorderedExpr">UnorderedExpr</a><br />
|
|
| <a href="#prod-xquery30-Constructor">Constructor</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-FunctionItemExpr">FunctionItemExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Literal" id=
|
|
"prod-xquery30-Literal"></a>[124]   </td>
|
|
<td><code>Literal</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-NumericLiteral">NumericLiteral</a> | <a href=
|
|
"#prod-xquery30-StringLiteral">StringLiteral</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-NumericLiteral" id=
|
|
"prod-xquery30-NumericLiteral"></a>[125]   </td>
|
|
<td><code>NumericLiteral</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-IntegerLiteral">IntegerLiteral</a> | <a href=
|
|
"#prod-xquery30-DecimalLiteral">DecimalLiteral</a> | <a href=
|
|
"#prod-xquery30-DoubleLiteral">DoubleLiteral</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-VarRef" id=
|
|
"prod-xquery30-VarRef"></a>[126]   </td>
|
|
<td><code>VarRef</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"$" <a href=
|
|
"#prod-xquery30-VarName">VarName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-VarName" id=
|
|
"prod-xquery30-VarName"></a>[127]   </td>
|
|
<td><code>VarName</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ParenthesizedExpr" id=
|
|
"prod-xquery30-ParenthesizedExpr"></a>[128]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ParenthesizedExpr">ParenthesizedExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"(" <a href="#prod-xquery30-Expr">Expr</a>?
|
|
")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ContextItemExpr" id=
|
|
"prod-xquery30-ContextItemExpr"></a>[129]   </td>
|
|
<td><code>ContextItemExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"."</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-OrderedExpr" id=
|
|
"prod-xquery30-OrderedExpr"></a>[130]   </td>
|
|
<td><code>OrderedExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"ordered" "{" <a href="#prod-xquery30-Expr">Expr</a>
|
|
"}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-UnorderedExpr" id=
|
|
"prod-xquery30-UnorderedExpr"></a>[131]   </td>
|
|
<td><code>UnorderedExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"unordered" "{" <a href="#prod-xquery30-Expr">Expr</a>
|
|
"}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-FunctionCall" id=
|
|
"prod-xquery30-FunctionCall"></a>[132]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-FunctionCall">FunctionCall</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a> <a href=
|
|
"#prod-xquery30-ArgumentList">ArgumentList</a></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-reserved-function-names">gn:
|
|
reserved-function-names</a><sup><small>XQ</small></sup></span>
|
|
*/</i></td>
|
|
</tr>
|
|
<tr valign="baseline">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-parens">gn:
|
|
parens</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Argument" id=
|
|
"prod-xquery30-Argument"></a>[133]   </td>
|
|
<td><code><a href="#doc-xquery30-Argument">Argument</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-ExprSingle">ExprSingle</a> |
|
|
<a href=
|
|
"#prod-xquery30-ArgumentPlaceholder">ArgumentPlaceholder</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ArgumentPlaceholder" id=
|
|
"prod-xquery30-ArgumentPlaceholder"></a>[134]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ArgumentPlaceholder">ArgumentPlaceholder</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"?"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Constructor" id=
|
|
"prod-xquery30-Constructor"></a>[135]   </td>
|
|
<td><code>Constructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-DirectConstructor">DirectConstructor</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-ComputedConstructor">ComputedConstructor</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DirectConstructor" id=
|
|
"prod-xquery30-DirectConstructor"></a>[136]   </td>
|
|
<td><code>DirectConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-DirElemConstructor">DirElemConstructor</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-DirCommentConstructor">DirCommentConstructor</a><br />
|
|
|
|
| <a href=
|
|
"#prod-xquery30-DirPIConstructor">DirPIConstructor</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DirElemConstructor" id=
|
|
"prod-xquery30-DirElemConstructor"></a>[137]   </td>
|
|
<td><code>DirElemConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"<" <a href="#prod-xquery30-QName">QName</a> <a href=
|
|
"#prod-xquery30-DirAttributeList">DirAttributeList</a> ("/>" |
|
|
(">" <a href="#prod-xquery30-DirElemContent">DirElemContent</a>*
|
|
"</" <a href="#prod-xquery30-QName">QName</a> <a href=
|
|
"#prod-xquery30-S">S</a>? ">"))</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DirAttributeList" id=
|
|
"prod-xquery30-DirAttributeList"></a>[138]   </td>
|
|
<td><code>DirAttributeList</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-S">S</a> (<a href=
|
|
"#prod-xquery30-QName">QName</a> <a href="#prod-xquery30-S">S</a>?
|
|
"=" <a href="#prod-xquery30-S">S</a>? <a href=
|
|
"#prod-xquery30-DirAttributeValue">DirAttributeValue</a>)?)*</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DirAttributeValue" id=
|
|
"prod-xquery30-DirAttributeValue"></a>[139]   </td>
|
|
<td><code>DirAttributeValue</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>('"' (<a href="#prod-xquery30-EscapeQuot">EscapeQuot</a>
|
|
| <a href=
|
|
"#prod-xquery30-QuotAttrValueContent">QuotAttrValueContent</a>)*
|
|
'"')<br />
|
|
| ("'" (<a href="#prod-xquery30-EscapeApos">EscapeApos</a> |
|
|
<a href=
|
|
"#prod-xquery30-AposAttrValueContent">AposAttrValueContent</a>)*
|
|
"'")</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-QuotAttrValueContent" id=
|
|
"prod-xquery30-QuotAttrValueContent"></a>[140]   </td>
|
|
<td><code>QuotAttrValueContent</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-QuotAttrContentChar">QuotAttrContentChar</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-CommonContent">CommonContent</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AposAttrValueContent" id=
|
|
"prod-xquery30-AposAttrValueContent"></a>[141]   </td>
|
|
<td><code>AposAttrValueContent</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-AposAttrContentChar">AposAttrContentChar</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-CommonContent">CommonContent</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DirElemContent" id=
|
|
"prod-xquery30-DirElemContent"></a>[142]   </td>
|
|
<td><code>DirElemContent</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-DirectConstructor">DirectConstructor</a><br />
|
|
| <a href="#prod-xquery30-CDataSection">CDataSection</a><br />
|
|
| <a href="#prod-xquery30-CommonContent">CommonContent</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-ElementContentChar">ElementContentChar</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CommonContent" id=
|
|
"prod-xquery30-CommonContent"></a>[143]   </td>
|
|
<td><code>CommonContent</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-PredefinedEntityRef">PredefinedEntityRef</a> |
|
|
<a href="#prod-xquery30-CharRef">CharRef</a> | "{{" | "}}" |
|
|
<a href="#prod-xquery30-EnclosedExpr">EnclosedExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DirCommentConstructor" id=
|
|
"prod-xquery30-DirCommentConstructor"></a>[144]   </td>
|
|
<td><code>DirCommentConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"<!--" <a href=
|
|
"#prod-xquery30-DirCommentContents">DirCommentContents</a>
|
|
"-->"</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DirCommentContents" id=
|
|
"prod-xquery30-DirCommentContents"></a>[145]   </td>
|
|
<td><code>DirCommentContents</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>((<a href="#prod-xquery30-Char">Char</a> - '-') | ('-'
|
|
(<a href="#prod-xquery30-Char">Char</a> - '-')))*</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DirPIConstructor" id=
|
|
"prod-xquery30-DirPIConstructor"></a>[146]   </td>
|
|
<td><code>DirPIConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"<?" <a href="#prod-xquery30-PITarget">PITarget</a>
|
|
(<a href="#prod-xquery30-S">S</a> <a href=
|
|
"#prod-xquery30-DirPIContents">DirPIContents</a>)?
|
|
"?>"</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DirPIContents" id=
|
|
"prod-xquery30-DirPIContents"></a>[147]   </td>
|
|
<td><code>DirPIContents</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-Char">Char</a>* - (Char* '?>'
|
|
Char*))</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CDataSection" id=
|
|
"prod-xquery30-CDataSection"></a>[148]   </td>
|
|
<td><code>CDataSection</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"<![CDATA[" <a href=
|
|
"#prod-xquery30-CDataSectionContents">CDataSectionContents</a>
|
|
"]]>"</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CDataSectionContents" id=
|
|
"prod-xquery30-CDataSectionContents"></a>[149]   </td>
|
|
<td><code>CDataSectionContents</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-Char">Char</a>* - (Char*
|
|
']]>' Char*))</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ComputedConstructor" id=
|
|
"prod-xquery30-ComputedConstructor"></a>[150]   </td>
|
|
<td><code>ComputedConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-CompDocConstructor">CompDocConstructor</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-CompElemConstructor">CompElemConstructor</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-CompAttrConstructor">CompAttrConstructor</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-CompNamespaceConstructor">CompNamespaceConstructor</a><br />
|
|
|
|
| <a href=
|
|
"#prod-xquery30-CompTextConstructor">CompTextConstructor</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-CompCommentConstructor">CompCommentConstructor</a><br />
|
|
|
|
| <a href=
|
|
"#prod-xquery30-CompPIConstructor">CompPIConstructor</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CompDocConstructor" id=
|
|
"prod-xquery30-CompDocConstructor"></a>[151]   </td>
|
|
<td><code>CompDocConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"document" "{" <a href="#prod-xquery30-Expr">Expr</a>
|
|
"}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CompElemConstructor" id=
|
|
"prod-xquery30-CompElemConstructor"></a>[152]   </td>
|
|
<td><code>CompElemConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"element" (<a href="#prod-xquery30-EQName">EQName</a> |
|
|
("{" <a href="#prod-xquery30-Expr">Expr</a> "}")) "{" <a href=
|
|
"#prod-xquery30-ContentExpr">ContentExpr</a>? "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ContentExpr" id=
|
|
"prod-xquery30-ContentExpr"></a>[153]   </td>
|
|
<td><code>ContentExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Expr">Expr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CompAttrConstructor" id=
|
|
"prod-xquery30-CompAttrConstructor"></a>[154]   </td>
|
|
<td><code>CompAttrConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"attribute" (<a href="#prod-xquery30-EQName">EQName</a> |
|
|
("{" <a href="#prod-xquery30-Expr">Expr</a> "}")) "{" <a href=
|
|
"#prod-xquery30-Expr">Expr</a>? "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CompNamespaceConstructor" id=
|
|
"prod-xquery30-CompNamespaceConstructor"></a>[155]   </td>
|
|
<td><code>CompNamespaceConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"namespace" (<a href="#prod-xquery30-Prefix">Prefix</a> |
|
|
("{" <a href="#prod-xquery30-PrefixExpr">PrefixExpr</a> "}")) "{"
|
|
<a href="#prod-xquery30-URIExpr">URIExpr</a> "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Prefix" id=
|
|
"prod-xquery30-Prefix"></a>[156]   </td>
|
|
<td><code>Prefix</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-NCName">NCName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PrefixExpr" id=
|
|
"prod-xquery30-PrefixExpr"></a>[157]   </td>
|
|
<td><code>PrefixExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Expr">Expr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-URIExpr" id=
|
|
"prod-xquery30-URIExpr"></a>[158]   </td>
|
|
<td><code>URIExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Expr">Expr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CompTextConstructor" id=
|
|
"prod-xquery30-CompTextConstructor"></a>[159]   </td>
|
|
<td><code>CompTextConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"text" "{" <a href="#prod-xquery30-Expr">Expr</a>
|
|
"}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CompCommentConstructor" id=
|
|
"prod-xquery30-CompCommentConstructor"></a>[160]   </td>
|
|
<td><code>CompCommentConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"comment" "{" <a href="#prod-xquery30-Expr">Expr</a>
|
|
"}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CompPIConstructor" id=
|
|
"prod-xquery30-CompPIConstructor"></a>[161]   </td>
|
|
<td><code>CompPIConstructor</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"processing-instruction" (<a href=
|
|
"#prod-xquery30-NCName">NCName</a> | ("{" <a href=
|
|
"#prod-xquery30-Expr">Expr</a> "}")) "{" <a href=
|
|
"#prod-xquery30-Expr">Expr</a>? "}"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-FunctionItemExpr" id=
|
|
"prod-xquery30-FunctionItemExpr"></a>[162]   </td>
|
|
<td><code>FunctionItemExpr</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-NamedFunctionRef">NamedFunctionRef</a> | <a href=
|
|
"#prod-xquery30-InlineFunctionExpr">InlineFunctionExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-NamedFunctionRef" id=
|
|
"prod-xquery30-NamedFunctionRef"></a>[163]   </td>
|
|
<td><code>NamedFunctionRef</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a> "#" <a href=
|
|
"#prod-xquery30-IntegerLiteral">IntegerLiteral</a></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-reserved-function-names">gn:
|
|
reserved-function-names</a><sup><small>XQ</small></sup></span>
|
|
*/</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-InlineFunctionExpr" id=
|
|
"prod-xquery30-InlineFunctionExpr"></a>[164]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-InlineFunctionExpr">InlineFunctionExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Annotation">Annotation</a>*
|
|
"function" "(" <a href="#prod-xquery30-ParamList">ParamList</a>?
|
|
")" ("as" <a href="#prod-xquery30-SequenceType">SequenceType</a>)?
|
|
<a href="#prod-xquery30-FunctionBody">FunctionBody</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SingleType" id=
|
|
"prod-xquery30-SingleType"></a>[165]   </td>
|
|
<td><code>SingleType</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-SimpleTypeName">SimpleTypeName</a> "?"?</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TypeDeclaration" id=
|
|
"prod-xquery30-TypeDeclaration"></a>[166]   </td>
|
|
<td><code>TypeDeclaration</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"as" <a href=
|
|
"#prod-xquery30-SequenceType">SequenceType</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SequenceType" id=
|
|
"prod-xquery30-SequenceType"></a>[167]   </td>
|
|
<td><code>SequenceType</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("empty-sequence" "(" ")")<br />
|
|
| (<a href="#prod-xquery30-ItemType">ItemType</a> <a href=
|
|
"#prod-xquery30-OccurrenceIndicator">OccurrenceIndicator</a>?)</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-OccurrenceIndicator" id=
|
|
"prod-xquery30-OccurrenceIndicator"></a>[168]   </td>
|
|
<td><code>OccurrenceIndicator</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"?" | "*" | "+"</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-occurrence-indicators">gn:
|
|
occurrence-indicators</a><sup><small>XQ</small></sup></span>
|
|
*/</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ItemType" id=
|
|
"prod-xquery30-ItemType"></a>[169]   </td>
|
|
<td><code>ItemType</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-KindTest">KindTest</a> | ("item"
|
|
"(" ")") | <a href="#prod-xquery30-FunctionTest">FunctionTest</a> |
|
|
<a href="#prod-xquery30-AtomicOrUnionType">AtomicOrUnionType</a> |
|
|
<a href=
|
|
"#prod-xquery30-ParenthesizedItemType">ParenthesizedItemType</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AtomicOrUnionType" id=
|
|
"prod-xquery30-AtomicOrUnionType"></a>[170]   </td>
|
|
<td><code>AtomicOrUnionType</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-KindTest" id=
|
|
"prod-xquery30-KindTest"></a>[171]   </td>
|
|
<td><code>KindTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-DocumentTest">DocumentTest</a><br />
|
|
| <a href="#prod-xquery30-ElementTest">ElementTest</a><br />
|
|
| <a href="#prod-xquery30-AttributeTest">AttributeTest</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-SchemaElementTest">SchemaElementTest</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-SchemaAttributeTest">SchemaAttributeTest</a><br />
|
|
| <a href="#prod-xquery30-PITest">PITest</a><br />
|
|
| <a href="#prod-xquery30-CommentTest">CommentTest</a><br />
|
|
| <a href="#prod-xquery30-TextTest">TextTest</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-NamespaceNodeTest">NamespaceNodeTest</a><br />
|
|
| <a href="#prod-xquery30-AnyKindTest">AnyKindTest</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AnyKindTest" id=
|
|
"prod-xquery30-AnyKindTest"></a>[172]   </td>
|
|
<td><code>AnyKindTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"node" "(" ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DocumentTest" id=
|
|
"prod-xquery30-DocumentTest"></a>[173]   </td>
|
|
<td><code>DocumentTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"document-node" "(" (<a href=
|
|
"#prod-xquery30-ElementTest">ElementTest</a> | <a href=
|
|
"#prod-xquery30-SchemaElementTest">SchemaElementTest</a>)?
|
|
")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TextTest" id=
|
|
"prod-xquery30-TextTest"></a>[174]   </td>
|
|
<td><code>TextTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"text" "(" ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CommentTest" id=
|
|
"prod-xquery30-CommentTest"></a>[175]   </td>
|
|
<td><code>CommentTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"comment" "(" ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-NamespaceNodeTest" id=
|
|
"prod-xquery30-NamespaceNodeTest"></a>[176]   </td>
|
|
<td><code>NamespaceNodeTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"namespace-node" "(" ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PITest" id=
|
|
"prod-xquery30-PITest"></a>[177]   </td>
|
|
<td><code>PITest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"processing-instruction" "(" (<a href=
|
|
"#prod-xquery30-NCName">NCName</a> | <a href=
|
|
"#prod-xquery30-StringLiteral">StringLiteral</a>)? ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AttributeTest" id=
|
|
"prod-xquery30-AttributeTest"></a>[178]   </td>
|
|
<td><code>AttributeTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"attribute" "(" (<a href=
|
|
"#prod-xquery30-AttribNameOrWildcard">AttribNameOrWildcard</a> (","
|
|
<a href="#prod-xquery30-TypeName">TypeName</a>)?)? ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AttribNameOrWildcard" id=
|
|
"prod-xquery30-AttribNameOrWildcard"></a>[179]   </td>
|
|
<td><code>AttribNameOrWildcard</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-AttributeName">AttributeName</a>
|
|
| "*"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SchemaAttributeTest" id=
|
|
"prod-xquery30-SchemaAttributeTest"></a>[180]   </td>
|
|
<td><code>SchemaAttributeTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"schema-attribute" "(" <a href=
|
|
"#prod-xquery30-AttributeDeclaration">AttributeDeclaration</a>
|
|
")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AttributeDeclaration" id=
|
|
"prod-xquery30-AttributeDeclaration"></a>[181]   </td>
|
|
<td><code>AttributeDeclaration</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-AttributeName">AttributeName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ElementTest" id=
|
|
"prod-xquery30-ElementTest"></a>[182]   </td>
|
|
<td><code>ElementTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"element" "(" (<a href=
|
|
"#prod-xquery30-ElementNameOrWildcard">ElementNameOrWildcard</a>
|
|
("," <a href="#prod-xquery30-TypeName">TypeName</a> "?"?)?)?
|
|
")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ElementNameOrWildcard" id=
|
|
"prod-xquery30-ElementNameOrWildcard"></a>[183]   </td>
|
|
<td><code>ElementNameOrWildcard</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-ElementName">ElementName</a> |
|
|
"*"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SchemaElementTest" id=
|
|
"prod-xquery30-SchemaElementTest"></a>[184]   </td>
|
|
<td><code>SchemaElementTest</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"schema-element" "(" <a href=
|
|
"#prod-xquery30-ElementDeclaration">ElementDeclaration</a>
|
|
")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ElementDeclaration" id=
|
|
"prod-xquery30-ElementDeclaration"></a>[185]   </td>
|
|
<td><code>ElementDeclaration</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ElementName">ElementName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AttributeName" id=
|
|
"prod-xquery30-AttributeName"></a>[186]   </td>
|
|
<td><code>AttributeName</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ElementName" id=
|
|
"prod-xquery30-ElementName"></a>[187]   </td>
|
|
<td><code>ElementName</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SimpleTypeName" id=
|
|
"prod-xquery30-SimpleTypeName"></a>[188]   </td>
|
|
<td><code>SimpleTypeName</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-TypeName">TypeName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TypeName" id=
|
|
"prod-xquery30-TypeName"></a>[189]   </td>
|
|
<td><code>TypeName</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-EQName">EQName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-FunctionTest" id=
|
|
"prod-xquery30-FunctionTest"></a>[190]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-FunctionTest">FunctionTest</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Annotation">Annotation</a>*
|
|
(<a href="#prod-xquery30-AnyFunctionTest">AnyFunctionTest</a><br />
|
|
| <a href=
|
|
"#prod-xquery30-TypedFunctionTest">TypedFunctionTest</a>)</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AnyFunctionTest" id=
|
|
"prod-xquery30-AnyFunctionTest"></a>[191]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-AnyFunctionTest">AnyFunctionTest</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"function" "(" "*" ")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TypedFunctionTest" id=
|
|
"prod-xquery30-TypedFunctionTest"></a>[192]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-TypedFunctionTest">TypedFunctionTest</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"function" "(" (<a href=
|
|
"#prod-xquery30-SequenceType">SequenceType</a> ("," <a href=
|
|
"#prod-xquery30-SequenceType">SequenceType</a>)*)? ")" "as"
|
|
<a href="#prod-xquery30-SequenceType">SequenceType</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ParenthesizedItemType" id=
|
|
"prod-xquery30-ParenthesizedItemType"></a>[193]   </td>
|
|
<td><code>ParenthesizedItemType</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"(" <a href="#prod-xquery30-ItemType">ItemType</a>
|
|
")"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-URILiteral" id=
|
|
"prod-xquery30-URILiteral"></a>[194]   </td>
|
|
<td><code>URILiteral</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-StringLiteral">StringLiteral</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-RevalidationDecl" id=
|
|
"prod-xquery30-RevalidationDecl"></a>[195]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-RevalidationDecl">RevalidationDecl</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"declare" "revalidation" ("strict" | "lax" |
|
|
"skip")</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-InsertExprTargetChoice" id=
|
|
"prod-xquery30-InsertExprTargetChoice"></a>[196]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-InsertExprTargetChoice">InsertExprTargetChoice</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(("as" ("first" | "last"))? "into")<br />
|
|
| "after"<br />
|
|
| "before"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-InsertExpr" id=
|
|
"prod-xquery30-InsertExpr"></a>[197]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-InsertExpr">InsertExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"insert" ("node" | "nodes") <a href=
|
|
"#prod-xquery30-SourceExpr">SourceExpr</a> <a href=
|
|
"#prod-xquery30-InsertExprTargetChoice">InsertExprTargetChoice</a>
|
|
<a href="#prod-xquery30-TargetExpr">TargetExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DeleteExpr" id=
|
|
"prod-xquery30-DeleteExpr"></a>[198]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-DeleteExpr">DeleteExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"delete" ("node" | "nodes") <a href=
|
|
"#prod-xquery30-TargetExpr">TargetExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ReplaceExpr" id=
|
|
"prod-xquery30-ReplaceExpr"></a>[199]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-ReplaceExpr">ReplaceExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"replace" ("value" "of")? "node" <a href=
|
|
"#prod-xquery30-TargetExpr">TargetExpr</a> "with" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-RenameExpr" id=
|
|
"prod-xquery30-RenameExpr"></a>[200]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-RenameExpr">RenameExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"rename" "node" <a href=
|
|
"#prod-xquery30-TargetExpr">TargetExpr</a> "as" <a href=
|
|
"#prod-xquery30-NewNameExpr">NewNameExpr</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-SourceExpr" id=
|
|
"prod-xquery30-SourceExpr"></a>[201]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-SourceExpr">SourceExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TargetExpr" id=
|
|
"prod-xquery30-TargetExpr"></a>[202]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-TargetExpr">TargetExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-NewNameExpr" id=
|
|
"prod-xquery30-NewNameExpr"></a>[203]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-NewNameExpr">NewNameExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-TransformExpr" id=
|
|
"prod-xquery30-TransformExpr"></a>[204]   </td>
|
|
<td><code><a href=
|
|
"#doc-xquery30-TransformExpr">TransformExpr</a></code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"copy" "$" <a href="#prod-xquery30-VarName">VarName</a>
|
|
":=" <a href="#prod-xquery30-ExprSingle">ExprSingle</a> ("," "$"
|
|
<a href="#prod-xquery30-VarName">VarName</a> ":=" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a>)* "modify" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a> "return" <a href=
|
|
"#prod-xquery30-ExprSingle">ExprSingle</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-EQName" id=
|
|
"prod-xquery30-EQName"></a>[205]   </td>
|
|
<td><code>EQName</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-QName">QName</a> | <a href=
|
|
"#prod-xquery30-URIQualifiedName">URIQualifiedName</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-URIQualifiedName" id=
|
|
"prod-xquery30-URIQualifiedName"></a>[206]   </td>
|
|
<td><code>URIQualifiedName</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-URILiteral">URILiteral</a> ":"
|
|
<a href="#prod-xquery30-NCName">NCName</a></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="div2">
|
|
<h3><a name="id-terminal-symbols" id="id-terminal-symbols"></a>A.1
|
|
Terminal Symbols</h3>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-IntegerLiteral" id=
|
|
"prod-xquery30-IntegerLiteral"></a>[207]   </td>
|
|
<td><code>IntegerLiteral</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href="#prod-xquery30-Digits">Digits</a></code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DecimalLiteral" id=
|
|
"prod-xquery30-DecimalLiteral"></a>[208]   </td>
|
|
<td><code>DecimalLiteral</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>("." <a href="#prod-xquery30-Digits">Digits</a>) |
|
|
(<a href="#prod-xquery30-Digits">Digits</a> "." [0-9]*)</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-DoubleLiteral" id=
|
|
"prod-xquery30-DoubleLiteral"></a>[209]   </td>
|
|
<td><code>DoubleLiteral</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(("." <a href="#prod-xquery30-Digits">Digits</a>) |
|
|
(<a href="#prod-xquery30-Digits">Digits</a> ("." [0-9]*)?)) [eE]
|
|
[+-]? <a href="#prod-xquery30-Digits">Digits</a></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-StringLiteral" id=
|
|
"prod-xquery30-StringLiteral"></a>[210]   </td>
|
|
<td><code>StringLiteral</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>('"' (<a href=
|
|
"#prod-xquery30-PredefinedEntityRef">PredefinedEntityRef</a> |
|
|
<a href="#prod-xquery30-CharRef">CharRef</a> | <a href=
|
|
"#prod-xquery30-EscapeQuot">EscapeQuot</a> | [^"&])* '"') |
|
|
("'" (<a href=
|
|
"#prod-xquery30-PredefinedEntityRef">PredefinedEntityRef</a> |
|
|
<a href="#prod-xquery30-CharRef">CharRef</a> | <a href=
|
|
"#prod-xquery30-EscapeApos">EscapeApos</a> | [^'&])*
|
|
"'")</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PredefinedEntityRef" id=
|
|
"prod-xquery30-PredefinedEntityRef"></a>[211]   </td>
|
|
<td><code>PredefinedEntityRef</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"&" ("lt" | "gt" | "amp" | "quot" | "apos")
|
|
";"</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-EscapeQuot" id=
|
|
"prod-xquery30-EscapeQuot"></a>[212]   </td>
|
|
<td><code>EscapeQuot</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>'""'</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-EscapeApos" id=
|
|
"prod-xquery30-EscapeApos"></a>[213]   </td>
|
|
<td><code>EscapeApos</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"''"</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-ElementContentChar" id=
|
|
"prod-xquery30-ElementContentChar"></a>[214]   </td>
|
|
<td><code>ElementContentChar</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-Char">Char</a> -
|
|
[{}<&])</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-QuotAttrContentChar" id=
|
|
"prod-xquery30-QuotAttrContentChar"></a>[215]   </td>
|
|
<td><code>QuotAttrContentChar</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-Char">Char</a> -
|
|
["{}<&])</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-AposAttrContentChar" id=
|
|
"prod-xquery30-AposAttrContentChar"></a>[216]   </td>
|
|
<td><code>AposAttrContentChar</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-Char">Char</a> -
|
|
['{}<&])</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Comment" id=
|
|
"prod-xquery30-Comment"></a>[217]   </td>
|
|
<td><code>Comment</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>"(:" (<a href=
|
|
"#prod-xquery30-CommentContents">CommentContents</a> | <a href=
|
|
"#prod-xquery30-Comment">Comment</a>)* ":)"</code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#ws-explicit">ws:
|
|
explicit</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
<tr valign="baseline">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-comments">gn:
|
|
comments</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-PITarget" id=
|
|
"prod-xquery30-PITarget"></a>[218]   </td>
|
|
<td><code>PITarget</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"http://www.w3.org/TR/REC-xml/#NT-PITarget">[http://www.w3.org/TR/REC-xml#NT-PITarget]</a><sup><small>XML</small></sup></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-xml-version">gn:
|
|
xml-version</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CharRef" id=
|
|
"prod-xquery30-CharRef"></a>[219]   </td>
|
|
<td><code>CharRef</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"http://www.w3.org/TR/REC-xml/#NT-CharRef">[http://www.w3.org/TR/REC-xml#NT-CharRef]</a><sup><small>XML</small></sup></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-xml-version">gn:
|
|
xml-version</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-QName" id=
|
|
"prod-xquery30-QName"></a>[220]   </td>
|
|
<td><code>QName</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"http://www.w3.org/TR/REC-xml-names/#NT-QName">[http://www.w3.org/TR/REC-xml-names/#NT-QName]</a><sup><small>Names</small></sup></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-xml-version">gn:
|
|
xml-version</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-NCName" id=
|
|
"prod-xquery30-NCName"></a>[221]   </td>
|
|
<td><code>NCName</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"http://www.w3.org/TR/REC-xml-names/#NT-NCName">[http://www.w3.org/TR/REC-xml-names/#NT-NCName]</a><sup><small>Names</small></sup></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-xml-version">gn:
|
|
xml-version</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-S" id=
|
|
"prod-xquery30-S"></a>[222]   </td>
|
|
<td><code>S</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"http://www.w3.org/TR/REC-xml/#NT-S">[http://www.w3.org/TR/REC-xml#NT-S]</a><sup><small>XML</small></sup></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-xml-version">gn:
|
|
xml-version</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Char" id=
|
|
"prod-xquery30-Char"></a>[223]   </td>
|
|
<td><code>Char</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code><a href=
|
|
"http://www.w3.org/TR/REC-xml/#NT-Char">[http://www.w3.org/TR/REC-xml#NT-Char]</a><sup><small>XML</small></sup></code></td>
|
|
<td><i>/* <span><a href=
|
|
"http://www.w3.org/TR/xquery/#parse-note-xml-version">gn:
|
|
xml-version</a><sup><small>XQ</small></sup></span> */</i></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The following symbols are used only in the definition of
|
|
terminal symbols; they are not terminal symbols in the grammar of
|
|
<a href="#id-grammar"><b>A EBNF for XQuery 3.0 Grammar with Update
|
|
extensions</b></a>.</p>
|
|
<table class="scrap" summary="Scrap">
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-Digits" id=
|
|
"prod-xquery30-Digits"></a>[224]   </td>
|
|
<td><code>Digits</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>[0-9]+</code></td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr valign="baseline">
|
|
<td><a name="prod-xquery30-CommentContents" id=
|
|
"prod-xquery30-CommentContents"></a>[225]   </td>
|
|
<td><code>CommentContents</code></td>
|
|
<td>   ::=   </td>
|
|
<td><code>(<a href="#prod-xquery30-Char">Char</a>+ - (Char* ('(:' |
|
|
':)') Char*))</code></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="id-impl-defs" id="id-impl-defs"></a>B
|
|
Implementation-Defined Items</h2>
|
|
<p>The following items in this specification are
|
|
implementation-defined:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>The revalidation modes that are supported by this
|
|
implementation.</p>
|
|
</li>
|
|
<li>
|
|
<p>The default revalidation mode for this implementation.</p>
|
|
</li>
|
|
<li>
|
|
<p>The mechanism (if any) by which an external function can return
|
|
an XDM instance and/or a pending update list to the invoking
|
|
query.</p>
|
|
</li>
|
|
<li>
|
|
<p>The semantics of <code>fn:put()</code>, including the kinds of
|
|
nodes accepted as operands by this function.</p>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="References" id="References"></a>C References</h2>
|
|
<div class="div2">
|
|
<h3><a name="id-normative-references" id=
|
|
"id-normative-references"></a>C.1 Normative References</h3>
|
|
<dl>
|
|
<dt class="label"><span><a name=
|
|
"xquery-update-30-requirements-use-cases" id=
|
|
"xquery-update-30-requirements-use-cases"></a>XQuery Update
|
|
Facility 3.0 Requirements and Use Cases</span></dt>
|
|
<dd>
|
|
<div>World Wide Web Consortium. <em>XQuery Update Facility 3.0
|
|
Requirements and Use Cases</em>. W3C Working Draft, 13 December
|
|
2011. See <a href=
|
|
"http://www.w3.org/TR/xquery-update-30-requirements-use-cases/">http://www.w3.org/TR/xquery-update-30-requirements-use-cases/</a>.</div>
|
|
</dd>
|
|
<dt class="label"><span><a name="xpath-datamodel-30" id=
|
|
"xpath-datamodel-30"></a>XQuery and XPath Data Model (XDM)
|
|
3.0</span></dt>
|
|
<dd>
|
|
<div>World Wide Web Consortium. <em>XQuery and XPath Data Model
|
|
(XDM) 3.0</em>. W3C Working Draft, 13 December 2011. See <a href=
|
|
"http://www.w3.org/TR/xpath-datamodel-30/">http://www.w3.org/TR/xpath-datamodel-30/</a>.</div>
|
|
</dd>
|
|
<dt class="label"><span><a name="xquery-30" id=
|
|
"xquery-30"></a>XQuery 3.0: A Query Language</span></dt>
|
|
<dd>
|
|
<div>World Wide Web Consortium. <em>XQuery 3.0: An XML Query
|
|
Language</em>. W3C Working Draft, 13 December 2011. See <a href=
|
|
"http://www.w3.org/TR/xquery-30/">http://www.w3.org/TR/xquery-30/</a>.</div>
|
|
</dd>
|
|
<dt class="label"><span><a name="xpath-functions-30" id=
|
|
"xpath-functions-30"></a>XQuery and XPath Functions and Operators
|
|
3.0</span></dt>
|
|
<dd>
|
|
<div>World Wide Web Consortium. <em>XQuery and XPath Functions and
|
|
Operators 3.0</em> W3C Working Draft, 13 December 2011. See
|
|
<a href="http://www.w3.org/TR/xquery-functions-30/">http://www.w3.org/TR/xpath-functions-30/</a>.</div>
|
|
</dd>
|
|
<dt class="label"><span><a name="xqueryx-30" id=
|
|
"xqueryx-30"></a>XQueryX 3.0</span></dt>
|
|
<dd>
|
|
<div>World Wide Web Consortium. <em>XQueryX, Version 3.0</em>. W3C
|
|
Working Draft, 13 December 2011. See <a href=
|
|
"http://www.w3.org/TR/xqueryx-30/">http://www.w3.org/TR/xqueryx-30/</a>.</div>
|
|
</dd>
|
|
<dt class="label"><span><a name="XQueryFormalSemantics" id=
|
|
"XQueryFormalSemantics"></a>XQuery 1.0 and XPath 2.0 Formal
|
|
Semantics</span></dt>
|
|
<dd>
|
|
<div>World Wide Web Consortium. <em>XQuery 1.0 and XPath 2.0 Formal
|
|
Semantics</em>. W3C Recommendation, 14 December 2010. See <a href=
|
|
"http://www.w3.org/TR/xquery-semantics/">http://www.w3.org/TR/xquery-semantics/</a>.</div>
|
|
</dd>
|
|
<dt class="label"><span><a name="RFC2119" id="RFC2119"></a>RFC
|
|
2119</span></dt>
|
|
<dd>
|
|
<div>S. Bradner. <em>Key Words for use in RFCs to Indicate
|
|
Requirement Levels.</em> IETF RFC 2119. See <a href=
|
|
"http://www.ietf.org/rfc/rfc2119.txt">http://www.ietf.org/rfc/rfc2119.txt</a>.</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-non-normative-references" id=
|
|
"id-non-normative-references"></a>C.2 Non-normative References</h3>
|
|
<dl>
|
|
<dt class="label"><span><a name="ietf-patches" id=
|
|
"ietf-patches"></a>XML Patch Operations</span></dt>
|
|
<dd>
|
|
<div>Internet Engineering Task Force. <em>An Extensible Markup
|
|
Language (XML) Patch Operations Framework Utilizing XML Path
|
|
Language (XPath) Selectors.</em>. See <a href=
|
|
"http://datatracker.ietf.org/idtracker/draft-ietf-simple-xml-patch-ops/">
|
|
http://datatracker.ietf.org/idtracker/draft-ietf-simple-xml-patch-ops/</a>
|
|
.</div>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="id-errors" id="id-errors"></a>D Error Conditions</h2>
|
|
<div class="div2">
|
|
<h3><a name="id-new-error-codes" id="id-new-error-codes"></a>D.1
|
|
New Error Codes</h3>
|
|
<dl>
|
|
<dt><a name="ERRXUST0001" id="ERRXUST0001"></a>err:XUST0001</dt>
|
|
<dd>
|
|
<p>It is a static error if an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a> is used in any
|
|
position other than one of the following:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>The topmost expression in the body of a query.</p>
|
|
</li>
|
|
<li>
|
|
<p>The <code>modify</code> clause of a transform expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>The <code>return</code> clause of a FLWOR expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>The <code>return</code> clauses of a typeswitch expression in
|
|
which every <code>return</code> clause contains an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a> or a <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>The <code>then</code> and <code>else</code> clauses of a
|
|
conditional statement in which both the <code>then</code> and
|
|
<code>else</code> clauses contain either an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a> or a <a title="vacuous expression" href=
|
|
"#dt-vacuous-expression">vacuous expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>An operand of a comma expression in which each operand is either
|
|
an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a> or a <a title=
|
|
"vacuous expression" href="#dt-vacuous-expression">vacuous
|
|
expression</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p>The content of a parenthesized expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>The body of a function declaration in which the keyword
|
|
<code>updating</code> is specified.</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
<dt><a name="ERRXUST0002" id="ERRXUST0002"></a>err:XUST0002</dt>
|
|
<dd>
|
|
<p>It is a static error if a <a title="simple expression" href=
|
|
"#dt-simple-expression">simple expression</a> that is not a
|
|
<a title="vacuous expression" href="#dt-vacuous-expression">vacuous
|
|
expression</a> is used in one of the following positions:</p>
|
|
<ol class="enumar">
|
|
<li>
|
|
<p>The <code>modify</code> clause of a transform expression.</p>
|
|
</li>
|
|
<li>
|
|
<p>The top-level expression in the body of a function declaration
|
|
in which the keyword <code>updating</code> is specified.</p>
|
|
</li>
|
|
</ol>
|
|
</dd>
|
|
<dt><a name="ERRXUST0003" id="ERRXUST0003"></a>err:XUST0003</dt>
|
|
<dd>
|
|
<p>It is a static error if a Prolog contains more than one
|
|
revalidation declaration.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUTY0004" id="ERRXUTY0004"></a>err:XUTY0004</dt>
|
|
<dd>
|
|
<p>It is a type error if the insertion sequence of an insert
|
|
expression contains an attribute node following a node that is not
|
|
an attribute node.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUTY0005" id="ERRXUTY0005"></a>err:XUTY0005</dt>
|
|
<dd>
|
|
<p>In an insert expression where <code>into</code>, <code>as first
|
|
into</code>, or <code>as last into</code> is specified, it is a
|
|
type error if the target expression returns a non-empty result that
|
|
does not consist of a single element or document node.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUTY0006" id="ERRXUTY0006"></a>err:XUTY0006</dt>
|
|
<dd>
|
|
<p>In an insert expression where <code>before</code> or
|
|
<code>after</code> is specified, it is a type error if the target
|
|
expression returns a non-empty result that does not consist of a
|
|
single element, text, comment, or processing instruction node.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUTY0007" id="ERRXUTY0007"></a>err:XUTY0007</dt>
|
|
<dd>
|
|
<p>It is a type error if the target expression of a delete
|
|
expression does not return a sequence of zero or more nodes.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUTY0008" id="ERRXUTY0008"></a>err:XUTY0008</dt>
|
|
<dd>
|
|
<p>In a replace expression, it is a type error if the target
|
|
expression returns a non-empty result that does not consist of a
|
|
single element, attribute, text, comment, or processing instruction
|
|
node.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0009" id="ERRXUDY0009"></a>err:XUDY0009</dt>
|
|
<dd>
|
|
<p>In a replace expression where <code>value of</code> is not
|
|
specified, it is a dynamic error if the node returned by the target
|
|
expression does not have a parent.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUTY0010" id="ERRXUTY0010"></a>err:XUTY0010</dt>
|
|
<dd>
|
|
<p>In a replace expression where <code>value of</code> is not
|
|
specified and the target is an element, text, comment, or
|
|
processing instruction node, it is a type error if the replacement
|
|
sequence does not consist of zero or more element, text, comment,
|
|
or processing instruction nodes.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUTY0011" id="ERRXUTY0011"></a>err:XUTY0011</dt>
|
|
<dd>
|
|
<p>In a replace expression where <code>value of</code> is not
|
|
specified and the target is an attribute node, it is a type error
|
|
if the replacement sequence does not consist of zero or more
|
|
attribute nodes.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUTY0012" id="ERRXUTY0012"></a>err:XUTY0012</dt>
|
|
<dd>
|
|
<p>In a rename expression, it is a type error if the target
|
|
expression returns a non-empty result that does not consist of a
|
|
single element, attribute, or processing instruction node.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUTY0013" id="ERRXUTY0013"></a>err:XUTY0013</dt>
|
|
<dd>
|
|
<p>In a transform expression, it is a type error if a source
|
|
expression in the <code>copy</code> clause does not return a single
|
|
node.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0014" id="ERRXUDY0014"></a>err:XUDY0014</dt>
|
|
<dd>
|
|
<p>In a transform expression, it is a dynamic error if the
|
|
<code>modify</code> clause modifies any node that was not created
|
|
by the <code>copy</code> clause.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0015" id="ERRXUDY0015"></a>err:XUDY0015</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if any node is the target of more than one
|
|
<code>rename</code> expression within the same query.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0016" id="ERRXUDY0016"></a>err:XUDY0016</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if any node is the target of more than one
|
|
<code>replace</code> expression (without <code>value of</code>
|
|
being specified) within the same query.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0017" id="ERRXUDY0017"></a>err:XUDY0017</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if any node is the target of more than one
|
|
<code>replace value of</code> expression within the same query.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0018" id="ERRXUDY0018"></a>err:XUDY0018</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if a function that was declared to be
|
|
<code>external</code> but not <code>updating</code> returns a
|
|
non-empty pending update list.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0019" id="ERRXUDY0019"></a>err:XUDY0019</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if a function that was declared to be both
|
|
<code>external</code> and <code>updating</code> returns a non-empty
|
|
data model instance.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0021" id="ERRXUDY0021"></a>err:XUDY0021</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if the <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a> that would result from applying
|
|
all the updates in a query violates any constraint specified in
|
|
<a href="#xpath-datamodel-30">[XQuery and XPath Data Model (XDM)
|
|
3.0]</a>. In this case, none of the updates in the query are made
|
|
effective.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUTY0022" id="ERRXUTY0022"></a>err:XUTY0022</dt>
|
|
<dd>
|
|
<p>It is a type error if an insert expression specifies the
|
|
insertion of an attribute node into a document node.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0023" id="ERRXUDY0023"></a>err:XUDY0023</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if an insert, replace, or rename
|
|
expression affects an element node by introducing a new namespace
|
|
binding that <a title="conflict" href="#dt-conflict">conflicts</a>
|
|
with one of its existing namespace bindings.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0024" id="ERRXUDY0024"></a>err:XUDY0024</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if the effect of a set of updating
|
|
expressions is to introduce <a title="conflict" href=
|
|
"#dt-conflict">conflicting</a> namespace bindings into an element
|
|
node.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0025" id="ERRXUDY0025"></a>err:XUDY0025</dt>
|
|
<dd>
|
|
<p>(Not currently used.)</p>
|
|
</dd>
|
|
<dt><a name="ERRXUST0026" id="ERRXUST0026"></a>err:XUST0026</dt>
|
|
<dd>
|
|
<p>It is a static error if a revalidation declaration in a Prolog
|
|
specifies a revalidation mode that is not supported by the current
|
|
implementation.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0027" id="ERRXUDY0027"></a>err:XUDY0027</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if the target expression of an insert,
|
|
replace, or rename expression evaluates to an empty sequence.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUST0028" id="ERRXUST0028"></a>err:XUST0028</dt>
|
|
<dd>
|
|
<p>It is a static error if a function declaration specifies both
|
|
<code>updating</code> and a return type.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0029" id="ERRXUDY0029"></a>err:XUDY0029</dt>
|
|
<dd>
|
|
<p>In an insert expression where <code>before</code> or
|
|
<code>after</code> is specified, it is a dynamic error if the node
|
|
returned by the target expression does not have a parent.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0030" id="ERRXUDY0030"></a>err:XUDY0030</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if an insert expression specifies the
|
|
insertion of an attribute node before or after a child of a
|
|
document node.</p>
|
|
</dd>
|
|
<dt><a name="ERRXUDY0031" id="ERRXUDY0031"></a>err:XUDY0031</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if multiple calls to <code>fn:put</code>
|
|
in the same snapshot specify the same URI (after resolution of
|
|
relative URIs).</p>
|
|
</dd>
|
|
<dt><a name="ERRFOUP0001" id="ERRFOUP0001"></a>err:FOUP0001</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if the first operand of
|
|
<code>fn:put</code> is not a node of a supported kind.</p>
|
|
</dd>
|
|
<dt><a name="ERRFOUP0002" id="ERRFOUP0002"></a>err:FOUP0002</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if the second operand of
|
|
<code>fn:put</code> is not a valid lexical representation of the
|
|
<code>xs:anyURI</code> type.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-amended-error-codes" id=
|
|
"id-amended-error-codes"></a>D.2 Amendments to Existing Error
|
|
Codes</h3>
|
|
<dl>
|
|
<dt><a name="ERRXPST0005" id="ERRXPST0005"></a>err:XPST0005</dt>
|
|
<dd>
|
|
<p>During the analysis phase, it is a static error if the static
|
|
type assigned to a simple expression other than <code>( )</code> or
|
|
<code>data(( ))</code> is <code>empty-sequence( )</code>.</p>
|
|
</dd>
|
|
<dt><a name="ERRXQDY0026" id="ERRXQDY0026"></a>err:XQDY0026</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if a constructor or replace expression
|
|
would result in a processing instruction node whose content
|
|
includes the string "<code>?></code>".</p>
|
|
</dd>
|
|
<dt><a name="ERRXQDY0041" id="ERRXQDY0041"></a>err:XQDY0041</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if the name assigned to a processing node
|
|
by a constructor or rename expression cannot be cast to the type
|
|
<code>xs:NCName</code>.</p>
|
|
</dd>
|
|
<dt><a name="ERRXQDY0072" id="ERRXQDY0072"></a>err:XQDY0072</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if a constructor or replace expression
|
|
would result in a comment node whose content ends with a hyphen or
|
|
contains two adjacent hyphens.</p>
|
|
</dd>
|
|
<dt><a name="ERRXQDY0074" id="ERRXQDY0074"></a>err:XQDY0074</dt>
|
|
<dd>
|
|
<p>It is a dynamic error if the value of the name expression in a
|
|
computed element constructor, computed attribute constructor, or
|
|
rename expression cannot be converted to an expanded QName (for
|
|
example, because it contains a namespace prefix not found in the
|
|
statically known namespaces.)</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="id-xquf-xqueryx" id="id-xquf-xqueryx"></a>E XML Syntax
|
|
(XQueryX) for XQuery Update Facility 3.0</h2>
|
|
<p><a href="#xqueryx-30">[XQueryX 3.0]</a> defines an XML
|
|
representation of <a href="#xquery-30">[XQuery 3.0: A Query
|
|
Language]</a>. <a href=
|
|
"#xquery-update-30-requirements-use-cases">[XQuery Update Facility
|
|
3.0 Requirements and Use Cases]</a> states "The syntax for updates
|
|
MAY have more than one syntax binding. One syntax MUST be
|
|
convenient for humans to read and write. One syntax MUST be
|
|
expressed in XML in a way that reflects the underlying structure of
|
|
the operations." This appendix specifies an XML Schema that defines
|
|
the XML representation of XQuery Update Facility 3.0 by
|
|
representing the abstract syntax found in <a href=
|
|
"#id-grammar"><b>A EBNF for XQuery 3.0 Grammar with Update
|
|
extensions</b></a>. This XML representation for XQuery Update
|
|
Facility 3.0 integrates with the XML representation for XQuery
|
|
3.0.</p>
|
|
<p>The XML Schema specified in this appendix accomplishes its
|
|
integration by importing the XML Schema defined for XQueryX in
|
|
<a href="#xqueryx-30">[XQueryX 3.0]</a>, incorporating all of its
|
|
type and element definitions. It then extends that schema by adding
|
|
definitions of new types and elements in a namespace belonging to
|
|
the Update Facility specification, as well as redefining one
|
|
complex type.</p>
|
|
<div class="div2">
|
|
<h3><a name="id-xquf-update-schema" id=
|
|
"id-xquf-update-schema"></a>E.1 Schema</h3>
|
|
<p>This section specifies the two XML Schemas that define the
|
|
complex types and elements for XQueryX in support of XQuery Update
|
|
Facility 3.0, including changes to the prolog and the addition of
|
|
several new expressions.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
|
|
<xsd:schema
|
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
xmlns:xqx="http://www.w3.org/2005/XQueryX"
|
|
xmlns:xqxuf="http://www.w3.org/2007/xquery-update-10"
|
|
targetNamespace="http://www.w3.org/2007/xquery-update-10"
|
|
elementFormDefault="qualified"
|
|
attributeFormDefault="unqualified">
|
|
|
|
<!-- Initial creation 2006-08-17: Jim Melton -->
|
|
<!-- Added ufRevalidationDecl 2006-08-21: Jim Melton -->
|
|
<!-- Overhaul to bring up to date 2007-08-07: Jim Melton -->
|
|
<!-- Reconfirmed correctness for CR 2008-02-27: Jim Melton -->
|
|
|
|
<xsd:import namespace="http://www.w3.org/2005/XQueryX"
|
|
schemaLocation="http://www.w3.org/2007/xquery-update-10/
|
|
xquery-update-10-xqueryx-redef.xsd"/>
|
|
|
|
|
|
<!-- Add revalidationDecl to alternatives in prolog setters -->
|
|
<xsd:element name="revalidationDecl"
|
|
substitutionGroup="xqx:prologPartOneItem">
|
|
<xsd:simpleType>
|
|
<xsd:restriction base="xsd:NMTOKEN">
|
|
<xsd:enumeration value="strict"/>
|
|
<xsd:enumeration value="lax"/>
|
|
<xsd:enumeration value="skip"/>
|
|
</xsd:restriction>
|
|
</xsd:simpleType>
|
|
</xsd:element>
|
|
|
|
|
|
<!-- Create substitution group for update facility exprs -->
|
|
<xsd:complexType name="expr">
|
|
<xsd:complexContent>
|
|
<xsd:extension base="xqx:expr"/>
|
|
</xsd:complexContent>
|
|
</xsd:complexType>
|
|
|
|
<!-- Make the update facilities subst grp part of expr grp -->
|
|
<xsd:element name="expr" type="xqxuf:expr" abstract="true"
|
|
substitutionGroup="xqx:expr"/>
|
|
|
|
|
|
<!-- InsertExpr -->
|
|
<xsd:complexType name="insertExpr">
|
|
<xsd:complexContent>
|
|
<xsd:extension base="xqxuf:expr">
|
|
<xsd:sequence>
|
|
<xsd:element name="sourceExpr"
|
|
type="xqx:exprWrapper"/>
|
|
<xsd:choice>
|
|
<xsd:element name="insertInto">
|
|
<xsd:complexType>
|
|
<xsd:sequence minOccurs="0" maxOccurs="1">
|
|
<xsd:choice>
|
|
<xsd:element name="insertAsFirst"
|
|
type="xqx:emptyContent"/>
|
|
<xsd:element name="insertAsLast"
|
|
type="xqx:emptyContent"/>
|
|
</xsd:choice>
|
|
</xsd:sequence>
|
|
</xsd:complexType>
|
|
</xsd:element>
|
|
<xsd:element name="insertAfter"
|
|
type="xqx:emptyContent"/>
|
|
<xsd:element name="insertBefore"
|
|
type="xqx:emptyContent"/>
|
|
</xsd:choice>
|
|
<xsd:element name="targetExpr"
|
|
type="xqx:exprWrapper"/>
|
|
</xsd:sequence>
|
|
</xsd:extension>
|
|
</xsd:complexContent>
|
|
</xsd:complexType>
|
|
|
|
<xsd:element name="insertExpr" type="xqxuf:insertExpr"
|
|
substitutionGroup="xqxuf:expr"/>
|
|
|
|
|
|
<!-- DeleteExpr -->
|
|
<xsd:complexType name="deleteExpr">
|
|
<xsd:complexContent>
|
|
<xsd:extension base="xqxuf:expr">
|
|
<xsd:sequence>
|
|
<xsd:element name="targetExpr"
|
|
type="xqx:exprWrapper"/>
|
|
</xsd:sequence>
|
|
</xsd:extension>
|
|
</xsd:complexContent>
|
|
</xsd:complexType>
|
|
|
|
<xsd:element name="deleteExpr" type="xqxuf:deleteExpr"
|
|
substitutionGroup="xqxuf:expr"/>
|
|
|
|
|
|
<!-- ReplaceExpr -->
|
|
<xsd:complexType name="replaceExpr">
|
|
<xsd:complexContent>
|
|
<xsd:extension base="xqxuf:expr">
|
|
<xsd:sequence>
|
|
<xsd:element name="replaceValue"
|
|
type="xqx:emptyContent"
|
|
minOccurs="0" maxOccurs="1"/>
|
|
<xsd:element name="targetExpr"
|
|
type="xqx:exprWrapper"/>
|
|
<xsd:element name="replacementExpr"
|
|
type="xqx:exprWrapper"/>
|
|
</xsd:sequence>
|
|
</xsd:extension>
|
|
</xsd:complexContent>
|
|
</xsd:complexType>
|
|
|
|
<xsd:element name="replaceExpr" type="xqxuf:replaceExpr"
|
|
substitutionGroup="xqxuf:expr"/>
|
|
|
|
|
|
<!-- RenameExpr -->
|
|
<xsd:complexType name="renameExpr">
|
|
<xsd:complexContent>
|
|
<xsd:extension base="xqxuf:expr">
|
|
<xsd:sequence>
|
|
<xsd:element name="targetExpr"
|
|
type="xqx:exprWrapper"/>
|
|
<xsd:element name="newNameExpr"
|
|
type="xqx:exprWrapper"/>
|
|
</xsd:sequence>
|
|
</xsd:extension>
|
|
</xsd:complexContent>
|
|
</xsd:complexType>
|
|
|
|
<xsd:element name="renameExpr" type="xqxuf:renameExpr"
|
|
substitutionGroup="xqxuf:expr"/>
|
|
|
|
|
|
<!-- TransformExpr -->
|
|
<xsd:complexType name="transformExpr">
|
|
<xsd:complexContent>
|
|
<xsd:extension base="xqxuf:expr">
|
|
<xsd:sequence>
|
|
<xsd:element name="transformCopies">
|
|
<xsd:complexType>
|
|
<xsd:sequence>
|
|
<xsd:element name="transformCopy" minOccurs="1"
|
|
maxOccurs="unbounded">
|
|
<xsd:complexType>
|
|
<xsd:sequence>
|
|
<xsd:element ref="xqx:varRef"/>
|
|
<xsd:element name="copySource"
|
|
type="xqx:exprWrapper"/>
|
|
</xsd:sequence>
|
|
</xsd:complexType>
|
|
</xsd:element>
|
|
</xsd:sequence>
|
|
</xsd:complexType>
|
|
</xsd:element>
|
|
<xsd:element name="modifyExpr"
|
|
type="xqx:exprWrapper"/>
|
|
<xsd:element name="returnExpr"
|
|
type="xqx:exprWrapper"/>
|
|
</xsd:sequence>
|
|
</xsd:extension>
|
|
</xsd:complexContent>
|
|
</xsd:complexType>
|
|
|
|
<xsd:element name="transformExpr" type="xqxuf:transformExpr"
|
|
substitutionGroup="xqxuf:expr"/>
|
|
|
|
|
|
</xsd:schema>
|
|
|
|
|
|
|
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
|
xmlns="http://www.w3.org/2005/XQueryX"
|
|
targetNamespace="http://www.w3.org/2005/XQueryX"
|
|
elementFormDefault="qualified" attributeFormDefault="qualified">
|
|
|
|
<!-- Redefine one or more components of the XQueryX XML Schema -->
|
|
<xsd:redefine schemaLocation="http://www.w3.org/2005/XQueryX/xqueryx.xsd">
|
|
|
|
<!-- Redefine the functionDecl complex type -->
|
|
<xsd:complexType name="functionDecl">
|
|
<xsd:complexContent>
|
|
<xsd:extension base="functionDecl">
|
|
<xsd:attribute name="updatingFunction"
|
|
type="xsd:boolean" default="false"/>
|
|
</xsd:extension>
|
|
</xsd:complexContent>
|
|
</xsd:complexType>
|
|
|
|
</xsd:redefine>
|
|
|
|
</xsd:schema>
|
|
|
|
</pre></div>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-xquf-update-stylesheet" id=
|
|
"id-xquf-update-stylesheet"></a>E.2 Stylesheet</h3>
|
|
<p>This section specifies the XSLT stylesheet that defines the
|
|
semantics of XQueryX in support of XQuery Update Facility 3.0. It
|
|
imports the XSLT stylesheet defined in <a href=
|
|
"#xqueryx-30">[XQueryX 3.0]</a>, and provides additional templates
|
|
that define the semantics of the XQueryX representation of XQuery
|
|
Update Facility 3.0 by transforming that XQueryX representation
|
|
into the human readable syntax of XQuery Update Facility 3.0.</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
|
|
<xsl:stylesheet version="1.0"
|
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
xmlns:xqxuf="http://www.w3.org/2007/xquery-update-10"
|
|
xmlns:xqx="http://www.w3.org/2005/XQueryX">
|
|
|
|
<!-- Initial creation 2006-08-17: Jim Melton -->
|
|
<!-- Added revalidationDecl 2006-08-21: Jim Melton -->
|
|
<!-- Bring up to date with spec 2007-08-07: Jim Melton -->
|
|
<!-- Surround updating exprs w/parens 2007-09-13: Jim Melton -->
|
|
|
|
|
|
<xsl:import href="http://www.w3.org/2005/XQueryX/xqueryx.xsl"/>
|
|
|
|
|
|
<!-- revalidationDecl -->
|
|
<xsl:template match="xqxuf:revalidationDecl">
|
|
<xsl:text>declare revalidation </xsl:text>
|
|
<xsl:apply-templates/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- insertExpr -->
|
|
<xsl:template match="xqxuf:insertExpr">
|
|
<xsl:value-of select="$LPAREN"/>
|
|
<xsl:text>insert nodes </xsl:text>
|
|
<xsl:value-of select="$NEWLINE"/>
|
|
<xsl:apply-templates select="xqxuf:sourceExpr"/>
|
|
<xsl:value-of select="$NEWLINE"/>
|
|
<xsl:apply-templates select="xqxuf:insertInto |
|
|
xqxuf:insertBefore |
|
|
xqxuf:insertAfter"/>
|
|
<xsl:value-of select="$NEWLINE"/>
|
|
<xsl:apply-templates select="xqxuf:targetExpr"/>
|
|
<xsl:value-of select="$RPAREN"/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- sourceExpr -->
|
|
<xsl:template match="xqxuf:sourceExpr">
|
|
<xsl:apply-templates/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- insertInto -->
|
|
<xsl:template match="xqxuf:insertInto">
|
|
<xsl:if test="child::node()">
|
|
<xsl:text>as </xsl:text>
|
|
</xsl:if>
|
|
<xsl:apply-templates/>
|
|
<xsl:text>into </xsl:text>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- insertAsFirst -->
|
|
<xsl:template match="xqxuf:insertAsFirst">
|
|
<xsl:text>first </xsl:text>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- insertAsLast -->
|
|
<xsl:template match="xqxuf:insertAsLast">
|
|
<xsl:text>last </xsl:text>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- insertAfter -->
|
|
<xsl:template match="xqxuf:insertAfter">
|
|
<xsl:text>after </xsl:text>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- insertBefore -->
|
|
<xsl:template match="xqxuf:insertBefore">
|
|
<xsl:text>before </xsl:text>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- targetExpr -->
|
|
<xsl:template match="xqxuf:targetExpr">
|
|
<xsl:apply-templates/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- deleteExpr -->
|
|
<xsl:template match="xqxuf:deleteExpr">
|
|
<xsl:value-of select="$LPAREN"/>
|
|
<xsl:text>delete nodes </xsl:text>
|
|
<xsl:apply-templates/>
|
|
<xsl:value-of select="$RPAREN"/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- replaceExpr -->
|
|
<xsl:template match="xqxuf:replaceExpr">
|
|
<xsl:value-of select="$LPAREN"/>
|
|
<xsl:text>replace </xsl:text>
|
|
<xsl:if test="xqxuf:replaceValue">
|
|
<xsl:text>value of </xsl:text>
|
|
</xsl:if>
|
|
<xsl:text>node </xsl:text>
|
|
<xsl:apply-templates select="xqxuf:targetExpr"/>
|
|
<xsl:text> with </xsl:text>
|
|
<xsl:apply-templates select="xqxuf:replacementExpr"/>
|
|
<xsl:value-of select="$RPAREN"/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- replacementExpr -->
|
|
<xsl:template match="xqxuf:replacementExpr">
|
|
<xsl:apply-templates/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- renameExpr -->
|
|
<xsl:template match="xqxuf:renameExpr">
|
|
<xsl:value-of select="$LPAREN"/>
|
|
<xsl:text>rename node </xsl:text>
|
|
<xsl:apply-templates select="xqxuf:targetExpr"/>
|
|
<xsl:text> as </xsl:text>
|
|
<xsl:apply-templates select="xqxuf:newNameExpr"/>
|
|
<xsl:value-of select="$RPAREN"/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- newNameExpr -->
|
|
<xsl:template match="xqxuf:newNameExpr">
|
|
<xsl:apply-templates/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- transformExpr -->
|
|
<xsl:template match="xqxuf:transformExpr">
|
|
<xsl:value-of select="$LPAREN"/>
|
|
<xsl:text>copy </xsl:text>
|
|
<xsl:apply-templates select="xqxuf:transformCopies"/>
|
|
<xsl:value-of select="$NEWLINE"/>
|
|
<xsl:text> modify </xsl:text>
|
|
<xsl:apply-templates select="xqxuf:modifyExpr"/>
|
|
<xsl:value-of select="$NEWLINE"/>
|
|
<xsl:text> return </xsl:text>
|
|
<xsl:apply-templates select="xqxuf:returnExpr"/>
|
|
<xsl:value-of select="$RPAREN"/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- Part of transformExpr -->
|
|
<xsl:template match="xqxuf:transformCopies">
|
|
<xsl:call-template name="commaSeparatedList"/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- Part of transformExpr -->
|
|
<xsl:template match="xqxuf:transformCopy">
|
|
<xsl:apply-templates select="xqx:varRef"/>
|
|
<xsl:text> := </xsl:text>
|
|
<xsl:apply-templates select="xqxuf:copySource"/>
|
|
</xsl:template>
|
|
|
|
<!-- Part of transformExpr -->
|
|
<xsl:template match="xqxuf:copySource">
|
|
<xsl:apply-templates/>
|
|
</xsl:template>
|
|
|
|
<!-- Part of transformExpr -->
|
|
<xsl:template match="xqxuf:modifyExpr">
|
|
<xsl:apply-templates/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- Part of transformExpr -->
|
|
<xsl:template match="xqxuf:returnExpr">
|
|
<xsl:apply-templates/>
|
|
</xsl:template>
|
|
|
|
|
|
<!-- Over-ride the template for functionDecl in XQueryX.xsd -->
|
|
<xsl:template match="xqx:functionDecl" priority="100">
|
|
<xsl:text>declare </xsl:text>
|
|
<xsl:if test="@xqx:updatingFunction and
|
|
@xqx:updatingFunction = 'true'">
|
|
<xsl:text>updating </xsl:text>
|
|
</xsl:if>
|
|
<xsl:text>function </xsl:text>
|
|
<xsl:apply-templates select="xqx:functionName"/>
|
|
<xsl:apply-templates select="xqx:paramList"/>
|
|
<xsl:apply-templates select="xqx:typeDeclaration"/>
|
|
<xsl:apply-templates select="xqx:functionBody"/>
|
|
<xsl:if test="xqx:externalDefinition">
|
|
<xsl:text> external </xsl:text>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
|
|
</xsl:stylesheet>
|
|
|
|
</pre></div>
|
|
</div>
|
|
<div class="div2">
|
|
<h3><a name="id-xquf-update-examples" id=
|
|
"id-xquf-update-examples"></a>E.3 Example</h3>
|
|
<p>The following example is based on the data and queries in the
|
|
use cases in <a href=
|
|
"#xquery-update-30-requirements-use-cases">[XQuery Update Facility
|
|
3.0 Requirements and Use Cases]</a>. In this example, we show the
|
|
English description of the query, the XQuery Update Facility
|
|
solution given in <a href=
|
|
"#xquery-update-30-requirements-use-cases">[XQuery Update Facility
|
|
3.0 Requirements and Use Cases]</a>, an XQueryX solution, and the
|
|
XQuery Update Facility expression that results from applying the
|
|
Update Facility XQueryX-to-XQuery Update Facility transformation
|
|
defined by the stylesheet in <a href=
|
|
"#id-xquf-update-stylesheet"><b>E.2 Stylesheet</b></a> to the
|
|
Update Facility XQueryX solution. The XQuery Update Facility
|
|
expression that is produced is presented only as a sanity-check—the
|
|
intent of the stylesheet is not to recreate the original XQuery
|
|
expression, but to produce <em>a</em> valid XQuery expression with
|
|
the same semantics. The semantics of the Update Facility XQueryX
|
|
solution are determined by the semantics of the XQuery Update
|
|
Facility expression that results from that transformation. The
|
|
"correctness" of that transformation is determined by asking the
|
|
following the question: Can some Update Facility XQueryX processor
|
|
QX process some Update Facility XQueryX document D1 to produce
|
|
results R1, after which the stylesheet is used to translate D1 into
|
|
an XQuery Update Facility expression E1 that, when processed by
|
|
some XQuery Update Facility processor Q, produces results R2 that
|
|
are equivalent (under some meaningful definition of "equivalent")
|
|
to results R1?</p>
|
|
<p>Comparison of the results of the Update Facility
|
|
XQueryX-to-XQuery Update Facility transformation given in this
|
|
document with the XQuery Update Facility solutions in <a href=
|
|
"#xquery-update-30-requirements-use-cases">[XQuery Update Facility
|
|
3.0 Requirements and Use Cases]</a> may be helpful in evaluating
|
|
the correctness of the Update Facility XQueryX solution in each
|
|
example.</p>
|
|
<p>The XQuery Update Facility Use Cases solution given for each
|
|
example is provided only to assist readers of this document in
|
|
understanding the Update Facility XQueryX solution. There is no
|
|
intent to imply that this document specifies a "compilation" or
|
|
"transformation" of XQuery Update Facility syntax into Update
|
|
Facility XQueryX syntax.</p>
|
|
<p>In the following example, note that path expressions are
|
|
expanded to show their structure. Also, note that the prefix syntax
|
|
for binary operators like "and" makes the precedence explicit. In
|
|
general, humans find it easier to read an XML representation that
|
|
does not expand path expressions, but it is less convenient for
|
|
programmatic representation and manipulation. XQueryX is designed
|
|
as a language that is convenient for production and modification by
|
|
software, and not as a convenient syntax for humans to read and
|
|
write.</p>
|
|
<p>Finally, please note that white space, including new lines, have
|
|
been added to some of the Update Facility XQueryX documents and
|
|
XQuery Update Facility expressions for readability. That additional
|
|
white space is not produced by the Update Facility
|
|
XQueryX-to-XQuery Update Facility transformation.</p>
|
|
<p>This example is based on Q6 from <a href=
|
|
"#xquery-update-30-requirements-use-cases">[XQuery Update Facility
|
|
3.0 Requirements and Use Cases]</a>, use case Parts: "modifying
|
|
recursive documents":</p>
|
|
<div class="div3">
|
|
<h4><a name="id-xquery-rep" id="id-xquery-rep"></a>E.3.1 XQuery
|
|
Representation</h4>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
for $keyword at $i in ("car", "skateboard", "canoe"),
|
|
$parent in doc("part-tree.xml")//part[@name=$keyword]
|
|
let $descendants := $parent//part
|
|
for $p in ($parent, $descendants)
|
|
return
|
|
replace value of node $p/@partid with $i*1000+$p/@partid
|
|
|
|
</pre></div>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-xqueryx-rep" id="id-xqueryx-rep"></a>E.3.2 XQueryX
|
|
Representation</h4>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
<?xml version="1.0"?>
|
|
<xqx:module xmlns:xqxuf="http://www.w3.org/2007/xquery-update-10"
|
|
xmlns:xqx="http://www.w3.org/2005/XQueryX"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
xsi:schemaLocation="http://www.w3.org/2007/xquery-update-10
|
|
http://www.w3.org/2007/xquery-update-10/xquery-update-10-xqueryx.xsd
|
|
http://www.w3.org/2005/XQueryX
|
|
http://www.w3.org/2005/XQueryX/xqueryx.xsd">
|
|
|
|
<xqx:versionDecl>
|
|
<xqx:version>1.0</xqx:version>
|
|
</xqx:versionDecl>
|
|
<xqx:mainModule>
|
|
<xqx:queryBody>
|
|
<xqx:flworExpr>
|
|
<xqx:forClause>
|
|
<xqx:forClauseItem>
|
|
<xqx:typedVariableBinding>
|
|
<xqx:varName>keyword</xqx:varName>
|
|
</xqx:typedVariableBinding>
|
|
<xqx:positionalVariableBinding>i
|
|
</xqx:positionalVariableBinding>
|
|
<xqx:forExpr>
|
|
<xqx:sequenceExpr>
|
|
<xqx:stringConstantExpr>
|
|
<xqx:value>car</xqx:value>
|
|
</xqx:stringConstantExpr>
|
|
<xqx:stringConstantExpr>
|
|
<xqx:value>skateboard</xqx:value>
|
|
</xqx:stringConstantExpr>
|
|
<xqx:stringConstantExpr>
|
|
<xqx:value>canoe</xqx:value>
|
|
</xqx:stringConstantExpr>
|
|
</xqx:sequenceExpr>
|
|
</xqx:forExpr>
|
|
</xqx:forClauseItem>
|
|
<xqx:forClauseItem>
|
|
<xqx:typedVariableBinding>
|
|
<xqx:varName>parent</xqx:varName>
|
|
</xqx:typedVariableBinding>
|
|
<xqx:forExpr>
|
|
<xqx:pathExpr>
|
|
<xqx:stepExpr>
|
|
<xqx:filterExpr>
|
|
<xqx:functionCallExpr>
|
|
<xqx:functionName
|
|
xqx:prefix="fn">doc</xqx:functionName>
|
|
<xqx:arguments>
|
|
<xqx:stringConstantExpr>
|
|
<xqx:value>part-tree.xml</xqx:value>
|
|
</xqx:stringConstantExpr>
|
|
</xqx:arguments>
|
|
</xqx:functionCallExpr>
|
|
</xqx:filterExpr>
|
|
</xqx:stepExpr>
|
|
<xqx:stepExpr>
|
|
<xqx:xpathAxis>descendant-or-self</xqx:xpathAxis>
|
|
<xqx:nameTest>part</xqx:nameTest>
|
|
<xqx:predicates>
|
|
<xqx:equalOp>
|
|
<xqx:firstOperand>
|
|
<xqx:pathExpr>
|
|
<xqx:stepExpr>
|
|
<xqx:xpathAxis>attribute</xqx:xpathAxis>
|
|
<xqx:nameTest>name</xqx:nameTest>
|
|
</xqx:stepExpr>
|
|
</xqx:pathExpr>
|
|
</xqx:firstOperand>
|
|
<xqx:secondOperand>
|
|
<xqx:varRef>
|
|
<xqx:name>keyword</xqx:name>
|
|
</xqx:varRef>
|
|
</xqx:secondOperand>
|
|
</xqx:equalOp>
|
|
</xqx:predicates>
|
|
</xqx:stepExpr>
|
|
</xqx:pathExpr>
|
|
</xqx:forExpr>
|
|
</xqx:forClauseItem>
|
|
</xqx:forClause>
|
|
<xqx:letClause>
|
|
<xqx:letClauseItem>
|
|
<xqx:typedVariableBinding>
|
|
<xqx:varName>descendants</xqx:varName>
|
|
</xqx:typedVariableBinding>
|
|
<xqx:letExpr>
|
|
<xqx:pathExpr>
|
|
<xqx:stepExpr>
|
|
<xqx:filterExpr>
|
|
<xqx:varRef>
|
|
<xqx:name>parent</xqx:name>
|
|
</xqx:varRef>
|
|
</xqx:filterExpr>
|
|
</xqx:stepExpr>
|
|
<xqx:stepExpr>
|
|
<xqx:xpathAxis>descendant-or-self</xqx:xpathAxis>
|
|
<xqx:nameTest>part</xqx:nameTest>
|
|
</xqx:stepExpr>
|
|
</xqx:pathExpr>
|
|
</xqx:letExpr>
|
|
</xqx:letClauseItem>
|
|
</xqx:letClause>
|
|
<xqx:forClause>
|
|
<xqx:forClauseItem>
|
|
<xqx:typedVariableBinding>
|
|
<xqx:varName>p</xqx:varName>
|
|
</xqx:typedVariableBinding>
|
|
<xqx:forExpr>
|
|
<xqx:sequenceExpr>
|
|
<xqx:varRef>
|
|
<xqx:name>parent</xqx:name>
|
|
</xqx:varRef>
|
|
<xqx:varRef>
|
|
<xqx:name>descendants</xqx:name>
|
|
</xqx:varRef>
|
|
</xqx:sequenceExpr>
|
|
</xqx:forExpr>
|
|
</xqx:forClauseItem>
|
|
</xqx:forClause>
|
|
<xqx:returnClause>
|
|
<xqxuf:replaceExpr>
|
|
<xqxuf:replaceValue/>
|
|
<xqxuf:targetExpr>
|
|
<xqx:pathExpr>
|
|
<xqx:stepExpr>
|
|
<xqx:filterExpr>
|
|
<xqx:varRef>
|
|
<xqx:name>p</xqx:name>
|
|
</xqx:varRef>
|
|
</xqx:filterExpr>
|
|
</xqx:stepExpr>
|
|
<xqx:stepExpr>
|
|
<xqx:xpathAxis>attribute</xqx:xpathAxis>
|
|
<xqx:nameTest>partid</xqx:nameTest>
|
|
</xqx:stepExpr>
|
|
</xqx:pathExpr>
|
|
</xqxuf:targetExpr>
|
|
<xqxuf:replacementExpr>
|
|
<xqx:addOp>
|
|
<xqx:firstOperand>
|
|
<xqx:multiplyOp>
|
|
<xqx:firstOperand>
|
|
<xqx:varRef>
|
|
<xqx:name>i</xqx:name>
|
|
</xqx:varRef>
|
|
</xqx:firstOperand>
|
|
<xqx:secondOperand>
|
|
<xqx:integerConstantExpr>
|
|
<xqx:value>1000</xqx:value>
|
|
</xqx:integerConstantExpr>
|
|
</xqx:secondOperand>
|
|
</xqx:multiplyOp>
|
|
</xqx:firstOperand>
|
|
<xqx:secondOperand>
|
|
<xqx:pathExpr>
|
|
<xqx:stepExpr>
|
|
<xqx:filterExpr>
|
|
<xqx:varRef>
|
|
<xqx:name>p</xqx:name>
|
|
</xqx:varRef>
|
|
</xqx:filterExpr>
|
|
</xqx:stepExpr>
|
|
<xqx:stepExpr>
|
|
<xqx:xpathAxis>attribute</xqx:xpathAxis>
|
|
<xqx:nameTest>partid</xqx:nameTest>
|
|
</xqx:stepExpr>
|
|
</xqx:pathExpr>
|
|
</xqx:secondOperand>
|
|
</xqx:addOp>
|
|
</xqxuf:replacementExpr>
|
|
</xqxuf:replaceExpr>
|
|
</xqx:returnClause>
|
|
</xqx:flworExpr>
|
|
</xqx:queryBody>
|
|
</xqx:mainModule>
|
|
</xqx:module>
|
|
|
|
</pre></div>
|
|
</div>
|
|
<div class="div3">
|
|
<h4><a name="id-transformed-rep" id="id-transformed-rep"></a>E.3.3
|
|
Transformed XQuery Representation</h4>
|
|
<p>Application of the stylesheet in <a href=
|
|
"#id-xquf-update-stylesheet"><b>E.2 Stylesheet</b></a> to the
|
|
Update Facility XQueryX representation results in the following
|
|
XQuery representation:</p>
|
|
<div class="exampleInner">
|
|
<pre>
|
|
xquery version "1.0";
|
|
|
|
( for $keyword at $i in ("car", "skateboard", "canoe"),
|
|
$parent in
|
|
fn:doc("part-tree.xml")/descendant-or-self::part
|
|
[(attribute::name = $keyword)]
|
|
let $descendants:=$parent/descendant-or-self::part
|
|
for $p in ($parent, $descendants)
|
|
return
|
|
replace value of node $p/attribute::partid
|
|
with (($i*1000)+$p/attribute::partid)
|
|
)
|
|
|
|
</pre></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="id-glossary" id="id-glossary"></a>F Glossary
|
|
(Non-Normative)</h2>
|
|
<dl>
|
|
<dt><a name="GLdt-xdm-instance" id="GLdt-xdm-instance"></a>XDM
|
|
instance</dt>
|
|
<dd>
|
|
<p>The term <b>XDM instance</b> denotes an unconstrained sequence
|
|
of zero or more nodes and/or atomic values as defined by the
|
|
<a title="data model" href="#dt-data-model-30">data model</a>.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-xquery-30" id="GLdt-xquery-30"></a>XQuery
|
|
3.0</dt>
|
|
<dd>
|
|
<p>Within this document, the term <b>XQuery 3.0</b> refers to the
|
|
language specified by <a href="#xquery-30">[XQuery 3.0: A Query
|
|
Language]</a>.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-basic-updating-expression" id=
|
|
"GLdt-basic-updating-expression"></a>basic updating expression</dt>
|
|
<dd>
|
|
<p>A <b>basic updating expression</b> is an insert, delete,
|
|
replace, or rename expression, or a call to an <a title=
|
|
"updating function" href="#dt-updating-function">updating
|
|
function</a>.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-conflict" id="GLdt-conflict"></a>conflict</dt>
|
|
<dd>
|
|
<p>Two namespace bindings are said to <b>conflict</b> if their
|
|
namespace prefixes (or absence thereof) are the same but their
|
|
namespace URI's (or absence thereof) are different.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-data-model-30" id="GLdt-data-model-30"></a>data
|
|
model</dt>
|
|
<dd>
|
|
<p>The term <b>data model</b> refers to the data model specified by
|
|
<a href="#xpath-datamodel-30">[XQuery and XPath Data Model (XDM)
|
|
3.0]</a>.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-implied-namespace-binding" id=
|
|
"GLdt-implied-namespace-binding"></a>implied namespace binding</dt>
|
|
<dd>
|
|
<p>The <b>implied namespace binding</b> of a QName is the
|
|
association of its namespace prefix (or absence thereof) with its
|
|
namespace URI (or absence thereof).</p>
|
|
</dd>
|
|
<dt><a name="GLdt-mark" id="GLdt-mark"></a>mark</dt>
|
|
<dd>
|
|
<p>To <b>mark</b> a node means to identify the node as
|
|
participating in a later operation.</p>
|
|
</dd>
|
|
<dt><a name="GLmay" id="GLmay"></a>may</dt>
|
|
<dd>
|
|
<p><b>MAY</b> means that an item is truly optional.</p>
|
|
</dd>
|
|
<dt><a name="GLmust" id="GLmust"></a>must</dt>
|
|
<dd>
|
|
<p><b>MUST</b> means that the item is an absolute requirement of
|
|
the specification.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-node-identity" id="GLdt-node-identity"></a>node
|
|
identity</dt>
|
|
<dd>
|
|
<p>The term <b>node identity</b> denotes the unique identity that
|
|
is a property of every node in an <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a> (see <a href=
|
|
"http://www.w3.org/TR/xpath-datamodel-30/#node-identity">Section
|
|
2.3 Node Identity</a> <sup><small>DM30</small></sup>.)</p>
|
|
</dd>
|
|
<dt><a name="GLdt-pending-update-list" id=
|
|
"GLdt-pending-update-list"></a>pending update list</dt>
|
|
<dd>
|
|
<p>A <b>pending update list</b> is an unordered collection of
|
|
<a title="update primitive" href="#dt-update-primitive">update
|
|
primitives</a>, which represent node state changes that have not
|
|
yet been applied.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-revalidation-decl" id=
|
|
"GLdt-revalidation-decl"></a>revalidation declaration</dt>
|
|
<dd>
|
|
<p>A <b>revalidation declaration</b> sets the <a title=
|
|
"revalidation mode" href="#dt-revalidation-mode">revalidation
|
|
mode</a> in the static context, overriding any
|
|
implementation-defined default.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-revalidation-mode" id=
|
|
"GLdt-revalidation-mode"></a>revalidation mode</dt>
|
|
<dd>
|
|
<p><b>Revalidation mode</b>, which may be <code>strict</code>,
|
|
<code>lax</code>, or <code>skip</code>, is a component of the
|
|
static context that controls the behavior of the <code><a href=
|
|
"#id-upd-revalidate">upd:revalidate</a></code> operation.</p>
|
|
</dd>
|
|
<dt><a name="GLshould" id="GLshould"></a>should</dt>
|
|
<dd>
|
|
<p><b>SHOULD</b> means that there may exist valid reasons in
|
|
particular circumstances to ignore a particular item, but the full
|
|
implications must be understood and carefully weighed before
|
|
choosing a different course.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-simple-expression" id=
|
|
"GLdt-simple-expression"></a>simple expression</dt>
|
|
<dd>
|
|
<p>A <b>simple expression</b> is any XQuery expression that is not
|
|
an <a title="updating expression" href=
|
|
"#dt-updating-expression">updating expression</a>.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-simple-function" id=
|
|
"GLdt-simple-function"></a>simple function</dt>
|
|
<dd>
|
|
<p>If a function is not an <b>updating function</b>, then it is a
|
|
<b>simple function</b></p>
|
|
</dd>
|
|
<dt><a name="GLdt-snapshot" id="GLdt-snapshot"></a>snapshot</dt>
|
|
<dd>
|
|
<p>A <b>snapshot</b> is a scope within which expressions are
|
|
evaluated with respect to a fixed <a title="XDM instance" href=
|
|
"#dt-xdm-instance">XDM instance</a> and updates are held
|
|
pending.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-target-node" id="GLdt-target-node"></a>target
|
|
node</dt>
|
|
<dd>
|
|
<p>The first argument of an update primitive, called its <b>target
|
|
node</b>, is the principal node to be affected by the update
|
|
primitive.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-update-operation" id=
|
|
"GLdt-update-operation"></a>update operation</dt>
|
|
<dd>
|
|
<p><b>Update operations</b> are used in defining the semantics of
|
|
XQuery updates, but are not directly available to users. Update
|
|
operations are defined in <a href="#id-update-operations"><b>3
|
|
Update Operations</b></a>.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-update-primitive" id=
|
|
"GLdt-update-primitive"></a>update primitive</dt>
|
|
<dd>
|
|
<p><b>Update primitives</b> are the components of <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
lists</a>. Each <b>update primitive</b> represents a node state
|
|
change that has not yet been applied.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-update-routine" id=
|
|
"GLdt-update-routine"></a>update routine</dt>
|
|
<dd>
|
|
<p><b>Update routines</b> are sequences of actions that are used in
|
|
the definition of XQuery semantics but do not appear on <a title=
|
|
"pending update list" href="#dt-pending-update-list">pending update
|
|
lists</a>.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-updating-expression" id=
|
|
"GLdt-updating-expression"></a>updating expression</dt>
|
|
<dd>
|
|
<p>An <b>updating expression</b> is a <a title=
|
|
"basic updating expression" href=
|
|
"#dt-basic-updating-expression">basic updating expression</a> or
|
|
any expression that directly contains an <a title=
|
|
"updating expression" href="#dt-updating-expression">updating
|
|
expression</a> (other than the modify clause of a transform
|
|
expression).</p>
|
|
</dd>
|
|
<dt><a name="GLdt-updating-function" id=
|
|
"GLdt-updating-function"></a>updating function</dt>
|
|
<dd>
|
|
<p><a href=
|
|
"http://www.w3.org/TR/xpath-datamodel-30/#dt-function-item">Functions</a><sup><small>DM30</small></sup>
|
|
are extended to allow <b>updating functions</b>, which can return a
|
|
non-empty <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> when called.</p>
|
|
</dd>
|
|
<dt><a name="GLdt-vacuous-expression" id=
|
|
"GLdt-vacuous-expression"></a>vacuous expression</dt>
|
|
<dd>
|
|
<p>Certain expressions are defined in this specification to be
|
|
<b>vacuous expressions</b>. These all have the characteristic that
|
|
they can be determined statically to either return an empty
|
|
sequence or raise an error.</p>
|
|
</dd>
|
|
</dl>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="id-precedence-rationale" id=
|
|
"id-precedence-rationale"></a>G Rationale for Precedence of Update
|
|
Primitives (Non-Normative)</h2>
|
|
<p>In <a href="#id-upd-apply-updates"><b>3.2.2
|
|
upd:applyUpdates</b></a>, semantic rules specify the order in which
|
|
the <a title="update primitive" href="#dt-update-primitive">update
|
|
primitives</a> on a <a title="pending update list" href=
|
|
"#dt-pending-update-list">pending update list</a> are applied. The
|
|
purpose of this ordering is to ensure that the result of applying
|
|
the pending update list is deterministic. The order of application
|
|
of the update primitives was derived from the following
|
|
reasoning:</p>
|
|
<ul>
|
|
<li>
|
|
<p><code>insertAttribute</code>, <code>replaceValue</code>, and
|
|
<code>rename</code> primitives do not conflict with any other
|
|
primitives other than <code>put</code>.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>insertInto</code>primitives must be applied before
|
|
<code>insertIntoAsFirst/Last</code> and
|
|
<code>insertBefore/After</code>primitives. Reason: if an
|
|
unpositioned insert were applied after a positioned insert, it
|
|
might interfere with the position established by the earlier
|
|
positioned insert. For example, suppose node A is inserted "before"
|
|
node B. A later unpositioned insert into the common parent of A and
|
|
B might intervene between A and B, which is not allowed by the
|
|
semantics of "insert before."</p>
|
|
</li>
|
|
<li>
|
|
<p><code>insertBefore/After</code>primitives must be applied before
|
|
<code>replaceNode</code> primitives. Reason: After a node has been
|
|
replaced, it no longer has a parent, so "before" and "after" the
|
|
replaced node are no longer defined.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>insertIntoAsFirst/Last</code>primitives must be applied
|
|
before <code>replaceElementContent</code> primitives. Reason: this
|
|
was a decision of the working group. The intent of this decision is
|
|
that, if both of these primitives are applied to the same target
|
|
node in a query, the effective result is determined by the
|
|
<code>replaceElementContent</code> primitive.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>replaceNode</code>primitives must be applied before
|
|
<code>replaceElementContent</code> primitives. Reason: if element
|
|
content that includes a node N has been replaced, then N no longer
|
|
has a parent. In this case, "replace node N" is undefined.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>replaceNode</code>primitives must be applied before
|
|
<code>delete</code> primitives. Reason: After a node has been
|
|
deleted, it no longer has a parent. Replacing a node that has no
|
|
parent is undefined.</p>
|
|
</li>
|
|
<li>
|
|
<p><code>put</code>primitives must be applied after all other
|
|
primitives in order that documents stored by a snapshot will
|
|
reflect all update operations applied by the snapshot.</p>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="div1">
|
|
<h2><a name="id-revision-log" id="id-revision-log"></a>H Revision
|
|
Log (Non-Normative)</h2>
|
|
<p>This log records the substantive changes that have been made to
|
|
this document since the XQuery 1.0 Recommendation of 17 March 2011.
|
|
Minor editorial changes are not included in this log.</p>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|