diff --git a/docs/announcements/atom.xml b/docs/announcements/atom.xml index 7760c49..7a7d29f 100644 --- a/docs/announcements/atom.xml +++ b/docs/announcements/atom.xml @@ -1,4 +1,4 @@ -Saxonica announcementshttps://blog.saxonica.com/announcements/atom.xml2024-08-10T10:20:43.391447ZAnnouncing Saxon 12.5!https://blog.saxonica.com/announcements/2024/07/saxon-12.5.html2024-07-02T11:30:00Z
+Saxonica announcementshttps://blog.saxonica.com/announcements/atom.xml2024-08-16T14:21:26.192195ZAnnouncing Saxon 12.5!https://blog.saxonica.com/announcements/2024/07/saxon-12.5.html2024-07-02T11:30:00Z

Announcing Saxon 12.5!

The Saxon 12.5 maintenance release has been published. This is a diff --git a/docs/atom.xml b/docs/atom.xml index b5e66c9..339858f 100644 --- a/docs/atom.xml +++ b/docs/atom.xml @@ -1,4 +1,74 @@ -Saxonica Weblogshttps://blog.saxonica.com/atom.xml2024-08-10T10:20:43.705332ZMaps and Recordshttps://blog.saxonica.com/mike/2024/08/maps-and-records.html2024-08-10T09:00:00Z

+Saxonica Weblogshttps://blog.saxonica.com/atom.xml2024-08-16T14:21:26.565411ZPackaging SaxonJS for the browserhttps://blog.saxonica.com/norm/2024/08/16-packaging.html2024-08-16T15:20:00Z
+ + +

Over the years, there have been several requests to improve the way that +SaxonJS is packaged for the browser. In the run up towards SaxonJS 3.0 (real +soon now, I promise), I’ve spent a few hours trying to see if that’s possible.

+ +

For SaxonJS on Node.js, things seem to be working the way users expect. You +can install SaxonJS, and xslt3.js, the command-line XSLT processor, +with npm install. Then you can use them as you would other Node.js +modules and applications.

+ +

For the browser, things are a little less clear.

+ +

I’ll start out by observing that SaxonJS is a large(ish) collection of mostly +plain JavaScript files. There are a mixture of techniques used, as you might +expect from a code base that stretches back seven or eight years (roughly ∞ in +JavaScript years). This code is compiled by the Closure Compiler to +produce the release artifacts.

+ +
+

Aside: Producing TypeScript instead of JavaScript is almost certainly +impractical. And +the answer to the question, “can you make it an ESM module?” appears to be “no”. But +maybe I’m wrong?

+
+ +

Almost anything is possible in software, +but there some things are probably impractical because of how SaxonJS +is built. +

+ +

What I’ve come to realize after several hours is that I +don’t actually understand what problem I’m trying to solve. That usually makes +problems harder.

+ +

For example, it would be easy to package the browser versions of the SaxonJS +libraries into the saxon-js npm package. That would allow +you to use npm install to install it. Once installed, you could +refer to it in HTML like this:

+ +
<script src="node_modules/saxon-js/SaxonJS3.rt.js"></script>
+ +

That’s a non-zero usability improvement over downloading the browser release +yourself and adding it to your project, but it’s an awfully small +improvement. So small, that I conjecture that the request to “put it in the npm +package” means more than that. But I don’t know what more.

+ +

Another request that’s come up a couple of times is whether we should provide +a version that’s been packaged up with webpack. Well. Okay. I spent +a bit of time on that and eventually I managed to get

+ +
npx webpack --config webpack.config.js
+ +

to take src/SaxonJS3.js, chew on it for a while, and produce +dist/SaxonJS3.js. That was a little, uh, underwhelming. I started +with a JavaScript library that I could load in the browser and ended with…a +different one, I guess?

+ +

Then there are suggestions that instead of webpack I should be +trying vite or bun or something else and do I also need +browserify? I don’t know. +I’m about to give up, at least in the short term, but before I do, I thought +I’d see if anyone out there can tell me what I’m missing.

