TEIのODD・XSLT・Processing Modelの違い — スキーマ定義・変換・描画宣言の3レイヤーを整理する

TEI/XML を扱うときに登場する ODD・XSLT・Processing Model の3つを、最小限の例で役割ごとに整理します。スキーマ定義・変換・描画宣言という別レイヤーの関係を初心者向けに説明します。

teixmlxsltodddigital-humanities

台本(フルテキスト)

動画の掛け合いを書き起こしたものです。音声を再生しづらい場合はこちらをお読みください。

オープニング

  • TEI で出てくる ODD・XSLT・Processing Model
  • 3つは二者択一ではない
  • それぞれの役割を整理する
めたん
みなさんこんにちは、めたんです。
ずんだもん
ずんだもんなのだ。よろしくお願いするのだ。
めたん
今回は、TEI を触り始めたときに出会う、ODD・XSLT・Processing Model という3つの言葉を整理するわ。
ずんだもん
TEI って、なんなのだ?
めたん
Text Encoding Initiative の略で、人文学のテキストをデジタルで構造化するための国際標準ね。図書館や歴史研究で広く使われているの。
ずんだもん
その3つの言葉、どれを使えばいいのか迷うのだ。
めたん
そこなのよ。実はこの3つは、どれかを選ぶものじゃなくて、それぞれ別の仕事をしているの。今日はそれをはっきりさせるわ。

3つの役割を整理

  • XSLT … XML を別の形式に変換する
  • ODD … 使う要素・属性を定義する
  • Processing Model … ODD の中に描画方法を書く
ずんだもん
まず、ざっくり教えてほしいのだ。
めたん
いいわ。XSLT は、XML を HTML などの別の形式に変換するもの。
めたん
ODD は、TEI のどの要素や属性を使うかを定義するもの。
めたん
Processing Model は、その ODD の中に、各要素をどう表示するかを書く仕組みね。
ずんだもん
XSLT と ODD は、別ものなのだ?
めたん
そう、別のレイヤーよ。そして Processing Model は ODD の一部なの。ODD の中に入れ子で書くものなのよ。
ずんだもん
なるほど、XSLT だけが独立しているのだ。
めたん
その通り。まずこの位置関係をおさえておくと、混乱しにくいわ。

XSLT — TEI を変換する

  • XSLT は XML を変換する W3C 標準言語
  • TEI を HTML に変換する用途でよく使う
  • 変換ルールを自分で書く
ずんだもん
XSLT から詳しく教えてほしいのだ。
めたん
XSLT は XSL Transformations の略で、XML を別の形式に変換するための W3C 標準の言語ね。
めたん
TEI の XML は、そのままだとブラウザで読みやすい形にならないの。だから HTML に変換する用途でよく使うわ。
ずんだもん
どうやって変換するのだ?
めたん
「この要素が来たら、こう出力する」というルールを並べていくの。たとえば人名の要素を、HTML のスパン要素に変換する、という具合ね。
ずんだもん
ルールを自分で書くのだ?
めたん
そう。自由度は高いんだけど、HTML 用、PDF 用、と出力の種類だけスタイルシートを保守することになるわ。

ODD — 使う要素を定義する

  • ODD は使う要素・属性を定義する
  • スキーマと仕様書を生成できる
  • ODD 自体は HTML を作らない
ずんだもん
次は ODD なのだ。
めたん
ODD は One Document Does it all の略。TEI のカスタマイズを記述するものよ。
ずんだもん
カスタマイズって、なにをするのだ?
めたん
TEI には500近い要素があるけど、ひとつのプロジェクトで全部は使わないの。「この資料では人名と地名と日付だけ使う」といった取り決めを ODD に書くのよ。
めたん
ODD からは、スキーマと仕様書を生成できるわ。スキーマがあれば、XML が取り決めに沿っているか機械的に検証できるの。
ずんだもん
散文のマニュアルに書くのと、なにが違うのだ?
めたん
機械が強制してくれる点ね。タイプは person か place だけ、と ODD に書けば、ほかの値を書いたときスキーマ検証で弾けるの。
めたん
大事なのは、ODD は HTML を作らないということ。ODD が決めるのは何が正しい XML かで、表示は別の担当よ。

