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-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.