+ +

If you would like to see SaxonJS for the browser packaged up in some +different way, can you tell me how? And why? A small test case would be ideal: +something that isn’t too complicated, that doesn’t work with SaxonJS as it’s +distributed today, that would work if we packaged it in some other way.

+ +
Maps and Recordshttps://blog.saxonica.com/mike/2024/08/maps-and-records.html2024-08-10T09:00:00Z

Maps have proved to be one of the most powerful new features in the 3.0/3.1 family of standards, @@ -2513,151 +2583,4 @@ console.log(`six = ${six}`) Thanks to everyone who took the time to report them!

-
Saxon-CS says Hello Worldhttps://blog.saxonica.com/mike/2021/03/saxon_cs_hello_world.html2021-03-22T10:34:00Z
-

The Saxon product on .NET has been living on borrowed time for a while. - It's built by converting the Java bytecode of the Java product to the - equivalent .NET intermediate language, using the open-source IKVM converter - produced by Jeroen Frijters. Jeroen after many years of devoted service - decided to give up further development and maintenance of IKVM a few - years ago, which didn't immediately matter because the product worked - perfectly well. But then Microsoft in 2019 announced that future - .NET developments would be based on .NET Core, and IKVM has never supported - .NET Core, so we clearly had a problem.

-

There's a team attempting to produce a fork of IKVM that supports - the new .NET, but we've never felt we could put all our eggs in that basket. - In any case, we also have performance problems with IKVM that we've never - managed to resolve: some applications run 5 times slower than Java, and - despite a lot of investigation, we've never worked out why.

-

So we decided to try a new approach, namely Java-to-C# source code - conversion. After a lot of work, we've now achieved successful compilation - and execution of a subset of the the code, and for the first time this - morning, Saxon-CS successfully ran the minimal "Hello World" query.

-

We're a long way from having a product we can release, but we can now - have confidence that this approach is going to be viable.

-

How does the conversion work? We looked at some available tools, - notably the product from Tangible Solutions, and this gave us many - insights into what could be readily converted, and where the remaining - difficulties lay; it also convinced us that we'd be better off writing - our own converter.

-

The basic workflow is:

-
    -
  1. Using the open source JavaParser library, parse the Java code, generate - an XML abstract syntax tree for each module, and annotate the syntax tree with type information - where needed.
  2. -
  3. Using XSLT code, do a cross-module analysis to determine which methods override each other, - which have covariant return types, etc: information needed when generating the C# code.
  4. -
  5. Perform an XSLT transformation on each module to generate C# code.
  6. -
-

We can't convert everything automatically, so there's a range of strategies we use to - deal with the remaining issues:

-
    -
  • Some constructs can simply be avoided. We have trouble, for example, converting - Java method references like Item::toString, because it needs a fair bit of - context information to distinguish the various possible translations. But it's no great - hardship to write the Java code a different way, for example as a lambda expression - item -> item.toString(). Another example is naming conflicts: C# doesn't - allow you, for example, to have a variable with the same name as a method in the containing - class. It's no hardship to rename the variables so the problem doesn't arise.
  • -
  • We can use Java annotations to steer the conversion. For example, sometimes - we want to generate C# code that's completely unrelated to the Java code. We can move - this code into a method of its own, and then add an annotation @CSharpReplaceMethodBody - which substitutes different code for the existing method body. The annotation is copied - into the XML syntax tree by the JavaParser, and our converter can pick it up from there.
  • -
  • We already have a preprocessor mechanism to mark chunks of code as being excluded from - particular variants of the product (such as Saxon-HE or Saxon-PE). We can make further use - of this mechanism. However, it's limited by the fact that the code, prior to preprocessing, - must be valid Java so that it works in the IDE.
  • -
-

The areas that have caused most trouble in conversion are:

