Appendix D. Change log
This section documents the significant changes made in each release. See the commits and pull requests on the repository for finer detail.
- 3.0.0-beta1, 11 May 2025
If I’m going to get a couple of betas out in May, I best get started, eh?
Fixed issue #466. The
xsl:message
s from stylesheets run withp:xslt
are output at “info” level. (They were accidentally getting discarded in the last few alphas.)Fixed issue #462. Make sure that option shortcut values are stored as untyped atomic values so that they can be promoted to the appropriate type.
Fixed issue #460. Refactored build and configuration APIs.
Fixed issue #456. Removed some debugging code that always printed a JVM stack trace when
p:run
failed.Fixed issue #455. Refactored the
DocumentManager
API.Added
cx:jsonpath
andcx:find
extension steps.Added
cx:json-diff
andcx:json-patch
extension steps.Made a number of improvements to error reporting.
Improved error messages for documents that can’t be parsed. (Previously, “file not found” would be reported in some circumstances.)
Improved error message when content type shortcuts are used in inappropriate places.
Fixed a bug where the underlying cause of an exception sometimes got lost in nested exceptions. When a pipeline fails, the error report now includes the chain of causes.
Clarified the error message for the special case of empty sequence in a type conversion error.
Added a
--stacktrace
option to enable stack (step) traces in errors (and disabled them by default).Improved the formatting of error explanations when the
--explain
option is used.
- 3.0.0-alpha33, 06 May 2025
Fixed issue #450. Make sure that options passed on the command line are promoted as required. (So “true” can be used for an
xs:boolean
value.) Also changed the error code used for option values that don’t match (or can’t be promoted to) the correct type. They now raiseerr:XD0036
instead oferr:XS0077
which is really about attribute values not option values.Fixed issue #447. Make sure the default verbosity is “info”, not “warn”. (This error was introduced while tinkering with the logging code; it was probably never released.)
Fixed issue #441. Restore loading
~/.xmlcalabash3
as the default configuration file if no configuration is given explicitly and if./.xmlcalabash3
doesn’t exist. (In alpha31 or alpha32, the code to load~/.xmlcalabash3
was lost, now it’s back.)Disabled standard Java logging to
stderr
. This seems a bit odd, but XML Calabash has its own error reporter (necessary so that pipelines and integrators can capture the error messages). That reporter sends all messages to the standard Java logging system. That’s necessary so that it’s possible to capture lower level debug messages to a file without sending them all to the console. But it means that if an error occurs, the reporter prints the error message and then the underlying Java logging system prints it again, in a slightly different format. That’s going to be both confusing and annoying, so by default no Java log messages are printed.
- 3.0.0-alpha32, 05 May 2025
Significant refactoring of message and logging systems.
There’s more separation between things that are logged through the message reporter and things that are only logged to the underlying Java logger. The intent is that things only relevant to debugging XML Calabash go only to the logger. Things that might be relevant to debugging a pipeline go to both places.
One exception is that details about how the application is configured go only to the underlying Java logger. This is necessary because we haven’t configured a message reporter before we’ve configured the application!
The default logback.xml configuration file has been simplified. It no longer uses dynamic configuration. Use a different configuration file to change the level.
The error explanation implementation has been changed so that it also uses the message reporter, rather than writing directly to stderr.
Multithreaded execution complicates the task the visualizer is trying to perform. The “detail” visualizer has been updated.
Fixed a few bugs in the
cx:wait-for-update
step; it didn’t work reliably for HTTP URIs.
- 3.0.0-alpha31, 03 May 2025
Fixed issue #434. Improved the conformance of
p:import-functions
. Private functions are now excluded and nested imports are handled correctly.Fixed issue #431. Corrected errors in
p:os-exec
. Fixed the bug where output to stdout was discarded unless the process ended with a return code of zero. Serialization properties and output charsets are now handled correctly.Fixed issue #427. Remove carriage returns from
p:os-exec
output on Windows.Fixed issue #425. The
cwd
option onp:os-exec
is handled correctly if it’s a URI.Fixed issue #424. Reworked the
DocumentManager
API.Fixed issue #258. Added support for the language attribute on the XVRL schema element.
XML Calabash now uses Saxon 12.6 by default.
- 3.0.0-alpha30, 30 Apr 2025
The Windows-related fixes in
3.0.0-alpha29
weren’t wholly satisfactory. Some places where those fixes were incomplete have been refactored. (I think two issues had been conflated and their union fixed, leaving each of the individual problems only partially resolved.)Fixed issue #418. Make sure that attempts to get a path from a
file:
URI deal with irregularities on Windows.Fixed issue #417. Don’t print “Stack trace:” on errors if there’s no stack trace.
Refactored the
MessageReporter
API. More information is now available to aid other presentation formats, localization requirements, etc.
- 3.0.0-alpha29, 28 Apr 2025
This release is a handful of small bug fixes, many related to tidying up loose ends in Windows functionality. Essentially all of the test suite tests now pass on Windows.
Fixed issue #413. Don’t put leading slash or, on Windows, drive letters in ZIP archive names. This change applies across all the archive formats, for consistency.
Fixed issue #411. Removed the spurious “:” from the start of
message
output on steps.
- 3.0.0-alpha28, 26 Apr 2025
Made a variety of changes to improve functionality on Windows: make sure files get closed, sort out some edge cases with Windows filenames, corrected a few tests that depended on end-of-line characters, fixed a bug in
p:file-create-tempfile
(it returned the path instead of a URI).Added the ability to run pipeline steps in parallel (“multi threading”). This required a substantial bit of refactoring. I think it works correctly. See Running steps in parallel.
Fixed issue #403. Improved the presentation of error output to address a comment on the mailing list. I’ve also made the error output from the
p:xslt
andp:xquery
steps more informative (and generally fixed a few loose ends in thep:xquery
step).Fixed issue #400. Corrected a typo that prevented “?” from being correctly escaped in
p:urify
.Fixed issue #393. Static options imported in a common library (one imported by several other libraries) no longer get flagged as illegal duplicates.
Fixed issue #390. Somewhere along the line, I broke the
--verbosity
option so that it had no effect on the output. Now it does again.Fixed issue #384. Added a shortcut for setting map parameters on the command line.
Fixed issue #383 and made a number of other improvements in the test driver.
Fixed issue #362 by improving the
p:urify
function. This is a little bit speculative as xproc/#1145 is still being discussed. But the current behavior is so fundamentally broken that I’m making a few proactive fixes. These changes also mean thatp:urify
is implicitly called in many places which should also help on Windows.Fixed issue #353. Added support for content-types in the document cache. You can now cache the same document parsed with different content types.
Added some new unit tests to demonstrate programmatic use of XML Calabash from your own JVM application.
Fixed a bug where it wasn’t possible to set the value of a pipeline option named “message”. This was an accidental consequence of how the message attribute is handled on compound steps.
Added a stack trace to the error output. If a step fails, the default error reporter now prints a “stack trace” showing the step that failed and the steps it was nested inside. If this turns out to be annoying, I’ll add a configuration option to turn it off.
Fixed several bugs in the implicit validation feature. Implicit validation was accidentally enabled by default and there were also some issues with correct handling of the base URI when the base URI was explicitly absent.
Fixed several, small bugs in the SVG visualizer.
- 3.0.0-alpha27, 14 Apr 2025
The big (as in “sweeping” and arguably a little riskier than most recent updates) fix in this release is a substantial refactor of the core of the application. This was partly done to clean up the API for creating a processor, and partly because I had outstanding concerns about the previous big refactor from about a year ago. It’s a mostly not-visible change if you’re just using the command line application, but there was at least one bug fix where the document properties of a variable were wrong (the tests passed by accident).
Fixed issue #378. The SVG output doesn’t display options on steps that have no binding. They still have a binding to the empty sequence, but the diagram is a lot less cluttered without them.
- 3.0.0-alpha26, 25 Mar 2025
Fixed issue #372. The graph visualizer was completely unprepared for connections to option expressions.
Fixed issue #370 by sending message output to standard error instead of standard output. This assures that message output and pipeline output don’t clash. Writing to standard error should probably have been the default from the beginning.
Fixed issue #365. Documentation improvements; step names are now links to the appropriate reference page.
(Re)fixed issue #361. Make sure that the global context item is initialized (so that the custom stylesheet can define global variables).
Fixed issue #360. Attempted to improve the way writing pipeline output to standard output is handled. Pipeline output to standard output is “undecorated” if only one port is being output and it cannot produce a sequence.
I made some aesthetic improvements, well, changes at least, to the SVG graph styling: curved borders, a few colors.
- 3.0.0-alpha25, 23 Mar 2025
Added
cx:trang
andcx:trang-files
steps.Fixed issue #361. The regular expression used to match the URI scheme was woefully inadequate.
Fixed issue #352 by supporting an explicit syntax for specifying the content type of inputs specified on the command line. This is especially relevant when reading from standard input as the name gives no hints about the content type.
Fixed issue #351. This release includes a substantial revision to SVG diagrams of pipelines and graphs. This has no user-visible effects unless you’re interested in styling the SVG diagrams.
Fixed issue #349 by documenting the
--nogo
option.Fixed issue #348 by documenting the
format
option values forp:archive
andp:unarchive
.
- 3.0.0-alpha24, 16 Mar 2025
Fixed issue #342 by detecting errors in expressions at run time. Static errors in expressions now generate a warning at compile time and a failure at runtime. I’m not convinced that’s exactly right, but it does mean that a static error in an expression that’s never evaluated won’t raise an error.
Fixed issue #336. The way that SVG diagrams are generated for pipelines and graphs has been more-or-less completely rewritten. The XML description of pipelines and graphs are now broadly similar. Almost all of the styling is performed by XSLT and there’s a mechanism for users to provide their own stylesheets. The documentation has been updated to (attempt to?) explain how this works.
The pages generated by the
--graphs
option have been updated to improve the presentation and navigation.A number of small changes have been made in several places to try to provide the pipeline description with more information about the steps and the connections between them.
A new
--nogo
option has been added. This option compiles the pipeline and generates the graphs, if requested, but does not attempt to run the pipeline.
- 3.0.0-alpha23, 09 Mar 2025
Fixed issue #350 by making the source port on
cx:sparql
primary. (That was an oversight in the library that declares the step.)Fixed issue #327 by making sure that
p:directory-list
paths are normalized against the base URI correctly.Fixed issue #325 by making sure that secondary (non-primary) input ports are bound correctly. A secondary input is not bound to the default readable port if there’s no explicit connection for it. Instead, it’s bound to the input port’s default connection.
Fixed issue #323 by documenting that using an extension step requires providing its declaration; added a the library URIs to all of the extension step reference pages.
Fixed issue #319 by bundling CoffeeSacks with XML Calabash (this is the Saxon extension function for Invisible XML). The function is automatically registered.
Added support for user-styling of the SVG pipeline and graph output. Documentation T.B.D. (See issue #336.)
Added (somewhat experimental) support for implicit XML Schema validation of primary inputs.
Updated Apache FOP support; XML Calabash is now using FOP 2.10. Added image/png, image/tiff, application/X-fop-areatrea, and application/vnd.hp-PCL as output formats. Allow image/svg+xml as an output format, but note that it requires a build of FOP with the sandbox enabled.
- 3.0.0-alpha22, 02 Mar 2025
Added support for the
p:message
step.Fixed issue #308 by forbidding the
[p:]message
attribute from being specified withp:with-option
. (It’s not an option.)Fixed issue #306 (and issue #252). All of the extension steps (except for the polyglot steps) are now bundled into the distribution.
Fixed issue #304. Make sure that
[p:]message
attributes on user-defined steps are output when the steps are run.Fixed issue #302 by making IDs explicit so that GraphViz doesn’t output duplicates in the SVG. Cleaned up the graph output in a few small ways.
Fixed issue #301. Added
cx:ebnf-convert
, a wrapper around Gunther Rademacher’s EBNF converter, and updatedcx:railroad
to use it directly. This will make it easier to draw railroad diagrams of, for example, Invisible XML grammars.Fixed selection of elements with relative
xml:base
attributes so that the resolved base URI is correct.
- 3.0.0-alpha21, 22 Feb 2025
Fixed issue #286. Added a
cx:markup-blitz
step and made it possible to use either NineML or Markup Blitz for thep:invisible-xml
step.Fixed issue #285. Make sure that catalog lookup is performed when XML Schema modules are loaded.
Fixed issue #281. Remarkably, the
p:urify
function didn’t correctly handle “\” in the file path. This may also resolve issue #282.Improved the error message for
err:XD0049
; it now includes the URI of the document that caused the error, if the URI is available.Improved error messages generally by not losing the underlying exception and printing the underlying cause when an uncaught exception stops the pipeline.
Added an initial implementation of the
cx:asciidoctor
step. This implements conversion from Asciidoctor to DocBook, HTML, or PDF.Added an initial implementation of the
cx:xmlunit
step. This implements document comparisons with XMLUnit. It doesn’t support everything that XMLUnit can do, but it supports many of the options.Added an initial implementation of RDF-related steps:
cx:rdf-merge
,cx:rdf-graph
,cx:rdfa
, andcx:sparql
. Added support for a wide range of RDF content types:application/ld+json
,application/n-quads
,application/n-triples
,application/rdf+json
,application/rdf+thrift
,application/rdf+xml
,application/sparql-query
,application/sparql-results+json
,application/sparql-results+xml
,application/trig
,text/n3
, andtext/turtle
. (Supporting these content types means that the standardp:document
instruction and thep:load
andp:store
steps support RDF documents natively.)Added a number of new service provider interfaces so that extension steps can interact with the processor configuration.
Fixed a typo in the declaration of the
cx:epubcheck
step.Cleaned up some whitespace, unused imports, and did some general code tidying.
- 3.0.0-alpha20, 10 Feb 2025
The 3.0.0-alpha19 release failed because of an error in build automation. This is functionally the same release.
- 3.0.0-alpha19, 09 Feb 2025
Fixed issue #266. The default encoding on Windows is now Windows 1252. (It was previously documented that way, but not implemented that way.)
Fixed issue #265. The
p:urify
function can be called with a single argument.Fixed issue #264. The static base URI was not being set correctly in expressions. Also updated the error message that arises if an expression fails to include location information.
Fixed issue #257. The
p:validate-with-schematron
step now returns axvrl:report
(not a reports). The bug that caused digest roll-ups to be incorrect has been fixed.Fixed issue #256. That sentence in the README now has a verb.
Fixed issue #255. The help text has been updated to reflect current usage. Making the help text comprehensive seemed too verbose; the common options are summarized with a link to the documentation for more detail.
Fixed issue #253. Updated the “quick start” section of the README for clarity.
Fixed issue #250. Fixed a link accidentally broken by a global search-and-replace and a few other documentation issues.
Fixed issue #236. The
--step
option can be used to run any atomic step.The error message associated with “not well formed JSON” now includes the JSON that’s being rejected. Did a bit of nearby tidying of error messages.
Updated byte order mark handling in text and JSON documents to reflect recent specification changes. (Generally, byte order marks are not part of the text.)
Tinkered with the GitHub actions: the PR builds now include the test report; the build environment includes Firefox and Chrome.
- 3.0.0-alpha18, 02 Feb 2025
Upgraded to version 6.0.12 of the XML Resolver. This isn’t completely backwards compatible with earlier releases, so attempting to use an earlier version might not work.
Fixed issue #32. The
p:lookup-uri
function now queries the catalog resolver.Fixed issue #163. Added a
next
command to the debugger.Fixed issue #215. Make sure that options passed to a subpipeline are reset if the step appears in a loop.
Fixed issue #217. Correctly handle sequences of documents on the
p:xslt
secondary output port.Fixed issue #218. Another XPath parsing bug. 🙁 Something more comprehensive is required.
Fixed issue #219. When a
content-type
is specified onp:document
, it’s an override.Fixed issue #220. Improved the error message used to report an unbound variable reference in an expression.
Fixed issue #232. Resolve the Saxon configuration file URI against the base URI of the configuration element.
Updates related to recent specification changes:
Added a
p:encode
step.Adjusted the semantics of
p:cast-content-type
so that ac:data
document is always decoded.Added an
attributes
option top:pack
,p:wrap
, andp:wrap-sequence
.Improved the semantics of text value templates in XML content. It’s now possible to add attributes to elements with a template.
Added a
cx:collection-manager
step.Added diagramming steps (
cx:ditaa
,cx:mathml-to-svg
, andcx:plantuml
). These are published separately.Added a
cx:railroad
step, published separately.Improved error messages in serveral places. Improved the documentation of errors in reference pages.
Ignore serialization properties when they are explicitly set to the empty sequence.
Added support in
p:cast-content-type
for casting to and fromtext/x-java-properties
. to the empty sequence.Fixed a bug in
p:viewport
where the base URI of documents in the viewport was incorrect.Allow other configuration elements in the configuration file. This provides a mechanism for steps to have their own configuration.
Improved the checking for invalid URIs.
Fixed a couple of bugs in the pipeline graph output. (Sometimes the output from a compound step wasn’t correctly connected to its input.)
- 3.0.0-alpha17, 19 Jan 2025
Fixed issue #189. Generate an XVRL report for NVDL validation.
Fixed issue #186. Fix links to standard libraries and XProcRef.org in the reference guide.
Fixed issue #185. Check for required inputs and options before running a pipeline. When a top-level pipeline is run, check that required options and required inputs have been provided. (Checking for required inputs here is an opportunity to improve the error message.) Keep track of the required state of options until runtime. Within a pipeline, failing to provide a required option is a static error. But “top level” pipelines can’t be checked before they run. When they run, it must be possible to determine which options were declared as required.
Fixed issue #184. Fix bugs in Schematron XVRL reporting. (Generally, improve error reporting for validation steps.)
Fixed issue #160. The code was over-zealous when constructing step configurations. It created a new Saxon Configuration for every step. That’s not necessary; it’s only necessary that each
p:library
andp:declare-step
(and their descendants) have a new configuration. Configurations are required at that level because any use ofp:import-functions
has to be isolated.Compute a total order over subpipeline steps during graph building. This change replaces the, in retrospect very strange, approach previously taken where the steps were effectively unordered and at runtime each was tested to see if it could be run. Now we work out in advance a total order such that no step runs before any step that it depends on. (With some special cases to deal with the when/otherwise clauses in a choose.)
Fixed bug where buffered messages (accessible through
p:pipeline-messages
) could be “null” instead of the correct message.Implemented the
cx:wait-for-update
step.Added an “Errors and error messages” chapter to the user guide. Reworked document resolver APIs; made it possible to publish the XVRL-to-text stylesheet in the user guide.
Tidy up the pipeline/graph visualization output. Output option names for options, use the command line
--debug
flag to control debugging output. Use«anonymous»
instead of the arbitrary step ID for the root pipeline if it has no declared type.Fixed bug in
exclude-inline-prefixes
where it was possible to generate a document that was not namespace well-formed.
- 3.0.0-alpha16, 15 Jan 2025
Fixed issue #175. Make sure directories are created before attempting to write files.
Fixed issue #174. Improved reporting of user-defined errors. If a pipeline author aborts a pipeline with
p:error
, make sure that any details provided are presented when the pipeline fails. (Don’t attempt to use the error explainer, it won’t know anything about that error.)Fixed issue #173. The “detailed” option on
p:directory-list
didn’t work on Windows because Windows doesn’t support POSIX file permissions. On Windows, the step succeeds but provides slightly less detail.Reworked how Graphviz visualizations are created and stored. The
--description
and--graph
options have been replaced with a single--graphs
option. The new option writes all of the descriptions to an output directory. Instead of one, potentially huge, SVG diagram of the entire set of pipelines, there are now distinct graphs for each pipeline with hyperlinks between them.
- 3.0.0-alpha15, 13 Jan 2025
Fixed issue #167. Make sure that the
--init
functions are applied to every configuration.Fixed issues #164 and #165. Improved XVRL reporting and metadata.
Fixed issue #159. Make sure that validity errors are reported in XVRL. Improve reports associated with RELAX NG validation failures.
Fixed issue #157. In
p:validate-with-xml-schema
, ignore any errors that arise when attempting to locate a schema at the namespace URI. (It’s not absolutely certain that this was the cause of #157, but it’s my best guess.)Fixed issue #156 and related knock-on issues, including:
Make sure that steps wait for all of their option binding inputs. (Previous releases worked accidentally in this regard.)
Make sure the base URI of an expression is always resolved against the point of definition, not the point of use.
Only apply external option bindings to
p:option
instructions. (And not alsop:with-option
instructions!)Make sure steps declared in libraries are always fully validated.
Fixed bug where values cast to
xs:integer
were returned asxs:decimal
values.Reworked how lazy bindings are managed; they’re now always documents.
General improvements to logging, trace listening, message reporting, and serialization.
Fixed issue #153. Setup the correct namespace context in
p:if
. Ap:if
is rewritten as ap:choose
containing ap:when
; make sure that thep:when
constructed for this purpose has the right namespace context.Fixed issue #152. Discard unused inputs on
p:inline
steps.When constructing SVG graph output, ignore stylesheet errors rather than causing the processing to fail. (This hasn’t fixed the errors, but it makes it possible to ignore them in the short term.)
Found and fixed (some) issues related to how text value templates are expanded. (There are still open questions.)
Improved handling of
err:XD0011
. Always provide a reason.Fix bug where namespace bindings on attributes could be lost
Attempt to manage the console output encoding.
There’s a new configuration file setting,
console-output-encoding
. When XML Calabash writes to the console, it attempts to assure that the output is appropriate for that encoding. There’s a bit of a messy interaction between the new “message printer” class and the existing “message reporter” class. More refactoring may be useful.Added “piped mode” to support processing XML in a unix-style pipeline.
In piped mode (
--pipe
orpiped-io
), primary input comes from stdin by default and the primary output goes to stdout by default. Explicit bindings are still possible. The pretty printing associated with console output is disabled.Added a (somewhat crude) Powershell script to the distribution to run XML Calabash on Windows.
- 3.0.0-alpha14, 08 Jan 2025
Reworked Java versions again. This release attempts to move the requirement back to Java 11, except for the “polyglot” steps which require Java 17 or later.
Fixed issue #144. The XPath parser is still a little ad hoc. Also improved the error message if this situation arises again.
Fixed issue #142. The default readable port of a step that followed a
p:try
, that itself had an implicit output port, was not computed correctly.Fixed issue #141. Make sure the continuous integration build scripts use the correct documentation paths. (In order to make relative links between the guides easier to test, I moved the build directories.)
Fixed issue #140. Removed the accidental restriction that
p:variable
was not allowed inp:try
.Fixed issue #138. The Windows shell doesn’t support UTF-8 by default (checks calendar, yep, it is 2025) so back to plain old US ASCII for all messages by default. 🎵sad trombone🎶
- 3.0.0-alpha13, 07 Jan 2025
Fixed issue #134. The last release (perhaps the last couple of releases) have accidentally required Java 21. This release moves the requirement back to Java 17. Java 17 is a “long-term-support” release from 2021 so it’s not exactly cutting edge. Supporting Java 8, the historical favorite, is now deprecated, so it’s time to move forward. Java 17 seems like a reasonable compromise between 11 (2018) and 21 (2023).
Fixed issue #131. Clarified documentation of the CSS and XSL formatters teps. Fixed broken links between the user guide and the reference.
Fixed issue #130. There was a typo in the Relax NG grammar for the configuration file that caused
cc:mimetype
to appear twice when the second occurrence should have beencc:paged-media
Fixed issue #125. Corrected the explanation of verbosity in the
--help
output.Fixed issue #124. Updated the way the configuration is parsed so that the absence of the
licensed
attribute on the configuration isn’t interpreted as a request for a “non-licensed” configuration.Fixed issue #123. Added a namespace declaration to the tableaux for the
cc:xml-calabash
configuration element.Fixed issue #122. Added and documented the
--explain
command line argument. (Previously, the explanation behavior was tied to the verbosity level which doesn’t really make sense. I also fixed a bug where the stack trace was printed twice if debug verbosity was used.)
- 3.0.0-alpha12, 05 Jan 2025
Fixed a bug where lazily evaluated expressions might have the wrong in-scope namespaces.
Fixed a bug where the schema-awareness of expressions and the schema-validity of documents could get out of sync causing errors.
Fixed a bug where a spurious option was passed to visualizers established by the configuration file.
Added Graphviz output to the debug log if generating SVG fails.
Allow the debugger breakpoint syntax to begin “break at” as well as “break on”.
Fixed an issue where the debugger was unable to inspect the document properties of step inputs.
Improved the debugger breakpoint command to check that the specified breakpoint is possible. The command will now reject attempts to set breakpoints that don’t refer to a valid step id. The model command has been extended to print all of the possible ids in a pipeline.
- 3.0.0-alpha11, 05 Jan 2025
Tinkered with the timeout and sleep duration options in advance of some anticipated specification changes. The sleep duration is now a number of seconds, not milliseconds. Both values can be either a number or a string in the form of an
xs:dayTimeDuration
.Completely refactored the code that parses and serializes documents. Added support for YAML and TOML content types.
Added
cx:xpath
andcx:polyglot
steps (cx:javascript
,cx:python
, etc.).Bumped the Java version to 21, fixed a number of deprecation warnings.
Fixed a bug where
[p:]message
was still not being handled correctly.Added a
cx:epubcheck
step.Updated assertions to support using an XProc pipeline as an assertion.
- 3.0.0-alpha10, 04 Jan 2025
This release never actually happened. There was a typo in the build script. I opted to bump the version rather than moving a published tag.
- 3.0.0-alpha9, 01 Jan 2025
Fixed issue #92. Updated the
p:archive
,p:archive-manifest
, andp:unarchive
steps to support all of the formats supported by the Apache Commons Compression library. The “create” command onp:archive
also supports merging multiple archives together.Added a “visualization” API for tracking pipeline progress. Extensively revised how logging works. Removed the now unnecessary “progress” level of verbosity.
By default system logging only goes to the console and uses dynamic levels. For a different configuration, use a different logback.xml configuration file.
Fixed bugs related to
[p:]message
attributes. Messages are now output through the message reporter at “info” level, rather than being printed directly to the console. Fixed a bug where static messages on compound steps were not being output at all.Completely reworked how XVRL is supported. There’s now an internal model for the report format. Conversion from SVRL to XVRL is done by constructing the XVRL model.
Fixed issue #90 by correcting a typo in the SVG graphing stylesheet.
Fixed issue #93 by removing the accidental restriction that
p:variable
was not allowed inp:if
. Hat tip to Achim for reporting that one!Fixed issue #96. An option that had no default value but whose type did not allow the empty sequence was generating a compile time error about the invalid (default) value. The initializer now defers the error until runtime (where it won’t happen if a value is provided for the option).
Added
application/epub+zip
,application/java-archive
,application/x-7z-compressed
,application/x-archive
,application/x-arj
,application/x-cpio
, andapplication/x-tar
to the standard content type mapping.Added an experimental
xmlcalabash.sh
script to the distribution. This should make it easier to run XML Calabash with a modified classpath.Renamed a few build properties. The
BUILD_HASH
is nowBUILD_ID
and is more sensitive to internal builds. RenamedSAXON
toSAXON_EDITION
and removed the misleadingSAXON_LICENSED
property. (If you run PE or EE without a license, the edition reported is HE.)Attempt to detect when PE or EE is running without a license and provide a more helpful version message.
Upgraded to SchXslt 1.3.1. Upgrade to jing/trang 20241231. Upgraded a few Kotlin libraries. Added the brotli and xz libraries to the core build.
Fixed a bug where the error location information for an error was getting lost.
- 3.0.0-alpha8, 28 Dec 2024
Fixed an issue where the command line interface used by the debugger was always a “dumb” terminal. It now supports history and editing keys.
Improve the error messages associated with attempting to set inputs or outputs on the command line for ports that don’t exist in the pipeline.
An error is now reported if
psvi-required
is true but the processor doesn’t support XML Schema validation. (Saxon EE is required for PSVI support.)Renamed the “
schema-aware
” command line option and configuration property to “licensed
”. Cleaned up the tests for schema awareness in several places.Added support for the
[p:]timeout
option on steps.Added support for the
timeout
parameter onp:http-request
.Improved the error message associated with an undeclared prefix in an XPath expression.
Improved the error codes reported for static errors in several places.
Reworked the
MessageReporter
interface; allowed one reporter to chain to another. Added a buffering reporter to keep track of messages. By default the buffering reporter chains to the default reporter which chains to the logging reporter. The buffering reporter holds the last 32 messages. The default reporter prints messages to the console if they have a level that exceeds the verbosity threshold. The logging reporter sends all messages to the Java logger.There’s a new
message-buffer-size
configuration setting to set the number of messages to buffered.Added a new
cx:pipeline-messages
extension step that can retrieve the messages buffered by the buffering reporter.Changed the message reporter and document manager to be unique per-pipeline, rather than shared across multiple pipelines.
Fixed a bug where serialization properties on
p:output
were not being applied when pipeline outputs were serialized.Fixed a bug where XML Calabash was failing to detect that
p:import
must precedep:input
andp:output
. Fixed that error in many of the tests in the extra test suite.Improved support for Schematron assertions. Assertions are now applied to non-XML values by first performing “cast content type” on them.
Added support for a
cx:href
attribute onp:pipeinfo
. When present, the processor behaves as if the referenced document appeared where the reference appears. Thep:pipeinfo
must be empty and thecx:href
must point to ap:pipeinfo
document. This makes it practical to share Schematron assertions across pipelines.Fixed an obscure bug in the debug logging message associated with
p:sleep
.Upgraded from SchXslt1 to SchXslt2 version 1.3.
Cleaned up the error reporter in many steps.
Removed the defunct
debug
configuration setting.Improve the reference documentation for steps. Defer to the specification and to Erik Siegal’s excellent XProcRef for standard step descriptions.
- 3.0.0-alpha7, 24 Dec 2024
Added the Schematron assertions feature.
Added a
catch
command to the debugger to catch steps that fail. Added an option to thestep
command to stop after a step executes.Fixed a bug in the way steps are handled in nested, common imports.
Fixed p:filter to work as expected rather than as documented. See also, PR #645, the documentation fix.
Updated the trace listener to record when steps fail.
Tinkered with the message listener to align its methods with the recent changes to
--verbosity
.
- 3.0.0-alpha6, 23 Dec 2024
Added an interactive debugger.
Added a tracing feature.
Fixed issue #48 by supplying extension attributes to atomic steps.
Added support for a
--init
command line option to support registering extension functions before running a pipeline.Refactored the API that provides inputs to atomic steps. The inputs are now cached by the implementation and made available when the step is run. The previous API didn’t require that inputs be cached, but the overwhelming majority of steps do. Centralizing that feature simplifies atomic step implementations and avoids bugs.
Fixed a bug where
p:store
could not store binary outputs. Generally improved handling of serialized outputs. Implemented support for thecc:serialization
configuration option.Refactored the paged media steps. Documented the extensions supported by
p:css-formatter
andp:xsl-formatter
.Documented the
p:system-property
function, including the vendor-specific property names.Refactored the logging-related configuration. Switched to the Logback backend. Changed the
--debug
option so that it enables debug logging.Refactored and reorganized the
--verbosity
values. They now align with debugging log levels.Refactored how “empty” is handled. Empty inputs are now addressed when the graph model is built, not during pipeline construction. This simplifies construction and fixed at least one bug.
Fixed a bug in the way the error explanations file was parsed.
Attempted to make sure that error messages include the location of the error. Things are improved, though perhaps not fixed everywhere.
Refactored how step and model IDs are managed. The new system produces simpler, more predictable APIs.
- 3.0.0-alpha5, 15 Dec 2024
Refactored the way context information is maintained both at compile time and run time. This is a re-refactor of the refactor I started back in June when I discovered that it must be possible for the Saxon configuration for each step to be different. The problem I discovered shortly after releasing alpha4 was that the runtime context was still using the compile time environment when evaluating expressions. Mostly this manifested in the wrong value for the
p:episode
system property.It was all a bit of a mess so I threw it out and started over. Again. It’s better now, I think, but there’s still room for improvement.
Updated the serializer to make sure that XHTML documents are serialized as XML, not HTML.
Added a stub implementation of
p:lookup-uri
.Fixed issue #32 by adding a (debug logging) warning if an input or output port trivially accepts no documents. That is, if it has a content-types constraint that includes no inclusive members or if
*/*
is the last exclusive member.Fixed issue #31 by amking some documentation improvements, including documenting the additional properties accepted by
p:system-property
in the Reference Guide.
- 3.0.0-alpha4, 07 Dec 2024
Resolved the remaining
p:validate-with-json-schema
test failures. Updated to json-schema-validator version 1.5.4. This required adding a dependency on GraalVM’s polyglot JavaScript library.Updated the build script to use a more recent version of XercesImpl.
Fixed several bugs related to the way static options are resolved.
Fixed a bug where
[p:]inline-expand-text
was incorrectly controlling AVTs in attributes on the element where it occurred.Made many improvements to
p:import-functions
support.Added special handling for
use-when
onp:import
.Support variables in
match
expressions onp:viewport
.Fixed error codes for several tests. Correctly report static errors in more cases.
Reworked SVG output so that there’s one file for all the pipelines and one file for all the graphs (instead of multiple files for each).
Added support for the
--step
option.Fixed a bug in the attribute value template parser. It failed to handle nested comments correctly.
- 3.0.0-alpha3, 02 Dec 2024
Fixed issue #9, which reveals that the XPath parser is still a bit too ad hoc.
Fixed a couple of NVDL tests by sorting out the cache for schemas. Updated the
p:xinclude
step so that it looks in the cache.Added
cx:cache-add
andcx:cache-delete
to let pipeline authors update the cache.Made a bunch of improvements to static option handling.
Resolved the situation where two steps with the same type (private steps in different libraries, for example) would not work correctly.
These changes resolved the remaining input, option, with-option, step-available, and
p:run
tests.
- 3.0.0-alpha2, 26 Nov 2024
Fixed issue #3,
[p:]message
attributes were not supported on steps.Attempted to fix issue #2, XML Calabash failed on startup on Windows. The problem, correctly identified by Martin, was in the attempt to create a URI from a path. On Windows, paths contain
\
and those are forbidden in URIs.I’ve adopted the solution suggested by Martin, and tested that it passes a “smoke test” on Windows. But I’m not highly confident that this is the end of the Windows path issues.
Removed “empty steps” from the runtime graph. These are steps that generate no output, designed to model
p:empty
bindings. They clutter the graph and I don’t think they’re required any more. An unbound input is now “welded shut” so that no inputs are expected.
- 3.0.0-alpha1, 24 Nov 2024
Initial publication.