XSLTあれこれ

重複したtopic/@idを拾い出す

DITAでオーサリングされる方ならだれでもtopic/@idはDTDでいうところのID属性だから、そのトピックの中でユニークじゃなければならないと教わります.ではmapやbookmapで多くのトピックを束ねる場合はどうなのでしょうか?マップに対応する文書全体でtopic/@…

CCMSのプラットフォームとXSLTスタイルシート

今まで山ほどDITAのXSLTスタイルシートを書いてきましたが、その主なプラットフォームはWindowsでした.もちろんお客様の中にはCCMSを導入していない場合もありますが、導入している場合はそのプラットフォームはWindowsでした. つまり、手元のWindows 10で…

コードとはてな記法

昔はYahoo! ブログに書いていたので、コードのハイライトなんて夢のようでしたが、HatenaBlogでは「はてな記法」を使えば自動的にコードをハイライトしてくれます. なのですが、私の見た感じからするとちょっとXMLの表示はどぎつすぎます.もう少しVSCodeの…

XSLT 4.0 Proposal

私は次のXSLT勧告は3.1になるんじゃないか?と思っていました.でもXSLT 3.0のEditorのMichael Kayが考えているのはなんとXSLT 4.0でした. 先月2月13日~15日に開かれたXMLプラハ(XMLPrague)でのMichael Kayは「A Proposal for XSLT 4.0」題して講演を行…

XSLTからPDFのページ数を取得する.

5月頃からXSL-FO、そして7月からXSLTの質問がStackOverflowにポストされたらダイジェストのメールが来るようにしました.XSL-FOの方はまだまばらですが、XSLTの量はすさまじいものがあります.7月1日から30日で324通のポストがありました.とても全部なんて…

antでループを実現する

XSLTではなくて本当はantの話なのですが、ついでに書きます. 与えられているミッションはプログラムのバージョン(3バージョン)×XSLTプロセッサ(約3種類)×50言語のテストデータというものです.これをテストしなければなりません.バージョン、XSLTプロ…

あなおそろしきxsl:import

DITA 1.3のインプリメントをやってきてXML mention Domainの実装にさしかかりました.XML mention DomainはXMLの要素(<xmlelement>)や属性(<xmlatt>)を表す要素の集合体です.例えばxmlelementのp@class属性は次のようになっています. class="+ topic/keyword markup-d/mark</xmlatt></xmlelement>…

XSLTスタイルシートから XSLTスタイルシートを作る!

一般的にXSLTスタイルシートはコツコツと手作りするものとずっと考えてきました.しかしある言語関係のテストをしなければならなくなり、さすがに一個一個手作りしていては間に合わなくなりました.というより、言語数が増えすぎて、とても手で作っていては…

他のスタイルシートをインポートして使う(2)

前に少し書きましたが、要素にマッチングするテンプレートで、インポートされる側にpriority="N"で優先順位をつけていても、インポートする側で一番低いpriorityのマッチングテンプレートをオーバーライドしてしまうと、話がやっかいになってしまいます. 以…

他のスタイルシートをインポートして使う.

今まで自分でスタイルシートを作って自分で動かすのが常でした.しかしxsl:importを使用すればベースになるスタイルシートをインポートして、それに対する修正差分のみ記述すれば、少ない工数で目的を達成することができます.いちいちお客様やプロジェクト…

どうにもスタイルシートの仕様がぐっちゃんぐっちゃんで決まらない時

スタイルシートを作っていて、お客様が悪いという訳ではないのですが、どうしても仕様が決まってくれないことがあります.なかなか決まりようがない、無理もありません.実際にやってみたらどうなるのか?がわからないとお客様も実装する方も判断がつかない…

DITA-OTのバージョンを比較する

USの同僚から「お前のDITA-OTのプラグイン、DITA-OT1.8.5でやるとこけるで~!」と連絡がありました.私はずっと1.8.4を使っていたので気が付きませんでしたが、確かに1.8.5でやると一発でこけます.原因を調べてみると、1.8.5からはlq/@hrefの処理をDITA-OT…

generate-id()は使うべきではない!?

入力XMLにユニークなidがあれば良いのですが、丁度良いものがなくて出力XMLにidが必要な場合、よくgenerate-id関数を使用します.今までなんの疑問もなく使用してきたのですが、致命的な弱点に出会ってしまいました. 例えばスタイルシートに非常に微妙な修…

XSLT 2.0 and XPath 2.0 Programmer&#039;s ReferenceのE-book

実は恥ずかしながら電子書籍というものを買ったことがありませんでした.ところが以前に買ったXSLT 2.0 and XPath 2.0 Programmer's Referenceですが、元々大型の本で1300ページもあるため、ついに背表紙の部分から壊れてしまいました.古本でもう一冊買おう…

XSLTのデバッグ

もう前の2014年の3月の投稿ですが、XSL-Listに次のように題された話題が載っています. Managing debug logging in complex transforms: what do people do? http://oxygenxml.com/archives/xsl-list/201403/msg00173.html 話の発端はEliot Kimberさんです.…