-
    -
  • Inner classes. C# has no anonymous inner classes, and its named inner classes correspond - only to Java's static inner classes. Guided by the way the Tangible converter handles these, - we've found a way of translating them that handles most cases, and we've added Java annotations - that provide the converter with extra information where additional complexities arise.
  • -
  • Enumeration types. C#'s enumeration types are much more limited than the equivalent in - Java, because enumeration constants can't have custom methods associated with them. We distinguish - three kinds of enumeration classes: singleton enumerations (used to implement classes that will - only have a single instance); simple enumerations with no custom behaviour, which can be translated - to C# enumerations very directly, and more complex enumerations, that result in the generation - of two separate C# classes, one to hold the enumeration constants, the other to accommodate the - custom methods.
  • -
  • Generics. C# is much stricter about generic types than Java, because the type information - is carried through to run-time, whereas in Java it is used only for compile-time type checking, - which can be subverted by use of casting. So the rule in C# is, either use generics properly, - or don't use them at all. We anticipated some of these issues a year or two ago when we - first started thinking about this project: see - Java Generics Revisited. - The result is that the classes representing XDM sequences and sequence iterators no longer use - generics, which has saved a lot of hassle in this conversion. But there are still many - problems, notably (a) the type inference needed to support Java's diamond operator (as in - new ArrayList<>(), where an explicit type parameter is needed in C#), - and (b) the handling of covariant and contravariant wildcards (? extends T, - ? super T.)
  • -
  • Iterators and enumerators. A for-each loop in Java (for (X x : collection)) - relies on the collection operand implementing the java.lang.Iterable - interface. To translate this into a C# for-each loop (foreach (X x in collection)) - the collection needs to implement IEnumerable. So we convert - all Iterables to IEnumerables, and that means we have to convert Iterators to Enumerators. - Unfortunately Java's Iterator interface doesn't lend itself to static - translation to a c# IEnumerator: in Java, the hasNext() - method is stateless (so you can call it repeatedly), whereas C#'s MoveNext - changes the current position (so you can't). We're fortunate that we only make - modest use of Java iterators; in most of the code, we use Saxon's SequenceIterator - interface in preferance, and this converts without trouble. We examined all the cases - where Saxon explicitly uses hasNext() and next(), and made - sure these followed the discipline of calling hasNext() exactly once - before each call on next(); with this discipline, converting the calls to - MoveNext() and Current works without problems.
  • -
  • Lambda expressions and delegates. In Java, lambda expressions can be used where the - expected type is a functional interface; a functional interface in other ways is just - an ordinary interface, and you can have concrete classes that implement it. So for example - the second argument of NodeInfo.iterateAxis(axis, nodeTest) is a NodeTest, - for which we can supply either a lambda expression (such as it -> it instanceof XSLExpose), - or one of a whole range of implementation classes such as a SchemaElementTest, - which tests whether an element belongs to an XSD-defined substitution group. In C#, lambda expressions - can only be used when the expected type is a delegate, and if the expected type is a delegate, - then (in effect) a lambda expression is the only thing you can supply. The way we've handled this - is generally to make the main method (like iterateAxis() expect a non-delegate - interface, and then to supply a proxy implementation of this interface that accepts a delegate. - It's not a very satisfactory solution, but it works.
  • - -
-

One area where we could have had trouble, but avoided it, is in the use of the Java - CharSequence class. I wrote about this issue last year at - String, - CharSequence, IKVM, and .NET. As described in that article, we decided to eliminate - our dependence on the CharSequence interface. For a great many internal uses of strings - in Saxon, we now use a new interface UnicodeString which as the name implies is much - more Unicode-friendly than Java's String and CharSequence. It also reduces - memory usage, especially in the TinyTree. But there is a small overhead in the places where we - have to convert strings to or from UnicodeStrings, which we can't hide entirely: - it represents about 5% on the bottom line. But it does make all this code much easier to port - between Java and C#.

- -

What about dependencies? So far we've just been tackling the Saxon-HE code base, and that has - very few dependencies that have caused any difficulty. Most of the uses of standard Java library - classes (maps, lists, input and output streams, and the like) are handled by the converter, - simply translating calls into the nearest C# equivalent. In some cases such as java.util.Properties - we've written en emulation of the Java interface (or the parts of it that we actually use). In other - cases we've redirected calls to helper methods. For example we don't always have enough type - information to know whether Java's List.remove() should be translated to - List.Remove() or List.RemoveAt(); so instead we generate a call on - a static helper method, which makes the decision at runtime based on the type of the - supplied argument.

