1 TEIの基礎構造

Contents

この章では,本ガイドラインで定義されている符号化スキームの基礎構造を解説する. 以下に続く章を理解する為の概念的枠組みや,それがどのように実装されているのかを紹介するものである. 本章の内容は,XMLやXMLスキーマ( v XML入門を参照) を既に知っている読者を想定しているが,それを知らなくとも理解できるように書かれている. 他の章では,より技術的な詳細が論じられる事になる. 例えば, 22 ドキュメンテーション向け要素 では,このガイドライン自体を定義するXMLスキームについて解説 されていたり,また, 23 TEIの使い方 では,ODDプロセッサを使うことを想定しながら,スキームの変更 や適合性の問題について解説している. この2つの章は,新たにTEI準拠のスキームを作る利用者が読むべ き内容になる.

TEI符号化スキームは,複数のモジュールから構成されている. 各モジュールの定義では,XML要素と属性が宣言されている. また,それら要素宣言の中では,ひとつ以上の要素クラス が定義されている. また,可能な要素内容や属性が,当該クラスへの参照と共に定義さ れている. この様な,間接的な定義が,TEIのシステムの堅固さと柔軟性を生 んでいる. 要素は,ある要求に相応しいスキーマを,自由に定義す るために組み合わされることになる. これにより,既存のクラスや要素を参照する新しい要素を付 け加えることも容易であるし,あるスキーマに含まれているモジュー ルが定義する要素を除外する為にも使うことができる.

TEIスキーマは,他のモジュールの組み合わせを使い, 構成されているかもしれない. その中でも,いくつかのTEIモジュールはとりわけ重要であり,例外 を除いて,常に使用されるべきである. 例えば,TEI基盤モジュール(tei)は,他のモジュールで使用されるクラス,マクロ, データ型を定義する,重要なものである. また,3 コアモジュール で定義されているコアモジュー ル(core)には,ほぼ全ての文書で使われるだろう要素が 定義されており,グローバルに使われることが推奨されている. 2 TEIヘダーで定義されて いるヘダーモジュールは,TEIヘダーで使用される,メタデータ向 けの要素や属性が含まれている.TEIヘダーは,TEI文書で必須であ る. また,4 テキスト 構造モジュールで定義されているテキスト構造モジュールでは, 書籍に準じるものを符号化する際に必要となる,基本構造向けの要 素が宣言されている. 従って,ほぼ全てのスキーマで,上記4つのモジュールは必須であろう.

TEIスキーマを定義する文書自体も,TEI文書になっている. そこでは,22 ドキュメ ンテーション向け要素で解説されているモジュールにある要 素が使われている. この文書を,非公式にはODD文書と呼ばれている. ODDとは,‘One Document Does it all(ひとつの文書で全てに対応 する)’という意味である. ODD文書を維持または処理するためのスタイルシートは,TEIコンソー シアムがメインテナンスをしている. このTEIガイドラインも,ODD文書で管理されている. ODD文書に関する詳細は, 23.4 Implementation of an ODD Systemにある. ODD文書からは,代表的な3種類のスキーマ言語,XML DTD,ISO RELAX NG, W3C XML Schemaで使用されるスキーマを生成することができる. また,同時に,本書のようなドキュメントやwebページを生成する ことができる.

本章では,TEI基盤モジュールについて解説する. 本章を読み飛ばしたとしても, 23.2 Personalization and Customizationにあるよう, TEIを独自に修正して使う場合には,本章で紹介されている内容の 理解が必要になってくる.

本章は,はじめに,TEIスキームで使われている,各モジュールに ついて解説をする. 1.2 TEIスキーマの定義 では,TEIスキーマを作り上げる方法を,XML DTD,RELAX NG, W3C Schemaの3つのスキーマ言語を使いながら紹介する.

次に,本章で一番大きな節として,要素とその特性を定義するため に使われる要素や属性を紹介する( 1.3 TEIのクラス).

最後に,1.4 TEIのマクロでは,マクロの考え方を紹介す る. マクロとは,共通してて使われる内容モデルを定義したものである. また,マクロには,TEIの属性で採られる属性値の定義域を制限す るデータ型を定義したものもある.

1.1 TEIのモジュール

このガイドラインでは,各種の文書を記述するための要素や属性 が,数百ほど定義されている. それぞれの定義では,以下のような項目が用意されている.
  • 散文による解説
  • 形式的定義.本ガイドラインで定義されている特別なXML 表現と,RELAX NGの要素を組み合わせて表現されたもの.
  • 用例

ガイドライン中の各章では,関連する要素が紹介され,必要な宣 言が定義されている. この宣言のまとまりを,通称モジュールと呼んでいる. 全ての定義は,付録としてある,参照章に一覧がまとめられてい る. また,各章で示されている形式的定義も,対応するモジュール内 でまとめられている. 利便性を考えて,各要素には,1つのモジュールが割り当てられ ている. これは,とりわけ,特定の領域での利用や,特定の利用法を想定 してのことである. 従って,モジュールには,関連する要素宣言がまとめられている. この場合,TEIスキーマは,少数のモジュールを集めて構成され ることになる. この詳細は,以下にある 1.2 TEIスキーマの定義 にある.

