xslt
XSLT変換処理あれこれ
諸事情によりいろいろな方法でXSLTによるXML変換をするので、 そのやり方メモ。
Groovy を使った設定ファイルの作成 (スタイル設定用 ミニDSL の自作)
Groovyのビルダを使うと、見かけ上設定ファイルのような記述ができるのですが、 それがそのまま実はGroovyのコードとして動かせるということができます。 これが便利なのは、単なる設定ファイルのように見えるものの、 実際はGroovyのコードなので、 変数やロジック等をそこに混ぜることができるという点です。
Groovy In Action の Chapter 8 "ビルダーの利用" では、 Lispの野望、実行可能な仕様に近づく というように表現されています。
Adobe FrameMakerでXMLを開くときにありがちなXML変換のためのXSLT
FrameMakerでXML文書を開く前にXML変換して、 変換後のXMLをFrameMakerでフォーマット、というのが定番ですが、 このとき必ずといって良いほど使用するXSLTコードをメモ。
XSLTで内容をコピーした上で XPATHで指定した位置に要素を追加する記述
このXSLのイディオムはあまりによく使うのでメモ。
XSLTで子要素(テキスト)を属性にする記述、およびその逆変換
このXSLのイディオムはあまりによく使うのでメモ。
XPath で指定した特定部分だけをXML文書から抜き出すスタイルシート
XML文書から XPath で指定した部分だけを抜き出したい。
XSLTではデフォルトの変換規則があるため、これが意外に難しかったのでメモ。
(デフォルト規則が分かっていれば難しいことはない。)
XPathで指定した部分を取り出したいだけならば、xpathコマンドを使えばOK.
Ubuntu などでは、apt-get install libxml-xpath-perl でインストールできます。
以下のように使えます。$ cat sample.xml | xpath -q -e "/book/chapter/title/text()"
Ant で XMLを処理 ... XMLの整形(インデントと改行位置の調整)
Docbook v4.4のXMLを使ってドキュメントをつくり、FrameMakerでフォーマット、 そのXML文書を多言語展開して、FrameMakerでフォーマット、という仕事をしていると、 diff とか diff3 を使ってXML文書を比較する機会が結構ある。
- 異なるリビジョンのドキュメントで変更点をチェック
- 多言語展開済み(=翻訳済み)XMLに対して再翻訳が発生した場合にdiff3を使って変更マージ
などの場合。
そのときに diff, diff3 を使って差を調べるのだが、XMLとして内容が同じでも 改行位置やインデント量が異なると diff, diff3 は内容が異なっていると判断してしまう。 これは意図したことではないため、対策として diff,diff3処理する前に、XML文書を整形して、改行位置とインデント量を整える(normalize 正規化) 作業を行う必要がある。
これをAntで処理する方法。
Ant で XMLを処理 ... DOCTYPE 宣言の削除
jdom などでXMLを変換するときに、DOCTYPE宣言がついていると(ネットワークに情報を取得していくのか) 処理がとても遅くなることがある。 そこで、DOCTYPE宣言を削除してからXMLを変換するのだが、その削除作業をAntで行う方法。
このエントリでは、処理するXML文書はDocBook v4.4で記述されていることとする。
ANTの中でJavaScriptを使う
DocbookからFrameMakerでフォーマットするXMLに変換するビルドプロセスで 現在はMakeを使っているのだが、ANTを調べてみると、ANTでXSLTタスクがあり、 ANTからJavaScriptもつかえることが判明。
CygwinやLinuxでビルドするので、MakeからANTに移行すれば、 JavaVMさえあればOKになるので、これは魅力的です。
今回は、ANT内でJavaScriptを使う方法のメモ。
DocbookのXMLから目次情報を抽出する toc.xsl の作成(改良版→番号の追加)
前回 Docbook で記述されたXML文書から目次情報の抽出をしましたが、 章番号やセクション番号がない状態だったので、今回はそれを追加します。
DocbookのXMLから目次情報を抽出する toc.xsl の作成
今回は、Docbookで記述されたXML文書から目次情報だけを抽出してみます。
テストで処理対象としたXML文書は、 こちら(Apache Velocity DocBook Framework ) から入手できる DBFUserGuide.xml を使用します。これは、Docbook4.5を使って記述されています。
XMLのマークアップを除去する...XML文書からテキストファイルを作成(XHTMLも可)
以前、 HTMLのマークアップを除去する...HTML文書からテキストファイルを作成(Javaを使用) というエントリーを書いたのですが、XSLTを使えばもっと簡単に処理できることが判明。
ただし、処理対象になるXML文書は well-formed でないといけない・・・ という意味では、ネット上のHTMLをこれで処理するのは難しい。