Processing Model — ODD に描画を書く

  • Processing Model は ODD の中の model 要素
  • behaviour で描画方法を宣言する
  • 標準で26種類の behaviour
ずんだもん
3つめの Processing Model なのだ。
めたん
Processing Model は、ODD の中に各要素をどう表示するかを書く仕組み。別ファイルじゃなくて、ODD の中に model という要素を足したものなの。
ずんだもん
ODD のスキーマの部分とは、なにが違うのだ?
めたん
スキーマの部分が何が正しい XML かを決めるのに対して、Processing Model はその要素をどう見せるかを決めるの。
めたん
model 要素には behaviour という属性があって、block、inline、note、heading みたいな決められた語彙から選ぶの。標準では26種類あるわ。
ずんだもん
その指示は、だれが読むのだ?
めたん
Processing Model に対応した processor、たとえば TEI Publisher が読み取って、HTML などを生成するの。
めたん
XSLT を一から書く代わりに、ODD に宣言だけ書く。それが Processing Model の発想ね。

XSLT と Processing Model の使い分け

  • XSLT … 凝ったレイアウトに向く
  • Processing Model … 一般的な文書・複数出力に向く
  • 語彙の範囲を超えるなら XSLT
ずんだもん
XSLT と Processing Model、どっちも変換するのだ。どう使い分けるのだ?
めたん
ここが一番混同しやすいところね。Processing Model は決まった語彙で宣言するから、HTML、PDF、EPUB と複数の出力を一度の記述でまかなえるの。
ずんだもん
じゃあ Processing Model のほうがいいのだ?
めたん
一般的な構造の文書ならね。でも behaviour の語彙は、段落や見出しといった構造的な意味を表すものなの。見た目を細かく作り込む変換には向かないわ。
ずんだもん
凝った見た目のときは?
めたん
そういうときは XSLT を手で書くほうが素直よ。たとえば版面を忠実に再現するような用途では、XSLT が選ばれることが多いみたい。
ずんだもん
役割で選べばいいのだ。

よくある誤解

  • 「ODD は XSLT の代わり」… ちがう
  • 「Processing Model は ODD と別もの」… ちがう
  • 「TEI には ODD が必須」… 必須ではない
ずんだもん
よくある勘違いも知りたいのだ。
めたん
3つ挙げるわ。ひとつめ、ODD は XSLT の代わりになる。これはちがうの。ODD はスキーマと仕様書のためのもので、HTML を作るのは XSLT か Processing Model よ。
ずんだもん
ふたつめは?
めたん
Processing Model は ODD とは別もの。これもちがって、Processing Model は ODD の一部なの。
ずんだもん
みっつめなのだ。
めたん
TEI を使うなら ODD が必須。これも必須じゃないわ。全要素入りのスキーマでも検証はできるの。ODD はプロジェクト固有のルールを強制したいときに効くものよ。
ずんだもん
なるほど、整理できてきたのだ。

まとめ

  • ODD … 使う部品の定義
  • Processing Model … ODD の中の描画宣言
  • XSLT … ODD と独立した変換処理
めたん
最後にまとめるわ。ODD は、使ってよい部品の定義。
めたん
Processing Model は、ODD の中に書く描画の宣言。
めたん
そして XSLT は、ODD とは独立した変換処理ね。
ずんだもん
役割の違うレイヤーだと思えば、混同しないのだ。
めたん
そういうこと。詳しい解説と、behaviour 26種類の一覧は、ブログ記事にまとめてあるわ。
ずんだもん
概要欄のリンクから見てほしいのだ。
めたん
それじゃ、また次回。
ずんだもん
ばいばいなのだ。