16 リンク,分割,統合

Contents

この章では,必ずしも線状やピラミッド階層構造をなさないテキスト の構造を分析する,各種の方法を紹介する. この章で定義されるモジュールでは,以下の機能を用意している.

これらの機能では,W3Cが定めたXPointer(Grosso et al. (eds.) (2003))をベースとしている. 本ガイドラインでは,多くのスキームを用意している. その中でも,本ガイドラインが推奨する,一番便利なスキームは,グ ローバルxml:idを使うものである. このグローバル属性は,1.3.1.1 グローバル属性で定義され, v XML入門識別子で解説されている. リンクモジュールがスキーマに取り込まれている時,,クラス att.globalは拡張され,先に示 した各種リンクを実現する8つの属性が,追加される. これらの属性については,以下の節で順次解説される. また,以下では,属性値だけを使う,単純であるが一般性のない手法 から,特定の要素を使う,精巧でかつ汎用性のある手法までの,様々 な手法から選択することについても解説される.

16.1 リンク

ポインタとは,ある要素が他の要素を指し示すもので,出発点とな る要素には属性があり,その属性値に参照がある. この出発点の要素を「ポインタ要素」または簡単に「ポインタ」という. 本ガイドラインで今までに紹介してきたもので,ポインタに相当す るものには,要素note, 要素ref,要素ptrがある. これらの要素は全て,文書中のある場所(当該ポインタがある場所) と,複数の場所(当該ポインタの属性targetで示される識別子を持つ要素)を関連づ けるものである. この章で解説されるモジュールでは,関係の端点同士を結ぶ「リン ク」として知られる,このようなポインタの基本的な使い方をベー スに,様々な手法を導入している. また,属性xml:idを使わない,各種の 方法で,文書中の場所を表現する方法も定義している.

16.1.1 ポインタとリンク

3.6 簡単なリンクと相互参照では,簡単なポインタ要素 ptrrefの使い方を解説した. 本節では,これに要素linkを追加する. この要素は,2つの(またはそれ以上の)場所を,その場所を明 示して,関連性を記録するものである. この要素そのものの場所は,リンクの対象ではない.
  • ptr/ 他の場所を示すポインターを定義する
    target 当該ポインタの参照場所を,ひとつ以上のURIで示 す.
  • ref 他の場所への参照を定義する.多くは,追加テキストまたはコメントを含む
    target ひとつ以上のURIで,参照先を特定する.
  • link/ 他の要素では上手く示せない,要素や一節間にある関連性 やハイパーテキストリンクを定義する.
    targets リンク付けされれている当該要素または一節の識別子を示す.
要素ptrは「純粋なポインタ」とも呼 べるもので,単純に参照するという機能を持っている. ポインタは,ある要素(純粋なポインタを使う場合は,文書中 の場所と考えられるもの)と,「ターゲット」と呼ばれる他の 複数の要素を結びつけている. 要素ptrと要素refは,共に属性target(に値ひとつ)を取る. これらの要素は,その参照先が文書中の非連続的なまとまりで あったとしても,概念上は,それをひとつのターゲットとして 指示することになる. 要素linkは,属性targets(に複数の値)を取る. この要素は,少なくとも2つの独立したオブジェクトをターゲッ トを示す. このようなリンクは,オブジェクト間の「双方向リンク(double link)」ともいえる.
これらの要素は,クラスatt.pointingのメンバーで あり,以下の属性を取ることが出来る.
  • att.pointing URIにより要素を参照する要素に共通して付与される属性を 定義する.
    type 当該ポインタの種類を示す.
    evaluate 当該ポインタの参照先がポインタである場合,その意 図を示す.
要素間の双方関係は,ポインタ要素を組み合わせて示すこともで きる. 例えば,2つの要素ptrを使うか,ま たは,要素ptrひとつと要素noteひとつを使う方法である. いずれの場合も,ある要素には属性target(または他の指示機能)があり,それ が参照する属性xml:idが,もうひと つの要素にあることになる. 要素linkは,この要 素ひとつで,この双方関係を扱うことが出来る. 例えば,以下のような例があったとする.
<ptr xml:id="sa-p1target="#sa-p2"/>
<ptr xml:id="sa-p2target="#sa-p1"/>
ここでは,IDにsa-p1を持つ要素 が,IDにsa-p2を持つ要素を,IDに sa-p2を持つ要素が,IDにsa-p1を持つ要素を,共に参照している. これを,論理上同等のものを,以下のように簡単に記録すること とができる.
<link targets="#sa-p1 #sa-p2"/>
既に紹介したように,この様な簡単なポインタやリンクの仕組みで は,グローバル属性xml:idを使い,要 素を特定する必要がある. すなわち,関連する要素は,同じ文書中にあり,属性xml:idの値はユニークである必要がある. 外部文書や,識別子を持たない要素へのリンク付けには, 16.2 ポインタの機能で解 説する,より完備したURI参照を使うことになる.

16.1.2 使い方

要素同士を関連付ける機能の使用例として,昔の作品の一節を並 行して引用している脚注の例(18世紀の英語の韻文)を見てみよう.
The
figure shows the original page of Pope's Dunciad
which is discussed in the text.
脚注は,単純に要素note(3.8 注釈と索引)を使い記録している. この注釈は,属性targetを持たずに,そ れが参照している一節に続けて記されている. 52
<l>(Diff'rent our parties, but with equal grace</l>
<l>The Goddess smiles on Whig and Tory race,</l>
<l>
 <note type="imitationplace="footanchored="false">
  <bibl>Virg. Æn. 10.</bibl>
  <quote>
   <l>Tros Rutulusve fuat; nullo discrimine habebo.</l>
   <l>—— Rex Jupiter omnibus idem.</l>
  </quote>
 </note>'Tis the same rope at sev'ral ends they twist,
</l>
<l>To Dulness, Ridpath is as dear as Mist)</l>

この様な要素noteの使い方は,「暗示的なポインタ (implicit pointing)」(または「暗示的リンク」)といえる. この例では,関連性は,当該脚注と,それに隣接してあるテキス トの配置自体が示していることになる. このように,注釈とテキストの配置自体で,関連するテキストを 明確に示すことは出来ない(例えば,直前の行だけ,または直前 の2行だけなど)と感じる場合や,テキストとは離れた場所に注釈を 記したい場合には,参照やリンク自体を,明示的に示す必要がある. では,そのような方法を考えてみよう.

まず,要素ptrが,テ キスト中のある場所にあり,そことアノテーションとをリンク付 けることを考えてみる.
<l>(Diff'rent our parties, but with equal grace</l>
<l>The Goddess smiles on Whig and Tory race,
<ptr rend="unmarkedtarget="#note3.284"/>
</l>
<l>'Tis the same rope at sev'ral ends they twist,</l>
<l>To Dulness, Ridpath is as dear as Mist)</l>
<note
  xml:id="note3.284"
  type="imitation"
  place="foot"
  anchored="false">

 <bibl>Virg. Æn. 10.</bibl>
 <quote>
  <l>Tros Rutulusve fuat; nullo discrimine habebo.</l>
  <l>—— Rex Jupiter omnibus idem.</l>
 </quote>
</note>
要素noteは,任意の識別子(例えばnote3.284)を取り,ポインタ要素のターゲッ トとなることが出来る. 上の例では,テキスト中にアノテーションの存在を示すような記 述がないので,属性rendには値unmarkedが付与されている.
次に,関連テキストに属性xml:idが付与されている場合に, 要素noteの属性targetがそれを参照する例を考えてみる.
<l xml:id="l3.283">(Diff'rent our parties, but with equal grace</l>
<l xml:id="l3.284">The Goddess smiles on Whig and Tory race,</l>
<l xml:id="l3.285">'Tis the same rope at sev'ral ends they twist,</l>
<l xml:id="l3.286">To Dulness, Ridpath is as dear as Mist)</l>
<!-- ... -->
上記のようなテキストがあったとして,これにリンクを付けてみ る. 例えば,注釈自体に,これを示すポインタが含める,つまり, 要素refを使い,その属性targetでテキストを参照することができる. 以下の例では,要素quoteで示されているテキストから(若干 間違った)引用を含めた注釈になっている.
<note
  type="imitation"
  place="foot"
  anchored="false"
  target="#l3.284">

 <ref rend="sctarget="#l3.284">Verse 283–84.
 <quote>
   <l>——. With equal grace</l>
   <l>Our Goddess smiles on Whig and Tory race.</l>
  </quote>
 </ref>
 <bibl>Virg. Æn. 10.</bibl>
 <quote>
  <l>Tros Rutulusve fuat; nullo discrimine habebo.</l>
  <l>—— Rex Jupiter omnibus idem. </l>
 </quote>
</note>
これら2つの方法を組み合わせると,以下のような事が出来る.
  • 行中にあるポインタが,注釈を示す.
  • 注釈が,行を示す.
  • 注釈中にあるポインタが,行を示す.
行自体から注釈を示す方法は無いことに注意して欲しい. この関係は,ポインタを使って示されることになる. ここまでのところでは,まだテキストと注釈の双方向リンクを実 現していない. 双方向リンクを実現するには,テキスト行と注釈の双方に識別子 を与えておく必要がある. そうであれば,要素linkを使い,こ の2つを関連づけることが出来る. 要素ptrと 要素noteにある属性targetは,無くて良いことに,注 意して欲しい.
<note
  xml:id="n3.284"
  type="imitation"
  place="foot"
  anchored="false">

 <ref rend="sctarget="#l3.284">Verse 283–84.
 <quote>
   <l>——. With equal grace</l>
   <l>Our Goddess smiles on Whig and Tory race.</l>
  </quote>
 </ref>
 <bibl>Virg. Æn. 10.</bibl>
 <quote>
  <l>Tros Rutulusve fuat; nullo discrimine habebo.</l>
  <l>—— Rex Jupiter omnibus idem. </l>
 </quote>
</note>
<link targets="#n3.284 #l3.284"/>
要素linkの属性targetsには,注釈の識別子と,その対象と なる韻文の行の識別子がある. より完成された記述にするには,注釈中に参照点となる識別子を 記録し,それと韻文の行を,先と同様に関連づけることもできる.
<note
  xml:id="nt3.284"
  type="imitation"
  place="foot"
  anchored="false">

 <ref rend="scxml:id="r3.284target="#l3.284">Verse 283–84.
 <quote>
   <l>——. With equal grace</l>
   <l>Our Goddess smiles on Whig and Tory race.</l>
  </quote>
 </ref>
<!-- ... -->
</note>
<!-- ... -->
<link targets="#r3.284 #l3.284"/>
ここにある2つのlink(訳注:意味的なリンクという意味だろう)は,以下のようにまとめることが出来る.
<link targets="#n3.284 #r3.284 #l3.284"/>

16.1.3 リンクグループ

異なる要素をリンク付けして関連性を示したいと思う理由は,明 らかに沢山ある. そのような希望にいくらか応える要素を,本ガイドラインでは 用意している. そのいくつかを,本章では解説していることになる. 要素linkは,各種の関 連性を示す,一般的な要素として使うことができる. 要素linkGrpは,文書中にあるある特定の種 類のリンクをまとめることができる. これで作られたコレクションは,ハイパーテキストを扱う資 料では,時に「ウェブ(web)」と呼ばれている. この用語は,1969年にブラウン大学のFRESSプロジェクトで使わ れたものである.
  • linkGrp 関連性やハイパーテキストリンクの集合を定義する.
この要素は, クラスatt.pointing.groupのメンバーであり,以下の属性を取 ることが出来る.
  • att.pointing.group ポインタとなる要素に共通の属性を示す.
    domains 当該要素の中にある全要素を対象とした識別子を選択 的に指定する.
    targFunc 要素linkjoinaltに付与された属性 targetsの値の機能を示す.
この要素は,クラスatt.pointingのメンバーでもあるので, 16.1.1 ポインタとリンクで解説した属性,例 えば,属性typeも取ることが出来る.
  • att.pointing URIにより要素を参照する要素に共通して付与される属性を定義する.
    type 当該ポインタの種類を示す.

要素linkGrpは, 同じ種類のリンクを束ねたものに,属性typeで,初期値を与える便利な手法となる. 要素linkの属性 typeは,初期値として,要素linkGrpの属性typeの値と同じ値になる.

一般的なソフトウェアでは,ウェブ全体(訳注:リンクグループ のこと)をユーザから隠すが,これをリンクの元となる情報とし て使る. リンクは,独立したものとして,参照される場所とは別に表示さ れる(訳注:現在あるブラウザとは動きが異なるものを想定して いる). また,ソフトウェアによっては,まとめられたリンクの情報を, 直接提示することもある. その際,各リンクの情報を処理する機能,例えば,フィルタリン グ,並び替えなどの機能が加えら得れることがある. 先の例を使い(訳注:古い版P4の文章をそのまま使っている誤 り),テキストに別の注釈を加えたものを考えてみる. 以下の例では,アノテーションが必要な新たな行が加えられて おり,続いて,そのアノテーションが記録されている.
<l xml:id="l2.79">A place there is, betwixt earth, air and seas</l>
<l xml:id="l2.80">Where from Ambrosia, Jove retires for ease.</l>
<!-- ... -->
<l xml:id="l2.88">Sign'd with that Ichor which from Gods distills.</l>
<!-- ... -->
<note xml:id="n2.79place="footanchored="false">
 <bibl>Ovid Met. 12.</bibl>
 <quote xml:lang="la">
  <l>Orbe locus media est, inter terrasq; fretumq;</l>
  <l>Cœlestesq; plagas —</l>
 </quote>
</note>
<note xml:id="n2.88place="footanchored="false"> Alludes to <bibl>Homer, Iliad 5</bibl> ...
</note>
要素noteにある属性typeに,くり返す値imitationを付与することを避けるに は,要素linkGrpを使い,一度に全てのリン クのタイプを指定することが出来る.
<linkGrp type="imitation">
 <link targets="#n2.79 #l2.79"/>
 <link targets="#n2.88 #l2.88"/>
 <link targets="#n3.284 #l3.284"/>
</linkGrp>
要素linkGrpを扱うソフトウェアのために, 付加的な情報を特別な属性で示すことが出来る. ひとつは,属性domainsを使う方法で, リンクの各ターゲットを見つけることが出来るテキスト要素の範 囲を特定することができる. 例えば,当該テキストが,要素bodyにあり,そのテキストには詩が含ま れているとする. また,要素backには,その注釈が含まれているとす る. この時,属性domainsの値として,要 素body にある識別子と,要素backにある識別子を取ることが出来る. これにより,ソフトウェアは,リンクのターゲットが,適切な要 素の範囲中にあることを検証することができたり,検索の範囲を 限定することが出来る.

<!-- ... --><linkGrp type="imitationdomains="dunciad dunnotes">
 <link targets="#n2.79 #l2.79"/>
 <link targets="#n2.88 #l2.88"/>
<!-- ... -->
 <link targets="#n3.284 #l3.284"/>
<!-- ... -->
</linkGrp>

属性domainsの各値には,ひとつの親要素が該当することに注意して欲 しい. 例えば,ある注釈が識別子dunnotes を持つ節に含まれ,また別の注釈が識別子dunimitsを持つ節に含まれているとすれば, 仲介するポインタ(16.1.4 仲介ポインタを参照)が,要素linkGrpに含まれている必要があり,そ の要素とその識別子が(訳注:関連性を示すために)使われることになる.

また,属性targFuncを使い,リンク グループにある各リンクのターゲットに,役割・機能を示す情報 を記録することが出来る. 属性targFuncの値には,名前(正確に は,名前トークン)のリストを取り,各名前は,当該リンクにあ る各ターゲットに対応している. この名前は,符号化する人が自由に決めることが出来るが,これ らはヘダーファイル中の符号化宣言のところに,記録されるべき である. 53 例えば,先の例にある注釈には,模倣(imitation)の元となる資 料(source)が含まれ,また,詩の行には,模倣をしたもの(goal) が含まれているとされる. 従って,要素linkGrpを使い,先の例を,以 下のように示すことが出来る.
<linkGrp type="imitationdomains="dunciad dunnotestargFunc="source goal">
 <link targets="#n2.79 #l2.79"/>
 <link targets="#n2.88 #l2.88"/>
<!-- ... -->
 <link targets="#n3.284 #l3.284"/>
<!-- ... -->
</linkGrp>

16.1.4 仲介ポインタ

これまでの例で,注釈と詩の1行をリンク付ける手法をいくつか 紹介してきた. しかし,この例で実際に必要なことは,注釈は,詩の2行(284行 と285行)を関連づけることである.

これに対応する方法は,いくつかある. ひとつは,要素noteに属性targettargetEndを使い,当該注釈の範囲を指定す ることである(詳細は3.8 注釈と索引を参照). もうひとつの方法は,二行連句を示す新たな要素を作り,これに 属性xml:idを持たせて,それを要素 noteと 要素refにリンク付けるものである. この様な二行連句は,3.12.1 韻文向けコア要素で 解説する要素lgを使い明示的に示すか,または,16.7 総合で解説する要素joinを使 い,暗示的に示すことが出来る.

もうひとつの方法として,以下にあるような,仲介ポインタを使 う方法がある.
<ptr xml:id="l3.283-284target="#l3.283 #l3.284"/>
要素ptrまたは要素refに属性targetが,複数の要素を指 定することで,これらの参照された要素はまとめられ(総合さ れ),全体がポインタとなっている(但しこの様な総合は,処理す るソフトウェアの仕事であることから,マークアップだけでこの 様な処理を定義することはできない). 属性xml:idで識別子が示され,これ により,要素noteと要素refリンク 付けすることが出来る.
<link evaluate="alltargets="#n3.284 #r3.284 #l3.283-284"/>