以下にある表は,本ガイドラインで定義されているモジュールの 一覧である.
モジュール名 公開識別子 ガイドラインの章
分析モジュール(analysis) Analysis and Interpretation 17 簡易分析機能
確信度モジュール(certainty) Certainty and Uncertainty 21 確信度・責任
コアモジュール(core) Common Core 3 コアモジュール
コーパスモジュール(corpus) Metadata for Language Corpora 15 Language Corpora
辞書モジュール(dictionaries) Print Dictionaries 9 Dictionaries
舞台芸術モジュール(drama) Performance Texts 7 Performance Texts
図表式モジュール(figures) Tables, Formulae, Figures 14 図,表,式
外字モジュール(gaiji) Character and Glyph Documentation 5 標準化されていない文字と字形の表現
ヘダーモジュール(header) Common Metadata 2 TEIヘダー
素性構造モジュール(iso-fs) Feature Structures 18 素性構造
リンクモジュール(linking) Linking, Segmentation, and Alignment 16 リンク,分割,統合
手書きモジュール(msdescription) Manuscript Description 10 Manuscript Description
名前モジュール(namesdates) Names, Dates, People, and Places 13 名前,日付,人物,場所
グラフモジュール(nets) Graphs, Networks, and Trees 19 グラフ,ネットワーク,木
発話モジュール(spoken) Transcribed Speech 8 Transcriptions of Speech
タグ定義モジュール(tagdocs) Documentation Elements 22 ドキュメンテーション向け要素
(TEI)基盤モジュール(tei) TEI Infrastructure 1 TEIの基礎構造
校合モジュール(textcrit) Text Criticism 12 校本
テキスト構造モジュール(textstructure) Default Text Structure 4 テキスト構造モジュール
転記モジュール(transcr) Transcription of Primary Sources 11 Representation of Primary Sources
韻文モジュール(verse) Verse 6 韻文

上記の各モジュールを選択した際にスキーマに取り込まれる,クラス,要素, マクロについては,該当する各章で詳しく解説されている. 上記以外の章では,TEIスキームを使う際の他の内容が解説され ている.

1.2 TEIスキーマの定義

XML文書が妥当であることは知るには,当該文書の構造をスキー マに従い検証することが必要となる(その必要がないものは,整 形式扱いとなる). この詳細は,v XML入門にあ る. 妥当なXML文書では,スキーマはTEIスキーマに準拠していなけれ ばならない. この詳細は, 23.3 Conformance にある. ローカルで使う際には,自分たちで使うスキーマを,暗黙のうち に想定することも許されるが,そのデータを交換する場合には,関 連する文書は明示される必要がある. これに関して,本ガイドラインで推奨する手法は,当該文書を妥 当なものにする為に必要なTEIスキーマの規定を明示する手法である.

TEI準拠のスキーマとは,TEIモジュールを使ったものであるが, そこに各モジュールにある要素や属性を修正して,例えば,名前を変え るような変更を加えたものも可能である. TEIスキーマを指定するための方法として, 22 ドキュメンテーション向け要素で紹介されている 要素 schemaSpec を使い,アプリケーションに依存しない手法がある. この手法を使い,TEIのスキーマを拡張することができる. 例えば,新しく要素を追加したり,別のXMLアプリケーションを 参照することができる. このどちらの例でも,それを定義した文書をソフトウェアで処理 することで,XML DTDやRELAX NG,W3C Schemaなどのスキーマ言 語で 定義された,形式的なスキーマが生成される. これら,自動生成されたスキーマは,検証ソフトやエディタといっ た,XML処理ソフトで使用することができる.

1.2.1 簡単なカスタマイズ

一番簡単にTEIスキームを変更する方法は,先に示した4つのモ ジュールを使うことである. ODDの書式では,スキーマを定義する際に,以下のような書式を採る.
<schemaSpec ident="TEI-minimalstart="TEI">
 <moduleRef key="tei"/>
 <moduleRef key="header"/>
 <moduleRef key="core"/>
 <moduleRef key="textstructure"/>
</schemaSpec>

ここでは,4つのモジュールの定義が,参照として記述されており,それらは, 要素 moduleRefの属性keyで指定されている. このスキーマの定義自体にも,IDは付与されている(TEI-minimal参照). ODD処理ソフトは,ここにある宣言から,XML DTDやRELAX NG, W3C Schemaなどによる適切なスキーマを生成することになる. 原理上は,どのようなスキーマ言語にも対応することが出来る. 結果として得られたスキーマは,様々な文書インスタンスと共に使うこと が出来る. この詳細は, v XML入門にある. スキーマに従った妥当な文書インスタンスの開始点(すなわち, ルート要素)は,属性startで指定さ れる. ODDの処理についての詳細は,23.4 Implementation of an ODD Systemにある.

1.2.2 大きなカスタマイズ

本ガイドラインでは,TEIスキームを構成する各モジュールの内 容を1つずつ解説してゆき,各モジュールで使われている要素を 詳しく紹介してゆく. 実際にテキストをマークアップする際には,複数のモジュールを 同時に使うことになる. その理由は,テキストには様々な要素が含まれており,また,符 号化する人の目標も様々だからである. テキストに含まれている様々な要素として,例えば,以下のようなものがある.
  • 異なる種類のテキストがまとめられているテキスト.例えば,散文,韻文,脚本などの 作品集.
  • 短いテキストが埋め込まれているテキスト.例えば,散文中にある詩や歌詞.
  • 章ごとに形式が異なっているテキスト.例えば,散文形式や辞書の形式,脚本 の形式など章ごとに持つ小説.
  • 詳細な注釈を含んでいるテキスト.例えば,修辞や言語学的な素性についての 注釈を含むもの.
  • ある資料について,外形までの情報ももれなく記述する編集方針で作られ たテキストと,文字データに焦点を当 てたテキストデータを同時に持つもの.
  • 特別な付加メタ要素を含んでいるテキスト.例えば,手書き資料を詳細に符号 化したもの.
