Hello. My name is Norm Tovey-Walsh.
I’ve been doing the web thing for a while and I have stuff all over the place, so of course I decided to make a another place. This is my (new) homepage, or pointers to all of my other homepages, if you prefer to look at it that way.
Professionally, I work for Saxonica, Ltd in the UK where I’m norm@saxonica.com. I occasionally write blog posts about work stuff.
In addition to working on the Saxonica suite of products, I maintain the XML Resolver in Java and C# The XML Resolver provides XML Catalog-based resource resolution starting in SaxonJ 11 and SaxonCS. It is also used in SaxonC and the PHP and Python libraries starting in version 12.
To help get started with SaxonJS, I pulled together a couple of example projects, one for SaxonJS in the browser and one for SaxonJS on Node.js. I wrote SlidesJS to present slides on the web. This was inspired by a SaxonJS tutorial that Debbie Lockett and I presented at Declarative Amsterdam 2021.
I’m a co-chair of the W3C’s XQuery and XSLT Extensions Community Group (known informally as QT4CG) and serve as its unofficial production manager.
I live in Swansea, Wales 🏴 with my wife Bethan who does languages and linguistics and lexicography and programming and most everything else. At the time of this writing she has only one more PhD than I have. (Pedantically, she’ll argue that the first one is a DPhil, not a PhD, but never mind.)
When I’m not working, I’m
ndw@nwalsh.com (or you may know me as norm@tovey-walsh.com, that
works too). My PGP key is available if you want
to verify that a digitally signed email came from me, or if you want to send
me an encrypted message.
I scribble periodically on a
personal weblog.
(I used to write on another one,
but
it died.)
My previous
homepage is out there too.
You’ll find me here and there on the web.
I toot from @ndw@toot.wales.
I hang out on the
xml.com Slack and
some Discord channels. You can reach
me with WhatsApp and Signal.
I use
GitHub and
GitLab and probably a few others.
Sometimes I give talks at conferences. I’m on the conference committee for the Balisage markup conference.
- Talks
-
Ambiguity in iXML and how to control it at Balisage, 31 July 2023
-
Saxon JS 3.0: major new functionality a late breaking, sponsor presentation at Balisage, 1 August 2024
I dabble a bit on other projects in my *cough* free time. (The list here is alphabetical by the way, there’s no other significance to the order. I work on things when I work on them.)
- DocBook
-
DocBook is a markup vocabulary for technical documentation. I’m a member of the DocBook Technical Committee. Among other things, I work on the DocBook vocabulary, wrote DocBook: The Definitive Guide, and have worked on three generations of XSLT stylesheets for DocBook, most recently DocBook: xslTNG.
- Emacs
-
Emacs is my editor of choice, though I do use IntelliJ for Java and Scala, I confess. When I was dealing with lots of international teleconferences, I wrote wwtime to help answer “what time is the call” unambigously. And I wrote xmlunicode for inserting Unicode characters by Unicode name or ISO entity name. Recent versions of Emacs have added similar features, but without the support for entity names.
I’m also an Org-mode fan, using it and Org-roam on a daily basis. I use org-to-xml to extract XML from Org-mode files when I want to process them further. That’s how most of my blog posts are created.
I wrote some code to generate random quotations at the bottom of email messages.
- Gradle
-
Gradle is my current build tool of choice; it’s better than the alternatives I’ve tried and I’ve become used to its idiosyncrasies (mostly). I run Saxon with a plugin. My version is a fairly substantial fork, and I want to rework it for Saxon 11 and later, but I haven’t yet. I have plugins for XML Calabash version 1.x and version 3.0 too. I use relaxng-gradle for RELAX NG validation from Gradle.
I use Docker containers for lots of things these days and I wrote gradle-docker-container-plugin to help manage Docker instances from Gradle scripts.
- Invisible XML
-
Invisible XML is a language for describing the implicit structure of data. I’m a member of the Invisible Markup Community Group and the author of a suite of iXML products on the JVM hosted at nineml.org: CoffeeGrinder, an API for Earley and GLL parsing; CoffeeFilter, an API for Invisible XML parsing; CoffeePot, a command-line Invisible XML processor; CoffeeSacks, an Invisible XML extension functions for Saxon; and CoffeePress, an Invisible XML extension step for XML Calabash, my XProc 3.0 processor.
Those of us interested in iXML pragmas are coordinating at gyfre.org.
- MarkLogic
-
In a previous life, I worked on a lot of MarkLogic tools. I expect bit rot is setting in on some of them, but they’re still out there.
- Miscellany
-
Maybe these could be categorized better, but in the short term:
- I never really came to grips with Maven, so I wrote a little Python library, javaconfig, that attempts to manage classpaths with Maven. It seems to mostly work.
- I use sshtunnel to manage SSH tunnels.
- I wrote webserver to manage web servers in Docker containers. This is really useful.
- I maintain a small collection of Dash docsets
- I curate a collection of cocktail recipes
For something completely different: a bit of eye candy. My wordclock displays the time of day in words. It was inspired by qlocktwo.
- Photography
-
I have an account on Flickr, but mostly these days I post photographs on photos.nwalsh.com. I’m interested in seeing if I can use something like Pixelfed to make my photo site a little more social. (My first attempts at running it in Docker were…not successful.)
- RELAX NG
-
Sometimes I work on RELAX NG things. I’ve done a small amount of tinkering with Jing and Trang and relaxng.org, but to be honest it’s been mostly aspirational rather than practical.
- TeX
-
There aren’t many vestiges left of my early days in the TeX world. I wrote Making TeX Work for O’Reilly back in the previous millenium. Much to my surprise, some ancient online help pages I built appear to still be useful. I’m hoping to get back to TeX some day. I publish Org-mode pages with it occasionally.
- XML
-
I wrote a SAX filter to provide xml:id support, though I doubt that’s much needed anymore. I also wrote xjparse to test DTD and XML Schema validation. The html5parse project wraps a command-line tool around the Validator.nu HTML5 parser.
- XProc
-
XProc is an XML pipeline language. I was chair of the original XML Processing Model Working Group and an editor on the 1.0 specification. I’m currently a member of the XProc Next Community Group and a member of the editorial team. I implemented XML Calabash (1.x) an XProc 1.0 processor and am currently implementing XML Calabash (3.0). See xmlcalabash.com.
- XSLT
-
The xslt-relax-ng project is a unified RELAX NG grammar for any version of XSLT.
I use xsltexplorer to analyze complicated stylesheets. It provides a detailed breakdown of what templates, functions, modes, etc. are used and where. I wrote it mostly to make the DocBook: xslTNG Reference Guide more useful.
Unsurprisingly, I use Saxon for a lot of my projects and sometimes the simplest thing to do is just wrap a little JVM technology up in an extension. The sinclude project is an XInclude processor. It’s a lot more flexible than what’s provided by the Xerces parser with the
-xi
flag. I use scommonmark to transform Markdown. It’s just a wrapper around the org.commonmark CommonMark parser. I wrote great-circle-xslt to support a couple mapping-related projects. It computes the great circle distance between two latitude/longitude pairs.
And other stuff too old or too insignificant to bother mentioning.
Share and enjoy.
Project index
An index of all the links and resources described above and a few related resources.
Books
- DocBook: The Definitive Guide, published by O’Reilly and XML Press
- Making TeX Work, a book from the previous millenium (out of print)
DocBook
- DocBook, The Source for Documentation™
- docbook, the DocBook schema repository
- DocBook, projects related to DocBook
- DocBook: The Definitive Guide, published by O’Reilly and XML Press
- DocBook: xslTNG, XSLT 3.0 stylesheets for transforming DocBook to HTML, EPUB, and print
- DocBook: xslTNG Reference Guide, reference documentation for DocBook: xslTNG
Docker
- gradle-docker-container-plugin, a plugin for running Docker from Gradle
- webserver, manages web servers in Docker containers
Emacs
- org-to-xml, converts Org-mode files to XML
- wwtime, for publishing times in multiple time zones
- xml-quotes, generates random quotations from an XML file
- xmlunicode, to insert XML characters by Unicode name or ISO entity name
- ndw@nwalsh.com, my personal email
- norm@saxonica.com, my work email
- norm@tovey-walsh.com, also my personal email
Saxonica
- SaxonC, an XSLT 3.0+ processor library in C++
- SaxonCS, an XSLT 3.0+ processor on .NET
- Saxonica, projects from Saxonica
- Saxonica, Ltd, my employer
- SaxonJ, an XSLT 3.0+ processor on the JVM
- SaxonJS, an XSLT 3.0 processor for Node and the browser
- XML Resolver, projects related to resource resolution with catalogs
GitHub organizations
- DocBook, projects related to DocBook
- InvisibleXML, projects related to Invisible XML
- NineML, projects related to the NineML suite of Invisible XML tools
- QT4CG, projects related to the XSLT 4.0 extensions community group
- RELAX NG, projects related to XML grammar-based validation
- Saxonica, projects from Saxonica
- XML Resolver, projects related to resource resolution with catalogs
- XMLCalabash, projects related to XML Calabash 3.0
- XProc, projects related to XProc
Gradle
- gradle-docker-container-plugin, a plugin for running Docker from Gradle
- gradle-plugin, a Gradle plugin to run XML Calabash 3.0 pipelines
- relaxng-gradle, a plugin for RELAX NG validation from Gradle
- saxon-gradle, a plugin for running Saxon from Gradle
- xmlcalabash1-gradle, a Gradle plugin to run XML Calabash 1.0 pipeline
Invisible XML
- CoffeeFilter, an API for Invisible XML parsing
- CoffeeGrinder, an API for Early and GLL parsing
- CoffeePot, a command-line Invisible XML processor
- CoffeePress, an Invisible XML extension step for XML Calabash
- CoffeeSacks, an Invisible XML extension functions for Saxon
- gyfre.org, vendor-neutral specifications of pragmas for Invisible XML
- InvisibleXML, projects related to Invisible XML
- invisiblexml.org, the Invisible XML specification and related resources
- nineml.org, the NineML family of Invisible XML tools
Miscellany
- dash.nwalsh.com, Dash docsets
- drinks.nwalsh.com, a collection of cocktail recipes
- javaconfig, attempts to manage Maven classpaths
- sshtunnel, manages ssh tunnels
- webserver, manages web servers in Docker containers
- wordclock, a web clock
NineML
- CoffeeFilter, an API for Invisible XML parsing
- CoffeeGrinder, an API for Early and GLL parsing
- CoffeePot, a command-line Invisible XML processor
- CoffeePress, an Invisible XML extension step for XML Calabash
- CoffeeSacks, an Invisible XML extension functions for Saxon
- NineML, projects related to the NineML suite of Invisible XML tools
- nineml.org, the NineML family of Invisible XML tools
Photography
- Flickr
- photos.nwalsh.com, my photo site
RELAX NG
- Jing and Trang, RELAX NG validation and transformation tools
- RELAX NG, projects related to XML grammar-based validation
- relaxng-gradle, a plugin for RELAX NG validation from Gradle
- relaxng.org, the RELAX NG website
- xslt-relax-ng, a RELAX NG grammar for XSLT 1.0, 2.0, and 3.0
SaxonJ
- CoffeeSacks, an Invisible XML extension functions for Saxon
- great-circle-xslt, calculate great-circle distances
- saxon-gradle, a plugin for running Saxon from Gradle
- scommonmark, a CommonMark processor
- sinclude, an XInclude processor
- XML Resolver, projects related to resource resolution with catalogs
- xmlresolver, the XML Resolver in Java
- xmlresolvercs, the XML Resolver in C#
SaxonJS
- helloWorldJS, a template project for SaxonJS in the browser
- helloWorldNodeJS, a template project for SaxonJS on Node.js
- SaxonJS-Tutorial-2021, a SaxonJS tutorial
- SlidesJS, SaxonJS-based slide presentation tool
Social media (and related)
- @ndw@toot.wales, my Mastodon identity
FaceBook, deleted- Flickr
- GitHub
- GitLab
LinkedIn, deletedTwitter, deleted- xml.com Slack
TeX
- Making TeX Work, a book from the previous millenium (out of print)
Weblogs
- Norman.Walsh.name, expired weblog
- Saxon Chronicles (in a Norman style), work weblog
- So, personal weblog
Web sites
- dash.nwalsh.com, Dash docsets
- drinks.nwalsh.com, a collection of cocktail recipes
- gyfre.org, vendor-neutral specifications of pragmas for Invisible XML
- nineml.org, the NineML family of Invisible XML tools
- norman.walsh.name, my former weblog, it died
- nwalsh.com, a previous home page
- qt4cg.org, the QT4CG homepage
- relaxng.org, the RELAX NG website
- so.nwalsh.com, my personal weblog
- tdg.docbook.org, DocBook: The Definitive Guide
- wordclock.nwalsh.com, a clock
- xjparse.org, a command-line XML validator
- xmlcalabash.com, the XML Calabash homepage
- xmlcatalogs.org, the XML Catalogs homepage
- xmlresolver.org, the XML Resolver homepage
- xproc.org, the XProc homepage
- xsltng.docbook.org, reference documentation for DocBook: xslTNG
Working groups
- DocBook Technical Committee
- Invisible Markup Community Group
- XQuery and XSLT Extensions Community Group
XML
- html5parse, an HTML to XML converter
- sinclude, an XInclude processor
- xmlidfilter, a SAX filter to support xml:id
- (And most of the rest of the things on this page, TBH.)
XML Catalogs
- XML Resolver, projects related to resource resolution with catalogs
- xmlcatalogs.org, the XML Catalogs homepage
- xmlresolver, the XML Resolver in Java
- xmlresolver.org, the XML Resolver homepage
- xmlresolvercs, the XML Resolver in C#
XProc
- CoffeePress, an Invisible XML extension step for XML Calabash
- gradle-plugin, a Gradle plugin to run XML Calabash 3.0 pipelines
- XML Calabash (1.0), an implementation of XProc 1.0
- XML Calabash (3.0), an implementation of XProc 3.0
- XMLCalabash, projects related to XML Calabash 3.0
- xmlcalabash1-gradle, a Gradle plugin to run XML Calabash 1.0 pipeline
- XProc, projects related to XProc
XSLT
- DocBook: xslTNG, XSLT 3.0 stylesheets for transforming DocBook to HTML, EPUB, and print
- great-circle-xslt, calculate great-circle distances
- scommonmark, a CommonMark processor
- sinclude, an XInclude processor
- xslt-relax-ng, a RELAX NG grammar for XSLT 1.0, 2.0, and 3.0
- xsltexplorer, a tool to analyze XSLT stylesheets
Colophon
These pages are mostly authored in XHTML. A bit of transformation is done with XSLT (both server-side and client-side) to simplify authoring and provide a responsive design. The tile motif is decorative.