- -

The only external dependency we've picked up so far is for handling big decimal numbers. - We're currently evaluating the BigDecimal library from Singulink, which appears - to offer all the required functionality, though its philosophy is sufficiently different - from the Java BigDecimal to make conversion non-trivial.

- -

One thing I should stress is that we haven't written a general purpose Java to C# converter. - Our converter is designed to handle the Saxon codebase, and nothing else. Some of the - conversion rules are specific to particular Saxon classes, and as a general principle, - we only convert the subset of the language and of the class library that we actually need. - Some of the conversion rules assume that the code is written to the coding conventions - that we use in Saxon, but which might not be followed in other projects.

- -

So, Hello World to Saxon-CS. There's still a lot of work to do, but we've reached a significant - milestone.

- -
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/authors.html b/docs/authors.html index b04c5ef..618d5ff 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -16,7 +16,7 @@

Author index

- +

Authors: Michael Kay, Norm Tovey-Walsh, O’Neil Delpratt

@@ -687,6 +687,13 @@

Norm Tovey-Walsh

- +
@@ -37,6 +37,7 @@
  • August
  • diff --git a/docs/mike/2024/08/maps-and-records.html b/docs/mike/2024/08/maps-and-records.html index c8b1379..8e3ae96 100644 --- a/docs/mike/2024/08/maps-and-records.html +++ b/docs/mike/2024/08/maps-and-records.html @@ -115,5 +115,5 @@ -
+
\ No newline at end of file diff --git a/docs/mike/atom.xml b/docs/mike/atom.xml index 71a8c62..1c4e55c 100644 --- a/docs/mike/atom.xml +++ b/docs/mike/atom.xml @@ -1,4 +1,4 @@ -Saxon diariesMichael Kay’s bloghttps://blog.saxonica.com/mike/atom.xml2024-08-10T10:20:43.477637ZMichael KayMaps and Recordshttps://blog.saxonica.com/mike/2024/08/maps-and-records.html2024-08-10T09:00:00Z
+Saxon diariesMichael Kay’s bloghttps://blog.saxonica.com/mike/atom.xml2024-08-16T14:21:26.28275ZMichael KayMaps and Recordshttps://blog.saxonica.com/mike/2024/08/maps-and-records.html2024-08-10T09:00:00Z

Maps have proved to be one of the most powerful new features in the 3.0/3.1 family of standards, diff --git a/docs/norm/2024/08/16-packaging.html b/docs/norm/2024/08/16-packaging.html new file mode 100644 index 0000000..4a8a867 --- /dev/null +++ b/docs/norm/2024/08/16-packaging.html @@ -0,0 +1,87 @@ + + + + Packaging SaxonJS for the browser + + + + + +

Packaging SaxonJS for the browser

+ + +

Over the years, there have been several requests to improve the way that +SaxonJS is packaged for the browser. In the run up towards SaxonJS 3.0 (real +soon now, I promise), I’ve spent a few hours trying to see if that’s possible.

+ +

For SaxonJS on Node.js, things seem to be working the way users expect. You +can install SaxonJS, and xslt3.js, the command-line XSLT processor, +with npm install. Then you can use them as you would other Node.js +modules and applications.

+ +

For the browser, things are a little less clear.

+ +

I’ll start out by observing that SaxonJS is a large(ish) collection of mostly +plain JavaScript files. There are a mixture of techniques used, as you might +expect from a code base that stretches back seven or eight years (roughly ∞ in +JavaScript years). This code is compiled by the Closure Compiler to +produce the release artifacts.

+ +
+

Aside: Producing TypeScript instead of JavaScript is almost certainly +impractical. And +the answer to the question, “can you make it an ESM module?” appears to be “no”. But +maybe I’m wrong?

+
+ +