TEIでは,これら全てに対応する機能を用意している. また,この他の多くのケースにも対応している. ひとつのスキーマ中で,同時に複数のモジュールにある要素や属性 を使うことも可能である. あるモジュールでは,粒度の異なるテキストを扱うための要素や 属性が用意されている. 例えば,以下のようなものである.
  • 1つのTEIヘダーの元に,複数のTEI文 書を持つコーパスまたはコレクションの定義( 15 Language Corporaを参照).
  • 前付や後付が選択的に付随するテキストの集合体といった,構成的テキストの 定義( 4.3.1 複合テキストを参照).
  • テキスト中に自在に出現可能な,埋め込みテキストを表現する要素. ( 4.3.2 自在テキストを参照).

本ガイドラインの以下の章では,これらの素性向けのマークアップ構造を,詳 細に解説している. マークアップ構造は,プロジェクトや利用場面に合わせて,組み合わせて作る ことが出来る.

例えば,手書き資料の野心的な電子版を作るプロジェクトでは,詳細なメタ データを作るために,資料の電子写真,内容の書き起こし,書誌 学的・地理学的データに対応する,複数のモジュールをまとめた スキーマが必要になるが,それは以下のようになる.
<schemaSpec ident="TEI-PROJECTstart="TEI">
 <moduleRef key="tei"/>
 <moduleRef key="header"/>
 <moduleRef key="core"/>
 <moduleRef key="textstructure"/>
 <moduleRef key="msdescription"/>
<!-- manuscript description -->
 <moduleRef key="transcr"/>
<!-- transcription of primary sources -->
 <moduleRef key="namesdates"/>
<!-- names, dates, people, and places -->
</schemaSpec>
または,より簡単な方法としては,例えば,コアモジュールと転記モジュール のみをを使うことも考えられる. これは,以下のようになる.
<schemaSpec ident="TEI-TRANSCRstart="TEI">
 <moduleRef key="tei"/>
 <moduleRef key="core"/>
 <moduleRef key="textstructure"/>
 <moduleRef key="transcr"/>
</schemaSpec>

また,TEIでは,より細かなカスタマイズもサポートしている. 例えば,スキーマは,あるモジュールにある要素や属性を外したり,名前を変 更したり,新しい要素や属性を追加する場合である. この様な修正に関する解説は, 23.2 Personalization and Customization にある.また,この適合性に関する解説は 23.3 Conformance. にある. これらの機能は,全てのスキーマ言語に対応している(但し,ある機 能は,言語によっては使えないかもしれない). ODD言語により,TEIのモジュールと非TEIモジュールを統合して,1 つのスキーマを作ることが出来る. 但し,この場合,非TEIモジュールはRELAX NGで定義されている必要 がある( 22.6 Combining TEI and Non-TEIのモジュールを参照).

1.3 TEIのクラス

TEIスキームには,400を超える要素がある. これらの要素を知り,分類し,修正していく為に,多くの要素は,形式的にあ る方法で区分されている. クラスは,要素中の共通要素を,2種類の弁別区分にまとめ上げた ものである. あるクラスに属する要素同士は,属性集合を共有するか,または同じ内容 モデル中に出現するものである. クラスには,属性クラスとモデルクラスがあり,前者は,属性を共有 するもの,後者は,同じ場所に出現するものである. どちらのクラスでも,そこに所属する要素はクラスから特性を継承 することになる.

クラス(または,そのクラスに属する要素)は,他のクラスから特性 を継承することもある. 例えば,クラスAが,クラスBのメンバー(すなわち,サブクラス)で ある場合,クラスAに属するどの要素も,クラスAで定義された特性 に加えて,クラスBで定義されている特性を継承することになる. この場合,クラスBは,クラスAの上位クラス(スーパークラス)であ る,とも表現できる. 上位クラスの特性は,そのサブクラスのどのメンバーにも継承され る.

TEIスキームを構成することになるクラスの基本的な理解は,強く 推奨され,また,カスタマイズの際には,その理解は必須となる.

1.3.1 属性クラス

属性クラスは,属性を共通して持つ要素をまとめたものである. 属性クラスの名前は,att.で始まっている. 例えば,クラスatt.naming は,属性keyを共通して持つものがメ ンバーである. これにより,各要素が独自にそれを定義することなく,継承する だけで済ませることができる. この属性は,クラス att.naming により定義(から継承)されていることになる. 例えば,属性keyを持った方がよい別 の要素をTEIスキーマに埋め込む際には,クラス att.naming のメンバーに,その要素を追加するのが一番簡単な方法である.

属性クラスのいくつかは,TEI基盤モジュールで定義されている. 従って,それらの属性クラスは,グローバルに使うことができる. 他の属性クラスは,特定のモジュール向けに用意されており,詳 しくは各章で定義してある. そのようなクラスで定義されている属性は,当該モジュールがス キーマに組み込まれていなければ,使うことは出来ない.

属性クラスの属性は,当該クラス中で定義されている他にも,間 接的に,他のクラスにある定義を継承することで定義されること がある. 例えば,属性クラス att.pointing.group には,属性domainstargFuncがあるが, このクラスは, 別の属性クラス att.pointing の下位クラスであることから, その属性クラス att.pointing で定義されている属性 typeevaluateも 継承している. 属性クラス att.pointing には,上記2つの属性がメンバーとしてであるが, 属性クラス att.pointing.group には,4つの属性全てがメンバーとしてある.

