Saxonica Developer Community: Issueshttps://saxonica.plan.io/https://saxonica.plan.io/favicon.ico2023-12-27T21:52:00ZSaxonica Developer Community
Planio Saxon - Bug #6307 (New): Saxon (HE; Java) trace missing xsl:accumulator and xsl:accumulator-rule,...https://saxonica.plan.io/issues/63072023-12-27T21:52:00ZA Galtman
<ul>
<li>Is the trace supposed to mark xsl:accumulator as hit?</li>
<li>Is the trace supposed to mark xsl:accumulator-rule as hit?</li>
<li>I definitely expect descendant elements of xsl:accumulator-rule to be marked as hit, and I'm not seeing them in Saxon 12.4. Saxon 9.9.1.8 correctly lists the descendants of xsl:accumulator-rule.</li>
</ul>
<p>I'm attaching a file that includes the code, the Saxon arguments I used, and the traces I got from Saxon 9.9.1.8 and 12.4.</p> Saxon - Bug #6305 (New): XPathException "The stylesheet module includes/imports itself directly o...https://saxonica.plan.io/issues/63052023-12-22T15:02:48ZGerben Abbinkgerben.abbink@gmail.com
<p>I use an ErrorReporter with XsltCompiler, like this:</p>
<pre><code>XsltCompiler compiler = processor.newXsltCompiler();
compiler.setErrorReporter(...);
</code></pre>
<p>Usually, XPathExceptions have a Location to identify the error in the file.</p>
<p>But, when I use this template, there is no location information:</p>
<pre><code><?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href=""/>
</xsl:stylesheet>
</code></pre> Saxon - Bug #6263 (New): Test case try-031 fails under Saxon-HE (try/catch with lazy evaluation)https://saxonica.plan.io/issues/62632023-11-28T11:01:55ZMichael Kaymike@saxonica.com
<p>The XSLT 3.0 test case try-031 is failing under Saxon-HE. The essence of the failure is that in the construct</p>
<pre><code><xsl:variable name="p" select="...."/>
<xsl:try>
<xsl:value-of select="$p"/>
<xsl:catch>
<caught/>
</xsl:catch>
</xsl:try>
</code></pre>
<p>an error occurring during lazy evaluation of $p is caught by the try/catch when it should not be.</p>
<p>The test is failing in the candidate 12.4 release but also fails in earlier releases.</p> Saxon - Feature #6240 (New): Include custom error feedback when using .NET XmlResolverhttps://saxonica.plan.io/issues/62402023-11-06T13:56:33ZEmanuel Wlaschitzemanuel.wlaschitz@hico.com
<p>This is a follow-up to <a class="issue tracker-1 status-3 priority-1 priority-lowest closed" title="Bug: Cannot use InputXmlResolver to implement custom scheme on Saxon-HE 10N (Closed)" href="https://saxonica.plan.io/issues/6214">#6214</a> to get better error feedback to our end-users.</p>
<p>Using a simplified <code>XmlResolver</code>:</p>
<pre><code class="c# syntaxhl" data-language="c#"> <span class="k">sealed</span> <span class="k">class</span> <span class="nc">CustomResolver</span> <span class="p">:</span> <span class="n">XmlResolver</span>
<span class="p">{</span>
<span class="k">private</span> <span class="k">readonly</span> <span class="n">XmlResolver</span> <span class="n">_innerResolver</span><span class="p">;</span>
<span class="k">public</span> <span class="nf">CustomResolver</span><span class="p">(</span><span class="n">XmlResolver</span> <span class="n">innerResolver</span><span class="p">)</span> <span class="p">=></span> <span class="n">_innerResolver</span> <span class="p">=</span> <span class="n">innerResolver</span><span class="p">;</span>
<span class="k">public</span> <span class="k">override</span> <span class="n">ICredentials</span> <span class="n">Credentials</span> <span class="p">{</span> <span class="k">set</span> <span class="p">{</span> <span class="n">_innerResolver</span><span class="p">.</span><span class="n">Credentials</span> <span class="p">=</span> <span class="k">value</span><span class="p">;</span> <span class="p">}</span> <span class="p">}</span>
<span class="k">public</span> <span class="k">override</span> <span class="n">Uri</span> <span class="nf">ResolveUri</span><span class="p">(</span><span class="n">Uri</span> <span class="n">baseUri</span><span class="p">,</span> <span class="kt">string</span> <span class="n">relativeUri</span><span class="p">)</span> <span class="p">=></span> <span class="k">base</span><span class="p">.</span><span class="nf">ResolveUri</span><span class="p">(</span><span class="n">baseUri</span><span class="p">,</span> <span class="n">relativeUri</span><span class="p">);</span>
<span class="k">public</span> <span class="k">override</span> <span class="kt">object</span> <span class="nf">GetEntity</span><span class="p">(</span><span class="n">Uri</span> <span class="n">absoluteUri</span><span class="p">,</span> <span class="kt">string</span> <span class="n">role</span><span class="p">,</span> <span class="n">Type</span> <span class="n">ofObjectToReturn</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">throw</span> <span class="k">new</span> <span class="nf">Exception</span><span class="p">(</span><span class="s">$"The custom url </span><span class="p">{</span><span class="n">absoluteUri</span><span class="p">}</span><span class="s"> is not available. Use doc-available() to test for this before using document()"</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre>
<p>...and a minimal transformation:</p>
<pre><code class="c# syntaxhl" data-language="c#"><span class="kt">var</span> <span class="n">xsltTransformer</span> <span class="p">=</span> <span class="nf">CompileTestStylesheet</span><span class="p">();</span>
<span class="n">xsltTransformer</span><span class="p">.</span><span class="n">InputXmlResolver</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">CustomResolver</span><span class="p">(</span><span class="n">xsltTransformer</span><span class="p">.</span><span class="n">InputXmlResolver</span><span class="p">);</span>
<span class="k">try</span>
<span class="p">{</span>
<span class="kt">var</span> <span class="n">output</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">XDocument</span><span class="p">();</span>
<span class="k">using</span> <span class="p">(</span><span class="kt">var</span> <span class="n">outputWriter</span> <span class="p">=</span> <span class="n">output</span><span class="p">.</span><span class="nf">CreateWriter</span><span class="p">())</span>
<span class="p">{</span>
<span class="kt">var</span> <span class="n">destination</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">TextWriterDestination</span><span class="p">(</span><span class="n">outputWriter</span><span class="p">)</span> <span class="p">{</span> <span class="n">CloseAfterUse</span> <span class="p">=</span> <span class="k">true</span> <span class="p">};</span>
<span class="n">xsltTransformer</span><span class="p">.</span><span class="nf">Run</span><span class="p">(</span><span class="n">destination</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="n">output</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">catch</span> <span class="p">(</span><span class="n">DynamicError</span> <span class="n">ex</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="s">"DYNAMIC ERROR"</span><span class="p">);</span>
<span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="n">ex</span><span class="p">);</span>
<span class="p">}</span>
</code></pre>
<p>...which is basically:</p>
<pre><code class="xml syntaxhl" data-language="xml"><span class="nt"><xsl:stylesheet</span> <span class="na">xmlns:xsl=</span><span class="s">"http://www.w3.org/1999/XSL/Transform"</span> <span class="na">version=</span><span class="s">"3.0"</span><span class="nt">></span>
<span class="nt"><xsl:template</span> <span class="na">match=</span><span class="s">"/"</span><span class="nt">></span>
<span class="nt"><root></span>
<span class="nt"><xsl:sequence</span> <span class="na">select=</span><span class="s">"document('custom-scheme://test')"</span><span class="nt">/></span>
<span class="nt"></root></span>
<span class="nt"></xsl:template></span>
<span class="nt"></xsl:stylesheet></span>
</code></pre>
<p>...yields the following console output:</p>
<pre><code>Error at char 9 in expression in xsl:sequence/@select on line 4 column 61 of xslt-custom-uri-scheme-test1.xsl:
FODC0002 Exception thrown by URIResolver resolving `custom-scheme://test` against
`file:///D:/_dev/Saxon10CustomResolverTest1/bin/Debug/xslt-custom-uri-scheme-test1.xsl'.
Caused by net.sf.saxon.trans.XPathException: The custom url custom-scheme://test/ is not
available. Use doc-available() to test for this before using document(). Caused by
cli.System.Exception: The custom url custom-scheme://test/ is not available. Use
doc-available() to test for this before using document()
In template rule with match="/" on line 2 of xslt-custom-uri-scheme-test1.xsl
DYNAMIC ERROR
Exception thrown by URIResolver resolving `custom-scheme://test` against `file:///D:/_dev/Saxon10CustomResolverTest1/bin/Debug/xslt-custom-uri-scheme-test1.xsl'
</code></pre>
<p>The top part is from the internal console writer thats attached by default (...where I'm wondering: Can we redirect this? It sometimes contains additional information that isn't part of a thrown <code>StaticError</code>, <code>DynamicError</code> and isn't passed into the set <code>ErrorList</code> but would be useful to either the end user themselves or at least us as developers) while the bottom part is from catching the <code>DynamicError</code>.</p>
<p>Note that the top part includes the custom exception message, but the bottom part doesn't.</p>
<p>It would be nice if the thrown <code>DynamicError</code> could include the actual exception message <em>somewhere</em> (preferably as <code>InnerException</code> in .NET; not sure if Java would want to use the same approach.) Right now there is no way of getting this info through normal means; the only workaround we could identify was to pass <em>something</em> (like the <code>IMessageListener2</code> we attach anyways) into the <code>CustomResolver</code> and directly call methods on it.</p>
<p>I could only test this against Saxon 10, since there are no HE versions of 11/12 yet (nor do I have a license for it at this point.)</p> Saxon - Bug #6191 (New): Released SaxonCS artefact is a debug buildhttps://saxonica.plan.io/issues/61912023-09-01T15:54:06ZMichael Kaymike@saxonica.com
<p>Email from Nick Trevor:</p>
<p>Sorry to reach out directly, but was wondering if you could help. I'm test the performance of SaxonCS and when running the benchmarks I am getting warned that the nuget package is a debug build which could impact performance. Is it possible to get a release package published to nuget?</p>
<pre><code>// * Assembly Benchmarks which defines benchmarks references non-optimized SaxonCS
If you own this dependency, please, build it in RELEASE.
If you don't, you can disable this policy by using 'config.WithOptions(ConfigOptions.DisableOptimizationsValidator)'
</code></pre> Saxon - Bug #6172 (New): In 4.0, keywords in function calls are sometimes ignoredhttps://saxonica.plan.io/issues/61722023-08-15T22:10:05ZMichael Kaymike@saxonica.com
<p>XPath 4.0 allows function calls to provide argument values by keyword as well as positionally.</p>
<p>Some function libraries simply ignore any supplied keywords and interpret all arguments as positional. These include:</p>
<ul>
<li>constructor functions</li>
<li>Java extension functions (both reflexive and integrated)</li>
<li>The xsl:original pseudo-function</li>
<li>Some libraries implemented as Java extension functions,</li>
</ul>
<p>Some function libraries such as EXPath File and Binary are implemented as BuiltInFunctionSets, so keywords should work in principle, but no keyword data has been created, so using keywords will likely fail in unpredictable ways. It's not actually clear what we should do here: should we implement the parameter keywords defined in the spec, even though they were never intended to be used in this way?</p> Saxon - Bug #6127 (New): Documentation: argument keywords in function libraryhttps://saxonica.plan.io/issues/61272023-07-10T07:56:11ZMichael Kaymike@saxonica.com
<p>The documentation of the function library has not kept up to date with changes in argument keywords in the 4.0 specification. For example</p>
<p><a href="https://www.saxonica.com/documentation12/index.html#!functions/fn/reverse" class="external">https://www.saxonica.com/documentation12/index.html#!functions/fn/reverse</a></p>
<p>lists the signature as</p>
<pre><code>reverse($arg as item()*) ➔ item()*
</code></pre>
<p>but the argument keyword has changed from <code>arg</code> to <code>input</code>. The argument keywords are relevant in 4.0 because arguments can be identified by name in a function call.</p> Saxon - Support #6072 (New): SaxonCS used package ICU4N.Resources 60.1.0-alpha.402 generates warn...https://saxonica.plan.io/issues/60722023-06-11T16:06:11ZMartin Honnenmartin.honnen@gmx.de
<p>The SaxonCS (12.2) package uses a package ICU4N.Resources 60.1.0-alpha.402 that for me generates lots of warnings in the form of</p>
<pre><code>1>C:\Program Files\dotnet\sdk\7.0.302\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(266,5): warning NETSDK1187: Das Paket ICU4N.Resources 60.1.0-alpha.402 verfügt über eine Ressource mit dem gebietsschema-'bm-ML'. Dieses Gebietsschema wurde auf das Standardformat 'bm-Latn-ML' normalisiert, um Groß-/Kleinschreibungsprobleme im Build zu vermeiden. Erwägen Sie, den Paketautor über dieses Groß-/Kleinschreibungsproblem zu benachrichtigen.
</code></pre>
<p>basically saying that the region schema name of a used resource has been normalized/standardized and the package author of ICUN should be informed about that change in using lower case/upper case.</p>
<p>Perhaps if there is already a fix to ICU4N you can make sure that next maintenance release of SaxonCS includes that.</p> Saxon - Bug #6042 (AwaitingInfo): Xerces occasionally throws ArrayIndexOutOfBoundsExceptionhttps://saxonica.plan.io/issues/60422023-05-21T17:29:54ZNorm Tovey-Walsh
<p>Can't reproduce this locally and debugging through the narrow opening provided by CI is awfully painful, but FYI:</p>
<p>This is <code>xspec.bat</code> (slightly hacked) from the DocBook xslTNG project running on Windows CI in GitHub. I've instrumented the batch file with:</p>
<pre><code> echo "XSLT:"
echo %*
</code></pre>
<p>The full command is:</p>
<pre><code> java ^
-Dfile.encoding=UTF-8 ^
-Dxspec.coverage.ignore="%TEST_DIR%" ^
-Dxspec.coverage.xml="%COVERAGE_XML%" ^
-Dxspec.home="%XSPEC_HOME%" ^
-Dxspec.xspecfile="%XSPEC%" ^
-Dorg.docbook.xsltng.extensions.pygmentize="%PYGMENTIZE%" ^
-Dorg.docbook.xsltng.verbose="%VERBOSE%" ^
-cp "%CP%" net.sf.saxon.Transform %CATALOG% ^
-init:org.docbook.xsltng.extensions.Register %*
</code></pre>
<p>With Saxon 11.5:</p>
<pre><code>Formatting Report...
"XSLT:"
-o:"D:\a\xslTNG\xslTNG\build\default-result.html" -s:"D:\a\xslTNG\xslTNG\build\default-result.xml" -xsl:"D:\a\xslTNG\xslTNG\build\xspec-2.2.4\bin\..\src\reporter\format-xspec-report.xsl" inline-css=true
java.lang.IllegalStateException: java.lang.ArrayIndexOutOfBoundsException: 2048
at net.sf.saxon.resource.ActiveSAXSource.deliver(ActiveSAXSource.java:233)
at net.sf.saxon.resource.ActiveStreamSource.deliver(ActiveStreamSource.java:65)
at net.sf.saxon.event.Sender.send(Sender.java:105)
at net.sf.saxon.Configuration.buildDocumentTree(Configuration.java:4138)
at net.sf.saxon.s9api.DocumentBuilder.build(DocumentBuilder.java:334)
at net.sf.saxon.Transform.processFile(Transform.java:1346)
at net.sf.saxon.Transform.doTransform(Transform.java:871)
at net.sf.saxon.Transform.main(Transform.java:81)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2048
at org.apache.xerces.impl.io.UTF8Reader.read(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.scanContent(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanContent(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at net.sf.saxon.resource.ActiveSAXSource.deliver(ActiveSAXSource.java:190)
... 7 more
Fatal error during transformation: java.lang.IllegalStateException: java.lang.ArrayIndexOutOfBoundsException: 2048
*** Error formatting the report
</code></pre>
<p>with Saxon 12.2:</p>
<pre><code>Formatting Report...
"XSLT:"
-o:"D:\a\xslTNG\xslTNG\build\default-result.html" -s:"D:\a\xslTNG\xslTNG\build\default-result.xml" -xsl:"D:\a\xslTNG\xslTNG\build\xspec-2.2.4\bin\..\src\reporter\format-xspec-report.xsl" inline-css=true
java.lang.ArrayIndexOutOfBoundsException: 2048
at org.apache.xerces.impl.io.UTF8Reader.read(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.scanContent(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanContent(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at net.sf.saxon.resource.ActiveSAXSource.deliver(ActiveSAXSource.java:190)
at net.sf.saxon.resource.ActiveStreamSource.deliver(ActiveStreamSource.java:65)
at net.sf.saxon.event.Sender.send(Sender.java:104)
at net.sf.saxon.Configuration.buildDocumentTree(Configuration.java:4210)
at net.sf.saxon.s9api.DocumentBuilder.build(DocumentBuilder.java:334)
at net.sf.saxon.Transform.processFile(Transform.java:1345)
at net.sf.saxon.Transform.doTransform(Transform.java:879)
at net.sf.saxon.Transform.main(Transform.java:83)
Fatal error during transformation: java.lang.ArrayIndexOutOfBoundsException: 2048
*** Error formatting the report
</code></pre>
<p>It's particularly annoying that this looks like an encoding issue but I have explicitly specified the <code>file.encoding</code> and the same code on my local Windows machine does not fail.</p> Saxon - Feature #5919 (New): Event APIs for writing XML in SaxonCShttps://saxonica.plan.io/issues/59192023-03-13T11:39:42ZMichael Kaymike@saxonica.com
<p>Currently for writing XML using a push-based event API in SaxonCS we only offer the rather antiquated XmlWriter interface.</p>
<p>Internally we include the Push API (Saxon.Hej.s9api.push) and we use this in the InvalidityReportHandler, but we don't expose it for public use.</p>
<p>We also don't include the Sapling API in the SaxonCS product.</p>
<p>We should consider including one or both of the Push API and the Sapling API - or some improved API that combines the best ideas of the two - in the public SaxonCS API.</p> Saxon - Feature #5755 (New): Wouldn't it be nice to have an Package Resolver?https://saxonica.plan.io/issues/57552022-12-06T12:23:45ZNico Kutscherauer
<p>The general idea:</p>
<p>Saxon should have a new configuration option where the user can provide a Java class implementing a specific interface. The class should work similar to the <code>URIResolver</code>, just for packages. It receives a package name and a requested version info like it was specified in the <code><xsl:use-package></code> and returns the <code>javax.xml.transform.Source</code> of the package file or <code>null</code> if the package is not available. Any time Saxon compiles a stylesheet containing an <code><xsl:use-package></code> declaration it asks at first the Pakage Resolver for the resource. If it returns <code>null</code> it uses the current logic to get it.</p>
<p>What is the benefit?</p>
<ul>
<li>You could implement a repository based pull mechanism for XSLT packages .In my mind, it's something like Maven already does with its dependency concept. Companies could maintain internal repositories or even an "XSLT central" could be come real.</li>
<li>You could make lookups for packages based on common patterns. For instance I developed an <a href="https://github.com/nkutsche/xslt-package-handler" class="external">XSLT Package Handler</a> which works with the generic initializer option and collects all packages which can be found in the classpath. This would be much more elegant, if it would not use the very generic intializer interface and if it would have a pull mechanism.</li>
</ul>
<p>What do you think?</p> Saxon - Bug #5651 (New): Garbage collection of xsl:key indexeshttps://saxonica.plan.io/issues/56512022-08-18T14:24:21ZMichael Kaymike@saxonica.com
<p>When Saxon builds an index in support of an xsl:key definition, or an implicit xsl:key generated by the XSLT/XQuery optimizer, the intent is that the key remains in memory so long as BOTH the source document AND the compiled stylesheet or query remain in memory.</p>
<p>This appears not to be working. If we run the same query 1000 times against the same source document, we're seeing the index built 95 times. This suggests the garbage collector is destroying it and we're having to rebuild it the next time it's used.</p>
<p>We use WeakReferences to support this policy, and it looks as if we're getting it wrong.</p>
<p>Note: we also need to check how this works on Saxon-CS, as it's probably different.</p> Saxon - Bug #5549 (New): Function caching is not applied to tail callshttps://saxonica.plan.io/issues/55492022-05-30T08:11:02ZMichael Kaymike@saxonica.com
<p>If a function f contains a tail-call to a function g, and g is defined with cache="yes", then the cache is ignored and g is executed normally.</p>
<p>See <code>TailCallLoop.tailCallDifferentFunction()</code></p>
<p>(Test case function-1035. I modified the test to make the call not be a tail call; undo this change to demonstrate the problem)</p> Saxon - Support #5469 (New): Combining Configuration Fileshttps://saxonica.plan.io/issues/54692022-05-03T15:25:55ZScott Louzon
<p>To whom it may concern,</p>
<p>I have moved my XSLT creation methodology, in part, to using XSLT packages.
This has been a great new feature over the include/import flow I was previously using.</p>
<p>My last issue is with the encapsulation of the configuration files for pointing to the packages on the cmd-line "-config:".
<a href="https://www.saxonica.com/documentation9.5/configuration/configuration-file/" class="external">https://www.saxonica.com/documentation9.5/configuration/configuration-file/</a>
Unfortunately, I don't see mention of in the example.</p>
<p>Take the following example:
Car package is at the top.
Car package uses Frame, Engine, Wheels, etc.. packages.
Each of the Frame, Engine, Wheel packages could use many other packages, and so on below that.
However, when using the Car package, I don't want to care about the location or structure of everything downstream when building my configuration file for the Car package.</p>
<p>I am wondering what the current methodology recommendation is for building this hierarchy of configuration XML files when using XSLT packages?</p>
<ul>
<li>Always have a "massive" top-level package specify the location of everything you could possibly need to use?</li>
<li>Have a tool (possibly an XSLT) combine all the XML configuration files before-hand, and then use the generated combined file on the command-line?</li>
<li>Some better built in way of pointing to a lower-level configuration file, which in turn can point to the packages it needs, as well as more configuration files?</li>
<li>Don't use configurations files at all, potentially better way to specify package locations and connections?</li>
</ul>
<p>Based on all the information you could pass into a configuration file besides , like XSLT versions and such, I imagine combining configuration files could get tricky.</p>
<p>In general, I want to avoid making a tool to combine XML configuration files in an encapsulated manner, if there is already a better built-in way to do what I want.</p> Saxon - Bug #5067 (New): Stability of collection orderinghttps://saxonica.plan.io/issues/50672021-08-23T11:28:25ZMichael Kaymike@saxonica.com
<p>The spec says that by default collections are stable, so processing the same collection twice should give the same result.</p>
<p>It also says that a collection is a sequence (not a set).</p>
<p>This is difficult to reconcile with Saxon's use of multi-threading to process the items in a collection, which makes the order of processing unpredictable. Perhaps we should be doing multi-threading within the same constraints as <code>xsl:for-each</code> with a <code>threads</code> attribute, where the results are delivered in the original order.</p>
<p>Problem arose from consideration of test case <code>cbcl-collection-002</code> where in Saxon-CS we are delivering the (integer) contents of the collection in an arbitrary order.</p>