Almost anything is possible in software, +but there some things are probably impractical because of how SaxonJS +is built. +

+ +

What I’ve come to realize after several hours is that I +don’t actually understand what problem I’m trying to solve. That usually makes +problems harder.

+ +

For example, it would be easy to package the browser versions of the SaxonJS +libraries into the saxon-js npm package. That would allow +you to use npm install to install it. Once installed, you could +refer to it in HTML like this:

+ +
<script src="node_modules/saxon-js/SaxonJS3.rt.js"></script>
+ +

That’s a non-zero usability improvement over downloading the browser release +yourself and adding it to your project, but it’s an awfully small +improvement. So small, that I conjecture that the request to “put it in the npm +package” means more than that. But I don’t know what more.

+ +

Another request that’s come up a couple of times is whether we should provide +a version that’s been packaged up with webpack. Well. Okay. I spent +a bit of time on that and eventually I managed to get

+ +
npx webpack --config webpack.config.js
+ +

to take src/SaxonJS3.js, chew on it for a while, and produce +dist/SaxonJS3.js. That was a little, uh, underwhelming. I started +with a JavaScript library that I could load in the browser and ended with…a +different one, I guess?

+ +

Then there are suggestions that instead of webpack I should be +trying vite or bun or something else and do I also need +browserify? I don’t know. +I’m about to give up, at least in the short term, but before I do, I thought +I’d see if anyone out there can tell me what I’m missing.

+ +

If you would like to see SaxonJS for the browser packaged up in some +different way, can you tell me how? And why? A small test case would be ideal: +something that isn’t too complicated, that doesn’t work with SaxonJS as it’s +distributed today, that would work if we packaged it in some other way.

+ +
+ \ No newline at end of file diff --git a/docs/norm/2024/08/index.html b/docs/norm/2024/08/index.html new file mode 100644 index 0000000..e19d60e --- /dev/null +++ b/docs/norm/2024/08/index.html @@ -0,0 +1,9 @@ + + + + + Redirect + + Redirect. + + \ No newline at end of file diff --git a/docs/norm/2024/index.html b/docs/norm/2024/index.html new file mode 100644 index 0000000..e19d60e --- /dev/null +++ b/docs/norm/2024/index.html @@ -0,0 +1,9 @@ + + + + + Redirect + + Redirect. + + \ No newline at end of file diff --git a/docs/norm/atom.xml b/docs/norm/atom.xml index 7d6f782..31c093b 100644 --- a/docs/norm/atom.xml +++ b/docs/norm/atom.xml @@ -1,4 +1,74 @@ -Saxon Chronicles(in a Norman style)https://blog.saxonica.com/norm/atom.xml2024-08-10T10:20:43.58179ZNorm Tovey-WalshAnnouncing Saxon 12.5!https://blog.saxonica.com/announcements/2024/07/saxon-12.5.html2024-07-02T11:30:00Z
+Saxon Chronicles(in a Norman style)https://blog.saxonica.com/norm/atom.xml2024-08-16T14:21:26.391867ZNorm Tovey-WalshPackaging SaxonJS for the browserhttps://blog.saxonica.com/norm/2024/08/16-packaging.html2024-08-16T15:20:00Z
+ + +

Over the years, there have been several requests to improve the way that +SaxonJS is packaged for the browser. In the run up towards SaxonJS 3.0 (real +soon now, I promise), I’ve spent a few hours trying to see if that’s possible.

+ +

For SaxonJS on Node.js, things seem to be working the way users expect. You +can install SaxonJS, and xslt3.js, the command-line XSLT processor, +with npm install. Then you can use them as you would other Node.js +modules and applications.

+ +

For the browser, things are a little less clear.

+ +

I’ll start out by observing that SaxonJS is a large(ish) collection of mostly +plain JavaScript files. There are a mixture of techniques used, as you might +expect from a code base that stretches back seven or eight years (roughly ∞ in +JavaScript years). This code is compiled by the Closure Compiler to +produce the release artifacts.

+ +
+

