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種類の一覧は、ブログ記事にまとめてあるわ。
- ずんだもん
- 概要欄のリンクから見てほしいのだ。
- めたん
- それじゃ、また次回。
- ずんだもん
- ばいばいなのだ。