あるモジュールでは, 上位クラスを定義することがある. 例えば,グローバル属性クラスである att.divLike には,属性 orguniform, (訳注:原文の間違い.正しくはpart) sample がメンバーとして, 韻文モジュール向けの 属性クラス att.metrical では,属性 met real rhyme がメンバーとしてある. 属性クラス att.metrical は,属性クラス att.divLike の上位クラスとして定義されているので, もし仮に,韻文モジュールが当該スキーマに既に含まれている場合には, 属性クラス att.divLike の要素は,6つ全ての属性を使うことができる. しかし,もし,韻文モジュールがスキーマに含まれていないときには, 属性クラス att.divLike の要素は,そのメンバーとしてある3つの属性しか使うことが出来ない.

特定モジュール向けの属性については,当該モジュールの章で解 説されている. 特別な属性クラス att.global は,全てのモジュールで使うことが出来る. 従って,この詳細は,続く節で解説する. 全属性クラスのリストは, 付録 B 属性クラス にある.

1.3.1.1 グローバル属性
以下にある属性は,全てのTEI要素で使うことができる.
  • att.global は,TEIスキーム中の全ての要素で使うことができる属性をまとめている.
    xml:id 要素にユニークなIDを与える属性をまとめている.
    n 当該文書内でユニークである必要はない,番号やラベルを要素に与える属性を まとめている.
    xml:lang 要素内容で使われている言語を, BCP 47に従い付与する属性 をまとめている.
    rend 当該要素が元資料でどのように表示されているのかを示す属性をまとめている.
    rendition 当該要素が元資料でどのように表示されているのかの解説への参照を示す属性 をまとめている.
    xml:base 相対URIを絶対URIへと変換する際に使われるベースURIを示す属性をまとめて いる.

上記の属性は,どのTEIの要素中でも任意に使うことができる. 全く使わなくとも良い.

1.3.1.1.1 要素識別子とラベル

属性xml:idの値は, W3Cで定義されている XML として正当な名前である必要がある. すなわち,名前は文字または下線(‘_’)ではじめられ,続い て,文字,数字,ハイフン,下線,ピリオド統合文字から構成される必要がある(訳注:正確な記述ではない.正しい定義は,XML規格を参照のこと). 1

XMLの名前(すなわち,属性 xml:idの値)では, 大文字と小文字を分けて考えるので,例えば, partTimeparttimeは 別の名前になり,異なる要素を示すことになる.

もし,2つの要素に同じ識別子が与えられていた場合には, XMLパーサは構文エラーを返すことになる. 従って,以下にある例は,妥当なXML文書ではない.
<p xml:id="PAGE1"><q>What's it going to be then, eh?</q></p>
<p xml:id="PAGE1">There was me, that is Alex, and my three droogs,
that is Pete, Georgie, and Dim, ... </p>

要素にユニークな識別子を付与する方法については, 3.10.2 オリジナルの参照システム を参照のこと.

属性nは,要素の識別子となる名前や数値を持つこ とになる. この時,その属性値は,属性xml:idの値のように,公式のものであ る必要はない. 属性値には,文字列をとることができる. 典型的な属性値は,数値や,それと同類に数え上げられるラベ ルである. 例えば,数値リストの項目に付与される付番などを,この属性 nで示すことになる. これにより,元資料にある,例えば,章リスト中に,10章が2 回あり,11章が欠けているなどの,付番の間違いを記録することが可能 になる.
<list type="ordered">
 <item n="1">About These Guidelines</item>
 <item n="2">A Gentle Introduction to SGML</item>
 <item n="9">Verse</item>
 <item n="10">Drama</item>
 <item n="10">Spoken Materials </item>
 <item n="12">Print Dictionaries</item>
</list>
属性nは,要素に関連したユニークでない名前を記録する際にも使うとができる. 以下の例のように,ユニークな識別子と共に使われることもある.
<div type="Bookn="Onexml:id="TXT0101">
<!-- ....-->
 <div type="stanzan="xlii">
<!-- ... -->
 </div>
</div>
上記のように,属性xml:idと属性 nのいずれかを必ず記さなければなら ない,という制約はない. XMLプロセッサは,このような付加的な記述がなくとも,XML文書 中にある要素の線的順序は,特定することができる. 長い詩にある各行に付番するには,例えば以下のようにすること が出来る.
<l n="1">
<!-- ....-->
</l>
<l n="2">
<!-- ....-->
</l>
<l n="3">
<!-- ....-->
</l>
<!-- ....-->
<l n="100">
<!-- ....-->
</l>
但しこれは,冗長であろう.
1.3.1.1.2 言語識別

属性xml:langは,要素やその要素内容に関する言語,書記システム,文字集合の情報を示している. この属性値が指定されていなければ,親要素中の直近の属性から, 属性値を継承することになる. 従って,テキストで中心となる言語を規定する簡単な方法は,要素 TEI でそれを規定することで,子要素にある xml:langのデフォルト値を決めてしまうことである. 中心となる言語とは異なる言語である時には,明示的に属性値が与えればよい. 言語が変わったときには,それを明示的に xml:langで示すことが強く推奨されている. この詳細については vi 言語と文字集合 を参照のこと.

属性xml:langの値は,規格としてある値を付与しなくてはならない. この詳細は, vi.i 言語の識別 を参照のこと.

以下にある2つの例では,言語について同じ情報を記述している. ひとつ目の例では, 要素 emph にある属性 xml:lang は,その親要素である p の属性値と同じ値を示しているが,2番目の例では,親要素にある属性値を継 承している.
<p xml:lang="en"> ... Both parties deprecated war, but one of
them would <emph xml:lang="en">make</emph> war rather than let
the nation survive, and the other would <emph xml:lang="en">accept
 </emph> war rather than let it perish, and the war came.</p>
