W3C home > Mailing lists > Public > public-xml-processing-model-comments@w3.org > July 2008

Re: XQuery WG comments on XProc specification

From: Andrew Eisenberg <andrew.eisenberg@us.ibm.com>
Date: Wed, 2 Jul 2008 16:09:20 -0400
To: public-xml-processing-model-comments@w3.org
Message-ID: <OFEFF722C9.F601742A-ON8525747A.006E848F-8525747A.006EC94E@us.ibm.com>
Reference has been made to a message that I sent to a member-only list:

> First, Andrew's email, which the WG largely endorsed:
> 
> http://lists.w3.org/Archives/Member/w3c-xsl-query/2008Jun/0000.html


This message said:

I reviewed the latest XProc draft [1], specifically section 7.2.9, 
p:xquery,  and I have the following concerns:

- no way to pass a single document as the context item
- no mapping to our static and dynamic context
- no way to make reference to an xquery file
- no way to use XQueryX
- I don't understand "The result of the XQuery is a sequence of documents
  constructed from an [XPath 2.0] sequence of elements. Each element in 
the
  sequence is assumed to be the document element of a separate document."


I've rewritten this section to address these issues:

7.2.9 p:xquery

The p:xquery step applies an [XQuery 1.0] query to the sequence of 
documents provided on the source port and the document provided on the 
source-node port.

<p:declare-step type="p:xquery">
     <p:input port="source" sequence="true" primary="true"/>
     <p:input port="source-node" sequence="false" primary="false"/>
     <p:input port="query"/>
     <p:input port="parameters" kind="parameter"/>
     <p:output port="result" sequence="true"/>
     <p:option name="query-uri" />
</p:declare-step>

The sequence of documents provided on the source port is treated as the 
default collection. A document provided on the source-node port is treated 
as the context item. Any parameters passed on the parameters port are used 
to define top-level variables.

If the query-uri option is specified, then the resource indicated by this 
URI is expected to contain the XQuery to be executed. Otherwise, the query 
port must receive a single document. If the document contains an 
xqx:module element, where xqx is bound to http://www.w3.org/2005/XQueryX, 
then this XQueryX document provides the query to be executed. Otherwise, 
the document must contain a c:query element. As an XQuery is not 
necessarily well-formed XML, the text descendants of this element are 
considered the query.

<c:query>
    string
</c:query>

For example:

<c:query>
declare namespace atom="http://www.w3.org/2005/Atom";
/atom:feed/atom:entry
</c:query>


The static context of the XQuery processor is augmented in the following 
way:

Statically known default collection type:       document()*


The dynamic context used in evaluation the query is:

Context item:           document provided by the source-node port
Context position:       1
Context size:           1
Variable values:        The union of the in-scope options and variables 
are available as variable bindings to the XQuery processor.
Function implementations:       The function implementations provided by 
the XQuery processor.
Current dateTime:       implementation-defined value
Implicit timezone:      implementation-defined value
Available documents:    implementation-dependent
Available collections:  implementation-dependent
Default collection:     sequence of documents provided by the source port


The result of the XQuery is used to generate the sequence of documents 
that is returned by this step. Each document node and element node in 
result sequence of the XQuery generates a document in the result sequence. 
It is a dynamic error (err:XC0057) if the sequence that results from an 
XQuery contains items other than document nodes and element nodes.

The base URI of each of the output documents is the base URI of the first 
document in the source port's sequence.


Example:

<p:pipeline xmlns:p="http://www.w3.org/ns/xproc">

<p:xinclude/>

<p:validate-with-xml-schema>
  <p:input port="schema">
    <p:document href="http://example.com/path/to/schema.xsd"/>
  </p:input>
</p:validate-with-xml-schema>

<p:query>
   <p:with-option name="query-uri" select="'countp.xq'" />
   <p:input port="source-node">
      <p:pipe step="validate-with-xml-schema" port="result"/>
   </p:input>
</p:query>

</p:pipeline>


countp.xq:

<count>{count(.//p)}</count>



[1] XProc: An XML Pipeline Language
http://www.w3.org/TR/2008/WD-xproc-20080501/

                                                -- Andrew

--------------------
Andrew Eisenberg
IBM
4 Technology Park Drive
Westford, MA  01886

andrew.eisenberg@us.ibm.com
Received on Wednesday, 2 July 2008 20:10:06 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 2 July 2008 20:10:06 GMT