9 テキスト

目次

  1. 空白類
  2. 構造化テキスト
    1. フレーズ要素: EMSTRONGDFN, CODESAMPKBDVAR CITEABBR、及び ACRONYM要素
    2. 引用: BLOCKQUOTE要素とQ要素
    3. 上つきと下つき: SUB要素とSUP要素
  3. 行と段落
    1. 段落: P要素
    2. 行区切り類の制御
    3. ハイフンづけ
    4. 整形済テキスト: PRE要素
    5. 段落の視覚的レンダリング
  4. 文書の変更に目印をつける: INS要素とDEL要素

この章では、テキストの構造化に関係する話題を説明する。 テキストのプレゼンテーションに関する要素 (配置の要素、フォントの要素、スタイルシート等) については、本書の別の箇所で説明する。 文字についての情報は、文書文字集合の項を参照されたい。

9.1 空白類

文書文字集合には、多様な空白類文字が含まれている。 その多くは、特定の視覚的スペーシング効果を生成するために何らかのアプリケーションが用いる印刷術的要素である。 HTMLでは、次に挙げる文字だけが空白類文字であると定義される。

行区切り類もまた、空白類文字である。 ここで、
 及び 
 が[ISO10646]では行や段落を明確に分離するものと定義されているが、HTMLでは行区切り類に含まれないし、更に本仕様は両者を空白類文字一般にも含めないという点に、注意されたい。

本仕様は、ここに空白類文字と明示的に定めたもの以外のスペース文字類については、レンダリングその他の挙動を示すことはない。 この理由から、著者は、空白類を含む視覚的整形効果を及ぼすためには、スペース類文字ではなく適切な要素あるいはスタイル指定を行う必要がある。

PRE要素を除くすべてのHTMLの要素にとっては、空白類は「語」を分離するものである。 (ここで言う「語」は、「空白類でない文字の列」を意味する。) テキストを整形する際、ユーザエージェントはどれが「語」であるかを認識し、特定言語(用字系)及び出力メディアでの制約に従って整えていく必要がある。

テキストのレイアウトには、語と語の間にスペース(語間スペースと呼ぶ)を挟むことも含まれるであろうが、語間スペースの取り扱いは用字系毎に異なる。 例えば、ラテン文字では、典型的語間スペースはASCIIスペース( )だが、タイの用字系ではゼロ幅単語分離 (​)である。 日本と中国の用字系では、語間スペースは典型的には全くレンダリングされない。

ここで、ソース文書中で語間に空白類が複数連なっている場合、PRE要素を除いて、レンダリング結果の語間スペース調整は全く異なるものになるという点に注意されたい。 特にユーザエージェントは、語間スペースの出力処理に際しては、連続する空白類の入力があった場合は1つにまとめてしまう必要がある。 これは、lang属性やHTTP "Content-Language"ヘッダフィールド([RFC2616]の14.12参照)、ユーザの設定、等による言語情報が存在しない場合であっても、可能かつ必要な動作である。

PRE要素は、1つ1つの空白類が意味を持つものであるような、整形済テキストを扱う際に用いる。

SGMLの行区切り規則への抵触や、現存する実装間の矛盾を回避するため、著者は、ユーザエージェントが開始タグ直後または終了タグ直前の空白類をレンダリングするとは期待しないようにすべきである。 従って、著者――特にオーサリングツール――は、次のように書くべきであり:

  <P>We offer free <A>technical support</A> for subscribers.</P>

下のように書かないようにする必要がある。

  <P>We offer free<A> technical support </A>for subscribers.</P>

9.2 構造化テキスト

9.2.1 フレーズ要素: EM STRONGDFNCODESAMP KBDVARCITEABBR、及び ACRONYM要素

<!ENTITY % phrase "EM | STRONG | DFN | CODE |
                   SAMP | KBD | VAR | CITE | ABBR | ACRONYM" >
<!ELEMENT (%fontstyle;|%phrase;) - - (%inline;)*>
<!ATTLIST (%fontstyle;|%phrase;)
  %attrs;                              -- %coreattrs%i18n%events --
  >