<p xml:lang="en"> ... Both parties deprecated war, but one of
them would <emph>make</emph> war rather than let
the nation survive, and the other would <emph>accept</emph>
war rather than let it perish, and the war came.</p>
以下の例のように, 英語ではなくラテン語で専門用語が示されている場合には,必ず,要素 term にある属性xml:langでそれを指定する必要がある. しかし, 要素 qの場合には, 親要素と同じ言語が使われていることから,属性 xml:langを使う必要はない.
<p xml:lang="en">The constitution declares <q>that no bill of attainder
   or <term xml:lang="la">ex post facto</term> law shall be passed.</q> ... </p>

ヘダー中の要素 language で指定されている言語に関する付加情報については注すること( 2.4.2 言語を参照).

1.3.1.1.3 表示識別
属性rendは,元資料にあるテキストの物理的な表示のされ方に関する情報を示すものである. 以下の例では,強調された単語と,斜体で印刷された個人名称を示すために使われている.
<p> ... Their motives <emph rend="italics">might</emph> be
pure and pious; but he was equally alarmed by his knowledge
of the ambitious <name rend="italics">Bohemond</name>, and
his ignorance of the Transalpine chiefs: ...</p>
要素 emphnameが 全てまたはその殆どが斜体のテキストを示すためのものであれば,TEIヘダー 中にそのことを登録しておいた方が便利で(その際には要素 renditionを使 用する),それとは異なるもののみを属性 rendで指定すればよい.

属性 rend の値は,自由記述であるが,符号化するひとは,テキストの字体や手書きの表現方法を示す,よう准的な用語を使うべきである.

2.3.4 タグ付け宣言 で定義されている要素 rendition は,自由記述や形式言語による記述の両方で使うことが出来る. 要素 rendition は,グローバル属性renditionで示された値または デフォルト値により,全ての要素と関連することが可能である. 例えば,以下のような例である.

<!-- define italic style using CSS --><rendition xml:id="ITscheme="css">text-style: italic</rendition>
<!-- set italic style as default for the emph and hi elements -->
<tagUsage gi="emphrender="#IT"/>
<tagUsage gi="hirender="#IT"/>
<!-- indicate that a specific p element is also in italic style -->
<p rendition="#IT"/>

属性renditionは,1つ以上の要素 rendition を示すことになる. その各要素では,元資料中のテキストの表示に関する側面が定義されている. この詳細は,形式言語,例えば,CSS (Lie and Bos (eds.) (1999) )やXSLFO (Berglund(ed.)(2006)) や,そのほか,プロジェクトが開発した形式言語などを使い記述することができる. または,自由記述でも構わない. CSSやXSL-FOは,一般には,文書を画面に表示したり紙に印刷したり する際に使われるが,印刷の様子や手書きの様子など,様々な元資料 の外形を記述する形式表現としても使うことができる. 例えば,CSSやXSL-FOは,字形,太さ,スタイル,字間,行間などを記述すること ができる.

属性renditionと 属性rendが両方使われている場合,後者が常に優先される. 属性 renditionは, X/HTMLにある属性classと似たもので,CSSによる スタイル宣言の参照するようなものである. 属性 rend は,XHTMLまたはHTMLにある属性styleと似たもので, 文書中で使われる,インラインで表現を指定するためのものである. このいずれの場合に置いても,TEIの属性は,元資料における表現を記 述するために使われており,それと似てはいるが,何らかの出力の表現 方法を指定するものではない.

1.3.2 モデルクラス

TEIのモデルクラスでは,ある文書中に同じく出現する素性を共有 するものを,そのメンバーとしている. TEIにおける要素の内容モデルでは,特定の要素が直接定義されることは なく,あるモデルクラスを介して,間接的に要素が定義されている. これにより,内容モデルを簡単にでき,さらに一貫性も保つことが 容易になる. また,理解したり,修正したりすることも容易になる.

属性クラスと同様に,モデルクラスにおいても,下位クラスと上位 クラスというものがる. 要素が,それが属するクラスから,文書中に出現するための規定を 継承するように,下位クラスのメンバーは,上位クラスの規定を全 て継承することになる. 時に,このようなクラスは,TEIが使える多くの要素を,小さな構造に収 めてしまうために使うことも可能である. 但し,これは一般的な用法ではない.

事実,要素が所属するクラスは,2つの側面から捉えることができ る. ひとつは,文書構造中に出現できる場所を規定することである. もうひとつは,同じ種類の意味を示唆することである. 例えば,段落中に出現する要素をまとめたある大きなクラスでは, 複数の他のクラスを含んでいる. このような子クラスは,構造上同じ特性を共有はしているが,その 利用場面は異なるものである. 例えば,あるクラスは,強調と関連し,あるクラスは名前や場所と 関連するなどである. 「クラスメンバーの出現が認められる場所の集合」とするのは, かなり制約のきつい表現である. ある特定の要素中,または要素のクラスに出現することが出来るも のといえる. または,要素は,多くの場所,または場所の集合で出現が認められ ているといえる.

