日本語ファイル名は使ってもよいのか?

昔、DITA Open Toolkitがまだ1.4とかだったときはmapやtopicに日本語ファイル名を使用するのはとても無理だったように記憶しています.でもこの頃はDITAを使用するお客様も増えてきて、中には日本語ファイル名を使用する場合も多々あるようです.

私もずっとテストデータを作るときは英字ファイル名でした.でも今になって自分で仕様書とか設計書などをDITAで作る段になるとどうしても日本語ファイル名を使用したくなります.自分で作るものなので、各国語翻訳なんてありませんし、そもそもWindowsで日本語ファイル名はなんの問題もなく使えちゃうのですから.

DITA Open Toolkitの方も段々ASCII以外のファイル名にも対応出来て来て1.7.5くらいではそれなりにtopicに日本語ファイル名が使えてPDFをビルドすることが出来てきたと記憶しています.ならばと、この前DITAで仕様書を作る機会があったので、ここぞとばかりにconkeyrefの参照先に日本語ファイル名を使ってみたのですが

<keydef keys="COMMON-PARAM" href="topic/共通パラメータ.xml"/>

PDFを作る段になるとDITA-OTが一発でこけてしまいました.さっそくGitHubにバグ報告を出しました.

DITA-OT 1.8.5 fails when conkeyref target file has non-ASCII name

このチケットはもうクローズされていますが、そこでoXygenのRadu Coravuさんから指摘を受けました.簡単に言えば、日本語などASCII以外のファイルを@href属性で参照するときは、%エンコードして使用すべきではないか?というものです.確かにDITAの仕様では次のように書かれています.

.4.2.1 The href attribute

Note that certain characters (including, but not limited to, #, ?, \, and space) are not permitted unescaped within URIs. Such characters must be percent-encoding (per RFC 3986) if there is a need to represent them within a string that is a URI

また以下でも確認できます.


URIの規則を定める RFC 3986 では、URIに、非予約文字[1]でもなく、また、URIの構文を示すために用いている予約文字[2]でもない文字を用いる場合には、その文字の代わりに「%xx」(xxは16進数)という形のコードを表記することが定められている。

[1] RFC 3986 では、ASCIIのコード範囲内の英字(大文字・小文字)、数字、ハイフン “-”、ピリオド “.”、アンダースコア “_”、チルダ “~”が非予約文字 (Unreserved Characters) である。

[2] RFC 3986 では、ASCIIのコード範囲内のコロン “:”、スラッシュ “/”、疑問符 “?”、シャープ “#”、角括弧 “[”、“]”、単価記号 “@”、感嘆符 “!”、ドル記号・ペソ記号 “$”、アンパサンド “&”、アポストロフィー・シングルクオート “'”、丸括弧 “(”、“)”、アスタリスク “*”、正符号・加算記号 “+”、コンマ “,”、セミコロン “;”、等号 “=”が予約文字 (Reserved Characters) である。

実際oXgenで日本語ファイル名を参照すると自動的にUTF-8エンコーディングされ%表記になります.

イメージ 1

イメージ 2

しかしこれではURLの仕様としては合っていても、日本人が見るには実用になりません.何のtopicファイルが参照されているかさっぱりわからないからです.もちろんこの場合<topicref href="topic/はじめに.xml" format="dita" type="concept"/>と書いてもエラーにはなりませんが、それは@hrefの仕様からすれば外れているということになってしまうのでしょう.

という訳でDITAでのmapやtopicのファイルへの日本語ファイル名の使用は、実はIAとしてはやらない方が良い!というのが結論になるのではないかと思います.