開始タグ: 必須、終了タグ: 必須

別途定義がある属性

フレーズ要素は、テキスト片に構造的情報を付加する。 フレーズ要素の通常の意味は、次の通りである。

EM:
強調を示す。
STRONG:
より強い強調を示す。
CITE:
引用か、他のリソースへの参照であることを示す。
DFN:
囲われた用語が定義を行っているものであることを示す。
CODE:
コンピュータのコード片であることを示す。
SAMP:
プログラムやスクリプトなどの出力例であることを示す。
KBD:
ユーザから入力されるべきテキストであることを示す。
VAR:
変数またはプログラム引数のインスタンスを示す。
ABBR:
省略形であることを示す。例えば、WWW、HTTP、URI、Mass.、等。
ACRONYM:
頭文字であることを示す。例えば、WAC、radar、等。

EM及びSTRONGは、強調を示すために用いる。 他のフレーズ要素は、技術文書において特別な重要性がある。 次に、フレーズ要素の用例を幾つか示す。

<CITE>ハリー S. トルーマン</CITE> 曰く
<Q lang="en-us">The buck stops here.</Q>

更なる情報は、<CITE>[ISO-0000]</CITE> で得られる。

今後の対応については次の番号: <STRONG>1-234-55</STRONG>
をご参照ください。

フレーズ要素のプレゼンテーションは、ユーザエージェントに依存する。 概して、視覚系ユーザエージェントはEMテキストをイタリックで、またSTRONGテキストをボールドなフォントでプレゼンテーションする。 音声合成のユーザエージェントは、音量、ピッチ、速度等の合成パラメータを、適宜変えるであろう。

ABBR要素やACRONYM要素を使うと、著者は、省略語や頭字語の発生を、明確に示すことができる。 西洋の言語では、"GmbH"や"NATO"、"F.B.I."などの頭字語や、"M."、"Inc."、"et al."、"etc."などの略語が、多く用いられる。 中国語や日本語で、類似した略語化機構が使われるが、そこでは長い元語句に含まれている漢字の数文字を繋げて用いた元語句への参照が行なわれる。 こうした構造をマーク付けすることで、ユーザエージェントの他、スペルチェッカや音声合成装置、翻訳システム、検索エンジンの索引付け等のツールに対しても、有用な情報を提供できる。

ABBR要素と ACRONYM要素の内容は、通常のテキストの並びに出現するような、省略された表現それ自体を指定する。 両要素のtitle属性が、その省略しない形態を提供するのに用い得る。

次に、 ABBRの用例を幾つか示す。

  <P>
  <ABBR title="World Wide Web">WWW</ABBR>
  <ABBR lang="fr" 
        title="Soci&eacute;t&eacute; Nationale des Chemins de Fer">
     SNCF
  </ABBR>
  <ABBR lang="es" title="Do&ntilde;a">Do&ntilde;a</ABBR>
  <ABBR title="Abbreviation">abbr.</ABBR>

ここで、略語や頭字語が特別な発音であることが多い点に注意されたい。 例えば「IRS」や「BBC」はそのまま綴り通りに読まれるが、「NATO」や「UNESCO」は略語化された語の音韻的な形態に従って読まれる。 他に、例えば「URI」や「SQL」など、綴りで読まれることもあれば語として読まれることもある、というものもある。 必要に応じて、著者は、スタイルシートを用いて省略形の読み方を指定すべきである。

9.2.2 引用: BLOCKQUOTE要素とQ要素

<!ELEMENT BLOCKQUOTE - - (%block;|SCRIPT)+ -- long quotation -->
<!ATTLIST BLOCKQUOTE
  %attrs;                              -- %coreattrs%i18n%events --
  cite        %URI;          #IMPLIED  -- URI for source document or msg --
  >
<!ELEMENT Q - - (%inline;)*            -- short inline quotation -->
<!ATTLIST Q
  %attrs;                              -- %coreattrs%i18n%events --
  cite        %URI;          #IMPLIED  -- URI for source document or msg --
  >

開始タグ: 必須、終了タグ: 必須

属性定義

