text要素の全体構造
TEIドキュメントのテキスト本体は <text> 要素に格納されます。<text> 要素は、以下の3つのパートから構成されます。
<text>
<front><!-- 前付け: 序文、目次、凡例など --></front>
<body><!-- 本文 --></body>
<back><!-- 後付け: 付録、索引、奥付など --></back>
</text>
<body> は必須ですが、<front> と <back> は任意です。筆者は校異源氏物語テキストDBの構築で、各巻の本文をTEI/XMLで構造化する作業を行ってきました。その過程で得た知見は、校異源氏物語・本文テキストデータリポジトリで公開しているTEI/XMLを一部更新しました。でも紹介しています。
また、vttファイル(WebVTTの字幕ファイル)からTEI/XMLを作成する方法も試みています。詳細はvttファイルからTEI/XMLを作成するをご覧ください。動画や音声の書き起こしデータをTEI形式で構造化するケースの参考になります。
div(テキスト区分)
<div>(division)は、テキストの論理的な区分を表す最も基本的な構造要素です。章、節、段落グループなど、あらゆるレベルのテキスト区分に使用します。
基本的な使い方
<body>
<div type="chapter" n="1">
<head>桐壺</head>
<div type="section" n="1">
<p>いづれの御時にか、女御、更衣あまたさぶらひたまひける中に...</p>
</div>
<div type="section" n="2">
<p>はじめより我はと思ひ上がりたまへる御方がた...</p>
</div>
</div>
<div type="chapter" n="2">
<head>帚木</head>
<p>光源氏、名のみことごとしう...</p>
</div>
</body>
type 属性でその <div> が表す区分の種類を示し、n 属性で番号やラベルを付与します。よく使われる type の値の例を以下に示します。
| type値 | 用途 |
|---|---|
chapter | 章 |
section | 節 |
part | 部 |
volume | 巻 |
poem | 詩 |
letter | 書簡 |
筆者の校異源氏物語プロジェクトでは、<div type="volume"> を使って巻単位のテキスト区分を行い、その中を段落(<p>)で構成しています。このとき、各段落にIDを付与して校異情報の対応づけに活用しています。デジタル源氏物語における校異源氏物語と現代語訳の対応づけでこのアプローチを詳しく紹介しています。
段落と散文
p(段落)
<p>(paragraph)は散文テキストの段落を表します。TEIドキュメントで最も頻繁に使う要素の一つです。
<p>ゆく河の流れは絶えずして、しかももとの水にあらず。
淀みに浮かぶうたかたは、かつ消えかつ結びて、
久しくとどまりたるためしなし。</p>
<p> の中には、インライン要素(<persName>, <placeName>, <hi>, <note> など)を含めることができます。
ab(匿名ブロック)
段落とは呼べないが、テキストのまとまりとして区分したいブロックレベルの要素として <ab>(anonymous block)があります。
<ab type="colophon">右一冊明応二年十二月書写之</ab>
韻文のマークアップ
和歌、漢詩、西洋詩など韻文テキストのマークアップには、<lg> と <l> を使います。
<lg type="tanka">
<l n="1">春過ぎて</l>
<l n="2">夏来にけらし</l>
<l n="3">白妙の</l>
<l n="4">衣ほすてふ</l>
<l n="5">天の香具山</l>
</lg>
散文の中に埋め込まれた和歌の例です。
<p>かの御前の紅梅のかげに立ちよりて、
<lg type="tanka" rend="inline">
<l>春の夜の</l>
<l>闇はあやなし</l>
<l>梅の花</l>
<l>色こそ見えね</l>
<l>香やは隠るる</l>
</lg>
と聞こえたまふ。</p>
注釈
note(注釈)
<note> はテキストに対する注釈を記述します。
<p>いづれの御時にか<note type="gloss" resp="#editor">どの天皇の御代であったか</note>、
女御、更衣あまたさぶらひたまひける中に...</p>
type 属性で注釈の種類を、resp 属性で注釈の作成者を示すことができます。place 属性で注釈の位置を指定することもできます。
<note place="foot">脚注テキスト</note>
<note place="margin">傍注テキスト</note>
<note place="interlinear">行間注テキスト</note>
筆者はHypothes.is APIでWebアノテーションをエクスポートしてTEI/XMLに変換するで、Webアノテーションの結果をTEIの<note>要素として取り込む方法を紹介しています。既存のアノテーションをTEI/XMLに統合する実践的な手法として参考になります。
ページ区切りと改行
pb(ページ区切り)
<pb/>(page beginning)は原資料におけるページ区切りの位置を記録する空要素です。
<p>ゆく河の流れは絶えずして、しかも<pb n="1v" facs="#surface_002"/>もとの水にあらず。</p>
n 属性にはページ番号や丁数を、facs 属性にはファクシミリ画像への参照を記述します。筆者はOxygenの自動整形機能においてlbタグの前で改行する方法で、<lb/>タグの前での改行処理について解説しています。これは原資料の行構造を忠実に記録するうえで重要なTIPSです。
lb(行区切り)
<lb/>(line beginning)は原資料における行の開始位置を記録する空要素です。
<p><lb n="1"/>ゆく河の流れは絶えず<lb n="2" break="no"/>して、しかももとの水にあ<lb n="3" break="no"/>らず。</p>
break="no" は、その位置での改行が単語の途中であることを示します。
gap(欠損)
原資料のテキストが判読不能な箇所は <gap> 要素で記録します。
<p>ゆく河の<gap reason="illegible" quantity="3" unit="chars"/>絶えずして</p>
筆者はTEI古典籍ビューワをカスタマイズして判読不能箇所(gap)を表示するで、<gap>要素のビューア上での表示方法を紹介しています。
ハイライトと強調
hi(ハイライト)
<hi>(highlighted)は、原資料において視覚的に区別されている部分を記録します。
<p>これは<hi rend="bold">重要な</hi>箇所です。</p>
<p>この語には<hi rend="dots">傍点</hi>が付されている。</p>
引用と発言
quote(引用)
<p>方丈記の冒頭は、<quote>ゆく河の流れは絶えずして、しかももとの水にあらず</quote>という有名な一節で始まる。</p>
前付けと後付け
front(前付け)
<front>
<titlePage>
<docTitle>
<titlePart type="main">源氏物語</titlePart>
</docTitle>
<docAuthor>紫式部</docAuthor>
</titlePage>
<div type="preface">
<head>凡例</head>
<p>本テキストの翻刻にあたっては以下の方針に従った...</p>
</div>
</front>
テキスト間の差分抽出
複数のテキスト版を扱う場合、テキスト間の差分を自動的に検出する必要があります。筆者は二つのテキスト間の差分を抽出するプログラムを作成しました。で、Pythonを使った差分抽出プログラムを紹介しています。テキストの構造化と差分の記録は密接に関連しており、この手法は校異情報の記述(次章で解説)の前段階として有用です。
Whitespaceの扱い
TEI/XMLではWhitespace(空白文字)の扱いに注意が必要です。特にJavaScriptのフレームワークでTEI/XMLを処理する場合、意図しないWhitespaceが挿入されることがあります。筆者は[TEI x JavaScript] Nuxt3で意図しないWhitespaceを削除するで、Nuxt3環境でのWhitespace問題の解決方法を紹介しています。
まとめ
本章では、TEIドキュメントのテキスト本体を構造化するための主要な要素を学びました。<div> による論理的な区分、<p> による段落、<lg> と <l> による韻文、<note> による注釈、<pb/> や <lb/> によるページ・行の記録など、テキストの構造をきめ細かく記述するための語彙がTEIには豊富に用意されています。
次章では、テキスト中の人名・地名・組織名などの固有表現をマークアップする方法を学びます。
関連記事
- 校異源氏物語・本文テキストデータリポジトリで公開しているTEI/XMLを一部更新しました。
- デジタル源氏物語における校異源氏物語と現代語訳の対応づけ
- vttファイルからTEI/XMLを作成する
- Hypothes.is APIでWebアノテーションをエクスポートしてTEI/XMLに変換する
- Oxygenの自動整形機能においてlbタグの前で改行する方法
- TEI古典籍ビューワをカスタマイズして判読不能箇所(gap)を表示する
- 二つのテキスト間の差分を抽出するプログラムを作成しました。
- [TEI x JavaScript] Nuxt3で意図しないWhitespaceを削除する
- Pythonを用いたTEI/XMLファイルの分析サンプルプログラムを作成しました。
- Annotorious v2のpolygonツールを使って、polylineを作成する