この種の要因は,モデルクラスに与えられた名前とも関連している. 名前にpartという言葉が含まれている モデルクラス,例えば, model.divPartmodel.biblPartは, その構造上の場所に関連して定義されたものである. 例えば,要素 div の内容として出現する要素(または要素のクラス)は,クラス model.divPartを構成している. また,要素 bibl の内容として出現するものは,クラス model.biblPart を構成している. また,モデルクラスの名前にlikeと いう言葉が含まれている場合,例えば,モデルクラス model.biblLikemodel.nameLikeでは, そのメンバーにはそれぞれ共通して,例えば,書誌情報を含むこと や,ある種の名前を含むことなどの特性を持つことが示唆されてい る. この様に,意味的にまとめられたクラスは,構造上まとめられた 大きなクラスを分割する,便利な手段にもなる. 例えば,一般的な構造に関するクラスである model.pPart.data (段落を構成する要素をまとめたもの) には,4つの意味的にまとめられたクラス model.addressLikemodel.dateLikemodel.measureLikemodel.nameLikeが, メンバーとしてある. ちなみに,4番目のメンバーは,それ自身が上位クラスであり,3つのメンバーを含んでいる.

多くのクラスは,TEI基盤モジュールで定義されているが, 一般に,クラスは,モジュールがスキーマに含まれていなければ, 使われることはない. 何故ならば,要素宣言は,モジュールに含まれているからである. クラスは,トップダウン的に宣言されてはいない. むしろ,そのメンバーの要素宣言をまとめて,メンバーとしている. 従って,同じクラスでも,使われるモジュールが異なることで,異 なるメンバーで構成されることも可能である. すなわち,当該要素の(クラスで定義されている)内容モデルは,使 われるモジュールにより異なる.

いくつかのクラスは,全てのモジュールが使われている環境においても,1つのメンバーしか含まれていないものがある. そのようなクラスの存在により,例えば,特定の場所,とりわけ,TEIが十分に貢献できていないような領域に,新しい要素メンバーを付加することが簡単にできる. 具体的には,クラスmodel.rdgLikeは,元々は 中身が空であるけれども, 要素rdgを 使うために,校合モジュールをにより,拡張することも可能である. 校合の情報を構造化する新たな手段を追加したいのであれば,そ の要素を定義して,このクラスに追加することでできる.

1つのメンバーしか持たないクラスを使う,もう一つの背景として, クラスのメンバーが全ての文書で使われる必要はないが,とてもよ く使われる要素として,ある同じ場所では使われるケースを想定し ている. 例えば,特別な要素である gは, ユニコードにない文字やグリフを示すために使われるが,これは,クラス model.gLikeのメンバーとして, 外字モジュールがスキーマに取り入れられた時にのみ使われる. このクラスへの参照は,どの内容モデルにも含まれている. 理由は,これが使われたとき, 要素 g は,テキスト中のどの場所でも使うことができるようにしなくては ならないからである. しかし,そのようなクラスへの参照は,外字モジュールが取り込ま れない限りは,生かされることはない.

一方,TEI基盤モジュールで定義されているクラスの中には,結果 として,多くのメンバーで使われているものもある. 例えば,クラス model.pPart は,要素 p,すなわち,段落の中に出現する要素のクラス を全てまとめている. コアモジュールでは,50を超える要素が,このクラスに追加される ことになる. また,名前モジュールとタグ定義もじゅー津では,これに加えて, 20もの要素を追加することになる. 要素 pは, TEI文書の中で,基本的なブロックを構成する要素のひとつであることから, 各モジュールがこれを取り入れることは,驚くことではない. このようなクラスシステムにより,複雑な制御を可能にする便利な 手法を実現している. 一般に,要素は,よく使われるクラスには直接追加されることはな く,意味的にまとめられた,中間的なクラスを通して追加される.

1つしかメンバーを持たないクラスに加えて,1度しかTEI内で 使われないクラスというものもある. このようなクラスには,上位クラスは存在しない. 従って,このようなクラスには,クラス階層というものがない. このクラスは,高階な構造を持ち,外部からは同一のものとみなされる要素を管理するための,便利な手段となる. 2 この様なクラスのメンバーは,ひとつの要素または要素のクラス内で出現する ことはできない. 例えば,クラス model.addrPart は,要素 address の内容モデルを表現するためだけに使われている. このクラスは,他の要素クラス,例えば,どこでも使える要素や,住所の内容 としてしか出現しない要素などのクラスも参照している.

1.3.2.1 主なモデルクラス
TEIのクラスには,以下のような3つの分類がある.
区分
テキストの,主たる分類で,自身をメンバーにすることが可能 で,高階な構造を取り得る. このような要素は,クラス model.divLike, model.div1Likeなどをとる.
段落や段落レベルの要素で,テキスト内に直接出現できる. または,区分内で出現できる. 但し,塊内には出現することが出来ない. このような要素は,クラス model.divPart を,直接,または クラス model.pLikemodel.entryLikeなどのクラスを介 して,取りうる.
句レベル要素
塊(段落または段落レベル)の中でのみ出現するが,塊の間では(従って,区分直下にも)出現しない,例えば,強調された句,書籍の題目,編集上の施釉制など向けの要素. このような要素は,クラス model.phrase をとる. 3
TEIでは,上記3種類の分類から,以下のような基本グループを想 定している.
挿入レベル要素
リスト,注釈,引用など向けの要素. 塊の間で出現する(例えば,要素 div の子要素) か,または塊の中で出現する要素. クラス model.inter をとる. このクラスは,クラス model.phrasemodel.chunk の上位クラスではないことに注意すること. 3つのクラス model.phrasemodel.pLikemodel.interは選択的である.
構成要素
テキストやテキスト区分中に直接出現する要素. 上記の句レベルまたは塊要素の組み合わせ. この要素は,クラス model.commonを取る. このクラスは,クラス model.divPartmodel.intermodel.entryLike(辞書モジュールが使われている時) の上位クラスとして定義されている.
ざっくりいえば,テキスト中の前付,本文,後付は,一連の構成 要素が含まれており,これらは選択的に区分に分類される.