cite = uri [CT]
この属性の値は、元文書あるいは元記事を指し示すURIである。 この属性は、当該の引用がどこから引かれたものであるかについての情報を提供することを目的としている。

別途定義がある属性

この2つの要素は、引用されたテキストを示す。 BLOCKQUOTE要素は長い引用 (ブロックレベル内容) を示し、Q要素は、段落の区切りを必要としないような短い引用 (インライン内容) を示す。

次に、J.R.R.トールキンの『二つの搭』からの抜粋を、ブロック引用として示す。

<BLOCKQUOTE cite="http://www.mycom.com/tolkien/twotowers.html">
<P>They went in single file, running like hounds on a strong scent,
and an eager light was in their eyes. Nearly due west the broad
swath of the marching Orcs tramped its ugly slot; the sweet grass
of Rohan had been bruised and blackened as they passed.</P>
</BLOCKQUOTE>

引用のレンダリング 

視覚系ユーザエージェントは、一般に、BLOCKQUOTE要素をインデントしてレンダリングする。

視覚系ユーザエージェントは、Q要素の内容を、引用符で囲ってレンダリングするようにしなければならない。 著者は、Q要素の開始点と終了点に引用符を置かないようにする必要がある。

ユーザエージェントは、引用符を言語固有の方法(lang属性参照)でレンダリングする必要がある。 多くの言語では、外側の引用と内側の(入れ子の)引用に対して、異なる引用の形式を採っており、ユーザエージェントはこれを考慮する必要がある。

次の例は、Q要素による入れ子の引用を示す。

John said, <Q lang="en-us">I saw Lucy at lunch, she told me
<Q lang="en-us">Mary wants you
to get some ice cream on your way home.</Q> I think I will get
some at Ben and Jerry's, on Gloucester Road.</Q>

この2つの引用は双方ともアメリカ英語であるから、ユーザエージェントはこれを適切に――この例では内側の引用を単引用符で、外側の引用を二重引用符で――囲う必要がある。

  John said, "I saw Lucy at lunch, she told me 'Mary wants you
  to get some ice cream on your way home.' I think I will get some
  at Ben and Jerry's, on Gloucester Road."

注意。 本書は、BLOCKQUOTEとして区切られた引用範囲の前と後とに、現在の言語の文脈や入れ子の深さに応じて引用符を挿入するための機構を、スタイルシート実装が提供することを推奨する。

しかしながら、単なる字下げテキストの機構としてBLOCKQUOTEを用いてきた著者もいるため、そのような著者の意図を守るため、ユーザエージェントは、デフォルトのスタイルとしては引用符を挿入しない必要がある。

BLOCKQUOTEをテキストの字下げに用いることは推奨しない。 代わりにスタイルシートを使うことが望ましい。

9.2.3 上つきと下つき: SUB要素とSUP要素

<!ELEMENT (SUB|SUP) - - (%inline;)*    -- subscript, superscript -->
<!ATTLIST (SUB|SUP)
  %attrs;                              -- %coreattrs%i18n%events --
  >

開始タグ: 必須、終了タグ: 必須

別途定義がある属性

例えばフランス語など、多くの用字系では適切なレンダリングのために上つき文字や下つき文字が必要である。 こうしたテキストをマーク付けする場合に、 SUB要素やSUP要素を用いる必要があろう。

      H<sub>2</sub>O
      E = mc<sup>2</sup>
      <SPAN lang="fr">M<sup>lle</sup> Dupont</SPAN>

9.3 行と段落

著者は、伝統的に、自分の考えや主張を段落の連なりへと盛り分けている。 情報が段落群へと構成されることは、段落のプレゼンテーションには影響されない。 両端揃えの段落は、左揃えの段落と同じ内容を持つ。

HTMLで段落を定めるためのマーク付けは、単純明快である。 P要素が、段落を定める。

段落の視覚的プレゼンテーションは、そう単純ではない。 スタイルに関しても技術的な内容についても、多くの問題が挙げられる。

こうした問題を、以下で示していく。 段落の配置と浮動オブジェクトについては、本書の別の箇所で説明する。