Aside: Producing TypeScript instead of JavaScript is almost certainly +impractical. And +the answer to the question, “can you make it an ESM module?” appears to be “no”. But +maybe I’m wrong?

+
+ +

Almost anything is possible in software, +but there some things are probably impractical because of how SaxonJS +is built. +

+ +

What I’ve come to realize after several hours is that I +don’t actually understand what problem I’m trying to solve. That usually makes +problems harder.

+ +

For example, it would be easy to package the browser versions of the SaxonJS +libraries into the saxon-js npm package. That would allow +you to use npm install to install it. Once installed, you could +refer to it in HTML like this:

+ +
<script src="node_modules/saxon-js/SaxonJS3.rt.js"></script>
+ +

That’s a non-zero usability improvement over downloading the browser release +yourself and adding it to your project, but it’s an awfully small +improvement. So small, that I conjecture that the request to “put it in the npm +package” means more than that. But I don’t know what more.

+ +

Another request that’s come up a couple of times is whether we should provide +a version that’s been packaged up with webpack. Well. Okay. I spent +a bit of time on that and eventually I managed to get

+ +
npx webpack --config webpack.config.js
+ +

to take src/SaxonJS3.js, chew on it for a while, and produce +dist/SaxonJS3.js. That was a little, uh, underwhelming. I started +with a JavaScript library that I could load in the browser and ended with…a +different one, I guess?

+ +

Then there are suggestions that instead of webpack I should be +trying vite or bun or something else and do I also need +browserify? I don’t know. +I’m about to give up, at least in the short term, but before I do, I thought +I’d see if anyone out there can tell me what I’m missing.

+ +

If you would like to see SaxonJS for the browser packaged up in some +different way, can you tell me how? And why? A small test case would be ideal: +something that isn’t too complicated, that doesn’t work with SaxonJS as it’s +distributed today, that would work if we packaged it in some other way.

+ +
Announcing Saxon 12.5!https://blog.saxonica.com/announcements/2024/07/saxon-12.5.html2024-07-02T11:30:00Z

Announcing Saxon 12.5!

The Saxon 12.5 maintenance release has been published. This is a diff --git a/docs/norm/index.html b/docs/norm/index.html index dab054e..3261ba1 100644 --- a/docs/norm/index.html +++ b/docs/norm/index.html @@ -28,6 +28,10 @@

