MENUCLOSE
会員限定ページ CONTACT
JP EN

JP EN
会員限定
ページ
CONTACT

第6章 OxygenとAntenna House Formatterによる方法

ホーム > 第6章 OxygenとAntenna House Formatterによる方法

第6章 OxygenとAntenna House Formatterによる方法

横田 達朗

OxygenによるJATSオーサリングの基本と、XSLスタイルシートプロセッサであるAntenna House Formatter(Formatter)との連携によるPDF出力について紹介します。Oxygenは、ルーマニアのSyncroSoft社によって開発・販売されている、XMLの開発・編集プラットフォームです。XML編集機能に留まらず、様々なXML連携の仕組みがまとまっています。本章では、2024年5月現在の最新版となる26.1を前提とします。

Oxygenには用途・要件に合わせた複数のエディションがあります。Oxygenのエディションから、XML AuthorとXML Editorに共通する機能を扱います。

XMLやJATSの用語については第1編をご覧ください。

本章では、まずXMLエディタを活用した編集一般のメリットを紹介します。そしてJATS文書の作成、編集、XSLT+XSL-FOによるPDF出力について、Oxygen機能の活用を交えて説明します。補足として、XSL-FOによる組版のポイントを紹介します。

6.1 なぜXML形式と専用エディタを使うのか

XMLを編集したことがある方は、一度は「何故こんな面倒な作業をしなければならないのか」と思ったことがあるのではないでしょうか。「相手に要求されたから」と答えてしまえばそれまでですが、ならば相手はなぜXMLを要求したのか。もしかしたら、相手はXMLを簡単便利に活用できるツールを持っていたのかもしれません。たとえばそう、Oxygenのような!

Word文書やHTML上に記載された文書規則と睨めっこし、提出後に打ち間違いを指摘されて溜息を吐いて再度画面に向かう……。これは、自転車のタイヤに空気を入れようというとき、横に電動ポンプがあるのに手動のポンプを必死にピストンしているようなものです。XMLの専用エディタは、(プログラミング用のエディタに補助的に搭載されているような)初歩的な機能に留まらず、執筆・編集、そして出版におけるサポートまで行うソフトウェアです。「この要素の中は何が書けるんだっけ」と手を止めてキーを一度押せば、そこに記述可能な要素や属性の候補をスラスラ表示することだって朝飯前です。

XMLには、様々なXMLに共通する規則と、文書規格独自の規則が存在します。

  • ● 整形式(well-formed):タグの開始・終了関係、ルート要素、ある要素での属性の唯一性。
  • ● 文書規格独自の規制:スキーマ言語によって文書構造の仕様を定めたもの。本章では以降、文書スキーマと呼ぶ。

JATS文書とJATSの文書スキーマをJingのようなスキーマ検証ソフトウェアに通せば、そのJATS文書が規格に適合しているか否かの結果が返ってきます。ただ、XMLを苦労して書いて、合っている(いない)しか返ってこないのではあまり積極的に使いたくはないでしょう。しかし、文書スキーマの活用方法はこれだけではありません。

文書スキーマは「この要素の中には何が書けるか」、「これらはどの順序に記述しなければならないか」などの情報で構成されています。これをXML文書の執筆中に活用できればどうでしょうか。エディタで文書編集中にあるタグを打ったら、その中に記述可能なコンテンツはスキーマが知っているのです。これを候補に出してもらえれば、わざわざ文書スキーマの印刷されたマニュアルを読みにいく必要はありません。(HTMLを編集可能なエディタで似たような機能はありますが、XMLでは、独自のスキーマに改変したものも同様に利用できる汎用性があります。)

(1) JATS Kitについて

Oxygenでは特定の文書形式に対する機能拡張を行うフレームワーク機構があります。2024年4月現在、JATS向けに、JATS Kitというフレームワークがバンドルされています。次に挙げるのはこのフレームワークによって補助される機能です。

  • ● JATS文書テンプレート
  • ● オーサリング中のJATS文書の検証・補完候補の表示(JATS Kitに含まれる文書スキーマによる検証)
  • ● 作者モードでのWordのようなグラフィカルな表示
  • ● HTML・(Apache FOPを利用した)PDFへの変換出力シナリオ