9.3.1 段落: P要素

<!ELEMENT P - O (%inline;)*            -- paragraph -->
<!ATTLIST P
  %attrs;                              -- %coreattrs%i18n%events --
  >

開始タグ: 必須終了タグ: 省略可能

別途定義がある属性

P要素は、1つの段落を表し、P要素自体を含め、ブロックレベル要素を内容とすることはできない。

本仕様は、著者に対し、空のP要素を用いないよう奨める。 ユーザエージェントは、空のP要素は無視する必要がある。

9.3.2 行区切り類の制御

1つの行区切りは、1つの復帰 (&#x000D;)か、1つの改行 (&#x000A;)か、1つの復帰/改行組であると定める。 すべての行区切り類は、空白類である。

行区切り類に関するSGMLの規定について、詳しくは、附属書の行区切り類に関する注意を参照されたい。

行区切りの強制: BR要素 

<!ELEMENT BR - O EMPTY                 -- forced 行区切り -->
<!ATTLIST BR
  %coreattrs;                          -- idclassstyletitle --
  >

開始タグ: 必須、終了タグ: なし

別途定義がある属性

BR要素は、現在のテキスト行を強制的に区切る(終了させる)。

clear属性は、BR要素は、視覚系ユーザエージェントに対して、後続の部分が左あるいは右マージンに浮動している画像その他のオブジェクトを回り込んで流れるのか、それとも浮動オブジェクトの下から始まるのかを決定するために使われる。 詳細については、配置と浮動オブジェクトの項で述べる。 著者は、浮動画像や浮動オブジェクトの周囲にあるテキストの流れを制御する目的にはスタイルシートを使う方がよい。

双方向性整形の観点では、BR要素は、 [ISO10646]にあるLINE SEPARATOR文字の双方向アルゴリズムにおける挙動と、同じ挙動をとる必要がある。

行区切りの禁止 

著者は、2つの語の間で行区切りが生じるのを回避したいと考えることもあるだろう。 &nbsp; 実体 (&#160; あるいは &#xA0;) は、ユーザエージェントが行区切りを発生させないスペースとして機能する。

9.3.3 ハイフンづけ

HTMLには、プレーンハイフンとソフトハイフンの、2種類のハイフンがある。 プレーンハイフンは、ユーザエージェントが別の1つの文字であると解釈すべきものである。 ソフトハイフンは、ユーザエージェントに対し、そこが行区切りが発生してもよい場所であることを示すものである。

ソフトハイフンを解釈するブラウザは、次のセマンティクスに従わねばならない。 ソフトハイフンのところで行が区切られる場合、前の行の末尾にハイフン文字が表示されねばならない。ソフトハイフンのところで行が区切られない場合、ユーザエージェントはハイフン文字を表示してはならない。検索やソートなどの操作を行う場合、ソフトハイフンは常に無視する必要がある。

HTMLでは、プレーンハイフンは"-"文字 (&#45; あるいは &#x2D;) で表される。 ソフトハイフンは文字実体参照 &shy; (&#173; あるいは &#xAD;) である。

9.3.4 整形済テキスト: PRE要素

<!ENTITY % pre.exclusion "IMG|OBJECT|BIG|SMALL|SUB|SUP">

<!ELEMENT PRE - - (%inline;)* -(%pre.exclusion;) -- preformatted text -->
<!ATTLIST PRE
  %attrs;                              -- %coreattrs%i18n%events --
  >

開始タグ: 必須、終了タグ: 必須

属性定義

width = number [CN]
推奨しない。 この属性は、視覚系ユーザエージェントに対し、整形されたブロック全体の望ましい幅に関するヒントを提供する。 ユーザエージェントは、この情報を、適切なフォントサイズを選んだり、内容を適宜インデントしたりするために用いることができる。 望ましい幅については、文字数で表現する。 この属性は、現在、広くはサポートされていない。

別途定義がある属性

PRE要素は、視覚系ユーザエージェントに対し、囲われているテキストが"整形済"であることを示す。 整形済テキストを取り扱う際、視覚系ユーザエージェントは次の制約を受ける。

非視覚系ユーザエージェントは、PRE要素の内容にある余分な空白類について、考慮する必要はない。

行区切り類に関するSGMLの規定について、詳しくは、附属書の行区切り類に関する注意を参照されたい。

上に示したDTD片は、PRE宣言中に出現できない要素が何であるかを示している。 この内容はHTML 3.2と等しく、また一定の行の高さと固定ピッチのフォントでレンダリングされたテキストの配置を保つことが意図されている。 著者が、この挙動をスタイルシートによって変更することは、好ましくない。

次に、シェリーがヒバリを詠った整形済み詩句 To a Skylark のマーク付け例を示す。

<PRE>
       Higher still and higher
         From the earth thou springest
       Like a cloud of fire;
         The blue deep thou wingest,
And singing still dost soar, and soaring ever singest.
</PRE>

これは典型的には次のようにレンダリングされる。

       Higher still and higher
         From the earth thou springest
       Like a cloud of fire;
         The blue deep thou wingest,
And singing still dost soar, and soaring ever singest.

水平タブ文字
水平タブ文字 ([ISO10646]及び [ISO88591]の十進9) は、視覚系ユーザエージェントによって、通常、8文字毎に出現するタブ区切り箇所に適合する、1つ以上で最小の空白列として解釈される。 本書は、整形済テキスト中で水平タブを用いることは避けるよう、強く要請する。 なぜなら、編集の際にタブ区切り幅を8文字以外の値に設定することはよくあることだが、これが誤った配置の文書を生み出す元となるからである。

9.3.5 段落の視覚的レンダリング

注意。 この節は、幾つかの現行ユーザエージェントが段落を整形する際に行う挙動を、参考情報として示すものである。スタイルシートが、段落の整形についてよりよい制御を行うことを許容している。

段落が視覚的にどのようにレンダリングされるかは、ユーザエージェント依存である。 段落は通常、左を揃えて右マージンが不揃いの状態でレンダリングされる。 別のデフォルトが、右-左方向の用字系にとっては適切である。

HTMLユーザエージェントは、伝統的に、段落の前後に空白を設けてレンダリングしてきた。 例を次に示す。

  At the same time, there began to take form a system of numbering,
  the calendar, hieroglyphic writing, and a technically advanced
  art, all of which later influenced other peoples.

  Within the framework of this gradual evolution or cultural
  progress the Preclassic horizon has been divided into Lower,
  Middle and Upper periods, to which can be added a transitional
  or Protoclassic period with several features that would later
  distinguish the emerging civilizations of Mesoamerica.

これは、小説のスタイルとは対照的である。 小説では、最初の行は次下げされ、前段落が終わると次段落はすぐ次の行から始まる。 その例を次ぎに示す。

     At the same time, there began to take form a system of
  numbering, the calendar, hieroglyphic writing, and a technically
  advanced art, all of which later influenced other peoples.
     Within the framework of this gradual evolution or cultural
  progress the Preclassic horizon has been divided into Lower,
  Middle and Upper periods, to which can be added a transitional
  or Protoclassic period with several features that would later
  distinguish the emerging civilizations of Mesoamerica.

1993年のMCSAモザイクブラウザによる先例に従って、ユーザエージェントは一般に、両側のマージンを揃えない。その理由の1つに、効果的に揃えることは洗練されたハイフンづけルーチン抜きでは実現が難しいということがある。 スタイルシートの出現と、ピクセル以下での位置決めが可能なアンチエイリアスのフォントによって、これまで出来たこと以上に豊富な選択が、著者には可能になった。

スタイルシートを使うと、フォントの大きさやスタイル、マージン、段落前後の空白、第1行のインデント、揃え、その他の詳細に関する緻密な制御が可能である。 ユーザエージェントのデフォルトスタイルシートは、 P要素を、上で説明したような、一般に馴染みのある書式でレンダリングする。 原理的には、これを上書きし、連続する段落を区切らずにレンダリングさせることも可能ではある。 一般的に、これは読者を混乱させる元であるから、そのようにはしないよう勧める。

慣習により、視覚系HTMLユーザエージェントは、利用可能なマージンに適応するようテキストの行を折り返す。 折り返しのアルゴリズムは整形対象である用字系に依存する。

例えば西洋の用字系では、テキストは空白類の部分でのみ折り返されるようにする必要がある。 初期のユーザエージェントは、ある要素の開始タグ直後や終了タグ直前で、不適切に行の折り返しを行った。 その結果、dangling句読点が出現した。 例えば、次の文を考えよう。

   A statue of the <A href="cih78">Cihuateteus</A>, who are patron ...

ここでA要素の終了タグ直前で行を折り返すと、次のように、後続行の冒頭にコンマが置かれてしまう。

  A statue of the Cihuateteus
  , who are patron ...

マーク付け中で当該地点に空白類が存在しないので、これはエラーである。

9.4 文書の変更に目印をつける: INS要素とDEL要素

<!-- INS/DEL are handled by inclusion on BODY -->
<!ELEMENT (INS|DEL) - - (%flow;)*      -- inserted text, deleted text -->
<!ATTLIST (INS|DEL)
  %attrs;                              -- %coreattrs%i18n%events --
  cite        %URI;          #IMPLIED  -- info on reason for change --
  datetime    %Datetime;     #IMPLIED  -- date and time of change --
  >

開始タグ: 必須、終了タグ: 必須

属性定義

cite = uri [CT]
この属性値は、元文書か元記事を指し示すURIである。 この属性は、文書の変更理由を説明している情報を指し示すことを意図している。
datetime = datetime [CS]
この属性値は、変更が行われた日付と時刻を指定する。

別途定義がある属性

INS要素とDEL要素は、異なるバージョンの文書(例えば変更点のチェックが必要な法案の草稿)と比べて挿入あるいは削除された部分をマーク付けするのに用いる。

この2要素は、HTMLの常識に反し、ブロックレベル要素としてもインライン要素としても機能する(同時にはならない)。 段落中の1つ以上の語を含むこともできるし、段落やリスト、表など1つ以上のブロックレベル要素を含むこともできる。

次の例は、州知事が副官として任命できる人数に関して定めた法案において、3名から5名に変更したことを示すものと考えられる。

<P>
  州知事は<DEL>3</DEL><INS>5</INS>名の副官を任命できる。
</P>

INS要素もDEL要素も、インライン要素として振舞っている場合はブロックレベル内容を含んではならない。

不正な用例:
以下に示すのは、正当なHTMLではない。

<P>
<INS><DIV>…ブロックレベル内容…</DIV></INS>
</P>

ユーザエージェントは、変更点を明確にするような方法で、挿入されたテキストあるいは削除されたテキストをレンダリングする必要がある。 例えば、挿入されたテキストを特別なフォントで表してもよいし、削除されたテキストを全く見えないようにしたり、取消し線や特別な印をつける等して表してよい。

次の各々は、どちらもアメリカ東部時間の「1994年11月5日午前8時5分30秒」を表すものである。

     1994-11-05T13:15:30Z
     1994-11-05T08:15:30-05:00

これをINSと同時に用いることで、次のように変更時点を示せる。

<INS datetime="1994-11-05T08:15:30-05:00"
        cite="http://www.foo.org/mydoc/comments.html">
Furthermore, the latest figures from the marketing department
suggest that such practice is on the rise.
</INS>

上の例に含まれる http://www.foo.org/mydoc/comments.html は、元文書に対してこの変更部分がなぜ追加されたのかを示すコメントを含んでいるだろう。

著者は、挿入したテキストや削除したテキストに関するコメントを、 INS要素やDEL要素のtitle属性を用いて示すこともできる。 その例を次に示す。 ユーザエージェントは、例えばポップアップノートなどで、この情報をユーザに提示するであろう。

<INS datetime="1994-11-05T08:15:30-05:00"
        title="Changed as a result of Steve B's comments in meeting.">
Furthermore, the latest figures from the marketing department
suggest that such practice is on the rise.
</INS>

訳者代表: 内田明 (UCHIDA Akira)
email: uchida@happy.email.ne.jp