I have occasion to edit and build a DocBook 5 document under both macOS Catalina and Fedora 30.
On macOS I've used homebrew to install the docbook, docbook-xsl, and
libxslt (for xsltproc), and fop formulas, and changed my PATH to
include the directory where brew installed
xsltproc. which will then
/usr/local/etc/xml/catalog to find files, in which brew installed
links to the docbook schemas and xsl stylesheets.
On Fedora I've used
dnf to install the docbook5-schemas,
docbook5-style-xsl, and fop packages.
The document builds fine on both OSes, but Emacs doesn't validate
properly against the DocBook RELAX NG schemas, because the
supplied with Emacs (26.3 on macOS, 26.2 on Fedora) are for DocBook 4.
However, Emacs will look at a
schemas.xml file in the same directory
as the file you are editing to find the
*.rnc files. Unfortunately,
of course, they have different locations on macOS with brew and on
So I wrote a script, generate-schemas-xml, in bash using xmlcatalog to
look up the translation for the URI for the RELAX NG compiled schema
file and generate the
schemas.xml file and substitute the translation
into the file:
#! /usr/bin/env bash schema_location="$(xmlcatalog "" "http://docbook.org/xml/5.0/rng/docbookxi.rnc" | grep "^file:///" | sed 's#^file://##')" cat >schemas.xml <<EOF <locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> <namespace ns="http://docbook.org/ns/docbook" uri="$schema_location"/> </locatingRules> EOF
Then I had my Makefile generate the
schemas.xml file if it was missing.
It was more complicated that I'd have liked, but it does work.