以降、必要がなければOxygenの機能とJATS Kitの機能の区別は行いません。

本章の原稿は、Oxygenを使用し、JATSで記述されています。原稿をある程度進めたら変換ボタンを押してHTMLへと変換し、そのHTMLをWordから開き、ページサイズや文字数・行数の設定を反映した状態で確認を行いました。

(2) Oxygenの各機能の配置

Oxygenの基本的な画面構成を説明します。

(a) メニューバー

一番上にある[ファイル][編集]などが並ぶ箇所です。

(b) ツールバー

メニューバーの下の箇所です。メニューバーの項目などから、よく使う項目がアイコンで並んでいます。それぞれのアイコンでマウスを上に重ねると簡単な説明が表示されます。後述するモードによって、表示されるアイコンも異なります。

(c) エディタ画面

真ん中の領域には、編集中のファイルが表示されます。右クリックでコンテキストメニューという編集補助機能をまとめたメニューを表示します。

(d) テキスト・グリッド・作者タブ

左下にある箇所です。エディタで編集するXMLの見た目や、ツールバー、コンテキストメニューの項目が異なる3つのモードをタブで切り換えます。それぞれのモードについては後述します。

6.2 JATS文書を作成する

OxygenでJATS文書の作成を開始する手順を簡単に示します。

(1) JATS文書テンプレートから新規に作成する

ツールバーの左端にある[ファイル]から[新規作成]を選択します(図6.1)。

図 1 

新規ダイアログの項目、[フレームワークテンプレート]の下位にある[JATSKit – NISO JATS /NLM BITS]の下に、JATS文書のテンプレートがあります(図6.2)。目的のテンプレートを選択し、[作成]ボタンを押せば、選択したテンプレートで文書の編集を開始できます。

図 2 

JATS Kitにない独自のスキーマに従った文書を作成するときは、文書スキーマの宣言部を対象のスキーマのものに変更します。メニューバーから[文書]-[スキーマ]-[スキーマの割り当て]を選択し、ダイアログで項目を指定して変更できます。テキストモードでは図6.3のように文書型宣言を直接変更できます。

図 3 

次の画像の例では、JSTAGEで公開されているDTDに文書スキーマを変更してみました(JATS文書と同じフォルダにDTDを配置しています)。このDTDではarticle-metaの前にjournal-metaを記述する必要があるので、Oxygen上でエラーが表示されています(図6.4)。

図 4 

(a) 独自テンプレートを登録する

毎回色々と書き直したくはないといったときは、独自テンプレートを作成しましょう。

  • ● テンプレートにするXMLをフォルダに配置する。
  • ● Oxygenの[オプション]-[設定…]から設定ダイアログを開く。
  • ● [文書テンプレート]で追加のテンプレートディレクトリに、テンプレートを配置したフォルダを指定する。
  • ● メニューバーの[ファイル]-[新規作成]で新規ダイアログを開き、先程登録したフォルダと、その下にテンプレートにしたXMLの名前があることを確認する。

(b) 他形式からJATS形式に変換する

新規でJATS文書を書き始めるほかにも、他の文書形式からJATS形式に変換し、それをOxygenで編集して整えるという方法もあります。ここでは、元形式がWord文書の場合の変換手法について例示します。

JSTAGEでは、全文XML作成ツールを提供しています。スタイル付けを行ったWord文書をJSTAGE用のJATS文書として出力するもので、まずこのツールを利用してJATS文書のおおよその形を作成し、後の編集をOxygenで行う方法があります。この方法についてはJSTAGEのページやXSPAの過去の発表資料などをご参考ください。

