How would I cleanly set the doctype of a file to HTML5 <!DOCTYPE html>
via XSLT (in this case with collective.xdv)
The following, which is the best my Google foo has been able to find:
<xsl:output
method="html"
doctype-public="XSLT-compat"
omit-xml-declaration="yes"
encoding="UTF-8"
indent="yes" />
produces:
<!DOCTYPE html PUBLIC "XSLT-compat" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
You must use XHTML 1.0 Strict as the doctype if you want XHTML output consistent with HTML5, libxml2's xml serializer has a special output mode triggered by the XHTML 1.0 doctypes that ensures output is XHTML compatible, (e.g.
<br />
rather than<br/>
,<div></div>
rather than<div/>
).doctype-system="about:legacy-compat"
does not trigger this compatibility modeIf you are happy with html output, then setting
<xsl:output method="html">
should do the right thing. You can then set the doctype with<xsl:text disable-output-escaping="yes"><!DOCTYPE html></xsl:text>
, though this will need plumbing in at the appropriate place as XDV does not support this yet.In fact it seems
<xsl:output method="html"/>
does not really help either - this will result in<br/>
being output as<br></br>
.I think this is currently only supported by writing the doctype out as text:
This will produce the following output:
this outputs
this is modified as my fix to http://ukchill.com/technology/generating-html5-using-xslt/
With Saxon 9.4 you can use:
This generates:
This variation of Jirka Kosek's advice, via Advanced XDV theming on Plone.org seems to work for me in collective.xdv.
The following code will work as a standalone template if saved as
html5.xml
:References