2015年03月01日

Xalanを使ってHTML5のdoctypeを出力

Xalanを使ってHTML5のdoctypeを出力する方法を調べました。

最初に、XSLTでHTML5のdoctypeを出力する方法を調べてみました。すると以下が見つかりました。
Valid HTML5 doctype with XSLT
これによると、XSLTは公式にはHTML5をサポートしていないそうです。ただ、このページには完全ではないですが、似たような出力を出す方法がいくつかありました。そのため、このページをもとに試してみました。

また、Xalanの出力をインデント有りにしたかったので、以下を参考にしました。
Configuring serialization output properties (http://xalan.apache.org)

上記の2つを参考に、以下のXSLTファイルを作成して、Xalanで変換するとエラーになり、出力に失敗します。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"
encoding="UTF-8"
indent="yes"
xalan:indent-amount="2"/>
 ・・・
(以下省略)

エラーは以下
D:\test>java org.apache.xalan.xslt.Process -in sc.xml -out sc.html -xsl mydocboo
k.xsl -param dateNow '2015-3-1'
[Fatal Error] mydocbook.xsl:7:40: The prefix "xalan" for attribute "xalan:indent
-amount" associated with an element type "xsl:output" is not bound.
file:///D:/test/mydocbook.xsl; 行 #7; 桁 #40; org.xml.sax.SAXParseException; sys
temId: file:///D:/test/mydocbook.xsl; lineNumber: 7; columnNumber: 40; The prefi
x "xalan" for attribute "xalan:indent-amount" associated with an element type "x
sl:output" is not bound.

java.lang.NullPointerException
at org.apache.xalan.transformer.TransformerImpl.setParameter(Transformer
Impl.java:1547)
at org.apache.xalan.transformer.TransformerImpl.setParameter(Transformer
Impl.java:1595)
at org.apache.xalan.xslt.Process.main(Process.java:842)
Exception in thread "main" java.lang.RuntimeException
at org.apache.xalan.xslt.Process.doExit(Process.java:1155)
at org.apache.xalan.xslt.Process.main(Process.java:1128)


エラーメッセージを見ると、 "xalan:indent-amount" の部分に何か問題があるようです。
そのため、その部分を中心にいろいろと試してみました。するとXalan?のインデント指定では、以下の部分の、xmlns:xalan=・・・が無いとエラーになることがわかりました。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan">


そのため、XSLTを以下のように修正したらエラーが起こらなくなりました。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xalan="http://xml.apache.org/xalan">>
<xsl:output method="html"
encoding="UTF-8"
indent="yes"
xalan:indent-amount="2"/>
 ・・・
(以下省略)


出力は以下のようになります。xmlns:xalan・・・ と余分なものがありますがブラウザの表示には影響なく、
HTML5として認識されている?はずです。
<!DOCTYPE html><html xmlns:xalan="http://xml.apache.org/xalan" lang="ja">
<head>
・・・


posted by jun1 at 16:43| Comment(0) | TrackBack(0) | XML