👏

XSL処理系を手に入れろ!

2020/12/01に公開

この記事はXSL Advent Calendar 1日目の記事です。
https://adventar.org/calendars/5027

一日目ということで、がっつり書籍の紹介をしたかったね。
はい、完成しなかったので後日にまわします。

XSLTやXSL-FOは実際に動かしてこそなところがあるので、環境を用意するところを一日目の内容としてお茶を濁したい。
「XSLとは」みたいな人のための記事も後日に回します。なぜなら滅茶苦茶しんどいので。ちゃんと書こうとするとテンプレート言語と文書変換言語の違いとかに触れることになってしんどいし、スタイルシート言語一般の話とかもあってしんどい。CSSは難しいし、HTMLなんて複雑な話もしんどい。思うにXMLのしんどさって普段隠蔽されたりしてるものに生で触れるところな気がする。

さて、Extensible Stylesheet Language(XSL)はスタイルシート言語であって、「文書そのもの」ではないんですね。当たり前ですが。PDFや紙面のような形でヒューマンリーダブルな形にするにはXSL-FOで書かれたものを処理をしてもらう必要があります。その処理をするのがXSL-FOプロセッサーです。

そしてXSL Transformations(XSLT)は当初はXML文書をスタイルシート言語に、というのはまた長くなるので置いておいて、XSLTで書かれた処理をXMLに適用してくれるXSLTプロセッサーが必要になります。バージョンが上がりXMLじゃなくてもよくなってきてますが。

「2つも別の種類のプロセッサーが要るの!?」と思われるかもしれません。VM持ってる言語と似たようなものと思えばそんなに不思議でもないですね。というわけで2種類のプロセッサーを用意しましょう。生で書くか他の処理系から吐くかすればXSLT処理系は使わずに済ませることもできますが、何だかんだXSLTがXSL-FOを吐くには適していることは間違いないので。

XSL-FOプロセッサー編

無償で使える、そこそこしっかりしたXSL-FOプロセッサーは2つあります。他にもあることはあるかもしれませんが、知名度とそれによる周辺情報の量は重要です。

  • Apache FOP 2.5
  • RenderX XEP 4.30

Apache FOPがオープンソースですね。RenderX XEPも実は非商用利用であれば無償で利用できます。FOPはフロート回りが貧弱なところが一番注意のしどころです。

どちらもJava VMが必要です。Windows10であれば、winget install openjdkでOpenJDKを入れるのが今風の方法でしょうか。

Apache FOP

https://xmlgraphics.apache.org/fop/quickstartguide.html

使うだけならバイナリをダウンロードすればよいです。
GUIは無いので、jarを実行するようにパスを通します。コマンドラインから.foファイルを喰わせればPDFを吐いてくれるんですが、そのままだと日本語が表示されません。日本語フォントが設定されていないからね。

展開したFOPを設置したフォルダのconfigの下に設定ファイルがあります。fop.xconfというファイルです。以前はfop.confという名前だった気もする。FOPはレンダラー(ここでは出力形式とニアリィイコール)ごとにフォントも都度指定するんやな。コメントアウトで書き方は載っていますが、とりあえず<font>embed-urlとその子要素の<font-triplet>nameは忘れないようにしましょう。絶対URL指定が確実。xml:base使えるかどうかはそういえば確かめていなかった。
フォントメトリクスなどもここで指定する。以前のバージョンではOpenTypeの描画はときどきあやしかったが2.5はどうなんだろう。

<fop ...>
  <renderers>
	  <renderer mime="application/pdf">
		  <fonts>
			  <font embed-url="C:\Windows\Fonts\NotoSerifCJKjp-Regular.otf"><font-triplet name="NotoSerifCJKJP" weight="normal" style="normal"/></font>
		  </fonts>
	  </renderer>
  </renderers>
</fop>

RenderX XEP

http://www.renderx.com/download/personal.html

入力欄を埋めてメールアドレスを登録すると、ライセンスキーが送られてきます。メールにソフトウェのダウンロード手順もあるので従ってください。
下は10年ほど前の記事になりますが、手順的にはそう変わりありませんでした。
https://ditahack.hatenadiary.org/entry/20090501/1241191833

日本語用設定について、上の記事ではMS明朝やMSゴシックの登録手順、それにDITA-OTでの設定が載っています。とはいえ、やっぱりOpenType使えた方が良いということで。
インストールフォルダ(ひだるまの環境では C:\Program Files\RenderX\XEP )の下にxep.xmlというファイルがあります。これがConfigです。Windows版をインストールしていると、
TrueTypeフォント用のフォルダとフォントの指定をしている箇所があります。ここに、使用したい(XSL-FO内で指定したい)フォントを登録します。大事なのはフォントの場所なので、とりあえずfont-groupのOpenTypeとTrueTypeの違いみたいな話は気にしなくて大丈夫です。

<fonts> ...
 <font-group xml:base="file:/C:/Windows/Fonts/" label="Windows TrueType" embed="true" subset="true"> 
      <font-family name="Noto Serif CJK JP" >
        <font><font-data otf="NotoSerifCJKjp-Regular.otf" /></font>
        <font weight="bold"><font-data ttf="NotoSerifCJKjp-Bold.otf"/></font>
        ...
      </font-family> 
	 ...
</font-group>
...
</fonts>

番外編 Antenna House XSL Formatter

若干ダイマに近い気もしますが、上2つ紹介してこちらを紹介しないのもなんなので。
https://www.antenna.co.jp/AHF/trial.html

メールによって申請する形で、試用期間60日、ページ数や一部機能の制限はありますが、FOPやXEPで日本語組版に不満があり、でもXSLによる組版はしたいということであればトライしてみましょう。そうでなくてもトライしてよいですよ。他の2つと違いインストーラーに従ってポチポチすればインストールが終わります。Javaのインストールは不要で、特に設定せずとも日本語で組版できるようになっています。国産ソフトの面目躍如といった感じですが、日本語以外の環境でもシステムに合わせて大概はよしなにしてくれます。

2021-08-15 追記:XEPの無償版に相当する(ロゴ強制出力、非商用利用可)ものはFormatter Club会員になれば利用可能。

XSLTプロセッサー編

Saxonica Saxon

https://www.saxonica.com/products/products.xml

XSLTのメインの方がいるのでリファレンス実装のようなもの。拡張もありますが。HE版が無償利用可能。Java版ならJavaのいつもの指定をする。

2020年はXSLT 3.0に対応したSaxon-JS2がデビュー。「パーティへの遅すぎた登場」というコメントをどこかで見て、上手いと思いました。

$ npm i saxon-js

Aldova RaptorXMLServer

https://shop.altova.com/RaptorXMLServer

サーバで50000円程度と考えれば実はそんなに高くない。利用したことがないので不明。

その他

  • MSXSL Windows備えつけ。対応バージョン1.0なのでやめとけ
  • Webブラウザ各種。対応バージョン1.0なのでやめとけ
  • libxslt, xsltproc。よくしらない

Discussion