Word文書からXMLへのほかの変換方法として、Oxygenでは、Batch Document Converterというアドオンを提供しています。Batch Document Converterは直接JATSへの変換をサポートしていません。しかし、JATSの本文部分の構造は、基本的にはHTMLと似ています。そこでWord文書で書かれた本文部分を一度HTMLへ変換し、JATSの本文部分へ内容をペーストした上でスキーマの警告を適宜修正していくようなフローが考えられます。

(2) JATS文書を編集する

Oxygenでは、3つの表示モードが用意されています。作業内容や好みに合わせてモードを切り換えて作業できます。

(a) 表示モード

1) 作者モード

Wordのようにグラフィカルに文書が表示されます(図6.5)。

図 5 

タグ情報などの表示を切り換えられます。[Enter]キーを押すと、その箇所で挿入可能な構造の候補を表示できます。カーソルの方向によって、構造上の挿入される位置が異なります。

作者モードはXMLが正常な状態のときが想定されています。タグの対応が取れていないときなどは使えません。

2) グリッドモード

XMLの入れ子構造を、テーブルの見た目で表示します(図6.6)。文章としての可読性は高くない一方で、入れ子の段階などは明瞭になるため、frontを編集するようなときに有用です。

図 6 
3) テキストモード

XMLをテキストで表示します。文字色のハイライトやタグの候補表示・補完機能もあります。

作者モードで表示しようとして表示用のCSSが設定されていない場合や、整形式でない場合でも、テキストモードでは表示できます(図6.7)。

図 7 

作者モードは、設定されているCSSが表示に反映されるものです。JATS文書の場合は、JATS KitによってCSSが用意されています。「開いた文書がJATS文書であるか」の判定は、基本的に文書スキーマの宣言箇所で行われます。

(3) 要素・属性・モデル・エンティティの確認

JATS文書編集画面の右端に、「属性」「モデル」「要素」というタブが並んでいます。これは、エディタ上のカーソル位置にある構造に応じて、文書スキーマから読み込まれた情報を表示する機能です。文書スキーマにエンティティが定義されている場合は、「エンティティ」というタブがその下に表示されます(図6.8)。

図 8 

(a) 要素タブ・属性タブ

それぞれ、エディタのカーソル位置の箇所に指定可能な要素・属性を表示します。

(b) モデルタブ

エディタのカーソル位置の構造モデルを表示します。要素タブとの違いとして、挿入可能な構造は文書スキーマに記述された形で示されるため、文書スキーマの読み方を把握していれば「1つだけ書ける」「いくつも書ける」「必ず書かなければいけない」といった情報が読み取れます。

(c) エンティティタブ

JATSでは記号関係でエンティティが多数定義されています。エンティティタブでは、この内容の一覧表示や検索ができます。項目の上にカーソルを置くと、そのエンティティの(文書スキーマに記載された)説明が表示されます。項目をダブルクリックすると、カーソル位置にそのエンティティ参照が挿入されます。

(4) 右クリックでコンテキストメニューを呼び出す

文書の編集中に右クリックをすると、コンテキストメニューが表示されます。このメニュー項目は作者モード・グリッドモード・テキストモードで異なります。ここでは編集の際に利用機会が多いであろうテキストモードでの項目を一部紹介します(図6.9)。

図 9 

(a) [選択]

サブの項目に[要素][内容][親]があり、選択範囲を構造に基づいて決定できます。選択した範囲をコンテキストメニューの別の項目である[コメント/非コメント]や[移動]で使うことで、効率的にXMLの編集が行えます。

(b) リファクタリング

サブの項目が多数あります。要素の分割・結合、範囲選択したテキストにタグを設定するなど、XMLを効率的に編集する機能が用意されています。

(c) IDの管理

相互参照など、JATS文書ではIDを活用する場面が多々あるでしょう。カーソル位置のIDが使われている箇所の検索や、逆にID参照からそのIDが宣言されている箇所を検索したりといった機能が用意されています。

6.3 シナリオによる変換出力

Oxygenの「変換シナリオ」は、XSLTやXQueryによる処理をパラメータ設定と合わせて登録し、必要に応じて登録した処理を実行する機能です。

