I've spent a little bit of time trying to figure out what's going on, and I can see that:
* The issue only happens when there is xmlns="http://docbook.org/ns/docbook" on the root <book> element * It is definitely picking up the contents of the $ebnf.assignment param from "/usr/share/xml/docbook/stylesheet/docbook-xsl/html/param.xsl" The shortest input for reproduction I have found is therefore this: <?xml version="1.0"?> <book xmlns="http://docbook.org/ns/docbook"></book> Something about the namespace removal (mode="stripNS") is picking up the $ebnf.assignment param. I haven't figured out why (it might be a bug in libxslt, for example), but this XSLT appears to be troublesome: <xsl:param name="ebnf.assignment"> <code>::=</code> </xsl:param> However, I have found that replacing it with the following fixes it, without breaking the output for EBNF output (EBNF HTML output is the same before and after): <xsl:param name="ebnf.assignment"> <xsl:text disable-output-escaping="yes"><code>::=</code></xsl:text> </xsl:param> The above was all conducted on Ubuntu 16.04.1 LTS with docbook-xsl 1.79.1+dfsg-1, and xsltproc 1.1.28-2.1. I would expect the same fix to apply to Debian.