属性evaluateの値allは,要素linkが,ター ゲットとしてあるものがポインタである場合,それも評価される (訳注:処理対象とする)ことを示している. 属性evaluateの値がnoneの場合は,このリンクにあるターゲッ トは単にポインタであり,このポインタが参照するオブジェクト とはしないことを示している.

要素linkGrpにより要素linkがまとめられ,そ こにある要素linkで仲介要素 が構成されている場合,それは,当該要素linkGrpの中に含まれるべきである.

16.2 ポインタの機能

本節では,TEIで使うポインターの機能をより形式的に解説する. これまで解説してきたものに加えて,TEIでは,以下のポインタを 用意している.
  • 当該文書以外の文書へのポインタ.
  • 当該文書以外の文書中にある,属性xml:idを持った特定要素へのポインタ.
  • 当該文書やそれ以外の文書にある特定要素へ,XML要素木を参 照に使うポインタ.
  • XML文書の任意の内容へ,TEIが規定するXPointerを使うポイン タ.

TEIで使われるポインタの属性は,データ型att.pointerを取るものとして定義され,URI参 照を取ることになる. 54 これまでに解説してきたものは,全てURI参照を使った例である. この他にも,なじみのある例としては,HTMLで,ハイパーテキスト を作る属性hrefを使うものもある. URI参照は,ひとつのXML資源,例えば,XML文書やXML要素を参照す ることが可能で,また,「部分識別子(fragment identifier)」を 使うことで,そのさらに下位部分も参照することが出来る. 「部分識別子」とは,技術的には,文字「#」続く,URI参照の一部 を構成するものである. これにより,URIで参照された資料全体ではなく,その中にある部 分にアクセスすることができるようになる.

以下に続く3つの節では,推奨されている,W3Cが規定する機能を概 説し,その例が示される. 使い方のより詳細については,すぐに他の場所でも解説されることに なる.

16.2.1 参照一般

恐らく名称としては不適切なのであろうが,広く使われてい る,HTMLのポインタ属性hrefと同様 に,TEIのポインタ属性は,(当該の要素が含まれている)当該の 文書ではないものも,ファイル管理システムの所在に関わらず, 参照することが出来る(訳注:筆者は,hrefのhをhypertextでは なく,hereの略語と理解しているのかもしれない). この参照は,絶対的な方法(対象となる文書の完全なアドレ スを使う方法)と,相対的な方法(ベースURIと相対的なアドレス を合わせて使う方法)で実現される. 「ベースURI」について,Marsh 2001で規定さ れている. ベースURIは,一般に,直近の祖先要素にある属性xml:baseの値で示されている. もしこの属性が無ければ,ベースURIは,当該の文書になる.

以下の例では,絶対URI参照により,他の文書を参照している.
The current base URI in force is as defined in the
W3C <ref target="http://www.w3.org/TR/xmlbase/">XML
Base</ref> recommendation.
この例では,プロトコルHTTPを介してウェブページ上の場所を示 している. また,例えば,ローカルにあるファイルにアクセスしたいとしよう. 同じく絶対URI参照を使うもののが,プロトコルは変わってくる.
This Debian package is distributed under the terms
of the <ref  target="file:///usr/share/common-licenses/GPL-2">
GNU General Public License</ref>.
以下の例では,相対URI参照を使い,ローカルにある文書を参照 している.
<figure rend="float fullpage">
 <graphic url="Images/compic.png"/>
 <figDesc>The figure shows the page from the <title>Orbis
     pictus</title> of Comenius which is discussed in the text.</figDesc>
</figure>
この例では,属性xml:baseが使われ ていないので,Figures/compic.pngと示されたデータの 場所は,現行のベースURI,ここでは当該文書から,相対的に示 されている.
以下の例では,属性xml:baseに新た に値を付与して,ベースURIを変更している. 従って,指示される資料は,相対URIで示されている.
<div type="chapxml:base="http://classics.mit.edu/">
 <head>On Ancient Persian Manners</head>
 <p>In the very first story of <ref target="Sadi/gulistan.2.i.html">
   <title>The Gulistan of Sa'di</title>
  </ref>,
   Sa'di relates moral advice worthy of Miss Minners ...</p>
<!-- ... -->
</div>
先にも解説したとおり,ベースURIは,階層上で直近の祖先にあ るものが使われる. この仕組みにより,スコープ内のURI記述を省略することが出来る.
<body>
 <div n="A">
  <p>The base URI here is the current document. A URI such as
  <code>a.xml</code> is equivalent to
  <code>./a.xml</code>.</p>
 </div>
 <div n="Bxml:base="http://www.example.org/">
  <p>The base URI here is
  <code>http://www.example.org/</code>. A
     URI such as <code>a.xml</code> is equivalent to
  <code>http://a.b.org/a.xml</code>.</p>
 </div>
 <div n="Cxml:base="ftp://ftp.example.net/mirror/">
  <p>The base URI here is
  <code>ftp://ftp.example.net/mirror/</code>. A URI such
     as
  <code>a.xml</code> is equivalent to
  <code>ftp://ftp.example.net/mirror/a.xml</code>.</p>
 </div>
 <div n="D">
  <p>The base URI here is the current document. A URI such as
  <code>a.xml</code> is equivalent to
  <code>./a.xml</code>.</p>
 </div>
</body>

16.2.2 ローカル参照

ベースURIの初期値は,当該文書であることから,部分識別子だ けを持つポインターは,以下の例のように,当該文書中にある要 素を示すことになる.
<div type="sectionxml:id="sect106">
<!-- ... -->
</div>
<div type="sectionn="107xml:id="sect107">
 <head>Limitations on exclusive rights: Fair use</head>
 <p>Notwithstanding the provisions of
 <ref target="#sect106">section 106</ref>, the fair use of a
   copyrighted work, including such use by reproduction in copies
   or phonorecords or by any other means specified by that section,
   for purposes such as criticism, comment, news reporting,
   teaching (including multiple copies for classroom use),
   scholarship, or research, is not an infringement of copyright.
   In determining whether the use made of a work in any particular
   case is a fair use the factors to be considered shall
   include — 
 <list>
   <item n="(1)">the purpose and character of the use, including
       whether such use is of a commercial nature or is for nonprofit
       educational purposes;</item>
   <item n="(2)">the nature of the copyrighted work;</item>
   <item n="(3)">the amount and substantiality of the portion
       used in relation to the copyrighted work as a whole;
       and</item>
   <item n="(4)">the effect of the use upon the potential market
       for or value of the copyrighted work.</item>
  </list>
   The fact that a work is unpublished shall not itself bar a
   finding of fair use if such finding is made upon consideration
   of all the above factors.</p>