JATS Kitでは、HTML変換や、Apache FOPを介したPDF変換シナリオが既に用意されています。

実行する変換シナリオを確認・設定するには、メニューバーの[文書]-[変換]-[変換シナリオの設定]を選択します。

設定された変換シナリオは、[文書]-[変換]-[変換シナリオの適用]で実行されます。複数のシナリオが選択されているときは、すべて実行されます。

これらの機能は、ツールバーのアイコンからも呼び出せます(図6.10)。

図 10 

(1) HTMLへの変換シナリオの実行

JATS Kitが用意しているHTML変換シナリオを実行します。JATS文書を簡単なHTMLに変換することで、Oxygenのない環境などでも原稿をグラフィカルに確認できます。

[変換シナリオの設定]で、[JATS/BITS single HTML page preview]にチェックがあることを確認し、[変換シナリオの適用]を実行します。[(open results)]とあるシナリオでは、出力完了後のHTMLをWebブラウザで表示します。

(2) Antenna House Formatterとの連携

制作側が意図した内容・レイアウトでの表示を保証するPDFは、2024年現在も重要なメディアです。JATS文書からのPDF制作フローを、XSLT+XSL-FOによる自動組版で構築することで、原稿ごとに毎回レイアウトを調整する作業を回避し、コンテンツ制作に注力できるようになります。しかし、そのためにレイアウトの質を下げることはできません。自動組版の質を確保するために、スタイルシートのカスタマイズと、組版要件を満たすFOプロセッサが重要です。

OxygenにバンドルされているJATS Kitでは、オープンソースのFOプロセッサであるApache FOPを介したPDFの出力も行えるようになっています。しかし、出版目的のPDFを生成するには、大きく2点課題があります。

  • ● Apache FOPのレイアウト能力
  • ● JATS Kitテンプレートのレイアウト

Apache FOPは、2024年5月現在最新版である2.9時点で、和欧文字間のアキや、あるページ以内にコンテンツをまとめるための詰め込み処理、フロート配置の柔軟性といった課題に非対応です。JATS Kitは、日本の論文誌を対象に特別に用意されているものではありません。JATS Kitによって提供されているスタイルシートと、結果得られるレイアウトは、サンプルやカスタマイズの基にするためのものです。論文誌それぞれの様式には個別に対応する必要があります。

これらに対応するため、独自のXSLTでの変換がすぐに行えるようにシナリオを登録し、XSL-FOプロセッサにFormatterを利用する方法を紹介します。

(3) Formatterを外部のFOプロセッサとして設定する

事前にFormatterをインストールしてください。

  • ● Oxygenのツールバーのメニュー[オプション]-[設定]から設定ダイアログを開きます。
  • 設定ダイアログの項目から、[XML]-[PDF出力]-[FOプロセッサ]を開きます(図6.11)。

  • ● [外部のFOプロセッサ]に、Formatterを登録します。['Antenna House' FOプロセッサ(実行ファイルが必要です)]の右にある[参照]ボタンから、Formatterをインストールしたフォルダを開き、AHFCmd.exeを指定します。
図 11 

(4) 独自のXSLTをOxygenから呼び出せるようにする

例示として、アンテナハウスが公開しているjstage3-xslfo.zipのXSLTを使用する手順を説明します。事前にFormatterを外部のFOプロセッサとして設定しておきましょう。

  • ● XSLTスタイルシートを、任意のフォルダに配置します。
  • [変換シナリオの設定]を開きます(図6.12)。

  • ● [JATS/BITS PDF preview (XSL-FO)]シナリオを選択し、[複製]を指定します。選択したシナリオの設定をコピーした編集ダイアログが起動します。
  • ● [名前]で、シナリオの名前を書き換えます。
  • [XSLT]タブで、[XSL URL]を独自XSLTスタイルシートのパスに変更します(図6.13)。実行時にxsl:paramに指定するパラメータがある場合は、[パラメータ]を選択して記述します。

  • ● [FOプロセッサ]タブで、[FOプロセッサ]のプルダウンメニューから[Antenna House]を指定します。
  • ● [OK]を選択し、編集ダイアログを終了します。
  • ● [変換シナリオの設定]ダイアログに先程設定したシナリオの名前があることを確認し、チェックを入れます。
  • ● [保存して閉じる]を選択し、ダイアログを終了します。[関連付けを適用]を選択すると、現在編集中の文書に対し変換がその場で実行されます。
