- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Fri, 27 Oct 2006 10:01:43 +0100
- To: public-xml-processing-model-wg@w3.org
Hi, Norman Walsh wrote: > / Jeni Tennison <jeni@jenitennison.com> was heard to say: > [...] > | <viewport from="pipe!document" select="/doc/xsl:stylesheet" > | subtrees="/xsl:stylesheet/xsl:template"> > > I'm confused about why both select and subtrees are required. I > thought the semantic of viewport was that it accepted a single > document and it processed that entire document. So I'd have thought it > could be reduced to: > > <viewport from="pipe!document" select="/xsl:stylesheet/xsl:template"> > > What am I forgetting? The result of mine is a <xsl:stylesheet> document. The result of yours is a <doc> document. I had always envisaged the 'select' attribute as a shorthand for a 'p:select' step. Imagine, for a moment, that we didn't have a 'select' attribute anywhere, just a 'p:select' built-in step type that would create a new document sequence from an existing document sequence plus an XPath expression (or XSLT pattern, I'm not bothered), by creating a new document for each of the elements identified by the path/pattern. For-each would work perfectly adequately: it would iterate over the documents in the document sequence you passed it, and perform its subpipeline on each document. When you wanted to iterate over subelements, you would use a p:select step to create the sequence of documents containing those subelements, and iterate over that: <p:step name="collect-sections" type="p:select"> <p:input port="documents" ... /> <p:param name="xpath" value="//section" /> </p:step> <p:for-each> <p:input port="document" step="collect-sections" source="result" /> ... </p:for-each> But to make viewport work, however, you would have to have an attribute that held an XPath expression (or XSLT pattern, I'm not bothered) that indicated which elements were replaced with the result of processing them using the subpipeline. Let's call this 'subtrees'. It might look like: <p:viewport subtrees="//section"> <p:input port="documents" ... /> ... </p:viewport> We could say that viewport can only work on one document, but there's no technical reason I can see to make that restriction. It's logical that when the input to a viewport construct is a sequence of documents, each of the documents in that sequence is processed such that the elements identified by the 'subtrees' attribute are replaced by the result of processing them using the subpipeline. The result is a sequence of documents that have been processed in such a way. (In fact, perhaps things would be cleaner if we removed the 'select' and 'href' attributes from the long syntax -- they're just shorthands for using two of the most common step types, p:select and p:load, but having them in the long syntax makes it more complicated and harder to see what's really going on.) Cheers, Jeni -- Jeni Tennison http://www.jenitennison.com
Received on Friday, 27 October 2006 09:01:57 UTC