xsl:apply-templates

普段はほとんどXSLT2.0を使っていますが、どうしても使えない場合が多々あります.どういう場合かと言いますともう10年越しで運用しているXSLT1.0のスタイルシートをメンテナンスするような時です.もちろんXSLT2.0に書き直すに越したことはないのですが、そ…

Occurrence Indicatorの使い方(2)

このまえOccurrence Indicatorについて少し書きましたが、どうも私の認識は甘かったようです.何が甘かったかというと、世の中には「必ずしも意図しない誤った使い方」が存在しているからです.特に?と*のxsl:paramでの使い方です. 例えば以下のようなコー…

Occurrence Indicatorの使い方

先日レビューのために何年も前のコードを読み返す機会がありました.恥ずかしながら自分のコードを見ても理解できない箇所があります.それは、変数のSequenceType Syntaxにおける、OccurrenceIndicatorの使い方です. SequenceType Syntax http://www.w3.or…

JAXPでのデバッグ

もう何年もメンテナンスしているJavaのライブラリがあります.でもさわるのは2年に一度程度.元々海外からいただいたライブラリのなので、すべてを理解しているわけではなく、メンテナンスの都度ロジックを必死に思い出さねばなりません.なお話を複雑にして…

self軸

次のような<p>要素に正確にマッチするテンプレートを書きなさいといわれたらどうされますか? <p>~</p> つまり、直前がという処理命令で、直後がという処理命令という要素にマッチする条件です.間にはホワイトスペースは入りません. 実は不勉強ながら最初はどうした</p>…

position()関数を使う

最近他の方の書いたスタイルシートを見ることがあるのですが意外とposition()関数を使っていないようです.ご存知の方にとってみればなんでもないのですが、便利な使い方があるので紹介します. 例えば次のようなデータ構造があったとします. <div> <span>りんご</span> <span>みかん</span></div>…

xsl:attribute-setについて考える.

xsl:attribute-setについて考えてみました.みなさんはどのように使っておられるでしょうか? 一般的にxsl:attribute-setは属性すなわちスタイルの定義です.なので通常テンプレートとは別個のファイルにまとめて定義し、ロジックを記述するテンプレートの方…

xsl:functionとxsl:template

いろいろ忙しかったのですが一段落しました.およそ4ヶ月くらいスタイルシートの作成の仕事をやっていたのですが、いろいろと勉強になりました.その一つにxsl:functionとxsl:templateの使い分けがあります.皆さんはどのようにやっておられますか?私の得た…

Saxon-CE 1.0がリリースされました!

もう6月18日のことなのですが、Saxon-CE 1.0がリリースされました. Michael Kayのアナウンス http://www.biglist.com/lists/lists.mulberrytech.com/xsl-list/archives/201206/msg00101.html http://sourceforge.net/mailarchive/forum.php?thread_name=CAA…

やってはいけないスタイルシート

最近思うのですが、XSLT2.0をうたってあっても、その実内容はXSLT1.0レベルのスタイルシートがけっこうあります.XSLT1.0からの移行の段階でしかるべきコード書換えの決断をしないで単に<xsl:stylesheet version="2.0">と書いたものは、実はXSLT2.0の機能は使えるのですが、システムとして</xsl:stylesheet>…

続2: エッ!EPUB作れ?

顛末記の続編がありました.せっかくepubcheckでOKになったと思ったのですが、「ちゃんとEPUB3で作ってくれ」とクレームがつきました.確かにepubcheckでは、 xhtm2epub_epubcheck: [java] Epubcheck Version 3.0b5 [java] [java] Validating against EPUB v…

続: エッ!EPUB作れ?

EPUB作成のの顛末記です.CSSに定義されたbackground-imageの件は「止めちゃおう」ということになりました.労多くして得るところが少ないからです.で、なんとかbackground-imageの実装だけをはずして、すべての変換結果をテンポラリフォルダに作るところま…

エッ!EPUB作れ?

突然の仕事の依頼です.それもお客さんからお金をもらえるわけではない、単なる自分の会社の宣伝用.それもワタクシの大嫌いなEPUBです.EPUBなんてちよっと.epubを解凍してみたら画像とCSSとXHTMLが入っているだけで、いろいろサンプルを見てみても対象デバ…

曲者 &quot;&gt;&quot;

XMLでは、"<"はタグを開始し、">"はタグを閉じるのに使います.ですから、XMLでこれらの文字をタグ以外の目的でテキスト中などで使いたいときは、&amp;lt;、&amp;gt;の実体参照で使います.でもここで要注意なのは">"です.タグを閉じるこの文字は、ふつうの…

XSLTで変数に代入する

XSLTがちょっと特殊な言語としていわゆるC++やJavaなどを使う一般(?)のプログラマーから異端視されるのにはそれなりの理由があります.一例が変数です.グローバル変数は一度初期化したらあとで値を代入することはできません.テンプレートのローカル変数…