図 12 
図 13 

以後、[変換シナリオの適用]を行うと、指定したXSLTとFormatterによるPDF出力が行われます。

今回指定するXSLTスタイルシートは、JATS Kitのものと基本的な設定が同じであるため[複製]を使用しています。独自の設定を行う部分について、適宜読み換えて作業してください。

6.4 XSL(XSLT+XSL-FO)についての補足

(1) XSL-FO

XSL-FO(Formatting Objects)は、XML文書を組版するための仕様としてW3Cで勧告されています。ブロックやインラインといった組版用の構造をオブジェクト、その寸法や制御をプロパティとして、それぞれ、XMLの要素と属性として記述できるように定義されています。

たとえば、JATSでは段落を<p>これは段落です。</p>のように記述します。これを「印刷時に前後の要素から改行されたテキストブロックとして表現したい」というとき、XSL-FOの<fo:block>で<fo:block>これは段落です。</fo:block>と記述します。

実際にFOプロセッサによって組版を行うためには、ページ設定や柱用のオブジェクトなど多くのオブジェクトやプロパティが関係するので、前述のように簡単には済みません。とはいえ、XMLを「この要素が来たらこのXSL-FOに置き換える」というルールの集合で印刷用のデータに変換できる、つまり、組版を機械的作業に置き換えることができるならば、大規模な自動処理が実現します。そして、その変換ルールを記述する仕組みがXSLTです。

XSL-FOの記述の基本を学ぶ日本語資料としては、『XSL-FOの基礎 第2版』があります。Webページ版がアンテナハウス社で公開されていますので、是非ご覧ください。

元のXMLをそのまま使わず組版の専用語彙に変換することの利点のひとつは、元のXML構造では存在していないものも組版用に生成して利用できることです。

(2) XSLT

XSL Transformations(XSLT)は、W3Cの勧告する、XMLを他のXMLに変換するためにデザインされた言語です。つまり、<p>を<fo:block>に変換するルールを効果的に記述できる言語ということです。

XSLTによる変換を記述したファイルは、XSLTスタイルシートと呼ばれることもあります。同じくスタイルシートと呼ばれるCSSとの主な違いを簡単に述べておくと、CSSは元のXMLの構造を変えないままスタイルを適用した結果を示します。一方XSLTは、XMLを元に、異なる構造を作り直すことができるのです。たとえば、元のXMLに見出し用のタグがあったとして、XSLTでは、見出し部分をどのように装飾するかだけでなく、見出しタグの内容をまとめて目次ページを別に作ってしまえるのです。

要望するレイアウトを得るためには、多くの場合スタイルシートのカスタマイズが必要です。作業の開始前に、次の事柄を確認しましょう。

  • ● カスタマイズ対象構造の把握
  • ● そのレイアウトに必要なXSL-FOオブジェクト・プロパティの調査 ◻ 仕様に存在するか ◻ 利用するFOプロセッサがその仕様に対応しているか
  • ● カスタマイズ元のXSLTスタイルシートのどこで目的の変換処理が行われているか
  • ● どうカスタマイズすればそのレイアウトになるか ◻ フォントサイズや太字・テキストの揃えなど、そのオブジェクトのプロパティ変更で対応できる箇所か ◻ 目次や索引のリストといった、元文書の情報の加工が必要な処理であるか

カスタマイズとして、よくある書き方を次に例示します(図6.14)。

図 14 

プロパティの上書きだけであれば、<xsl:template>を新しく記述する必要はありません。一方、「<fo:list-block>でリストにしている箇所をテーブルに置き換えたい」といったときには<xsl:template>で、上書き用のテンプレートを記述することになります。