ある要素や要素クラスは,これらのグループには属さない. しかし,本ガイドラン中にある500を超える要素のうち,3分の2 は上記の分類に属している. 今後も,この分類スキームは,拡張される予定である.

全てのモデルクラスをアルファベット順にまとめたものが 付録 A モデルクラス にある.

1.4 TEIのマクロ

本章で規定されたTEI基盤モジュールでは,マクロも定義している. マクロとは,宣言中でよく使われる名前をまとめたものである. TEIのマクロは,TEIスキーマ中,2つの方法で使われる. ひとつは,頻出の内容モデルまたはその部分を表現するもの( 1.4.1 標準的な内容モデル)で, もう1つは,属性のデータ型を表現するものである ( 1.4.2 データ型マクロ).

1.4.1 標準的な内容モデル

TEIでは,異なる要素間で一貫性を保つために,以下にある,頻 出する内容モデルを積極的に使っている.
  • macro.paraContent 段落やそれ相当の要素の内容を定義する.
  • macro.limitedContent 現存する資料の転記で使われるものではない散文要素の内容を定義す
  • macro.phraseSeq 一連の文字列と句レベル要素を定義する.
  • macro.phraseSeq.limited 一般には,現存資料の転記に使われることはない,一連の文字列と句レベル の要素を定義する.
  • macro.schemaPattern 選択されたスキーマ言語による,要素にマッチするパタン.
  • macro.specialPara 一連の句レベルまたは挿入レベルの要素と共に,一連の構成要素レベルの要 素,または段落相当の構造を持つ,注釈やリスト項目となる要素の内容モデ ルを定義する.
  • macro.xtext 一連の文字列や外字要素を定義する.
本ガイドラインには,およそ500の要素が含まれている. 以下の表は,内容モデルでもっとも使われている上位7つをしめしたものである.
内容モデル 要素数 解説
macro.phraseSeq 83 クラス model.gLikemodel.globalmodel.phrase にある要素とテキストの組み合わせ.
macro.paraContent 49 クラス model.inter を加えたmacro.phraseSeq.
empty 39 内容を持たない要素.
macro.specialPara 24 クラス model.divPart を加えたmacro.paraContent.
macro.phraseSeq.limited 24 転記できない内容中で使われるクラス model.phraseSeqの部分集合.
text 21 タグ付けされていない素テキスト.
macro.xtext 19 クラス model.gLike の要素とテキストの組み合わせ.

1.4.2 データ型マクロ

TEIスキーマ中の属性値は,TEIデータ型を参照することで定義さ れている. 各データ型は,他の原始データ型,例えば, W3C Schema データ型やリテラル値などを使い,定義されている. このような間接的な定義を採用することにより,TEIに準拠した独自のスキームでは,データ型を再定義したり,定義への参照を修正したりすることが容易になる. TEIデータ型では,時に,スキーマ言語では制御できない,使用 に関する制限を付加的に含むことがある. TEI準拠のソフトウェアは,データ型の検証をすべきである( 23.3 Conformance ).

リテラル値または名前トークンがデータ型定義で使われている場 合,関連する値のリストは,推奨または可能な値の重要度を定義 している.

TEI規定のデータ型は,量を示す数値,可能性を示す数値,各種 の省略コードまたはキー,そしてポインタまたはリンクのグルー プに分けることができる.

以下にあるデータ型は,正規化された各種の属性値を統制するた めの属性で使われるものである. はじめに,量と可能性に関する表現として,以下のものがある.
  • data.certainty 確信度を示す属性値の程度を示す.
  • data.probability 出現度を示す属性値の範囲を定義する.
  • data.numeric 数値をとる属性値の範囲を定義する.
  • data.count 非負整数値を採る属性値の範囲を定義する.

data.probability のデータ型の例としては, 要素 damage や 要素 certainty にある属性 degree で採る値である. data.numeric のデータ型の例としては,クラス att.measurement のメンバーにある属性 quantity や,要素 numeric にある属性 value で採る値である. data.count のデータ型の例としては,要素 cellや要素 tableにある属性 cols で採る値である.

次に,正規化された日付や時刻,時間,真偽値を統制するための 属性で使われるデータ型である.
  • data.duration.w3c W3Cのデータ型を使い,時間幅を表現する当該属性値の範囲を定義する.
  • data.duration.iso ISO 8601にある標準形式を使い,時間幅を表現する当該属性値の範囲を定義する.
  • data.temporal.w3c 日付や時間などの時間表現をとる属性値の範囲を定義する.これは,W3Cの XML Schema Part 2: データ型に従ったものになる.
  • data.temporal.iso 日付や時間などの時間表現をとる属性値の範囲を定義する.これは,次の国際標準に準拠したものになる. Data elements and interchange formats - Information interchange - Representation of dates and times
  • data.truthValue 真偽値を示す属性値の範囲を定義する.
  • data.xTruthValue 不明の場合もある真偽値をとる属性値の範囲を定義する.
  • data.language 自然言語や書記システムを示す属性値の範囲を定義する.
  • data.sex 人間または動物の性を示す属性値の範囲を定義する.

これらの属性値は,既存の国際規格類が使われることになる. 例えば,時刻,時間,日付については, XML Schema Part 2: Datatypes Second Edition でも採用されたISO 8601を,真偽値にはW3C Schema datatypesを,言語の表記にはBCP 47を,性別にはISO 5218を使うなどである.