Archive

    +
  • 2024 +
  • 2023
    • October, 2023
      • SaxonJS 2.5 ** NO LONGER SUPPORTED **, October 06, 2023 at 01:00p.m.
      • diff --git a/docs/oneil/atom.xml b/docs/oneil/atom.xml index 9eabfc8..3d300ab 100644 --- a/docs/oneil/atom.xml +++ b/docs/oneil/atom.xml @@ -1,4 +1,4 @@ -O’Neil Delpratt’s BlogSaxon, XSLT, XQuery and XML relatedhttps://blog.saxonica.com/oneil/atom.xml2024-08-10T10:20:43.657708ZO’Neil DelprattSaxon/C - Saxon for the C/C++ and PHP platformshttps://blog.saxonica.com/oneil/2013/12/saxonc---saxon-for-the-cc-and-php-platforms.html2013-12-02T18:11:25Z
        +O’Neil Delpratt’s BlogSaxon, XSLT, XQuery and XML relatedhttps://blog.saxonica.com/oneil/atom.xml2024-08-16T14:21:26.473207ZO’Neil DelprattSaxon/C - Saxon for the C/C++ and PHP platformshttps://blog.saxonica.com/oneil/2013/12/saxonc---saxon-for-the-cc-and-php-platforms.html2013-12-02T18:11:25Z

        At the XML Summer School 2013, Tony Graham presented a lightning talk about life after libxslt 1.0.  I was not present for this summer school, but it was clear from the diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 2238bd3..28cd061 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -2,770 +2,774 @@ https://blog.saxonica.com/announcements/2023/03/saxon-12.1.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/announcements/2023/05/saxon-12.2.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/announcements/2023/07/saxon-12.3.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/announcements/2023/08/saxon-11.6.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/announcements/2023/10/saxonjs-2.6.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/announcements/2023/11/saxon-12.4.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/announcements/2023/12/saxonc-12.4.1.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/announcements/2024/01/saxonc-12.4.2.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/announcements/2024/07/saxon-12.5.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/apple-touch-icon.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/css/announcements.css - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/css/blog.css - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/css/michael-kay.css - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/css/norm-tovey-walsh.css - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/css/oneil-delpratt.css - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/favicon.ico - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/icon-192.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/icon-512.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/img/annheader.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/img/mkheader.gif - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/img/odheader.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/img/saxonica.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/img/sccard.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/img/scheader.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/img/scicon-032.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/img/sitecard.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/manifest.webmanifest - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/02/comparability.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/02/finite-state-machines.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/02/floating-point-numbers-again.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/02/formatting-of-floating-point-numbers.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/02/regex-libraries-in-java-and-net.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/02/thanks-for-the-compliment.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/02/thoughts-on-schema-awareness.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/02/w3c-working-groups-in-florida.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/03/apis-for-xml-processing.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/03/conference-season-approaching.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/04/how-not-to-manage-crypto-keys.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/04/schema-aware-xmark.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/04/xmark-q12-examined-further.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/05/wrapping-the-net-dom.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/05/xqj-republished.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/06/killing-bugs.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/07/experiments-with-compilation.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/07/push-and-pull-parsing.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/07/push-and-pull.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/07/streaming-mode-on-large-documents.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/07/tuning-the-chess-fo-stylesheet.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/07/xime-p-in-chicago.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/08/tail-recursive-functions.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/08/zounds-i-was-never-so-bethumpd-with-words.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/09/compiling-the-knights-tour.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/09/more-experiments-with-compilation.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/10/altova-mudslinging.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/10/choosing-java-class-names.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/10/progress-on-xquery-compilation.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/10/still-compiling-the-knights-tour.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/11/first-compiled-xmark-results.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/12/compiling-q10.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2006/12/new-w3c-xml-schema-test-suite.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/01/how-not-to-fold-constants.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/01/xml-schema-tests-progress-report.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/02/unexpected-flattery.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/03/assertions-in-xml-schema.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/03/saxon-vs-xalan-performance-and-dom.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/04/path-expressions-revisited.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/06/a-new-xqj-draft.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/09/transforming-20-gigabytes.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/11/final-draft-of-xqj.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/12/implementing-xquery-update.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2007/12/progress-on-xquery-update.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/01/further-progress-on-xquery-update.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/02/xquery-update-and-node-identity.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/07/document-projection.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/09/a-stylesheet-conversion.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/09/compile-time-performance.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/09/join-optimization.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/09/just-in-time-optimization.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/09/more-thoughts-on-compile-time-performance.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/09/theres-an-r-in-the-month.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/09/tweaking-the-tinytree.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/10/software-patents.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/10/xml-schema-allowing-new-lexical-forms.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/11/schema-awareness-and-xmark-performance.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/11/tei-conference.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/12/bugs-that-dont-crawl-out-of-the-woodwork.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2008/12/ten-reasons-why-saxon-xquery-is-fast.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/02/another-five-finger-performance-exercise.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/02/some-threading-tests.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/02/streaming-templates.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/05/all-nodes-untyped.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/05/repackaging-saxon.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/06/saxon-repackaging.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/06/the-gnu-public-license.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/08/beyond-saxon-92.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/09/analyzing-dependencies-in-a-class-library-a-use-case-for-xslt-streaming.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/11/moving-forward-with-streaming-templates.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/12/intel-joins-the-club.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/12/on-the-streamability-of-sectionhead.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/12/patents-an-open-letter-to-my-mp.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2009/12/streaming-templates---towards-a-more-coherent-design.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2010/01/importing-a-stylesheet-module-repeatedly.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2010/01/pipedreaming-could-xpath-have-been-better.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2010/01/unicode-regular-expressions-and-java.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2010/05/the-first-saxon-deadlock.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2010/06/parameterized-validation.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2010/06/the-ten-most-common-xslt-programming-mistakes.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2010/11/compiling-saxon-using-gwt.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2010/11/cutting-saxon-down-to-size.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2010/11/peer-to-patent-should-i-take-part.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2010/11/tpac-the-morning-after.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2011/05/bytecode-generation.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2011/07/tuples.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2012/01/a-new-regex-engine.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2012/01/maps.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2012/02/taking-saxon-ce-forward.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2012/05/a-new-api-for-access-to-schema-information.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2012/06/saxon-ce-is-10-today-1.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2012/08/ftanml---a-new-markup-language.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2012/09/comparing-dom-and-other-object-models.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2012/12/keys-and-maps.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2013/02/xslt-in-microxml.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2013/03/result-documents-validation-and-multi-threading.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2013/03/whats-new-in-saxon-95.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2013/09/reducing-the-size-of-saxon-ce.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2013/09/stripping-the-dom.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2014/02/another-regex-rewrite.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2014/06/sharing-key-indexes.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2014/11/redesigning-the-saxon-expression-tree.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2015/02/functions-function-calls-function-items.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2015/02/how-long-is-a-piece-of-string.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2015/06/a-redesign-of-the-namepool.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2015/06/another-look-in-the-namepool.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2015/06/lazy-evaluation.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2015/09/parent-pointers-in-the-saxon-expression-tree.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2016/02/introducing-saxon-js.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2016/06/improving-compile-time-performance.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2016/09/tuple-types-and-type-aliases.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2016/12/guaranteed-streamability.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2017/02/bugs-how-well-are-we-doing.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2017/11/transforming-json.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2018/02/could-we-write-an-xsd-schema-processor-in-xslt.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2018/03/capturing-accumulators.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2018/03/diagnostics-on-type-errors.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2018/04/navigating-xml-trees-using-java-streams.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2018/06/the-receiver-pipeline.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2019/02/representing-namespaces-in-xdm-tree-models.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2019/05/a-new-push-event-api.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2019/10/alphacodes-for-sequence-types.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2020/01/java-generics-revisited.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2020/02/the-java-class-hierarchy-for-xpath-type-objects.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2020/07/string-charsequence-ikvm-and-net.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2020/10/29-xslt_update_some_ideas.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2020/11/14-qt40-proposal-comments.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2020/11/19-arrow-expressions.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2021/03/saxon_cs_hello_world.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2021/03/zeno_chains.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2021/06/arrays.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2022/05/except-patterns.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2022/05/xml-vs-json.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2023/06/schema-modules.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2023/07/schema-safety.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2023/10/eot.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/mike/2024/08/maps-and-records.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2020/10/01-hello.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2020/10/02-maven.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2020/10/06-atom.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2020/10/27-helloWorld.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2020/10/29-maven.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2020/11/15-helloWorldNode.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2021/01/08-saxon-js-203.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2021/05/11-saxon-js-22.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2022/04/19-shoelace.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2022/06/15-saxonjs.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2022/08/09-net6.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2022/12/21-net6.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2022/12/23-saxon-c.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2022/12/HelloWorld.dmg - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2022/12/img/app-build.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2022/12/img/app-main.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2022/12/img/app-password.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2022/12/img/app-wait.png - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2023/03/16-weblog.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2023/08/16-xmldoclet.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2023/08/24-icu4j.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2023/08/31-infrastructure.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2023/09/14-xmlresolver.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2023/10/02-saxonica.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/norm/2023/10/06-no-longer-supported.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 + + + https://blog.saxonica.com/norm/2024/08/16-packaging.html + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/oneil/2012/12/performance-measures-of-the-word-ladders-problem-in-xslt.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/oneil/2013/03/experiences-with-client-side-xsltforms-and-server-side-servlex.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00 https://blog.saxonica.com/oneil/2013/12/saxonc---saxon-for-the-cc-and-php-platforms.html - 2024-08-10T11:17:46+01:00 + 2024-08-16T15:18:17+01:00