</div>
このように,ターゲットとなる要素の属性xml:idにある値でのみ(例えば,#sect106だけで)参照をする方法は,最も簡 単で,しかも,それが使える場合,つまり,参照元の要素とター ゲットとなる要素が,共に同じXML文書中にあり,ターゲットと なる要素が識別子を持っている場合には,一番良い手法である. 先の節では,この手法のみが使われていた. また,本ガイドラインの至る所でも,この手法は使われている.

16.2.3 W3C element()

要素が,識別子を使い直接参照できないような場合には,XMLの 要素木を使い,その場所を指定することで,参照することもでき る. この方法では,W3Cが規定(Grosso et al, 2003)したスキームであるelement()を使 うことになる. このスキームでは,子要素の番号をスラッシュで区切ったリスト により,ステップを踏みながら要素を辿ることで,要素を識別す ることが出来る. 各ステップでは,整数値nにより,先にたどり着いた要素 の,n番目の子要素であることが示される. 例えば,<ptr target="foo.xml#element(1/4)"/> というポインタは,URIfoo.xmlで 指定される文書中にあるルート要素の,4番目の子要素を示して いる.

また,例えば,以下の例にあるポインタでは,シェークスピアで 一番有名な一節にある1行を示している.
<ref
  target="http://www.cs.mu.oz.au/621/2003project/hamlet.xml#element(/1/8/2/25/2)">
2B|^2B…</ref>
このURIは,ウェブ上にある,HTTPプロトコルでアクセス可能 な,XMLデータを参照している. そのXMLデータファイル中を,スキームelement()を使い,1番目 の要素(ルート要素のこと)の,8番目の子要素の,2番目の子要素 の,25番目の子要素の,2番目の要素を示している. これと同等なものを,XPathで表記する と,/*[1]/*[8]/*[2]/*[25]/*[2]のようになる.
当該文書のルート要素から始まるパス全部を指定するのではな く,属性xml:idにあるユニークな値 を持つ要素を指定するところから始めることも可能である. この場合,識別子には,(訳注:文書までの)パスが付加されること になる. 例えば,これにより,ハムレットの異なる電子版で,各場に識別 子が振られている場合,同じ場所をより簡単に示すことが出来る.
<div
  xml:base="/Users/martin/Documents/c5/namelessShakespeare.xml">

 <p>
  <ptr target="#element(sha-ham301/22/2)"/>
 </p>
</div>
この例では,識別子sha-ham301は, ハムレットの第1場,第3幕にある要素divにもので ある. 要素div の22番目の子要素の,2番目の子要素に,要素lが含まれて いることになっている. これと藤堂なものを,XPathで表記する と,id(sha-ham301)/*[22]/*[2]のようになる.

先にも紹介したように,この行にも識別子があれば,直接これを 参照することも可能である. シェークスピアの,ある別の電子版では,ファーストフォリオを 元にして作られ,各行に通し番号による識別子が付与されている としよう. この場合,行はptr target="#element(Ham01245)"/は,またはもっと簡単に ptr target="#Ham01245"/のように指 定することが出来る. ptrtarget="#xxx"/という書き方は, ptrtarget="#element(xxx)"/という書 き方の省略形である. もちろん,この手法を使うには,各行に通し番号が属性xml:idに付与されている必要があり,それ は文書内でユニークである必要がある. 16.2.5 規範参照で は,この様な条件を課さないで,この行を参照する手法を紹介す る.

16.2.4 TEI XPointer

本章で解説されるポインタのスキームは,W3Cが推奨する多くの スキームの中のひとつである. このW3Cのスキームは,XPointer(Grosso et al2003)として知られる,XML文書中のデータ を示す機構を構成している. この機構では,名前を使い参照する様々な手法を定義している. この手法は,「XPointer」として知られている. W3Cでは,このスキームを規定し,その拡張も管理している. 先に紹介したスキームelement()も,W3Cが規定したものであ り,XMLを処理するシステムの多くがこれに対応している.

W3Cが規定する,もうひとつの重要なスキームで,また本ガイド ラインでも使用を推奨するものが,xpath1()である. このスキームは,XPathの構文を使い,XML構造のどの部分でも選 択・指定することができる. これについての詳細は,以下にある16.2.4.2 xpath1()で解説する. 本ガイドラインでは,この他にも,5つのポインタのスキームを 定義している. これにより,データ内容にある場所や,データ内容のある範囲と いった,XML文書のある部分を指定することができる. これらのTEIポインタスキームについては,以下にある16.2.4.3 left()と right()から16.2.4.6 match()までの各節で解説される.

16.2.4.1 TEIのポインタ

TEIのポインタの機能について解説する前に,まず,ここで使 われている技術について簡単に解説する. これまでに解説してきた参照法では,要素や属性といった,XMLの 情報集合(information set)から構成される単位を参照してきた. しかし,テキストの分析では,別の参照点も使いたいことがあ る.例えば,ノード間の地点や,文書中のノード境界を越え る任意の範囲を指定するなどである. XML文書の内容は,階層的でもあり,線的にも構成されている. 従って,ノードから独立した範囲で,文字列の範囲を指定した いこともある.例えば,テキストエディター上で選択される範 囲などである. このような目的を実現するには,当該範囲を,その開始点と終 了点の2点で定義するのが一番良い. ポインターのスキームを,問い合わせ関数の様なもの,つま り,XML文書の情報集合(例えば,DOM木)のノードを返すもの, とと捉えることは,有益ではあるが,それが常に当てはまると いうわけではない. 例えば,あるポイントが,その範囲はDOM木上のノードとオー バーラップしないものであっても,複数のノードに隣接しなが らも,ノードはないようなポイントの場合である.

TEIのポインタの機能では,以下のオブジェクトを分けて用意 している.
  • XML文書のXML情報集合であるひつとの単位を示すノード. 参照される対象として,テキストノード,要素ノード,属 性ノードがある.
  • XML文書のXML情報集合であるノードの集合. TEIのポインタを扱うソフトウェアでは,ポインタを占め す属性値が,複数のdata.pointerを取ることが出来るとき, URIの解決処理の結果は,ノードの集合のみが認められる. ここでいう「集合」とは,その要素は順序に関係ないこと を意味している. つまり,ノードの集合のでは,各ノード間に順番があると いうことではない.
  • ポイントとは,文書にあるノード間のいち地点のことであ る. ポイントは,文字または要素と隣接している. ポイントは,他のポイントと隣接することはない. 例えば,XML文書における文字のポイントは,文字,開始 タグ,終了タグの間に存在するもので,それ以外には存在 しない. 全ての文字内容を,独立した文字からなるテキストノード と見なしたいのであれば,ポイントとは,以下のいずれか として定義することが出来る.
    • ノードに先行する地点. 当該ノードが,先行するノードを持つ場合には,その 地点は,先行するノードの後にある.
    • ノードに続く地点. 当該ノードが,後続するノードを持つ場合には,その 地点は,後続するノードの前にある.
  • 範囲とは,2つのポイントに囲まれている,文書中の領域であ る. ポイントは,文書中のどこにでもあるので,範囲は,ノー ドやノード集合とはそのままでは対応しない. 範囲は,ノードにある内容と,部分的または全面にオーバー ラップすることがある.
TEIでは,以下にある5つ(訳注:6つ)のポインタースキームを用意している.
xpath1()
XPathを使い,ノードやノード集合を示す (16.2.4.2 xpath1()).
left(), right()
before ()またはafter()を使い,ノードまたはノード集合 の,前後のポイントを示す(16.2.4.3 left()とright()).
range()
2つのポイント間の範囲を示す(16.2.4.4 range()).
string-range()
特定のポイントから,特定の長さの範囲を示す(16.2.4.4 range()).
match()
ノードにある特定の文字列の範囲を示す(16.2.4.6 match())

xpath1()スキームでは,XPathとして規定されているものその ままの機能のことである.

その他の5つのスキームは,W3Cが規定するXPointerの機能と重 複するところがある. 但し,それぞれは,より簡単なものとなっている. 本ガイドラインが書かれた時点では,XPointerは草稿の状態で ありこれを修正し推奨勧告とするような動きは見られない.

16.2.4.2 xpath1()
xpath1()スキームは,ノードやノード集合をXMLの情報集合に 対応させるものである. このスキームは,W3C XPath 1 Recommendationで規定された,XPathのパ スひとつを引数とする. このXPathが評価された結果としてあるノードやノード集合 が,xpath1()スキームを使って指示される場所となる. 例えば,以下の例では,論文中にある,属性idに 属性値fn6を持つ要素ftnoteの第1段落が選択されている.
<ptr
  target="http://tinyurl.com/267z62/xml/2004/Thompson01/EML2004Thompson01.xml#xpath1(//ftnote[@id='fn6']/para[1])"/>

URI参照が,ひとつのdata.pointerの属性値として規定されて いる場合,その評価結果は,単一のノードとなる. もし,複数のノードが得られた場合,それはエラーとなる. URI参照が,複数のdata.pointerの属性値として規定されてい る場合,その評価結果であるノード集合にある各ノードは,ひ とつのURI参照の評価結果のように独立したものとして扱われる.

TEIデータに対応したソフトウェアがXPathを解釈する場合に は,参照されている文書のXML情報集合は,他のスキームから 定義された付加的な情報を含めずに,そのまま処理されること になる. 例えば,空白文字の正規化は,XPathを解釈する前に,文書 通に施されることはない.

このようなポインタのスキームにより,XMLデータへの問い合 わせでよく使われている方法を,簡単に,直接使うことができ るようになる. 属性xml:idを持たないXML要素や XML内容を選択する場合には,遅くら,これがもっとも堅固な ポインタ機能である. 要素名や属性を使うことができると,xpath1()は,本章で解説 されているどれよりも堅固なポインタ機能となり,当該文書が 変更されていても有効なものとなる. 作られる版の長期利用性を考えれば,属性xml:idを出来るだけ使うことが推奨され る.

16.2.4.3 left()とright()
left()スキーム(right()スキーム)は,当該引数に先行する(後 続する)ポイントを示すものである. left()またはright()の引数は,ひとつのポインタであり,こ れは部分識別子のように扱われる. すなわち,単独の名前,または,XPointerで表現されたポイン タとなるとなる. 引数は,一般的な規則に従い,ベースURIを元に,解決される ことになっている. 55 多くのポインタスキームでは,ポインタではなく,ノードや範 囲が返り値とされることから,以下に,left()とright()が 返す可能性がある値について,リストとしてまとめておく.
ひとつのノード.
ポインタがひとつのノードを示すとき,当該ポインタは, そのノードに先行する(left()),または後続する (right())直近のポイントとなる.
ノード集合.
ポインタが,ノード集合を指すとき,当該ポインタは,そ の集合の第一要素に先行する(left()),または最終要素に 後続する(right())ポイントとなる.
範囲.
ポインタが,範囲を指すとき,当該ポインタは,その範囲 の開始(left())または終了(right())地点となる.
ポイント.
ポインタが,ポインタを指すとき,当該ポインタそのもの が結果として得られる. left()スキームとright()スキームは,引数としてあるポ インタに,何ら影響を与えない.
以下の例では,文書木を,ルート要素から辿り,その2番目(訳 注:1番目)の子要素の,3番目の子要素の,さらに3番目の子要 素の,6番目の子要素を示している. この場合,パス自体は,文字列'20850'を内容に持つ要素postcodeを示しているので,この文字列の 最後にある'0'の直後のポイントが示されている. (訳注:URLの先には論文があり,そこに著者のアドレスが書かれ ている).
<p
  xml:base="http://www.mulberrytech.com/Extreme/Proceedings/xml/2002/">

 <ptr
   target="Usdin01/EML2002Usdin01.xml#right(element(/1/1/3/3/6))"/>

</p>
16.2.4.4 range()
range()スキーマは,XML情報集合の2つのポイントに挟まれた範囲 を示すものである. 引数に2つのポインタを取り,それが示す2つのポイントで範囲 を示している. 引数となるポインタは,部分識別子と解釈される. 1番目の引数と2番目の引数は,共にXPointerで,その書式に従 い解決されることになる. 56 多くのポインタは,ポイントではなく,複数のノードまたは範 囲を返すことから,以下では,range()返す可能な3種類の結果 について,その振る舞いを解説しておく.
  • 1番目の引数がノードを返す時,そのノードの直前のポイ ントが,範囲の始点となる. 2番目の引数がノードを返す時,そのノードの直後のポイ ントが,範囲の終点となる. 終点が始点より先にある場合には,エラーを返す.
  • 1番目の引数が範囲を返す時,その範囲の始点が,range() が指定する範囲の始点ともなる. 2番目の引数が範囲を返す時,その範囲の終点が,range() が指定する範囲の終点ともなる.
  • 1番目の引数がポイントを返す時,そのポイントが範囲の始点となる. 2番目の引数がポイントを返す時,そのポイントが範囲の 終点となる.
16.2.4.5 string-range()

string-range()スキーマは,文字の位置を使い範囲を指定する ものである. これで示される範囲の終点は,文字の位置に隣接している. XML要素に隣接するノードが,その要素から指定できるように,こ の範囲も,当該文字から指定できるようにしておく必要がある. そのようにしておくと,タグで分断されている2つの文字の間 にあるポイントのどちらであるか,という曖昧さをなくすこと が出来る.

string-range()スキームは,1番目の引数としてポインタを取 り,このポインタは,文字列があるノードまたは範囲を示して いる. ポインタに文字列が含まれていない場合,string-range()スキー マは文字列の範囲を指定できない. string-range()スキーマは,'開始文字'を基準に決められる. 開始点は,数値0で,これは,ポインタにある文字列の,第一 の文字を示している. string-range()スキーマの2番目の引数としてあるオフセット 値は,開始点から始まる,相対的な文字の位置を示す. つまり,実際の範囲の開始点は,開始点にオフセット値を足し た地点となる.

string-range()スキームに,3番目の引数として長さが指定さ れていた場合,範囲の終点は,開始点に長さを足した所にある 文字に隣接するポイントとなる. オフセット値がマイナスの時,範囲の長さは,3番目の引数と して指定された長さを超えてしまうが,string-rangeスキーマ は,そのような,開始点を超えた場所にある文字も示すことが 出来る. このような場合,(訳注:指定された範囲を超えた)当該文書中 にある文字が,指定範囲の対象となる. また,開始点に,3番目の引数で指定された長さを足したもの が,文書中にある文字の長さを超えてしまうことも可能ではあ る. 例えば,文書中にある最後の文字を含めたような範囲を指定す る場合は,そうする必要がある.

3番目の引数に長さが指定されない時,その初期値は1として解 釈され,つまり指定範囲には1文字が含まれることになる. この長さの値が0と指定されると,範囲は0となり,これは開始 文字の直前にある場所と解釈される.

16.2.4.6 match()

match()スキームは,1番目の引数としてあるポインタで指定さ れた範囲の中にある,2番目の引数としてある文字列の場所を 示すものである. match()スキームが返す結果は,文字列が存在している範囲である. 文字列がない場合には,エラーとなる. 1番目の引数であるポインタがが示す範囲を超えて,文字列を 探すことはないだろう.

3番目の引数として取ることが出来るインデックスでは,1以上 の整数値を指定することになる. この数値は,指定した範囲内に,文字列が複数あった場合 に,そのうちからどの範囲をmatch()スキームが返すかを指定 するものである. このインデックスが指定されていない場合,初期値には1が与 えられ,これは最初にあった文字列の範囲が返されることにな る.

16.2.5 規範参照

規範参照の「規範」とは,文書中の場所を指定する,コミュニティ もしくはコーパスで特有の方法のことを意味している. 例えば,聖書研究者にとって,'Matt 5:7'とあれば,これはMatthewという書の5章7節の意味となる. もし,この'Matt 5:7'を,TEI文書中のある場所を示すポインタ として使い,例えば,属性nの値が'Matt'である要素divのなか にある5番目の要素divの,さらに7番目のdivを指示 するようにするのである.

TEIにあるいくつかの要素(例えば,glossptrrefterm)では,この様な目的のために,属性 cRefを取ることが出来る. 本節で解説する方法を使うことで,特定の学術界で使われている 書式で作られた規範的な資料を参照することが可能となり,ま た,ソフトウェアは,それを完全なるURIへと変換することも可 能となる. 属性cRefの値は,本節で解説されて いるように処理され,その結果得られた参照可能なURIは,属性 targetの値のように,解決すること が出来る. 属性cReftargetは,排他的な関係にある. すなわち,要素には,どちらか一方の属性しか使うことができな い.

属性cRefが機能するには,(例えば)Mattと呼ばれる書と,それに対応する XMLデータ中の部分を対応付ける仕組みが必要となる. この仕組みは,TEIヘダーにある要素refsDeclが担っている. この要素には,規範参照の文字列(例えばMatt 5:7)を ,#xpath1(//div[@n='Matt']/div[5]/div[7]といった URIへと翻訳するアルゴリズムが記録されている. 要素refsDeclについては,2.3.5 参照システム宣言で 解説されている. 以下にある例については,すぐ後の16.2.5.1 一般の例で詳 しく解説する.
<refsDecl xml:id="biblical">
 <cRefPattern
   matchPattern="(.+) (.+):(.+)"
   replacementPattern="#xpath1(//div[@n='$1']/div[$2]/div[$3])">

  <p>This pointer pattern extracts and references the <q>book,</q>
   <q>chapter,</q> and <q>verse</q> parts of a biblical reference.</p>
 </cRefPattern>
 <cRefPattern matchPattern="(.+) (.+)"
   replacementPattern="#xpath1(//div[@n='$1']/div[$2])">

  <p>This pointer pattern extracts and references the <q>book</q> and
  <q>chapter</q> parts of a biblical reference.</p>
 </cRefPattern>
 <cRefPattern matchPattern="(.+)"
   replacementPattern="#xpath1(//div[@n='$1'])">

  <p>This pointer pattern extracts and references just the <q>book</q>
     part of a biblical reference.</p>
 </cRefPattern>
</refsDecl>
ソフトウェアが,規範参照を属性cRefに見つけたとき,以下にある処理のス テップを踏み,URIへと変換することになる.
  1. 15.3.3 Summaryに まとめられている規則に従い,属性refsDeclの値が,正しいかを確認する.
  2. 適切な要素refsDecl中の,要素cRefPatternを,出現順に以下の処理をす る.
    1. 属性cRefの値と,属性matchPatternの値にある正規表現 とを,比較する.
    2. もし,属性cRefの値が正規 表現のパタンに該当したら,属性replacementPatternの値を対象に,後 方参照($1, $2など)を,該当した部分表現へと変更し, それを結果として返す.
    3. 得られた結果は,属性targetにある,相対的または絶対 的URI参照として振る舞うことになる. つまり,値をそのままで,または属性xml:baseと合 わせて使うことができる.
    4. 属性cRefに対して,refsDeclにある規則を当てはめ ることを止める.
    5. 但し,属性cRefの値が,属 性matchPatternにある正規 表現に該当しなかった場合は,次の要素cRefPatternへ処理を進める.
  3. 全ての要素cRefPatternを順次確認し,どれにも該当 するものがなかった場合には,ポインタへの解決は失敗する.

属性matchPatternで使われる正規表 現は,Appendix to XML Schema Part 2にあるW3Cが規定するXML Schema Languageで 使われているものである. 57 属性replacementPatternは,単純な 文字列であるが,但し,後方参照を示す$1から$2は,該当する文 字列に置き換えられる. 後方参照の番号を示す数は,最大値が9であることに注意して欲 しい. 従って,「$18」とある場合には,「1番目にマッチした文字列 に続いて文字8がある」という事になり,「18番目にマッチした 文字列」とはならない. もし,ドル記号に続いて数字を記録し,それを後方参照ではなく 文字として扱う場合には,ドル記号を%24として記録す る必要がある.

16.2.5.1 一般の例

先の例にある属性refsDeclを対象に,ソフトウェア が,属性xml:baseに値http://www.example.org/resources/books/Bible.xml を持つ要素divにある属性cRefの値Matt 5:7を解決することを考えてみよう. まず,ソフトウェアは,正規表現(.+)(.+):(.+)が 「Matt 5:7」に対応するかを確認する. この場合,対応が確認され,成功する. 該当した部分文字列として,一番はじめのものは「Matt」,2 番目のものは「5」,3番目のものは「7」となる(訳注:括弧で 括られている部分が部分文字列を作る). 次に,ソフトウェアは,これらの部分文字列を,パタン #xpath1(//div[@n='$1']/div[$2]/div[$3])に当ては め,文字列 #xpath1(//div[@n='Matt']/div[5]/div[7])を作り出 す. これに,属性xml:baseが示すベー スURIが付加され,最終的には,完全なURI参照となる http://www.example.org/resources/books/Bible.xml#xpath1(//div[@n='Matt']/div[5]/div[7])が得られる.

もし,文字列が「Matt 5」の場合には,この正規表現は該当し ない. この場合,ソフトウェアは,2番目にある正規表現 (.+)(.+)との対応を確認し,それは成功する. 結果として,部分文字列「Matt」と「5」が得られることにな る. すると,これらの部分文字列を,パタン #xpath1(//div[@n='$1']/div[$2])に当てはめ,該当 する部分が書き換えられる,結果として,部分識別子が得られる. 次に,これを,属性xml:baseにあ るベースURIと結びつけて,完全なURI参照となる http://www.example.org/resources/books/Bible.xml#xpath1(//div[@n='Matt']/div[5]) を得ることになる.

もし,文字列が「Matt」の場合には,今までの2つの正規表現は該当し ない. この場合,ソフトウェアは,3番目にある正規表現 (.+)との対応を確認し,それは成功する. 結果として,完全なURI参照 http://www.example.org/resources/books/Bible.xml#xpath1(//div[@n='Matt']) を得ることになる.

正規表現で示されている数以上の部分文字列が得られた場合に は,エラーとなる. 例えば,以下の例を考えてみる.
<cRefPattern
  matchPattern="(.+)(.+):(.+)"
  replacementPattern="//div[@n='$1']/div[$2]/div[$3]/p[$4]"/>
これは,エラーとなる. 理由は,正規表現と対応する部分文字列の数は3つであるのに,後 方参照では4つ目($4)を期待しているからである.

符号化する人の中には,これまでに挙げた例よりも,もっと精 緻な正規表現を好むこともあるだろう. 例えば, ^\s*([1-9]?[A-Z][a-z]+)\s+([1-9][0-9]?[0-9]?):([1-9][0-9]?)\s*$ の様な表現である.

16.2.5.2 URIの例
先の例では,属性cRefの値は,部 分識別子であり,これを元に完全なURIを生成してきた. もちろん,以下の例にあるように,完全なURIを直接生成する ことも可能である.
<refsDecl xml:id="USC">
 <cRefPattern
   matchPattern="([0-9][0-9])\s*U\.?S\.?C\.?\s*[Cc](h(\.|ap(ter|\.)?)?)?\s*([1-9][0-9]*)"
   replacementPattern="http://uscode.house.gov/download/pls/$1C$5.txt">

  <p>Matches most standard references to particular
     chapters of the United States Code, e.g.
  <val>11USCC7</val>, <val>17 U.S.C. Chapter 3</val>, or
  <val>14 USC Ch. 5</val>. Note that a leading zero is
     required for the title (must be two digits), but is not
     permitted for the chapter number.</p>
 </cRefPattern>
 <cRefPattern
   matchPattern="([0-9][0-9])\s*U\.?S\.?C\.?\s*[Pp](re(lim(inary)?)?)?\s*[Mm](at(erial)?)?"
   replacementPattern="http://uscode.house.gov/download/pls/$1T.txt">

  <p>Matches references to the preliminary material for a
     given title, e.g. <val>11USCP</val>, <val>17 U.S.C.
       Prelim Mat</val>, or <val>14 USC pm</val>.</p>
 </cRefPattern>
 <cRefPattern
   matchPattern="([0-9][0-9])\s*U\.?S\.?C\.?\s*[Aa](ppend(ix)?)?"
   replacementPattern="http://uscode.house.gov/download/pls/$1A.txt">

  <p>Matches references to the appendix of a given tile,
     e.g. <val>05USCA</val>, <val>11 U.S.C. Appendix</val>,
     or <val>18 USC Append</val>.</p>
 </cRefPattern>
</refsDecl>
<!-- ... -->
<p>The example in section <ptr target="#SABN"/> is taken
from <ref cRef="17 USC Ch 1">Subject Matter and Scope of
   Copyright</ref>.</p>
16.2.5.3 その他の例

規範参照を使うポインタの仕組みは,TEIで使われていること 想定しているが,非TEI準拠の資料(プレインテキストなど)や,部 分的にTEIでも使える資料の中にある,規範参照を処理する仕 組みを作る際にも,この仕組みは有康であろう.

16.3 区画,分割,アンカー

本節では,テキスト範囲やポイントを指示し,分類付けるための3 つの要素を解説する. これらの要素が使われる役割のひとつは,本章中でよく使われる, 文書中の一部をまとめたりリンク付けたりする時に必要な,識別子 を付与する役割である. 2種類の中立的な名前を持つ要素を使うことで, 手法に依存しない方法で,TEIスキームの意味を拡張することがで きる. 符号化する人は,この要素を,TEIでは規定されていない意味を持 つ要素として使うことができる.
  • anchor/ テキスト要素であるかどうかに関係なく,テキスト中で,参照先になるIDを 示す.
  • ab 任意の部分的テキスト単位を示す.特定の意味はなくとも,段 落に相当する, 句レベル・挿入レベルの単位として無名単位 になる.
    part 当該部分の完全性を示す.
  • seg 任意の句レベルのテキスト単位を示す(要素segを含む).
    subtype 符号化された部分の下位範疇を示す.
要素anchorと要素abは,クラ スatt.typedのメンバー で,このクラスで定義された属性を使うことができる.
  • att.typed 要素を分類するための属性を示す.
    type 当該要素の分類を示す.
    subtype 必要であれば,当該要素の下位分類を示す.
要素segは クラスatt.segLikeで,この クラスで定義された属性を使うことができる.
  • att.segLike 任意の部分に使用される要素向けの属性を示す.
    type 当該分割の種類を示す.
    function 当該部分の役割を示す.
    part 当該部分が,他の要素によって分割されているかどうかを示す.例えば,複 数の文から構成されている句など.

要素anchorは, 要素segの 内容がないものと捉えることもできる. すなわち,テキスト中の任意の場所に,識別子を記録するための仕 組みである. この要素は,3.10 参照システムで解説 した要素milestoneと同じよ うに,文書を複数の始点で記録するする際には,便利である. 例えば,段落や韻文行の論理構造と,写本にある物理的な配置を対 応付けるときなのである. これらの要素は,クラスmodel.globalのメンバーであ り,本章で解説するモジュールが使えるときにはいつでも使うこと ができる. 但し,これらの要素のうち,要素anchorは, テキスト中の任意の範囲を示すものではなく, 11.3.4 Additions and Deletionsで解説した範囲を示す要素 のターゲットとして,統合のために使われる,任意のポイントを示 すものである.

例えば,あるテキストの部分で,ある単語に続く5番目の単語の終 わりにマークを付けることを考えてみる. これは,単語の共起関係を調べる助けとなるだろう. 一番簡単な方法は,要素anchorを,以下に あるように,使うことである.
English language. Except for not very<anchor xml:id="eng1"/>
English at all at the time<anchor xml:id="eng2"/>
English was still full of flaws<anchor xml:id="eng3"/>
English. This was revised by young
<anchor xml:id="eng4"/>
16.4.1 対応では,要素anchorを使い, キーワードのコンコーダンスを作る際に,統合関係を示す例を示す.

要素segは,処理の対象としたいテキ ストの任意を部分を作り出すときに使うことができる. この要素は,この要素の他には,テキスト素性を記録するのに相応 しいものがない場合に使うために用意されている. つまり,機能の簡単な拡張といえる. また,この要素は,他の要素が参照する任意の部分に識別子を用意 する働きもある. つまり,要素ptrなどがターゲットとする部分を作り 出すことが出来る.

要素seg の使用例は,本ガイドラインの至る所で解説されている. 例えば,以下のような使用方法がある.
以下の例では,要素segを,どもりの部分を示している. 本ガイドラインでは,どもりを示すテキスト素性向けの要素は定義され ていない.
参考文献
<q>Don't say <q>
  <seg type="stutter">I-I-I</seg>'m afraid,</q>Melvin, just say <q>I'm
   afraid.</q>
</q>
要素segは,特に,テキストから自動的に 言語学上の単位として分割された句をマークする際に便利である. 以下の例では,属性xml:idが,文書中 の他の場所から参照され,または統合されるための,識別子として 働いている.
参考文献
<seg xml:id="bl0034type="sentence">
 <seg xml:id="bl0034.1type="phrase">Literate and illiterate speech</seg>
 <seg xml:id="bl0034.2type="phrase">in a language like English</seg>
 <seg xml:id="bl0034.3type="phrase">are plainly different.</seg>
</seg>
上記の例にあるよう,要素segは,分析に必要なだけ入れ子化するこ とが出来る. この使い方については,以下の例でも詳しく紹介する. 属性typeや属性subtypeを使うと,文中の各単語をさらに分類 することができる(属性xml:idは,例を 見やすくするために外している).
<seg type="sentencesubtype="declarative">
 <seg type="phrasesubtype="noun">
  <seg type="wordsubtype="adjective">Literate</seg>
  <seg type="wordsubtype="conjunction">and</seg>
  <seg type="wordsubtype="adjective">illiterate</seg>
  <seg type="wordsubtype="noun">speech</seg>
 </seg>
 <seg type="phrasesubtype="preposition">
  <seg type="wordsubtype="preposition">in</seg>
  <seg type="wordsubtype="article">a</seg>
  <seg type="wordsubtype="noun">language</seg>
  <seg type="wordsubtype="preposition">like</seg>
  <seg type="wordsubtype="noun">English</seg>
 </seg>
 <seg type="phrasesubtype="verb">
  <seg type="wordsubtype="verb">are</seg>
  <seg type="wordsubtype="adverb">plainly</seg>
  <seg type="wordsubtype="adjective">different</seg>
 </seg>
 <seg type="punct">.</seg>
</seg>
(上記例にある属性値は,実際のデータに似せたというより,簡潔さの ために作られている). 特定の分析を前提とした範囲指定の要素については, 17.1 言語学的区分で定義されていることに注意すること. それらの要素は,いわゆる「文単位」「節」「句」「単語」「形態 素」「文字」を明示するタグになっている. これらは,要素segが示す一般的な分類では物足りない場 合に使われることになる. これらの要素を使うと,例えば,先の例は,以下のように簡単に記 録することも出来る.
<phr type="noun">
 <w type="adjective">Literate</w>
 <w type="conjunction">and</w>
 <w type="adjective">illiterate</w>
 <w type="noun">speech</w>
</phr>
特定の用途向け要素にある属性typeは,よ り一般的な用途向けの要素segにある属性subtypeと同じような働きをしている. 但し,伝統的な言語学上の分類に依らない分析をする場合には,要 素segは, 簡単かつ強力な仕組みとなる.
言語資料などでは,要素segが,17.1 言語学的区分で解説された,文単位向けに特化した 要素sの代替として使うことが出来る. 但し,この目的では,要素sを使った方が便利ではある. 理由は,要素segは,文単位にある素性と,文単位 から構成される素性の,両方を記録するために使うことができるか らである. 例えば,以下の例のようになる. 58
<seg xml:id="s1s3type="narrative_unit">
 <s xml:id="s1">Sigmund, the <seg type="patronymic">son of Volsung</seg>,
   was a king in Frankish country.</s>
 <s xml:id="s2">Sinfiotli was the eldest of his sons.</s>
 <s xml:id="s3"> ... </s>
</seg>
要素segは,他の要素と同じく,要素の内容と して適切に含まれている必要がある. 例えば,要素segが単語をまとめることが出来るのは, その単語を束ねる文の中にあるときだけである. 以下にあるはじめの例は,正しい例だが,2番目の例は間違いであ る.
Give me <seg type="phrase">a dozen. Or two or three.</seg>
<!-- Illegal! --> <s>Give me <seg type="phrase">a dozen.</s><s>Or two or three.</s></seg>
属性partは,この様な制約を乗り越え る,簡単な手法として使うことができる.
<s>Give me <seg type="phrasepart="I">a dozen.</seg>
</s>
<s>
 <seg part="F">Or two or three.</seg>
</s>
別の対策としては,16.7 総合で 仮設される要素joinを使う方法がある. この方法では,要素segには識別子を付与する必要がある.  この種の符号化に関する問題は,20 非階層構造を参照のこと.

要素segは,散文の段落に相当する内容を記録 することができる. 従って,クラスmodel.inter のメンバーをまとめるために使うこともできる. 例えば,一連の句レベル要素をまとめるように,リスト,引用,注 釈,ト書きなどもまとめることが出来る. 但し,一連の段落や,韻文行といったようなテキストをまとめるこ とは出来ない. そのためには,16.1.4 仲介ポインタで解説する仲介ポインタを使 うか,または,16.7 総合で解説する手法を使う必要がある. テキスト分割の方針や,その分割された部分を表示する方法を,明 示し,記録しておくことは,とりわけ重要である. この記録には,分類コードの仕組みや内容も書かれているべきであ る. このような記録は,TEIヘダーにある要素segmentationに記される. これについては,2.3.3 編集方法宣言で解説している.

要素segは, 編集上の変更箇所,省略や展開,追加や削除,校合の対象といった 特定の用途向け要素が相応しくない状況下で,同時に起こる,また は,互いが排他的な関係にあるテキストを記録するためにも使うこ とができる. この様な状況下では,要素segを使い,それぞれの再部分を示すことが出来 る. また,それらの集合は,要素choiceを使い,示すことが出来る.

例えば,複数の環境にソフトウェアをインストールする為の案内を 書く場合,要素segを使い,各環境に合わせた,排他的な 内容を記録することが出来る.

pressing <choice>
 <seg type="platformsubtype="Mac">option</seg>
 <seg type="platformsubtype="PC">alt</seg>
</choice>-f will …

本章では,要素segに識別子を持たせた例を,他の部分とリンク 付け,関連づけるための例として,数多く紹介している.

要素abは, 要素segと 似た機能を持っているが,段落などの構成要素レベルの要素と同じ レベルには出現するが,その中には出現しないテキストの部分を示 すために使うことができる. 従って,この要素は,クラスmodel.pLikeのメンバーとなる.

要素abは, 例えば,聖書の各節を示すために使うことができる.
参考文献
<div1 n="Gentype="book">
 <head>The First Book of Moses, Called</head>
 <head type="main">Genesis</head>
 <div2 n="1type="chapter">
  <ab n="1">In the beginning God created the heaven and the
     earth.</ab>
  <ab n="2">And the earth was without form, and void; and darkness
  <hi>was</hi> upon the face of the deep. And the Spirit of God
     moved upon the face of the waters.</ab>
  <ab n="3">And God said, Let there be light: and there was
     light.</ab>
 </div2>
</div1>
また,他の例として,段落が複数の節から構成され, 要素pにより段落が示され,要素segによりそ の下位部分が示されているような場合を考えてみる. この時,要素abは,要素pの代わりとして使うことができる. 但し,この要素は,段落の内部には使うことができない. 一方,要素segは,段落の内部にのみ使うことが可能 で,段落間では(すなわち,無名のブロック要素としては)使うこと ができない.
参考文献
<div1 n="Gentype="book">
 <head>Das Erste Buch Mose.</head>
 <div2 n="1type="chapter">
  <p>
   <seg n="1">Am Anfang schuff Gott Himel vnd Erden.</seg>
   <seg n="2">Vnd die Erde war wüst vnd leer / vnd es war
       finster auff der Tieffe / Vnd der Geist Gottes schwebet auff
       dem Wasser.</seg>
  </p>
  <p>
   <seg n="3">Vnd Gott sprach / Es werde Liecht / Vnd es ward
       Liecht.</seg>
  </p>
 </div2>
</div1>
要素abは, 舞台芸術の各発話を記録とき,当該発話が,韻文なのか散文なのかが 明確ではない時に使うと便利である. 例えば,符号化する人が,シェークスピアのテンペストの出だしの 行を,韻文とするのか散文とするのか,はっきりとさせたくない場 合,以下のように記録することが出来る.
参考文献
<div1 n="Itype="act">
 <div2 n="1type="scene">
  <head rend="italic">Actus primus, Scena prima.</head>
  <stage rend="italictype="setting"> A tempestuous noise of
     Thunder and Lightning heard:
     Enter a Ship-master, and a Boteswaine.</stage>
  <sp>
   <speaker>Master.</speaker>
   <ab>Bote-swaine.</ab>
  </sp>
  <sp>
   <speaker>Botes.</speaker>
   <ab>Heere Master: What cheere?</ab>
  </sp>
  <sp>
   <speaker>Mast.</speaker>
   <ab>Good: Speake to th' Mariners: fall too't, yarely,
       or we run our selues a ground, bestirre, bestirre.
   <stage type="move">Exit.</stage>
   </ab>
  </sp>
  <stage type="move">Enter Mariners.</stage>
  <sp>
   <speaker>Botes.</speaker>
   <ab>Heigh my hearts, cheerely, cheerely my harts: yare, yare:
       Take in the toppe-sale: Tend to th' Masters whistle: Blow
       till thou burst thy winde, if roome e-nough.</ab>
  </sp>
 </div2>
</div1>
これらの詳細は,3.12.2 舞台芸術向けコア要素7.2.4 Speech Contentsを参照のこと.

16.4 対応と統合

本節では,属性correspで示される対応 関係と,それら対応の順序付き集合により示される統合関係につい て解説する. この両方の関係は,16.1 リンクで解説される 要素linkと要素linkGrpを使い示される. また,時間の統合関係である「同期」についても解説をするが,こ れは,16.5 同期で解説し,それ用の特別な要素を使うことに なる.

16.4.1 対応

テキスト分析では,ひとつの文章中にある複数箇所を対応付けた り,異なる文書中の複数箇所を対応付けたりする必要がある. リンク付ける箇所を要素が明示的に示していれば,その要素にグロー バル属性correspを付与して,識別子 により,そのような対応を示すことが出来る.
  • att.global.linking リンクに関する付加的タグが使用される場合,全ての要素に 付与可能な,リ ンクやハイパーテキストのための属性 を定義する.
    corresp 当該要素と対応する要素を示す.
この属性は,本章(16 リンク,分割,統合 )のはじめに解説した機能により,使うことができる. 対応関係は,16.1 リンクで解説した 要素linkを使うことで示すことが出来る.

対応関係が,ある範囲の間で取られていて,他に使える要素がな いのであれば,要素segで記録 されるべきである. 対応関係が,ポイントの間で取られていて,他に使える要素がな いのであれば,要素anchorで記録されるべ きである.

内容の範囲を示すものに属性corresp が付与されている例は,以下のようになる.
<title xml:id="SHIRLEY">Shirley</title>, which made
its Friday night debut only a month ago, was
not listed on <name xml:id="NBC">NBC</name>'s new schedule,
although <seg corresp="#NBCxml:id="NETWORK">the network</seg>
says <seg corresp="#SHIRLEYxml:id="SHOW">the show</seg>
still is being considered.
この例では,「the network」 と「the show」が参照句とな り,属性correspにより,直接対応す る要素と関連付けられている. この機能は,簡単に使うことができるが,どの様な対応関係にあ るかをより正確に特定することができないという欠点はある. この属性が使われている場合,符号化する人は,TEIヘダーにあ る符号化宣言に関するところで,関連性に関するその意味を記録 することが望ましい.
属性correspが示すリンクは, それが付与されている要素と,それが参照する(時に複数の)要素 とにある,双方向のリンクとなる. 59 従って,これらの要素間にある対応は,16.1 リンクで解 説する要素リンクlinkGrpとで示すことも可能である. さらに,これらの要素を使うことで,例えば以下の例のように, 対応関係の種類を示すことも可能となる.
<title xml:id="shirley">Shirley</title>, which made
its Friday night debut only a month ago, was not
listed on <name xml:id="nbc">NBC</name>'s new schedule,
although <seg xml:id="network">the network</seg> says
<seg xml:id="show">the show</seg> still is being considered.

<linkGrp type="anaphoric_linktargFunc="antecedent anaphor">
 <link targets="#shirley #show"/>
 <link targets="#nbc #network"/>
</linkGrp>
以下の例では,同じ機能を使い,「English」に 続く5番目の単語の後に記録されたアンカーの対応を示している.
English language. Except for not very<anchor xml:id="eng1"/> <!-- ... --> English at all at the time<anchor xml:id="eng2"/> <!-- ... --> English was still full of flaws<anchor xml:id="eng3"/> <!-- ... --> English. This was revised by young<anchor xml:id="eng4"/> <!-- ... --> <linkGrp type="five-word collocates"> <link type="collocates of ENGLISH" targets="#eng1 #eng2 #eng3 #eng4"/> <!-- ... --> </linkGrp>

16.4.2 並行テキストの統合

並行テキストを統合する重要な応用領域として,多言語コーパス がある. 例えば,翻訳された文を対応付ける必要があったとしよう. カナダの議事録においては,英語とフランス語で書かれる必要が ある. この様な問題について,ゲールとチャーチは,次のように述べて いる.

英文の殆どは,フランス語の文に一対一に対応するが,英語 の文を,複数のフランス語文に対応付けることも可能である. (以下の例にある)はじめの英語の2文は,2つのフランス語文 に対応づけることが難しい例である. より細かい部分と対応付けることは難しい. 例えば,はじめの英文にある「...sales...were higher...」は2番目のフランス語文(の一部)と対応している. 続く2つの対応は,1つの英文が1つのフランス語文に対応す る,典型的な例である. 最後にある対応は,2つの英文が1つのフランス語文に対応し ている. このような(ソフトウェアによって生み出された)対応は,人 が判断して対応付けられた結果である. 60

ゲールとチャーチが作ったソフトウェアが生み出した対応関係 は,4つの手法で表現できる. 符号化する人は,はじめに,当該対応関係を(要素anchorを使い)テキスト にあるポイントで示すのか,または,要素segを使い,範囲で示すのかを決め る必要がある. この選択は,当該対応関係を処理するソフトウェアの手順や,符 号化する人の意図に依存することになる. 次に,符号化する人は,要素anchorまたは要 素segに属性correspを付与することで対応を示す のか,または,要素linkGrpを使い対応を示すのかを,選 択することになる.

以下に,属性correspのみを付与した 要素anchorを使う例 を示す.
<div xml:lang="entype="subsection">
 <p>
  <anchor corresp="#fa1xml:id="ea1"/>According to our survey, 1988
   sales of mineral water and soft drinks were much higher than in 1987,
   reflecting the growing popularity of these products. Cola drink
   manufacturers in particular achieved above-average growth rates.
 <anchor corresp="#fa2xml:id="ea2"/>The higher turnover was largely
   due to an increase in the sales volume.
 <anchor corresp="#fa3xml:id="ea3"/>Employment and investment levels also climbed.
 <anchor corresp="#fa4xml:id="ea4"/>Following a two-year transitional period,
   the new Foodstuffs Ordinance for Mineral Water came into effect on
   April 1, 1988. Specifically, it contains more stringent requirements
   regarding quality consistency and purity guarantees.</p>
</div>
<div xml:lang="frtype="subsection">
 <p>
  <anchor corresp="#ea1xml:id="fa1"/>Quant aux eaux minérales
   et aux limonades, elles rencontrent toujours plus d'adeptes. En effet,
   notre sondage fait ressortir des ventes nettement supérieures
   à celles de 1987, pour les boissons à base de cola
   notamment. <anchor corresp="#ea2xml:id="fa2"/>La progression des
   chiffres d'affaires résulte en grande partie de l'accroissement
   du volume des ventes. <anchor corresp="#ea3xml:id="fa3"/>L'emploi et
   les investissements ont également augmenté.
 <anchor corresp="#ea4xml:id="fa4"/>La nouvelle ordonnance fédérale
   sur les denrées alimentaires concernant entre autres les eaux
   minérales, entrée en vigueur le 1er avril 1988 après
   une période transitoire de deux ans, exige surtout une plus
   grande constance dans la qualité et une garantie de la
   pureté.</p>
</div>

この例において,属性correspは,英文と フランス語文の双方に付与する必要はない. 理由は,(先にも示したように)この属性は,双方向の関係を示す ものと決まっているからである. 但し,処理を簡単にしたり,英語を元にフランス語へ翻訳され る,またはその反対の翻訳,といった印象を生まないためには, この例の方がよい. より深く考えると,この記録では,アンカーが対応するテキスト の範囲が明示されおらず,単にポイントのみで関係を示している. 従って,もし,ある一方のテキストには,他のテキストにある一 部が欠けている場合には,この方法だと適切には対応付けられない.

そこで,今度は,同じ文章を,要素linkGrpを使い記録してみる. これにより,対応付けられる部分を明示することが出来る.
<div xml:id="div-exml:lang="entype="subsection">
 <p>
  <seg xml:id="e_1">According to our survey, 1988 sales of mineral
     water and soft drinks were much higher than in 1987,
     reflecting the growing popularity of these products. Cola
     drink manufacturers in particular achieved above-average
     growth rates.</seg>
  <seg xml:id="e_2">The higher turnover was largely due to an
     increase in the sales volume.</seg>
  <seg xml:id="e_3">Employment and investment levels also climbed.</seg>
  <seg xml:id="e_4">Following a two-year transitional period, the new
     Foodstuffs Ordinance for Mineral Water came into effect on
     April 1, 1988. Specifically, it contains more stringent
     requirements regarding quality consistency and purity
     guarantees.</seg>
 </p>
</div>
<div xml:id="div-fxml:lang="frtype="subsection">
 <p>
  <seg xml:id="f_1">Quant aux eaux minérales et aux limonades,
     elles rencontrent toujours plus d'adeptes. En effet, notre
     sondage fait ressortir des ventes nettement
     supérieures à celles de 1987, pour les
     boissons à base de cola notamment.</seg>
  <seg xml:id="f_2">La progression des chiffres d'affaires
     résulte en grande partie de l'accroissement du volume
     des ventes.</seg>
  <seg xml:id="f_3">L'emploi et les investissements ont
     également augmenté.</seg>
  <seg xml:id="f_4">La nouvelle ordonnance fédérale sur
     les denrées alimentaires concernant entre autres les
     eaux minérales, entrée en vigueur le 1er avril
     1988 après une période transitoire de deux
     ans, exige surtout une plus grande constance dans la
     qualité et une garantie de la pureté.</seg>
 </p>
</div>
<linkGrp type="alignmentdomains="div-e div-f">
 <link targets="#e_1 #f_1"/>
 <link targets="#e_2 #f_2"/>
 <link targets="#e_3 #f_3"/>
 <link targets="#e_4 #f_4"/>
</linkGrp>
要素abは,対応関係とは無関係に,両方の言 語の文を示すことが出来る. 例えば,この例にある,最初の翻訳の対応は,以下のように示すことも出来る.
<div xml:id="englishxml:lang="entype="subsection">
 <ab xml:id="english1">
  <s>According to our survey, 1988 sales of mineral water and soft
     drinks were much higher than in 1987, reflecting the growing popularity
     of these products.</s>
  <s>Cola drink manufacturers in particular achieved above-average
     growth rates.</s>
 </ab>
</div>
<div xml:id="frenchxml:lang="frtype="subsection">
 <ab xml:id="french1">
  <s xml:id="fs1">Quant aux eaux minérales et aux limonades, elles
     rencontrent toujours plus d'adeptes.</s>
  <s xml:id="fs2">En effet, notre sondage fait ressortir des ventes nettement
     supérieures à celles de 1987, pour les boissons à
     base de cola notamment.</s>
 </ab>
</div>

16.4.3 統合の3方法

これまでに紹介してきた,2つの並行テキストを統合する方法で は,当該テキスト部分は,同じ文書にある必要があった. もし,テキスト部分が,別の文書中にある場合には,絶対的・相 対的な完全なURI(16 リンク,分割,統合 )を使う必要がある. このような外部への参照は,文書中のどこでもあり得るが,リン クを使ってこれが示される場合には,要素linkGrp (またはこれに準じるリンクを まとめる要素)を使い,リンクをまとめることになる.

この使い方を示すために,コメニウスの「可感界図示」をチャー ルズ・ホールが(1659年に)英語に訳したものの対応付けを考えて みる.
この作品にある話題は,3つの部分から示されている. 絵と,ラテン語による散文と,それに対応する英語,ドイツ語ま たはその土地の言語である. 2種類のテキストにあるキーワードは異なる字体で示され,番号 により,絵とリンク付けられている. 番号は,2種類のテキストと絵に付けられている.
はじめに,テキストの部分を考えてみる. 英語とラテン語の部分は,それぞれ,要素divで示すことにする. 各印刷行には,識別子が付与される. 但し,この例では,便宜上,それ以上のことはしていない.
<div xml:id="e98xml:lang="entype="lesson">
 <head>The Study</head>
 <p>
  <seg xml:id="e9801">The Study</seg>
  <seg xml:id="e9802">is a place</seg>
  <seg xml:id="e9803">where a Student,</seg>
  <seg xml:id="e9804">a part from men,</seg>
  <seg xml:id="e9805">sitteth alone,</seg>
  <seg xml:id="e9806">addicted to his Studies,</seg>
  <seg xml:id="e9807">whilst he readeth</seg>
  <seg xml:id="e9808">Books,</seg>
 </p>
</div>
<div xml:id="l98xml:lang="latype="lesson">
 <head>Muséum</head>
 <p>
  <seg xml:id="l9801">Museum</seg>
  <seg xml:id="l9802">est locus</seg>
  <seg xml:id="l9803">ubi Studiosus,</seg>
  <seg xml:id="l9804">secretus ab hominibus,</seg>
  <seg xml:id="l9805">solus sedet,</seg>
  <seg xml:id="l9806">Studiis deditus,</seg>
  <seg xml:id="l9807">dum lectitat</seg>
  <seg xml:id="l9808">Libros,</seg>
 </p>
</div>
次に,テキスト以外の部分を考えてみる. これを記録するには,2つの構成要素が必要となる. まず,このページそのものを記録するものである. もうひとつは,関連づける部分領域を示すものである. 11.1 Digital Facsimilesでは,ファクシミリ板における対応を記録す る,TEIの手法を紹介している. この章では,任意の領域とポイントを関連づけるより強力な方法 を紹介する. これは,XMLアプリケーションのひとつであるSVG(Scalable Vector Graphics)を使う方法である. これにより,先の2つの構成要素を賄うことが出来る.
<svg>
<image
xlink:href="p1764.png"
width="597" height="897"
id="p981" />
<rect id="p982" x="75" y="75" width="25" height="10"/>
<rect id="p983" x="55" y="42" width="25" height="10"/>
</svg>
この例では,SVGにより3つの方形領域が,x-y座標を使いながら 定義されている. 最終的な見栄えは,SVGソフトウェアが,URIで指定された画像デー タ(p1764.png)と,これらを合わせ たものとなる. ここでは,全体画像にも識別子が付与されている. これにより,3つの視覚的な部分が,統合され,以下の段階へと 進むことになる(画像データの扱いについては14.3 画像データ向けの要素を参照のこと.また,SVG等の非TEIデー タを,TEI文書中で扱うことについては22.6 Combining TEI and Non-TEI Moduleを参照のこ と).
印刷された現物にある,コメニウスのテキストには,3種類の統 合関係がある.
  1. 英語とラテン語は,2つの並行した列(段)にそれぞれ印刷さ れ,対応する句が(先の例では要素seg で示され)近くに配置されている.
  2. 特定の単語には,それぞれの言語での用語として,表現方法 を変えて示されている. 英語のテキストでは,一貫して黒色の文字が使われ,そこに あるThe Studya Student, StudiesBooksは,ローマン体で書かれ ている. ラテン語のテキストでは,全体はローマン体で書かれている 中,対応する単語(MuseumStudiosusStudiisLibros)は,全てイタリック体 で書かれている.
  3. テキスト中にある番号によるラベルは,同じ数字を持つキー ワードと,図中にある部分とをリンク付けるものである. このラベルは,先の例では記録されていないが,各言語にあ る1番目と3番目と最後の部分に付けられていて,同じよう に,図中にも(はっきりとはしていないが)付けられている. 図中にある「study」「student」「book」に該当する部分 が,それぞれの言語で対応する部分と関連している.
1番目の種類の統合関係は,要素segの属性correspで示されている. 2番目の種類の統合関係は,3.3.4 用語,注釈,同等語,解 説で解説される要素glossと要素termで 示されている. 3番目の種類の統合関係は,テキスト中に埋め込まれたポインタ を使い示され,例えば,以下のようになる.
... <seg xml:id="e9803">where a <ref n="2" target="#p982">Student</ref>,</seg> <seg xml:id="l9803">ubi <ref n="2" target="#p982">Studiosus</ref>,</seg> ...
但し,ここでは,要素linkを使うこと も考えられる. その理由は,その方が,効率よく,英語,ラテン語,図の間にあ る相互の統合関係を,冗長な記述無く,効率よく記録できるから である.
<linkGrp type="alignment">
 <link targets="#e9801 #l9801 #p981"/>
 <link targets="#e9802 #l9802"/>
 <link targets="#e9803 #l9803 #p982"/>
 <link targets="#e9804 #l9804"/>
 <link targets="#e9805 #l9805"/>
 <link targets="#e9806 #l9806"/>
 <link targets="#e9807 #l9807"/>
 <link targets="#e9808 #l9808 #p983"/>
</linkGrp>

ここで示された対応関係は,識別子が付与されているテキスト部 分と画像の部分から作られている. この対応関係に,先に示したような印刷上異なる単語を新たに加 えるとすれば,新しい要素を定義し,テキスト中に記録するか, またはスタンドオフスタイルで外部に記録する必要がある. この様な単語を,要素termと要素glossの対応関係として記録すると すれば,一見簡単そうではあるが,ラテン語を解説(gloss)とす るのか,英語を解説とするのかという,簡単には決められない選 択を迫られることになる. この種の単語を全て要素termで記録すると,この種の 難しい判断を避けることは出来るが,ある種の間違った情報を記 録するのではないかという懸念もあるだろう. この種の単語を,要素segに識 別子を付与して記録することで,対応関係を示すことも可能で ある.

これらの記録方法は,全て,テキスト中に何かしらの付加的なマー クアップを必要としている. 従って,これらの方法は,問題を起こすこともある. 例えば,書き込みが出来ない媒体にあるテキストには,マークアッ プを付加できないことがある. この様に,元のテキストにマークアップを追加することが出来な い場合には,スタンドオフスタイルで記録をする必要がある. 本章で解説された各種の参照スキーマを使い参照可能な,テキスト中にある 対象は,必ずしも属性xml:idに依存 することで実現しているわけではない. 例えば,当該部分には識別子が無くとも,16.2.3 W3C element()で解説した手法を使うことで,参照 することは可能である. 例えば,もう少し簡単にタグ付けされた例を考えてみよう.
<div xml:id="E98xml:lang="entype="lesson">
 <head>The Study</head>
 <ab>The Study</ab>
 <ab>is a place</ab>
 <ab>where a Student,</ab>
</div>
<div xml:id="L98xml:lang="latype="lesson">
 <head>Muséum</head>
 <ab>Museum</ab>
 <ab>est locus</ab>
 <ab>ubi Studiosus,</ab>
</div>
先の例で示したと同じ対応関係を,この例中で実現するには,必 要な要素segに相当する部分を,XPathで特定する ことが出来る.
<linkGrp type="alignment">
 <link
   targets="#element(L98/2) #element(E98/2) #p981"/>

 <link targets="#element(L98/3) #element(E98/3)"/>
</linkGrp>
要素内容にある,必要な部分内容を要素化することなく,16.2.4.5 string-range()で解説した,テキス ト範囲を指定するスキーマを使うことで,それを実現している. 例えば,単語「Studies」と「Studiis」の対応関係は,以下にあるようなリンクで 示すことが出来る.
<link
  targets="#string-range(xpath1(id('e9806')),16,6) #string-range(xpath1(id('l9806')),0,7)"/>

16.5 同期

先の節では,2つの典型的な統合関係を解説してきた. ひとつは,多言語の並行テキストを統合することと,ひとつは,画 像とテキストを統合することである. 本節では,統合関係のもうひとつの典型的な例である,同期関係を 解説する. テキストの部分を,時間軸に対応させてマークすることは,発話さ れたテキストを記録する際に,当然のように,頻繁に必要となる. また,引用された発話や,時間を単位として示されている事象を記 録する際にも,必要なことがある. 本節で解説される手法は,他の統合関係(例えば,テキスト要素と 空間の対応関係)にも使える一般的なものである.

16.5.1 同期事象の統合

同期を取る部分や場所に,要素を明記することが可能であれば, グローバル属性synchを使い,それら の同期関係を示すことが出来る.
  • att.global.linking リンクに関する付加的タグが使用される場合,全ての要素に 付与可能な,リンクやハイパーテキストのための属性を定 義する.
    synch 当該要素と連動する要素を示す.
この属性は,本章で解説される機能が使える状況下では,グロー バル属性として使うことができる. 同期関係は,要素linkと要素linkGrpを使い,示すことも可能で ある.
これらの機能を解説するために,以下にある発話されたテキスト を考えてみよう.
B: The first time in twenty five years, we've cooked Christmas (unclear) for a blooming great load of people. A: So you're [1] (unclear) [2] B: [1] It will be [2] nice in a way, but, [3] be strange. [4] A: [3] Yeah [4], yeah, cos it, it's [5] the [6] B: [5] not [6]

この例では,角括弧で示された数値が,発話がオーバーラップし ているポイントを示している. 例えば,Aの最初の発話にある[1]は,Bの2番目の発話にある[1]と同時に起こっているとされる. 61

この様な記録をするには,本章で解説するモジュールに加えて,8 Transcriptions of Speechで解説する発話モジュー ルを導入している必要がある. はじめに,発話のテキストを書き起こし,次に,同期を取るポイ ントに要素anchorを記録し ,同期を取るanchor同士を属性synch で示してゆく. 先の例(16.4.2 並行テキストの統合)でも解説したように,属性 correspを使うと,非対称的な対応関係を示すことから,属性 synchを使うのは,双方向の対応関係を示すときのみとなる.
<div xml:id="BNC-d1type="convers">
 <u xml:id="u2bwho="#b"> The first time in twenty five years,
   we've cooked Christmas <unclear> for a blooming great
     load of people.</unclear>
 </u>
 <u xml:id="u3awho="#a">So you're
 <anchor synch="#t1bxml:id="t1a"/>
  <unclear>
   <anchor synch="#t2bxml:id="t2a"/>
  </unclear>
 </u>
 <u xml:id="u3bwho="#b">
  <anchor xml:id="t1b"/>It will be <anchor xml:id="t2b"/>
   nice in a way, but, <anchor xml:id="t3b"/>
   be strange.<anchor xml:id="t4b"/>
 </u>
 <u xml:id="u4awho="#a">
  <anchor synch="#t3bxml:id="t3a"/>Yeah
 <anchor synch="#t4bxml:id="t4a"/>, yeah, cos it, its
 <anchor synch="#t5bxml:id="t5a"/>the
 <anchor synch="#t6bxml:id="t6a"/>
 </u>
 <u xml:id="u4bwho="#b">
  <anchor xml:id="t5b"/>not<anchor xml:id="t6b"/>
 </u>
<!-- ... -->
</div>
上記の例を,要素linkと要素linkGrpを使い,関係を示すことも 出来る. 以下の例では,要素backは,要素linkGrpを収めるために使われているが,本 来リンクは,どこにでも記録することが出来る.
<back>
 <linkGrp
   xml:id="lg1"
   domains="BNC-d1 BNC-d1"
   targFunc="speaker.a speaker.b"
   type="synchronous_alignment">

  <link xml:id="l1targets="#t1a #t1b"/>
  <link xml:id="l2targets="#t2a #t2b"/>
  <link xml:id="l3targets="#t3a #t3b"/>
  <link xml:id="l4targets="#t4a #t4b"/>
  <link xml:id="l5targets="#t5a #t5b"/>
  <link xml:id="l6targets="#t6a #t6b"/>
 </linkGrp>
</back>
属性xml:idは,要素linkと要素linkGrpに付与されているが,その 理由は,続く16.5.2 同期事象の時間割当てで解説する.
他の統合関係と同様に,同期関係も,発話の地点や部分の間に 関係が示される. 例えば,完全なる発話が同期しており,ある人物の「What?」という発話と,別の人物の 「No!」という発話が,同じ時 間にされたとしよう. この場合,要素anchorを使わなくとも,以下のよう に記録することが出来る.
<u synch="#u02xml:id="u01who="#a">What?</u>
<u xml:id="u02who="#b">No!</u>
オーバーラップ(ある発話者が,次の前の発話者が終わる前に話 し出す状況)を表現する簡単な方法は,要素segを使 い,オーバーラップする発話部分を示すことである. 例えば,以下のようになる.
<u who="#a"> So you're <unclear synch="#u-b1"/>
</u>
<u who="#b">
 <seg xml:id="u-b1"> It will be </seg> nice in a way, but,
<seg synch="#u-a3"> be strange. </seg>
</u>
<u who="#a">
 <seg xml:id="u-a3"> Yeah </seg>, yeah, cos it,
its <seg synch="#u-b2"> the </seg>
</u>
<u xml:id="u-b2who="#b"> not </u>
この例では,空要素のunclearと要素segの同期関係 と,要素uと要素segとの同期関係が,属性synchで示されていることに,注意して欲し い. これと同じ様子を,要素linkGrpを使い記録することも出来る.

16.5.2 同期事象の時間割当て

同期関係は,発話のどのポイントが同じ時間であるかを示し,そ の順番を示すことになるが,実際の時刻を示しているわけではな い. この様な情報を符号化する人が持っている場合, 以下にあるような要素whenと要素timelineを使い,記録することが出来る.
  • when/ 同じ要素timeline中にある他の要素に対応する時点,または絶対的な時点を示す
    absolute 当該時点の,絶対時間を示す.
    interval 時間幅を数値で示す.
    unit 親要素timeLineから継承さ れない場合,属性intervalで示され る時間の単位を示す.
    since 当該要素whenの時間となる参照時点を示す.参照時点に時間幅を足すことで得られる.
  • timeline 時間的なまとまりを示すために,発話テキストの要素をリン クすることがで きる,時間軸上の順序付き時点の集合を示す.
    origin 時間軸の起点示す.すなわち,始点の時間.
    interval 間隔を表す数値を示す.
    unit 時間軸を構成する属性intervalの値に対応する,時間単位を特定する.

要素whenは, 属性absoluteまたは属性sinceを使い,時点を示している. whenは,文字列を値に 取り,これが特定の時間点を表し,直接的に時点を示すことにな る. 属性sinceは,他の要素 whenを参照 し,間接的に時点を示すことになる. 属性sinceが使われている場合,属性 intervalと属性unitは,属性sinceで示された時点から経過した時間全体 を示すために使われるべきである. 属性sinceの属性値が-1の場合は,経過時間は分からないことに なる.

要素whenが,同じ時間間隔で連なってい る場合, 要素timelineで属性intervalや属性unitを使い,一度にそれを示すことが可能 で,それぞれの要素whenで繰り返し指定する必要はない. 時間間隔は変化するが,単位は全て同じである場合には,属性 unitだけを要素timelineで使い,要素whenで属性intervalを使うことで,記録することが出 来る. できる.

要素timelineにある属性originは,要素timeline中にある開始点を参照して いる. 当然,この時点は,絶対的に示される必要がある.

以下の例にある要素timelineは,前節にあった会話の記録をまとめ たものである.
<timeline xml:id="tl1origin="#w0unit="ms">
 <when xml:id="w0absolute="11:30:00"/>
 <when xml:id="w1interval="unknownsince="#w0"/>
 <when xml:id="w2interval="100since="#w1"/>
 <when xml:id="w3interval="200since="#w2"/>
 <when xml:id="w4interval="150since="#w3"/>
 <when xml:id="w5interval="250since="#w4"/>
 <when xml:id="w6interval="100since="#w5"/>
</timeline>
要素timelineにある情報は,要素linkGrpが示す情報とリンク付けて,以 下のように,同期関係を示すことが出来る.
<linkGrp
  type="temporal_specification"
  domains="lg1 tl1"
  targFunc="synch.points when">

 <link targets="#l1 #w1"/>
 <link targets="#l2 #w2"/>
 <link targets="#l3 #w3"/>
 <link targets="#l4 #w4"/>
 <link targets="#l5 #w5"/>
 <link targets="#l6 #w6"/>
</linkGrp>
2つのリンクグループを分けて記録する(ひとつが互いのアンカー同時を動機付け, ひつとが時間軸上の時点との関連をとる)のを避けるのであれば,同 期を取る時点へ要素whenを直接リン ク付けるのがよい.
<linkGrp
  type="temporal_specification"
  domains="BNC-d1 BNC-d1 tl1"
  targFunc="speaker.a speaker.b when">

 <link targets="#t1a #t1b #w1"/>
 <link targets="#t2a #t2b #w2"/>
 <link targets="#t3a #t3b #w3"/>
 <link targets="#t4a #t4b #w4"/>
 <link targets="#t5a #t5b #w5"/>
 <link targets="#t6a #t6b #w6"/>
</linkGrp>
最後に,電子化された音声記録があり,さらに,時間幅を特定し たXMLファイルがある場合を考えてみる. この時,例えば,マークアップ言語SMILを使い,以下のように記 録することも出来る.
<audio src="rtsp://soundstage.pi.cnr.it:554/home/az/bncSound/xmas4lots.mp3" xml:id="au1" begin="05.2s" /> <audio src="rtsp://soundstage.pi.cnr.it:554/home/az/bncSound/xmas4lots.mp3" xml:id="au2" begin="05.7s" /> <audio src="rtsp://soundstage.pi.cnr.it:554/home/az/bncSound/xmas4lots.mp3" xml:id="au3" begin="05.9s" /> <audio src="rtsp://soundstage.pi.cnr.it:554/home/az/bncSound/xmas4lots.mp3" xml:id="au4" begin="06.3s" /> <audio src="rtsp://soundstage.pi.cnr.it:554/home/az/bncSound/xmas4lots.mp3" xml:id="au5" begin="06.9s" /> <audio src="rtsp://soundstage.pi.cnr.it:554/home/az/bncSound/xmas4lots.mp3" xml:id="au6" begin="07.4s" />
要素audioを参照するURIを用意し,そ れを,先の例にある要素linkの(訳 注:属性targetsの)4番目の値として記録することで,音声ファ イルと該当するテキスト部分の同期を取ることが出来る.

この種の発話の書き起こしについての詳細は,8 Transcriptions of Speechを参照のこと.

16.6 同一要素と仮想複製

本節では,「仮想要素」という概念を導入する. この要素は,テキスト中には,明示的に記録されてはいないが,記 録の様子から,ソフトウェアがその存在を推測できるようなもので ある. 本節では,既にある要素の写しとして,仮想要素を作る方法を紹介 する. 続く節(16.7 総合)では,既にある要素を総合することで,仮想要 素を作る方法を紹介する.

リンク付けの対象となる部分や場所として,ある既存の要素が使え るようであれば,グローバル属性であるsameAscopyOfを 使うことで,リンク付けすることが可能である.
  • att.global.linking リンクに関する付加的タグが使用される場合,全ての要素に付与 可能な,リンクやハイパーテキストのための属性を定義する.
    sameAs 当該要素と同一の要素を示す.
    copyOf 当該要素のコピー要素を示す.
この属性を使うと,テキストにある要素が,テキスト分析上,他と 同一のものである事を示したり,(その要素が長い内容を含む時に) 要素内容をくり返さずに示すことが出来る. 例えば,以下の記述では,要素dateがくり返されている.
参考文献
<p>In small clumsy letters he wrote:
<q rend="centered italic">
  <date xml:id="d840404">April 4th, 1984</date>.</q>
</p>
<p>He sat back. A sense of complete helplessness had
descended upon him. ...</p>
<p>His small but childish handwriting straggled up
and down the page, shedding first its capital letters
and finally even its full stops:
<q rend="italic">
  <date>April 4th, 1984</date>.
   Last night to the flicks. ... </q>
</p>
この時,2番目の要素dateは,1番目のそれと同じ要素内容を持ってい ることを記録したいと考えてみる. 属性sameAsは,それを示すことが出来 る. この属性を使うと,先の例は,以下のように書くことが出来る.
<date sameAs="#d840404rend="italic">April 4th, 1984</date>
Last night to the flicks ...

属性sameAsは,2つの要素が,同一の内 容を持っていることを記録するために使うことができる. この属性は,リンクの一種と考えることができる. この属性は,同一内容を持つ要素か,または,その内容が,くり返 されているもので,例えば,曲中で同じ歌詞を歌う様な場合に,2 度目のところで,「繰り返し」と記されているような内容を持つ要 素にのみ付与されるべきである. 属性sameAsが示す関係は,対称的な関 係性となる. 同じ歌詞が3度くり返される場合,それぞれに属性sameAsを記録し,1番目の要素を参照すること で,各歌詞が同じ内容であることが示され,1番目の要素からは, その内容がどこに写されるのかを,指定する必要はない.

属性copyOfは,同じように,他の要素 と,同じ要素内容を持つことを示す為に使われる. 属性copyOfが,属性sameAsと違う点は,その内容がくり返されない ことである. この属性は,指定した要素の「仮想複製」を作る働きがある. 例えば,先の例で,くり返されている要素dateを,この要素で示す と,以下のようになる.
<date rend="italiccopyOf="#d840404"/>

ソフトウェアは,属性copyOfを伴う要 素を見つけると,その要素内容を,それが参照する要素の内容と, 入れ替えることになる. 参照された要素の内容に,別の要素が含まれている場合には,それ らも全て,この属性を伴う要素の内容として,取り込まれることに なる. 従って,この入れ替えが実行される前後で,当該文書が妥当である かを確認する必要がある. 例えば,属性copyOfを伴う要素に 必須の下位要素がある時には,(例えそれが空要素であっても),参 照先の要素の内容と入れ替えがあったとしても,そのような必須の 要素は存在しなければならない.

以下にある例では,属性copyOfが,要 素segと共 に使われ,ほぼ同一の内容がくり返される中での違いを示している.
参考文献
<sp>
 <speaker>Mikado</speaker>
 <l>My <seg xml:id="Mik-l1s">object all sublime</seg>
 </l>
 <l>I shall <seg xml:id="Mik-l2s">achieve in time</seg></l>
 <l xml:id="Mik-l3">To let <seg xml:id="l3s">the punishment fit the crime</seg>,</l>
 <l xml:id="Mik-l4">
  <seg copyOf="#Mik-l3s"/>;</l>
 <l xml:id="Mik-l5">And make each pris'ner pent</l>
 <l xml:id="Mik-l6">Unwillingly represent</l>
 <l xml:id="Mik-l7">A source <seg xml:id="Mik-l7s">of innocent merriment</seg>,</l>
 <l xml:id="Mik-l8">
  <seg copyOf="#Mik-l7s"/>!</l>
</sp>
<sp>
 <speaker>Chorus</speaker>
 <l>His <seg copyOf="#Mik-l1s"/>
 </l>
 <l>He will <seg copyOf="#Mik-l2s"/>
 </l>
 <l copyOf="#Mik-l3"/>
 <l copyOf="#Mik-l4"/>
 <l copyOf="#Mik-l5"/>
 <l copyOf="#Mik-l6"/>
 <l copyOf="#Mik-l7"/>
 <l copyOf="#Mik-l8"/>
</sp>

この属性の詳細については,16.8 選択19.3 他の木表現を参照のこと.

16.7 総合

要素は,厳密なピラミッド型階層構造を構成することから,または 他の理由により,ひとつの要素中に分断されている部分テキストを 全て収めることが出来ないことはよくある. 16.1.4 仲介ポインタでは, 仲介ポインタを使い,そのような非連続的な部分テキストを参照し た. 本節では,別のリンクの手法により,この様な連続していない部分 全体をまとめてみる. この手法は,この章の始めに解説した手法を使うことで実現する. 次に,要素linkを使い,このような部分をまとめ ることを解説する. 最後に,特定の役割を持つリンク要素joinを解説し,これにより,部分を総合す る. そして,この要素joinをまとめる要素joinGrpを解説する.

部分を総合するためのリンク属性には,nextprevがある. この2つの属性は,ともに,ひとつの識別子を値に取ることができ る.
  • att.global.linking リンクに関する付加的タグが使用される場合,全ての要素に付 与可能な,リンクやハイパーテキストのための属性を定義する.
    next 当該要素も所属する仮想集合における次の要素を示す.
    prev 当該要素も所属する仮想集合における前の要素を示す.

要素joinは,クラスatt.pointingのメンバーで あり,このクラスの属性を使うことができる. このクラスの属性については,16.1 リンクを参照のこと.

ここでは,先にも述べた機能で使うものを紹介する. 問題は,以下にあるqs3qs4とで記されている(不連続な)文単位を1 つとして示すことである.
参考文献
<q>
 <s xml:id="qs2">Monsieur Paul, after he has taken equal
   parts of goose breast and the finest pork, and
   broken a certain number of egg yolks into them,
   and ground them <emph>very</emph>, very fine,
   cooks all with seasoning for some three hours.</s>
 <s xml:id="qs3">
  <emph>But</emph>,</s>
</q>
<s xml:id="ps2">she pushed her face nearer, and looked with
ferocious gloating at the pâté
inside me, her eyes like X rays,</s>
<q>
 <s xml:id="qs4">he never stops stirring it!</s>
 <s xml:id="qs5">Figure to yourself the work of it —</s>
 <s xml:id="qs6">stir, stir, never stopping!</s>
</q>
属性prevと属性nextを使い,識別子qs3qs4を持つ文 単位を,以下のように,単方向または双方向にリンク付けることができる.
<s xml:id="qs3" next="#qs4"><emph>But</emph>,</s> <s xml:id="qs4">he never stops stirring it!</s>
<s xml:id="qs3"><emph>But</emph>, </s> <s xml:id="qs4" prev="#qs3">he never stops stirring it!</s>
<s xml:id="qs3" next="#qs4"><emph>But</emph>,</s> <s xml:id="qs4" prev="#qs3">he never stops stirring it!</s>
最後の例では,2つの文単位を双方向でリンク付けている. これは,要素linkを使う場合と同等のものである,
<link type="jointargets="#qs3 #qs4"/>

この様な要素linkでは,属性typeに値joinを持 たせて,当該リンクが,参照先のものを,総合してひとつにする働きが あること示す必要がある.

要素join は,タイプがjoinの要素linkと同じものとなる. 但し,要素linkとは異なり, 要素joinは,属性resultを使うことで,それが作り出す 仮想要素に付加的な情報を記録することが出来る. また,要素linkとは異なり, 要素joinは,属性resultが示す要素が,構造上の位置が 正しい場所にしか使えない点で,重要である.
  • join バラバラにあるテキスト部分を参照し,ひとつのテキスト部分 を指定する.
    result 当該要素によりまとめられる要素名を示す.
    targets 仮想要素へとまとめられる要素または一節の識別子を示 す.
  • joinGrp 要素joinやポインタをまとめる.
    result 当該要素でまとめられた要素joinを示す.
先の例を完成させるため,要素joinを使い,s1s2をあわ せて,仮想の文を形成すると,以下のようになる.
<join targets="#qs3 #qs4result="s"/>
さらに,以下にあるような,著者名のリストがあったとしよう. 要素join は,このリストの中から,ハイデルベルグから集まった著者を束ね た別のリストを作るために使われている.
<list>
 <head>Authors</head>
 <item xml:id="a_uf">Figge, Udo </item>
 <item xml:id="a_ch">Heibach, Christiane </item>
 <item xml:id="a_gh">Heyer, Gerhard </item>
 <item xml:id="a_bp">Philipp, Bettina </item>
 <item xml:id="a_ms">Samiec, Monika </item>
 <item xml:id="a_ss">Schierholz, Stefan </item>
</list>
<join targets="#a_ch #a_bp #a_ssresult="list">
 <desc>Authors from Heidelberg</desc>
</join>

以下にある例では,要素joinが,ばらばらになっている引用の部分を再構 築している. ここで思い出されている詩(芭蕉の俳句の,一般的ではない翻 訳)は,「When the old pond / gets a new frog, / it's a new pond.」である.

<sp>
 <speaker>Hughie</speaker>
 <p>How does it go?
 <q>
   <l xml:id="frog-x1">da-da-da</l>
   <l xml:id="frog-l2">gets a new frog</l>
   <l>...</l>
  </q>
 </p>
</sp>
<sp>
 <speaker>Louie</speaker>
 <p>
  <q>
   <l xml:id="frog-l1">When the old pond</l>
   <l>...</l>
  </q>
 </p>
</sp>
<sp>
 <speaker>Dewey</speaker>
 <p>
  <q>...
  <l xml:id="frog-l3">It's a new pond.</l>
  </q>
 </p>
 <join targets="#frog-l1 #frog-l2 #frog-l3result="lgscope="root"/>
</sp>
他のリンクの記述と同様に,要素joinは,要素joinGrpを使い,まとめることが出来 る. これにより,同じタイプの複数の要素joinにある要素resultを指定する必要が無くなり,また,参 照先の要素が存在する範囲を制限することも出来るようになる. これらは,要素linkGrpを使う場合と同じである(16.1.3 リンクグループを参照). 要素join と同様,,要素joinGrpも,要素内容が構造上認めら れるような場所でのみ,使うことができる. 従って,例えば,複数の要素joinを用意して,これをまとめる際には, 識別子MFKFhungryを持つ要素の内容は,以 下のようになっている必要がある.
<joinGrp domains="mfkfhungry mfkfhungryresult="s">
 <join targets="#qs3 #qs4"/>
 <join targets="#qs5 #qs6"/>
</joinGrp>
要素join は,非階層構造を表現する手法としても便利である(詳細は20 非階層構造を参照). また,要素joinは,17 簡易分析機能で解説する, 要素spanや要素interpと いった,分析の単位を示す方法としても使うことができる. 例えば,以下のような禅の公案を考えてみる.

Zui-Gan called out to himself every day, ‘Master.’

Then he answered himself, ‘Yes, sir.’

And then he added, ‘Become sober.’

Again he answered, ‘Yes, sir.’

‘And after that,’ he continued, ‘do not be deceived byothers.’

‘Yes, sir; yes, sir,’ he replied.

ここで,「Zui-Gan」が発した「声」を分けて記録することを考え てみる. 以下にある例では,属性whoを使い,こ れを分けている. 各発話にある属性whoの値は,「声」を参照している(便宜上,この 例では,最初に出てきた名前を各「声」の参照先として使っている). ここでは,属性xml:idを,各発話の断 片に付与していることに注意して欲しい. これにより,各「声」による発語内容がリンク付けられている.
参考文献
<text xml:id="zuitxt">
 <body>
  <p>
   <name xml:id="zuigan">Zui-Gan</name> called out to himself every day,
  <q next="#zuiq2xml:id="zuiq1who="#zuigan">
    <name xml:id="master">Master</name>.</q>
  </p>
  <p>Then he answered himself,
  <q next="#zuiq4xml:id="zuiq2who="#zuigan">Yes, sir.</q>
  </p>
  <p>And then he added,
  <q next="#zuiq5xml:id="zuiq3who="#master">Become sober.</q>
  </p>
  <p>Again he answered,
  <q next="#zuiq7xml:id="zuiq4who="#zuigan">Yes, sir.</q>
  </p>
  <p>
   <q next="#zuiq6xml:id="zuiq5who="#master">And after that,</q>
     he continued,
  <q xml:id="zuiq6who="#master">do not be deceived by others.</q>
  </p>
  <p>
   <q xml:id="zuiq7who="#zuigan">Yes, sir; yes, sir,</q>
     he replied.</p>
 </body>
</text>
ここでさらに,要素joinを使うと,各「声」の内容 を完全に直接再現することができる.
<joinGrp result="q">
 <join targets="#zuiq1 #zuiq2 #zuiq4 #zuiq7">
  <desc>what Zui-Gan said</desc>
 </join>
 <join targets="#zuiq3 #zuiq5 #zuiq6">
  <desc>what Master said</desc>
 </join>
</joinGrp>

この例では,2つの要素joinの内容としてある要素descは,要 素qに相当す るものとして使われていることに注意して欲しい. これにより,2つの仮想要素qを,要素joinを使いまとめて記録することに成功し ている. このような仕組みが必要な理由は,現行の規格では,属性を使い, 仮想要素を関連づける方法がないからである. つまり,属性whoを使い,これらを束ね ることは出来ない.

ここで,何らかの理由により,属性xml:idが使えないとしよう. この時は,要素ptrを使い, 16.2.3 W3C element()や, 16.2.4 TEI XPointerで解 説した手法を使うことになる. 今まで使ってきた属性xml:idがあった 要素は,要素joinの属性targetsで参照されることになる.
参考文献
<text>
 <body>
  <p>Zui-Gan called out to himself every day, <q>Master.</q>
  </p>
  <p>Then he answered himself, <q>Yes, sir.</q>
  </p>
  <p>And then he added, <q>Become sober.</q>
  </p>
  <p>Again he answered, <q>Yes, sir.</q>
  </p>
  <p>
   <q>And after that,</q> he continued, <q>do not be deceived by others.</q>
  </p>
  <p>
   <q>Yes, sir; yes, sir,</q> he replied.</p>
  <ab type="aggregation">
   <ptr xml:id="rzuiq1target="./#xpath1(//div1[6]/p[1]/q[1])"/>
   <ptr xml:id="rzuiq2target="./#xpath1(//div1[6]/p[2]/q[1])"/>
   <ptr xml:id="rzuiq3target="./#xpath1(//div1[6]/p[3]/q[1])"/>
   <ptr xml:id="rzuiq4target="./#xpath1(//div1[6]/p[4]/q[1])"/>
   <ptr xml:id="rzuiq5target="./#xpath1(//div1[6]/p[5]/q[1])"/>
   <ptr xml:id="rzuiq6target="./#xpath1(//div1[6]/p[5]/q[2])"/>
   <ptr xml:id="rzuiq7target="./#xpath1(//div1[6]/p[6]/q[1])"/>
   <joinGrp evaluate="oneresult="q">
    <join targets="#rzuiq1 #rzuiq2 #rzuiq4 #rzuiq7">
     <desc>what Zui-Gan said</desc>
    </join>
    <join targets="#rzuiq3 #rzuiq5 #rzuiq6">
     <desc>what Master said</desc>
    </join>
   </joinGrp>
  </ab>
 </body>
</text>

例えば,識別子rzuiq2を持つポインタ は,当該文書中の6番目のdiv1にある,1番目の要素pにある,1番目 の要素qを示 していると解釈される.

16.8 選択

本節では,選択を示す要素を解説する. ここで,複数の要素が「排他的選択関係」にある,というのは,そ の中のいくつかの要素は,テキスト中で使えるものの,そのうちの 1つしか,実際には使えない関係のことである. また,複数の要素が「非排他的選択関係」にある,というのは,そ の中の(複数でも良いが)少なくとも1つの要素は,実際に使われて いる関係のことである. 選択関係にある要素は,「選択肢」と呼ぶことも出来る.

テキストを符号化する際,排他的選択関係を示す必要があること は多い. 一般的な例としては,ある場所には,複数の単語のうち1つしか使 えないが,そのどれかを決めることが出来ないような場合である. このような排他的選択関係を記録する方法は,リンク属性excludeを使うものである. 排他的選択関係を示すことで,当該の場所に,実際には出現する選 択肢を,後で決めることが出来るようになる. 選択肢が存在していることは,リンク属性selectで示すことが可能である. この属性が付加された要素は,実際に使われる選択肢を示すもの を,内容として取ることが出来る. この選択に関する責任や,起こり具合の程度は, 21 確信度・責任で解説する要素certaintyを使い,記録することが出来る. また,確信度全般についての論議も,この章で解説されている.

属性excludeと属性selectは,本章のはじめに紹介した,以下 のクラスが使える状況下では,どの要素でも使うことができる.
  • att.global.linking リンクに関する付加的タグが使用される場合,全ての要素に付与可 能な,リンクやハイパーテキストのための属性を定義する.
    exclude 当該要素の代替要素を示す.
    select ひとつ以上の選択肢を選ぶ.ひとつの選択肢が選ばれる場合,その曖昧度や 不確実度が示される.複数の選択肢が選ばれる場合,選 ばれなかった選択肢の数から還元される,曖昧度や不 確実度が示される.
排他的な選択関係を示す一般的な方法は,リンク要素altを使うものである. この要素と,これをまとめる要素altGrpの解説と,使える属性は,以下にまとめて ある. これらの要素は,クラスatt.pointingのメンバーであ り,このクラスの属性を使うことができる.
  • alt/ 要素などが選択的である場合のいち選択肢を示す.
    targets 当該選択肢の識別子を示す.
    weights 属性modeの値がexclの場合,該当する選択肢の出現度を示す. 属性modeの値がinclの場合,該当する選択肢の少なくとも1つが出現する場合の出現度を示す.
  • altGrp 要素altまたはポインタ要素ptrをまとめる.
ここで,発話されたテキストを書き起こす例を考えてみる. この時,「We had fun at the beach today.」か「We had sun at the beach today.」かのどちらかであるような発話 があったとする. この様な,排他的な可能性は,属性excludeを使い,以下のように記録することが 出来る.
<div type="interview">
 <u exclude="#we.sun1xml:id="we.fun1">We had fun at the beach today.</u>
 <u exclude="#we.fun1xml:id="we.sun1">We had sun at the beach today.</u>
</div>
もしここで,話し手がsunではな く,funといったとしよう. この時,符号化する人は,上のテキストから,選択肢sunと,残りの選択肢にある属性excludeを消すことになる. または,符号化する人は,上のテキストにある,出現の不確かさを 残しておくことも可能で,例えば,以下のように,選択肢を要素 divでまと め,そこに属性selectを用意し,属性 値we.funを付与するのである.
<div select="#we.fun2type="interview">
 <u exclude="#we.sun2xml:id="we.fun2">We had fun at the beach today.</u>
 <u exclude="#we.fun2xml:id="we.sun2">We had sun at the beach today.</u>
</div>
この様な(属性selectを使った)選択関 係では,排他的な関係にある単語や文字を示す要素に属性excludeを付与する場合でも,使うことができ る. 例えば,以下のようになる. 62
<div type="interview">
 <u select="#fun3">We had
 <seg exclude="#sun3xml:id="fun3type="word">fun</seg>
  <seg exclude="#fun3xml:id="sun3type="word">sun</seg>
   at the beach today.</u>
</div>
<div type="interview">
 <u>We had
 <seg select="#ftype="word">
   <seg exclude="#sxml:id="ftype="character">f</seg>
   <seg exclude="#fxml:id="stype="character">s</seg>
     un</seg>
   at the beach today.</u>
</div>
ここで,書き起こす人が,発話にある最初の単語が「We」か「Lee」かよく分からず,但し, 「Lee」の場合には,その後にも ある不明な単語は「fun」であ り,「sun」ではないことが分かっ ているとしよう. ここから生じる排他的な関係にある3つの発話は,以下のように記 録することが出来る.
<div type="interview">
<!-- ... -->
 <u exclude="#we.sun4 #lee.fun4xml:id="we.fun4">We had fun at the beach today.</u>
 <u exclude="#we.fun4 #lee.fun4xml:id="we.sun4">We had sun at the beach today.</u>
 <u exclude="#we.fun4 #we.sun4xml:id="lee.fun4">Lee had fun at the beach today.</u>
<!-- ... -->
</div>
この例は,各単語「We」「Lee」「fun」「sun」に属性exclude付与して,記録することも出来る.
<u>
 <seg exclude="#leexml:id="wetype="word">We</seg>
 <seg exclude="#we #sunxml:id="leetype="word">Lee</seg>
had
<seg exclude="#sunxml:id="funtype="word">fun</seg>
 <seg exclude="#fun #leexml:id="suntype="word">sun</seg>
at the beach today.
</u>
属性selectの値は,識別子のリストに なる. これにより,選択肢の対象範囲を制限することも出来る.
<div select="#we.fun5 #lee.fun5type="interview">
 <u exclude="#we.sun5 #lee.fun5xml:id="we.fun5">We had fun at the beach today.</u>
 <u exclude="#we.fun5 #lee.fun5xml:id="we.sun5">We had sun at the beach today.</u>
 <u exclude="#we.fun5 #we.sun5xml:id="lee.fun5">Lee had fun at the beach today.</u>
</div>
この例では,1番目と3番目の要素uのどちらかが出現することが記されてい る. 従って,これと同じ内容を,2つの要素から選択するように書くこと も出来る.
<div type="interview">
 <u exclude="#lee.fun6xml:id="we.fun6">We had fun at the beach
   today.</u>
 <u exclude="#we.fun6xml:id="lee.fun6">Lee had fun at the beach today.</u>
</div>
属性excludeは,場所は確定している が,出現そのものが不確かな要素を記録するときにも使うことがで きる. 例えば,文単位「Let's go to May」にある単語 「May」が,これ以上の情報が ないために,人物の名前なのか付きの名前なのかが,分からなかっ たとしよう. この時,属性excludeを使い,この不確 かさを記録することが出来る.
<s>Let's go to
<name exclude="#maynxml:id="mayd">May</name>
 <date copyOf="#maydexclude="#maydxml:id="mayn"/>.</s>

属性copyOfについては,16.6 同一要素と仮想複製で解説されている. この属性により,不確かな要素の内容を,繰り返し記録する必要が 無くなる.

この属性copyOfと,属性excludeをあわせて使うことで,文書中である 特定の要素が出現する場所が不確かであることが,簡単に記録する ことが出来る. 63 例えば,文書の本文にある1番目の要素div1にあ る,3番目となる最後の要素div2か,または,同じく2番目の要素div1にあ る,1番目の要素div2のどちらが出現する状況を考えてみる. ひとつの方法として,一番最初に出現する要素div2のみを 記録し,2番目の場所には,その仮想複製を作り,それらを,以下 にあるように,排他的選択にしてしまう方法がある.
<body>
 <div1 xml:id="C1">
  <div2 xml:id="C1S3exclude="#c2s1"/>
 </div1>
 <div1 xml:id="C2">
  <div2 xml:id="C2S1copyOf="#c1s3exclude="#c1s3"/>
 </div1>
</body>
この例では,もし必要であれば,属性selectを要素bodyに付加することも出来る.
排他的な関係は,要素linkを使い示すことも出来る. 本節のはじめに載せた例から,要素uにある属性excludeを外して,以下のように,要素linkを加えることも出来 る(訳注:この文は旧版P4と同じであるが,例中のxml:idは変更さ れている). 64
<div type="interview">
 <u xml:id="we.had.fun">We had fun at the beach today.</u>
 <u xml:id="we.had.sun">We had sun at the beach today.</u>
 <link
   type="exclusive_alternation"
   targets="#we.had.fun #we.had.sun"/>

</div>
ここで,特別な用途向けのリンク要素altを新たに定義する. この要素は,クラスatt.pointing,のメンバー で,属性modeを,値excl(排他的)またはincl(非排他的)として,取ることができる. すると,以下の等式が成り立つ.
<alt mode="excl"/> = <link type="exclusive alternation"/>
先の例にある要素linkは,以下のように,要素altで記録することも出来る.
<alt targets="#we.fun #we.sunmode="excl"/>

要素altには,他にも,特別な属性weightspercentを取ることが出来る. 属性weightsは,指示対象(選択肢)に 「確率的な重み」を記録するために使うことができる(訳注:文学 的な表現と理解した方がよい). この属性値は,一連の数値で,それぞれの数値が,指示対象と対応 し,その出現度の確率を示している. 選択肢が,排他的な関係にある場合,この重みの合計は1となる.

例えば,先の例にあるfunsunの出現確率は,同じであると しよう. この時,要素altを使い,選択肢を以下 のように記録することが出来る.
<alt targets="#we.fun #we.sunmode="exclweights="0.5 0.5"/>
ある参照先には重み1を付与すること(つまり,他の選択肢の重みは0とな ること)は,その参照先が選択されることを意味する. 従って,以下の例は,本節のはじめから2番目の例と,同等のもの になる(訳注:xml:idには変更がある).
<u xml:id="we.fun">We had fun at the beach today.</u>
<u xml:id="we.sun">We had sun at the beach today.</u>
<alt targets="#we.fun #we.sunmode="exclweights="1 0"/>
要素alt mode="excl"で使われている重 みの合計は,0%から(100 × k)%の範囲になる. このkは,参照先の数を示している. もし合計が0%であれば,この選択は,排他的選択関係となる. もし合計が(100 x k)%であれば,全ての選択肢が,出現することに なる. この場合,要素altをここで使うことは相 応しくない事にもなる.

要素altは,要素altGrpを 使い,まとめることが可能で,この時,各要素altで共有す る属性値を,要素altGrpに付与しておくことが出来る. 属性targFuncの初期値は,「first.alternant next.alternant」である.

ここでもう一度,先に紹介した発話を書き起こす例を考えてみる. ここでは,はじめの単語が「We」 か「Lee」かが分からず,3番目 の単語が「fun」か「sun」かが分からない. 但し,はじめの単語が「Lee」で あれば,3番目の単語は「fun」 となる. これに加えて,次のような情報を追加したいとしよう. 「we」が使われると,「fun」の出現確率は50%で,「sun」の出現確率も50%となる. 「fun」が使われるときに は,「we」の出現確率は40%で, 「Lee」の出現確率は60%となる. この様な状況は,以下のように記録することが出来る.
<u>
 <seg exclude="#lee2xml:id="we2type="word">We</seg>
 <seg exclude="#we2xml:id="lee2type="word">Lee</seg>
had
<seg exclude="#sun2xml:id="fun2type="word">fun</seg>
 <seg exclude="#fun2xml:id="sun2type="word">sun</seg>
at the beach today.
</u>
<altGrp>
 <alt targets="#we2 #lee2"/>
 <alt targets="#fun2 #sun2"/>
 <alt targets="#we2 #fun2mode="inclweights="0.5 0.5"/>
 <alt targets="#lee2 #fun2mode="inclweights="1.0 0.6"/>
</altGrp>

この記述から,「We had fun at the beach today」の出現確率が 28.5%(訳注:2/7), 「We had sun at the beach today」の出 現確率が28.5%(訳注:2/7),「Lee had fun atthe beach today」の出現確率が43%(訳 注:3/7)と求めることが出来る.

もうひとつの例として,以下に,ブロードウェイでの歌を考えてみ る. この歌には,3つの版があり,同じ行がそれぞれの版で, 'Her skin is tender as a leather glove', 'Her skin is tender as a base ball glove', 'Her skin is tender as Dimaggio's glove'となっている. 65

このような版の違いによるテキストの違いを,要素altを使い,各テキ ストの相対的な確かさを,それぞれ出現率でDimaggio'sが50%, aleatherが25%, a baseball25%と記録することが 出来る.

これに更に(想像上の)変異点を加えて,続く行は,出現確率が 50%の and she bats from right to leftと,出現 確率が50%のnow ain't that too damn badのどちらかであるとしよう. 要素altを使うと,例えば,2番目の行の選 択で1番目の選択肢を選んだ時,1番目の行では,Dimaggio'sの出現確率が90%となり,他 はそれぞれ5%となること, また,2番目の行の選択で2番目の選択肢を選んだ時,1番目の行で は,Dimaggio'sの出現確率が10% となり,他はそれぞれ45%になることを,記録することが出来る. これらは,排他的または非排他的な要素altを,要素altGrpを 使いまとめることで,以下のように,示すことが出来る.
<div xml:id="bmtype="song">
 <l>Her skin is tender as
 <seg xml:id="dm">Dimaggio's</seg>
  <seg xml:id="lt">a leather</seg>
  <seg xml:id="bb">a baseball</seg>
   glove,</l>
 <l xml:id="rl">and she bats from right to left.</l>
 <l xml:id="db">now ain't that too damn bad.</l>
</div>
<altGrp>
 <alt targets="#dm #lt #bbmode="exclweights="0.5 0.25 0.25"/>
 <alt targets="#rl #dbmode="exclweights="0.50 0.50"/>
</altGrp>
<altGrp mode="incl">
 <alt targets="#dm #rlweights="0.90 0.90"/>
 <alt targets="#lt #rlweights="0.5 0.5"/>
 <alt targets="#bb #rlweights="0.5 0.5"/>
 <alt targets="#dm #dbweights="0.10 0.10"/>
 <alt targets="#lt #dbweights="0.45 0.90"/>
 <alt targets="#bb #dbweights="0.45 0.90"/>
</altGrp>

16.9 スタンドオフスタイル

16.9.1 概要

この章で定義されている機能の多くは,程度の差はあれ,テキス ト中の要素により,テキストの部分が正しく宣言され,それらの 関連性が正しく宣言されていることを前提としている. スタンドオフスタイルと呼ばれるタグの使い方では,この2つの 前提を,分けて考えている. すなわち,要素は,テキストの部分を直接含むことはなく,それ を参照を使い取り込むことになる. 本ガイドラインでは,これを目的に使う機能として,W3Cで規定 されたXIncludeを使うことを推奨している. また,本章で解説されている各種のポインタを使うことも推奨し ている.

スタンドオフスタイルを使う理由は,いくつかある. ひとつは,元資料が書き込み不可の状態であり,マークアップを 追加できないことがある. また,あるテキストでは,互いに相容れない複数の構造を必要と することがある. また,マークアップが作り出す木構造が,元の資料を表現するに 最適であるとはいえないことがある.

本節では,スタンドオフスタイルで書かれる,全ての種類の記録 で使われる機能を解説する.

本節を通して,以下の用語は,特別な意味で使われている.
元資料
スタンドオフスタイルで記録される対象となる文書(元資料 は,XMLデータでも,単なるテキストデータでもよい). 元資料は,複数ある場合もある.
内装マークアップ
XMLデータとしてある元資料に,既にあるマークアップ記述.
外装マークアップ
元資料中にはなく,当該データが解説する部分を,元資料中 に参照する記述. または,元資料中のある場所にあり,当該データが解説する 元資料中にある部分を参照する記述(訳注:スタンドオフス タイルで使われている要素と理解した方がよい).
外装文書
異なる元資料を参照している外装マークアップを含む文書.
内装化
元資料と,外装マークアップとをあわせて,新しくXML文書 を作ること. 元資料は,タグ付けされていることもある.
外装化
マークアップ記述を,XML文書から取り出すこと. これにより,結果として,2つの文書が作られる. ひとつは,XML(外装)文書で,元のXML文書にあったタグを含 んでいる. ひとつは,XML(元資料)文書で,外装文書には抽出されなかっ たテキストやマークアップが含まれている. 元のXML文書から全てのマークアップが外装化された場合, 新たに作られるデータ(訳注:のひとつ)は,単なるテキスト データとなる.
スタンドオフスタイルのスキームでは,以下の3つの条件を満たす 必要がある.
  • 妥当なTEIデータは,内装データか,外装データのいずれか である.
  • 外装マークアップは,妥当なTEIデータを作るために,文書 内容に対して,既存のマークアップと置き換わり,または, それに付加することで,内装化することが出来る.
  • 外装マークアップは,内装化された文書が,既存のマークアッ プを置き換えることで作られるのか,または,それに付加す ることで作られるのかを,規定している.
.

16.9.2 XInclude

スタンドオフスタイルの記述では,仮想的に内容を取り込む機能 を使うことが前提となり,これは,W3Cで推奨され,本ガイドラ インでも推奨している,XIncludeという機能を使う. 66 XIncludeでは,名前空間(http://www.w3.org/2001/XInclude)が定義されいる が, 本ガイドラインでは,これを接辞xi:と,2つ要素xi:includexi:fallbackで示されている. XIncludeでは,本章でも至る所で出てくるXPointerという機能を使っ ている. これにより,テキストの部分を内装化することが出来る. XIncludeは,XPointerのうちelement()スキームしか使っていないが,本ガ イドラインでは,16.2 ポインタの機能で解説したスキームを使 うことにする.

XIncludeは,W3Cが推奨する,XML文書中に,他の資料にある部分 データを取り込むための構文のことである. 取り込まれるデータは,テキストデータまたはXML文書である. XML文書中にあるXInclude命令は,URIで指定されている資料に置 き換えられることになる. XPointerを使い,外部資料にある部分データを指定し,取り込む ことも可能である. 置き換えの資料の取得に失敗することも考慮して,元々の資料 を,取り置き分として指定することも可能である.

要素xi:includeは,属性hrefを使い,取り込まれる資料の場所を指 定する. この属性値は,IURIを取り,必要であれば,XPointerを含むこと も出来る. また,属性parse(この属性値はtextxmlのみ) を使い,取り込まれる内容が,テキストデータかXMLデータかを 示すことが出来る. また,属性encodingを使い,取り込 まれる内容がテキストデータである場合に,そのデータの符号化 方法を知る情報を示すことが出来る. 要素xi:fallbackを,選択的に,要素 xi:includeの中で使うこともできる. これにより,何らかの理由で外部にある資料の取り込みが失敗し た場合に,代替となる内容を指定することが出来る. 但し,これを使うことは,スタンドオフスタイルでは推奨されな い.

XIncludeは,現状では,ひとつのXPointerスキー ムelement()だけを使っている. 16.2.3 W3C element()でも解説したように,element()スキー ムは,裸の名前(特定の属性xml:idを 持つ要素の名前),または,子要素の列(XML木にあるパスを特定 する,スラッシュで区切られた子要素の列を,数字で示したもの)を 使い,特定の部分を指定することになる. xpointer()スキームは,XPointerの一部として,当初 から検討はされていたが,まだW3Cでは勧告扱いにはなっていな い. xpointer()スキームとTEIスキームについては,既に解 説してあるが(16.2.4 TEI XPointer),そこでは地点と範囲の概念が導入されていた. これらは,下位ノード部分(例えば,長いテキストノード中の数 単語)や,越境ノード部分(例えば,XML木全体で,異なる枝にわ たり範囲を持つテキスト部分)を示すために使うことができる.

16.9.3 TEIのスタンドオフスタイル

タグを内装化や外装化は,大変便利で,実用上重要な処理である. W3Cが定めるXIncludeの処理方法では,複数の元資料の内容が, 内装化されることになる. TEIのスタンドオフスタイルの記述では,XIncludeが使わ れ,XIncludeに対応したソフトウェアでは,これを処理す ることが出来る. 但し,内装化の詳細な手順は,スタンドオフスタイルで書かれた 記録に,明確には定義されていない. 理由は,内装・外装マークアップの構造が,オーバーラップする こともあるからである. 特に,外装文書が,元資料にある特定の要素とオーバーラップす る範囲を指定している場合,どの様に内装化(つまり取り込み)を 実行するのかは,明確ではない. なぜなら,完結していない部分的な要素は,XMLのデータではな いからである. 67 XIncludeでは,完全なる要素だけを含む場合の振る舞いが定義さ れている.

指定された範囲が,元資料にある複数の要素と部分的にオーバー ラップしている場合には,XIncludeは, オーバーラップしている要素や文字の全部や, オーバーラップしている要素の一部を取り込むことを,指定する ことが出来る. これにより,選択範囲に広がる要素を,ラッパーとして, その範囲にある子要素の全部または一部を,指定することが出来 る. 例えば,以下のような元資料があったとしよう.
<body> <p xml:id="par1">home, <emph>home</emph> on Brokeback Mountain.</p> <p xml:id="par2">That was the <emph>song</emph> that I sang</p> </body>
また,以下のような外装文書があったとしよう.
<body xmlns:xi="http://www.w3.org/2001/XInclude"> <div> <xi:include href="example1.xml" xpointer="range(xpath1(id(par1)//emph),xpath1(id(par2)//emph))"/> </div> </body>
外装文書中にあるXIncludeを処理すると,以下のような結果を文 書として得ることになる.
<body xmlns:xi="http://www.w3.org/2001/XInclude"> <div> <p xml:id="par1"><emph>home</emph> on Brokeback Mountain.</p> <p xml:id="par2">That was the <emph>song</emph></p> </div> </body>
ここにある2つの段落が,取り込みの結果である. 実は,元資料で指定されている範囲は,取り込まれた2つの段落 の段落とは,オーバーラップの関係にあった. XIncludeでは,この例のように,参照機能が階層構造となってい るXMLデータを参照していたとしても,その実行結果は,整形式 XMLデータであることを求めている. これは,内装化を常に成功させる保証をとる,よい方針ではある が,そのために,XIncludeには,オーバーラップする構造を解説 しておく必要がある.

あるひとつの文書中で,構造上オーバーラップがある場合,各階 層構造は,元資料を参照するXIncludeをまとめ,それを独立した 単位として表現する必要がある. この種の構造は,言語資料を記録するときに一般的に使われてい る. そのような言語資料では,テキスト中のオーバーラップ構造は, スタンドオフスタイルで,各構造が表現されている. 一般に,元資料には,コーパスにおける分析の最小単位がマーク アップされている. 例えば,単語や形態素などである. これらの情報やタグは,各種の階層構造すべてで共有される情報 を示すレイヤとなっている. 複雑なデータ表現をまとめる方法として,スタンドオフスタイル では,多くの属性xml:idを使うこと になる. この属性は共有される要素に付与され,リンクを構成する堅固な アンカーとなる. また,外在文書が元資料との関係を上手く成立させる働きもする.

全てのタグは,その内容が外在化により取り払われたり,他の内容を参 照するXPointerを含む要素xi:include により入れ替えられることができる.

例えば,以下のようなTEI文書の一部があったとする.
<text>
 <body>
  <head>1755</head>
  <l>To make a prairie it takes a clover and one bee,</l>
  <l>One clover, and a bee,</l>
  <l>And revery.</l>
  <l>The revery alone will do,</l>
  <l>If bees are few.</l>
 </body>
</text>
これは,別の文中にテキストデータを移動するという外在化を施 すことが可能で,これは,要素xi:includeを使い,次のように記録すること ができる.
元資料(Source.xml)
<content>To make a prairie it takes a clover and one bee,\n One clover, and a bee,\n And revery.\n The revery alone will do,\n If bees are few.\n </content>

外装文書(External.xml)
<text xmlns:xi="http://www.w3.org/2001/XInclude"> <body> <head>1755</head> <l> <xi:include href="Source.xml" parse="xml" xpointer="string-range(element(/1), 0, 48)"/> </l> <l> <xi:include href="Source.xml" parse="xml" xpointer="string-range(element(/1), 49, 71)"/> </l> <l> <xi:include href="Source.xml" parse="xml" xpointer="string-range(element(/1), 72, 83)"/> </l> <l> <xi:include href="Source.xml" parse="xml" xpointer="string-range(element(/1), 84,109)"/> </l> <l> <xi:include href="Source.xml" parse="xml" xpointer="string-range(element(/1),110,126)"/> </l> </body> </text>

規格に従えば,XIncludeの名前空間は,必ず宣言する必要があることに 注意して欲しい. 要素xi:fallbackは, 何らかの理由(例えば,外部にある元資料へのアクセスに問題がある こと)で,取り込みが失敗した場合に,当該文書中に埋め込まれる テキストデータまたはXML部分データを記録するものである. 要素xi:fallbackは選択的に使われる. これが記録されていない場合には,XIncludeを処理するソフトウェア は,取り込むべき元資料が見つからない場合,致命的エラーを返すこ とになる. これは,スタンドオフスタイルで書かれたデータを扱う場合には,よ いことである. 本ガイドラインでは,スタンドオフスタイルのデータでは,この要素 xi:fallbackを使わないことを推奨してい る.

16.9.4 スタ ンドオフスタイルの整形式性と妥当式性

XIncludeで参照される元資料の部分は,XIncludeの場所に挿入され, XIncludeを処理するソフトウェアは,その結果として作られる内装文 書は,整形式であることが求められる. これは,外装文書にXMLのタグが含まれているときでも,求められる 条件である. 元資料がテキストデータである場合は,作り出される内装文書は,常 に整形式となる.

TEIでは,要素xi:includeをTEI文書中のど こでも使えるよう改変することが認められているが,当ガイドライン では,一般論として,要素xi:includeが処 理された後は,それが妥当式であるかが検証されることを求めたい.

16.9.5 テキストデータ・部分XMLデータの取り込み

元資料がテキストデータの時,XPointerによる参照は,あまり重要で はなくなる. 一方,XPointerが問題となるのは,元資料がXMLデータの場合である.

この場合,元資料のXMLデータを新しいデータへと入れ替えるのか, または,新しいタグを追加するのかを分けて考えることが重要である. 例えば,索引で使われるXPointerは,この両方の場合を表現すること ができる.

この簡単な方法は,XPoinnterで,テキストデータのみを選択するも のである. 例えば,以下のような文書があったとしよう.
元資料(Source.xhtml)
<html> <body> <div>To make a prairie it takes a <a href="clover.gif">clover</a> and one <a href="bee.gif">bee</a>,</div> <div>One <a href="clover.gif">clover</a>, and a <a href="bee.gif">bee</a>,</div> <div>And revery.</div> <div>The revery alone will do,</div> <div>If bees are few.</div> </body> </html>
これを対象として範囲をrange(/1/2/1.0,/1/2/11.1)と記述す ると,詩全体,すなわち,テキスト内容,要素div,ハイパーテキストが選択されることにな る(XPointerでは空白文字のみのテキストもテキストノードになる).

一方,範囲をxpointer(//text()/range-to(.))xpointer(string-range(//text(),"To")/range-to(//text(),"few.") と表現した場合には,詩のテキスト部分のみが選択され,マークアップ の記述は含まれない.

従って,元資料(Source.xhtml)は, 以下のようなスタンドオフスタイルによる記録で書くこともできる.
外装文書(External2.xml)
<text xmlns:xi="http://www.w3.org/2001/XInclude"> <body> <head>1755</head> <l> <xi:include href="Source.xhtml" xpointer='xpointer(string-range(//div[1]/text(),"To")/range-to(//div[1]/text(),"bee,")'/> </l> <l> <xi:include href="Source.xhtml" xpointer='xpointer(string-range(//div[2]/text(),"One")/range-to(//div[2]/text(),"bee,")'/> </l> <l> <xi:include href="Source.xhtml" xpointer='xpointer(string-range(//div[3]/text(),"And")/range-to(//div[3]/text(),".")'/> </l> <l> <xi:include href="Source.xhtml" xpointer='xpointer(string-range(//div[4]/text(),"The")/range-to(//div[4]/text(),",")'/> </l> <l> <xi:include href="Source.xhtml" xpointer='xpointer(string-range(//div[5]/text(),"If")/range-to(//div[5]/text(),".")'/> </l> </body> </text>

16.10 分析マークアップとテキストマークアップの連携

17 簡易分析機能18 素性構造や,他でも解説し たように,分析や解釈向けのマークアップを,テキストマークアッ プとは別に,同一の文書中または別の文書中に記録する仕組みがあ る. 離れて置かれている要素は,ポインタ向けの属性ana(分析)や属性inst(インスタンス),要素linkや,要素linkGrpを使い,結びつけることができ る. 多くの例が,先に紹介した各章で紹介されている.

16.11 リンクモジュール

本章で紹介したモジュールでは,以下の要素を使うことができる. これら構成要素の選択や組み合わせについては,1.2 TEIスキーマの定義にある.

Contents « 15 Language Corpora » 17 簡易分析機能

注釈
51.
「統合」という用語は,対応関係の,特別な場合という意味で使っ ている. 例えば,記号Aを,「属性xml:idに値Aが付与された要素」という意味で使うとしよう. この時,要素A1,A2,A3が,この順番で,あるグループを形成して いたとする. また,B1,B2,B3という要素が,この順番で,また別のグループを 形成していたとする. ここで,A1がB1とB2とに対応し,A2がB2と対応し,A3がB3と対応し ている関係は,統合関係にある. また,A1がB2と対応し,B1がC2と対応し,C1がA2と対応している関 係は,統合関係ではない.
52.
注釈に付与された属性typeは,広告の 世界で確立されている分類範疇で分類を示している. 古代の作品の「Imitations(模倣)」という言葉が付くと, それを読んだことがない人や忘れてしまっていた人には,受けがよ い. 近代の作品の最も素晴らしいパロディや風刺も含まれている. 元資料では,当該詩のテキストは,2つの注釈を含むページと, 「Remarks」という見出し,もう一つの「Imitations」を共有して いる.
53.
本ガイドラインでは,そのための特別な要素を規定していない. 従って,これらの情報は,2.3 符号化解説で解説す る要素encodingDescの最後に,一連の段落と して記録されるべきである.
54.
URI(Universal Resource Indicator)は,RFC2396で定義されている.
55.
他のXPointerスキームと同様に,TEIが規定するXPointerスキーマ のパラメータとして,ポインターの引数に裸の名前(つまり,属性xml:idの値)をとることができる.
56.
裸の名前(つまり,属性xml:idの値)は, 他のXPointerスキーマと同様に,range()の引数として使うことが できる.
57.
正規表現を規定する2つの正規言語が,全く同じものであることは, 一般にはない. 例えば,「tei」とい う表現が,Perlで使われた場合,「tei」を含むテキスト列にマッチするが, W3Cが規定する正規表現では,「tei」そのものにしかマッチしない.
58.
17.3 部分と解釈を参 照のこと. そこでは,この部分からとられたテキストが分析されている.
59.
属性correspは,単方向のリンクではな く,双方向のリンクを作るという点で, 属性targetとは違うものである. また,属性targetsは,双方向のリンク に参加する要素の識別子を示しているが,属性correspは,当該属性が付与されている要素と, その属性値が示す要素との双方向リンクを示している.
60.
例としてとられたテキストについては,Gale and Church (1993)を参照 のこと.
61.
この例は,BNC(British National Corpus)にある会話の例文から採 られたものである.
62.
要素wと要素 cについての 詳細は,17.1 言語学的区分を参照のこと. これらの要素は,以下の例では,要素 seg type="word"や, 要素seg type="character"の代わりと して使われている.
63.
この問題を表現するもう一つの方法が,21 確信度・責任で解説さ れている.
64.
この例では,要素linkを, 選択肢を示す要素の隣に記録している. この要素は,要素linkGrpでまとめれていれば,当該文書中のどこ にでも記録することができる.
65.
様々な変異は,シートミュージック(ポピュラー音楽),舞踏譜,配 役表などでも見ることができる.
66.
この解説は,W3C Recommendation dated 20 December 2004.を元にしている.
67.
これは,内装化により作られたテキスト中でオーバーラップしてい るXMLのタグが,整形式ではないということである. この種のオーバーラップは,スタンドオフスタイルの記述を必要と する,一番の理由となっている.


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