カスタマイズ方法を覚えるのは大変ですが、一度しっかりと作ってしまえば原稿ごとの微調整は起きません。独力が難しければ、専門家にカスタマイズを依頼するのもよいでしょう。

Oxygenに、XSLTプロセッサとしてSaxon Professional Edition(Saxon-PE)・Enterprise Edition(Saxon-EE)がバンドルされています。2024年5月現在、Saxonのバージョンは12.x系で、これはXSLTのバージョン3.0に対応しています。XSLT 3.0では、XSLT 1.0に比べはるかに多機能となっており、より簡潔にスタイルシートを記述できます。

(3) FOプロセッサがなぜ重要なのか

先にスタイルシートのカスタマイズの簡単な例を紹介しました。組版を目的とする以上、XSL-FOプロセッサの性能は、スタイルシートよりも重要です。XSLT+XSL-FOによる自動組版の概念図を図6.15に示します。

図 15 

図中に示したように、最終的な成果物はFOプロセッサの対応度・性能に左右されます。同じ原稿・スタイルシートで、Apache FOP(図6.16)とFormatter(図6.17)で出力を行ったものを示します。

図 16 
図 17 

例示では欧文部分の文字を日本語フォントで表示しています。日本語文書として、本文は両端揃え(text-align=”justify”)を指定しています。約物間や和欧文間のアキについては、FOPには設定がなく、Formatterはオプションの初期設定が有効となっています。

これらの表示結果について、原稿やスタイルシートである程度調整対応することも考えられます。しかし、避けたかったはずの「原稿ごとの調整」を行うことになっては本末転倒です。安定した自動組版を行うために、FOプロセッサが、要望するレイアウトが行えるものであるかどうかはとても重要です。

(4) Formatter拡張機能

実際にカスタマイズを行っていくと、いずれ「対応するオブジェクト・プロパティがなければ実現困難」という問題にあたるでしょう。そこで、最後にFormatterの拡張機能について紹介します。

XSLによる自動組版では、組版時(ページの確定時)に初めて確定するような事柄について、XSL-FOのオブジェクト・プロパティとそのプロセッサに任せることになります。ほかの組版システムに比べ「できるできないがはっきりしやすい」と表現することもできるでしょう。

Formatterの強みとして、商用のプロセッサとして常にユーザの要望する機能を実装してきたということがあります。標準仕様の範囲では対応できない機能としては、たとえばフロート配置の細かい調整や、テキストをページ内に収めるためのオーバーフロー制御での縮小指定のバリエーションといったものがあります。

日本語文書については、先に示したように約物のアキや和欧文間などのスペース調整のほか、縦書き(writing-mode=”tb-rl”)のサポート、ルビ、異体字への変換指定、合成フォントの定義などに対応しています。

6.5 References

  • ◯ Oxygen Oxygen XML Editor https://www.oxygenxml.com/
  • ◯ Formatter Antenna House Formatter https://www.antenna.co.jp/AHF/
  • ◯ JATSKit Jwendellpiez/JATSKit: oXygen XML Editor framework for NISO JATS 1.1 / NLM BITS 2.0 https://github.com/wendellpiez/JATSKit
  • ◯ Batch Document Converter Oxygen XML Batch Document Converter Addon https://www.oxygenxml.com/doc/versions/26.0/ug-editor/topics/batch-converter-addon.html
  • ◯ XSL-FOの基礎 第2版 XSL-FOの基礎 第2版 – XML を組版するためのレイアウト仕様 XML関連出版物 – Antenna House Formatter https://www.antenna.co.jp/AHF/ahf_publication/index.html#fo-basis

セミナー・講演会 資料DOCUMENT

セミナー
講演会の資料
Speaker Deckへ
セミナー・講演会 資料

JATS日本語版JATS JAPANESE EDITION

JATS日本語版Tag Libraryへ
JATS日本語版

JATS4R日本語版JATS for ReUse

JATS4RJATS for ReUseへ
JATS4R日本語版