以下のデータ型は,より特殊な場面で使用されるものである.
  • data.outputMeasurement webページ上で表示する際の大きさを定義する値の範囲を定義する.
  • data.namespace W3CのXML名前空間で定義されている名前空間を示す属性値の範囲を示す.
  • data.pattern 正規表現を属性値として定義する.
  • data.pointer 他の資源へのポインタをとる属性値の範囲を定義する.
TEIの属性値で一番多いのは,名前やコードである. この種の属性値には様々な仕様があり,例えば,以下のようなものがある.
  • data.key 任意の識別子により属性値の範囲が定義される.典型例は,外部で定義されているものから値がとられる.
  • data.word いち単語またはトークンをとる属性値の範囲を定義する.
  • data.name XML名前としてある属性値の範囲を定義する.
  • data.enumerated 符号化されている記述にある,ひつとのXML名前を示す属性値の範囲を定義する.
  • data.code ポインターにより,コードの値を示す当該属性値の範囲を定義する.

クラス att.namingにある属性 keyは,現在のところ,データ型クラス data.key を採る唯一の属性である. これは,外部で定義された識別子,例えば,データベースのキーやファイル名などを示すために使われている. 外部で定義されているため,可能な値に制約は課せられない. 値には,ユニコード文字を使うことができる. もし,属性値に何らかの制約,例えば,特定システム下のデータベースキー作 成規則などを設ける時は,TEIヘダー中の要素 tagUsage にそれを記述することができる. その場合には,ここで示した各種データ型の使用を強要するものではない. そのような,特別な制約は, 23.2 Personalization and Customizationにある カスタム化の手法を使い,TEIスキーマに追加することが出来る.

要素 personにある属性 age で採られるデータ型 data.wordでは, トークンや単語の識別子を規定している. TEIでは,この様な用途で使われる文字に,次のような制約を課 している. The TEI places a fewconstraints on the characters which may be used for this purpose: すなわち,ユニコード文字のうち,文字,数字,句読点記号のみを,属性値 として使うことが出来る. このような属性値には,いわゆる空白文字は取れないことに注意 して欲しい. 例えば, cholmondeleyété1234e_contentxml:idなどは,正当な属性値であるが, grand wazooは正当な属性値ではない. この種の属性は,異なる種対の要素と(総合参照により)関連して使われることがある.

この意味で,データ型 data.nameの属性値は単語ともいえる. 但し,XML 1.0で規定された正当なXMLの識別子であるという制約はついている. 従って,そのような属性値は,数値や句読点記号で始まることはない. 例えば, cholmondeleyétée_contentxml:idなどは,正当な属性値であるが, grand wazoo1234などは,正当な属性値ではない. この種の属性値は,XMLの要素名や属性名として使われている.

要素 shift の属性 newや,クラス att.editLikeの属性 evidence 等で採られるデータ型 data.enumeratedには, データ型data.wordと同じ定義が与えられている. 但し,当該単語は,選択肢がまとめられた特定のリスト中から選ばれるという制約がある. いずれの場合でも,当該属性を含む要素やクラスには,可能な値のリストが,散文による解説と共に,規定されている. この値のリストは,オープンなもの(つまり,参考程度のもの),クローズなもの(つまり,選択が必須のもの),どちらも可能である. 後者の場合,当該データ型は,ata.enumeratedではなく,選択肢のリストを明示したものとなる.

データ型data.codeも,別の場所で詳細が定義されている符号化名を示していることから,これと似た機能を持つ. この場合,その詳細な定義は,一般には,同じ文書中の別のXML 要素内容に書かれていて,それをポインタで参照することになる.

属性は,例えば,ポインタや単語のリストから,1つ以上の属性値を取ることになる. TEIスキームでは,この種の特性は, 個々にデータ型として示されるのではなく,当該属性を解説するための要素 datatype で示されることになる. 詳しくは, 22.4.5.1 データ型を参照のこと.

1.5 TEI基盤モジュール

本章で解説したTEI基盤モジュールは,全てのTEIスキーマで使われるものである. TEI基盤モジュールでは,TEIスキームで使用される,データ型,属性クラス, モデルクラス,マクロの全てを定義している. TEI基盤モジュールにある全ての構成要素を,アルファベット順で,以下に示す.
TEI基盤モジュール: TEIの全モジュールで使用可能なデータ型,クラス,マク ロ

宣言の順番は,重要である. いくつかのクラスは,他の定義を参照している. その場合は,依存する定義を前に宣言しておく必要がある. TEIスキームのモジュール性から派生する,宣言の順番に関する制 約は,スキーマ言語毎に異なっている. 例えば,XML DTDではパラメータエンティティとマーク付きセクショ ンが,この機能のために使われている. また,RELAX NGでは,事前に多くのパタンが,null値(つまり,認 められない)と共に宣言されている. この種の問題については, 23.4 Implementation of an ODD System を参照のこと.

Contents « vi 言語と文字集合 » 2 TEIヘダー

注釈
1.
コロンは,元々は,正当な名前文字であるが,XMLでは特別な役 割を担っている(名前空間の区切を示している). 従って,名前の中では,他の用途で使うことは出来ないかもしれ ない.
2.
昔のガイドラインでは,この様な要素を‘crystals’と表現してい た.
3.
ここでは「句」という言葉を,「文字列」という意味で使ってい る.従って,単語が1つから複数まとまったものまでを示してい る.つまり,言語学的な「句」という定義ではない.すると, 「単語」との区別をより精緻に定義したい読者にとっては,混乱 を起こさせる可能性はある.


Copyright TEIコンソーシアム 2007 Licensed under the GPL. Copying and redistribution is permitted and encouraged.
Version 1.0.