[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: collecting a fileset with XSLT 2.0

Subject: Re: collecting a fileset with XSLT 2.0
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Mon, 06 Feb 2012 12:17:15 -0500
Re:  collecting a fileset with XSLT 2.0
Hi Mark,

In addition to what Ken says, two other things:

Some processors, Saxon included, will accept a list of documents for the collection() function from a file. So you only have to contrive a way of getting the files you are interested in listed in the syntax it expects.

(See http://www.saxonica.com/documentation/sourcedocs/collections.xml.)

Plus, there's also a (rather crude) escape hatch. In addition to whatever is supported by the local implementation of collection(), keep in mind that you can get any document's URI using the document-uri() function, and it's a string, so you can use it to filter documents.

So something like

select="collection('path;on-error=ignore')
          [matches(document-uri(.),'content/extra/[^/]+/[^/]+$']"

Obviously this is likely to quite expensive since every document (or every XML document) is subject to being retrieved before the ones you don't want are discarded. But by the same token it is very flexible.

Cheers,
Wendell

On 2/5/2012 4:25 PM, Mark Giffin wrote:
Thanks Ken! This does help, I'll check it out. That info is not in
Michael Kay's XSLT 2.0 book. I'll blame him. Just kiddin.

Mark

On 2/5/2012 12:56 PM, G. Ken Holman wrote:
At 2012-02-05 12:51 -0800, Mark Giffin wrote:
Is there a way to collect a set of files off the file system in XSLT
2.0, in the same way that Ant lets you define a set of files with
<fileset> like this:

<fileset dir="${src.dir}" id="all.docs">
<include name="**/*.xml"/>
<exclude name="**/gui/*.*"/>
<exclude name="tools/**/*.*"/>
<exclude name="content/extra/**/*.*"/>
</fileset>

Maybe an extension function or something? I've been using a
manually-maintained list of files like this, but it's a a pain:

<docroot>
<root href="../../../doc_source/system100.xml" />
<root href="../../../doc_source/content/access/accesscore.xml" />
<root href="../../../doc_source/content/access/accesstest.xml" />
<root
href="../../../doc_source/content/access/accesstest_commands.xml" />
etc.
</docroot>

The concept in XSLT2 is the function collection(uri) which returns a set of root nodes of all the XML files addressed by the URI.

There is no standard for the URI string, so you have to read your
vendor's documentation regarding how to compose the URI for what you
want. For example, for Saxon, you would address all the XML files in
the current and descendent subdirectories with something along the
lines of:

collection("./?select="*.xml;recurse=yes;on-error=ignore")

I hope this helps.

. . . . . . . . . . . Ken

-- ====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.