この章では、文章構造に関係する事柄を扱います。テキストの見栄えに関する要素(字寄せ、フォント選択、スタイルシートなど)については別の章が担当します。個々の文字そのものに関する事柄については第5章の文書文字集合の節をご覧下さい。
各種の文字集合には実に様々な空白類文字が含まれています。その多くは字と字の間隔を空ける細かい文字組の調整のために使われるものです。HTML 4.0では、次の4種類のみを 空白類文字として扱います。
[ISO10646]で行と段落を明快にに区別するための記号として「
」と「
」が定義されているとはいえ、この2つはHTMLでは改行文字としての扱いもされませんし、本仕様書における空白類文字としても扱われませんので、ご注意下さい。
本仕様書は、上に掲げた空白類文字以外の空白類文字をどのように表示・再生するかに関しては何等指定しません。従って、空白類文字を必要とするような画面表示を行わせたい場合には、空白類文字を直接用いるのではなく、HTML的に適切な要素や書式によって記述する必要があります。
PRE要素を除く全てのHTML要素では、空白類文字は「語<word>」を区切るものとして扱われます。(ここで言う「語<word>」とは、「空白類文字でない文字の列」を意味します。)文書の表示に際して、ユーザエージェントは、「語<word>」を正しく把握し、各々の言語の正書法や出力メディアに応じて整形する必要があります。
正しい表示のためには、語と語の間の距離( 語間<inter-word space>と呼びます)の調整も必要です。語間は各々の言語・用字系によって異なっており、ラテン文字で綴る場合の語間は大抵「ASCII空白文字( )」で表しますが、タイ語では「ゼロ幅区切り(​)」で表します。日本語と中国語では、語間は全く表現されません。
元文書中に記されている、語と語の間にある複数の空白類文字列の扱いが、語と語を区切る空白とは扱いが異なることにご注意ください。(PRE要素を除く。)ユーザエージェントは、元文書中の語と語の間に複数の空白類文字が記されていた場合、語間の表現に必要な最小限の空白類文字にまで 省略して表示する必要があります。これは言語情報が指定されていない場合でも可能かつ必要な動作です。(言語情報が、lang 属性やHTTPヘッダの"Content-Language"([RFC2068]の第14章13節を参照のこと)、そしてユーザエージェントに与えられた設定などによっても不在の場合など。)
PRE要素は整形済みテキストを扱うために使われます。整形済みテキストでは空白類文字は1つ1つ意味のあるものとして扱われます。
SGMLの改行ルールに抵触することを避け、また現在各ユーザエージェント間で行われている実装の矛盾を回避するため、HTML文書を手書きする際には、(そしてオーサリングツールも)文中に空白類文字を配置する場合に、開始タグの直後や終了タグの直前に空白類文字を記してはなりません。従って、次のように書くべきところを...
<P>We offer free <A>technical support</A> for subscribers.</P>
下のように書いてはなりません。
<P>We offer free<A> technical support </A>for subscribers.</P>
<!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は強調部分を示すために使います。他の要素は技術文書などで特定目的のために使います。下に、使用法を幾つか示します。
As <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.」などの頭文字化省略語<acronym>や、「M.$B!W!VInc.」「et al.」「etc.」などの略語<abbreviation>が用いられます。中国語や日本語でも、西洋の略語法<abbreviation>に似た略語化が、長い語句を漢字<Han character>数文字で表すために、行われます。略語情報をマークアップしておくと、スペルチェッカの利用や音声出力環境での再生、機械翻訳、サーチエンジンなどでの文書活用が便利になります。
ABBRとACRONYM要素の内容には、通常の文章に現れる形での略語それ自体が記されます。そして両要素の「title」属性の値として、省略しない元の形が記されます。
ABBR要素の例を挙げます。
<P> <ABBR title="World Wide Web">WWW</ABBR> <ABBR lang="fr" title="Société Nationale des Chemins de Fer"> SNCF </ABBR> <ABBR lang="es" title="Doña">Doña</ABBR> <ABBR title="Abbreviation">abbr.</ABBR>
省略語の多くが特別な発音で読まれることに、ご注意下さい。例えば、「IRS」や「BBC」は1文字づつ文字通りに読まれますが、「NATO」や「UNESCO」は略語化された語の音韻的な形態に従って読まれます。他に、(例えば「URI」や「SQL」など)略語の綴りで読まれることもあれば元の語の読み方で発音されるといったものもあります。略語の読み方に関して、もし必要であれば、スタイルシートを用いて指定を行うべきでしょう。
<!ELEMENT %block;|SCRIPT)+ -- long quotation -->
<!ATTLIST BLOCKQUOTE
%attrs; -- %coreattrs, %i18n, %events --
cite %URI; #IMPLIED -- URI for source document or msg --
>
<!ELEMENT %inline;)* -- short inline quotation -->
<!ATTLIST Q
%attrs; -- %coreattrs, %i18n, %events --
%URI; #IMPLIED -- URI for source document or msg --
>
開始タグ: 必要、終了タグ: 必要。
他に使用可能な属性
「BLOCKQUOTE」と「Q」は、 引用文を示す要素です。BLOCKQUOTEは長文の引用(ブロックレベルの引用)を示すもので、Qは短い語句など段落の変更を必要としない文の引用(インラインレベルの引用)を示します。
下記は、J.R.R.トールキンの『指輪物語「二つの塔」』からの抜粋を「BLOCKQUOTE」要素として記すものです。
<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要素に関して、ユーザエージェントは、これを引用符で囲って表示する必要があります。逆に書き手は、HTML文書中のQ要素の前後に、引用符をつけないようにすべきです。
引用符の表示に際しては、記されている言語に応じて引用符の選択を行わねばなりません。(lang属性の項を参照のこと。)多くの言語が、引用文中の引用句という入れ子になった引用文の扱いに際して、引用文全体を囲う引用符と引用文中の引用句を囲う引用符を使い分けますので、ユーザエージェントは各言語の表記法を尊重して下さい。
Q要素による入れ子になった引用符の表示について例示します。
John said, <Q lang="en-us">I saw Lucy at lunch, she says <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>
囲まれた部分の言語がどちらも米語であるため、適切な表示を心がけるユーザエージェントは、次のように、内側を単引用符で、外側を二重引用符で囲うようにすべきでしょう。
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要素を「段落の字下げ」のために使用しているHTML文書もあるので、ユーザエージェントは、その意図を汲んで、「BLOCKQUOTE」要素表示の既定値としては引用符を つけないようにして下さい。
ただしHTMLでマークづけするにあたって、奨められないことなので、字下げしたい場合は字下げを意図するスタイルシートを使って下さい。
<!ELEMENT (%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>
文章を書く場合、伝統的に、考えや意見は、その考えや意見を構成する小さな単位ごとに段落分けして記されます。断片的な情報が段落という形にまとめられる際の論理構造は、段落の表示方法とは切り離して考えられます。すなわち、均等割りにされた表示であれ左寄せにされた表示であれ、その段落に記された内容の意味するところは同じだ、ということです。
HTMLで段落を示すやり方は単純明快です。P要素としてマークアップするだけのことです。
ただし段落を画面表示する方法は、そう単純なものではありません。下記のような点に注意する必要があります。
これら諸問題を、続く各項で取り扱うことにします。字寄せに関する点や画像などの回り込みに関する点は、15章で扱います。
<!ELEMENT %inline;)* -- paragraph -->
<!ATTLIST P
%attrs; -- %coreattrs, %i18n, %events --
>
開始タグ: 必要、終了タグ: 省略可能。
他に使用可能な属性
P要素は段落を表します。P要素中にはブロックレベル要素を含めることができません。(P要素を入れ子にすることもできません。)
改行を目的とした空のP要素は記さないようご注意願います。またユーザエージェントは空のP要素を無視すべきです。
通常の文中の 改行は、符号としてはキャリッジリターン(CR: 
)か、行送り(LF: 
)、あるいはその両方の組み合わせ(CR+LF)で記されます。何れも、HTML文中では空白類文字として扱われます。
SGMLでの改行の取り扱いについては、附記B.3.1にある 改行に関する注意をご覧下さい。
<!ELEMENT BR - O EMPTY -- forced line break -->
<!ATTLIST BR
%coreattrs; -- style, title --
>
開始タグ: 必要、終了タグ: なし。
BR要素は、テキストの行を、当該箇所で強制的に折り返します。
clear属性が設定されたBR要素は、視覚系のユーザエージェントに対して、その後に続く部分が大きな右(左)寄せ画像等の左(右)側での折り返し表示とされるべきなのか、それとも当該BR要素の後の部分を画像等の下端部分から表示し始めるべきなのかを示します。 より詳しくはテキストとインラインオブジェクトの配置関係を述べた第15章1節2項をご覧下さい。ちなみに、こうした表現については、どちらかというとスタイルシートによって指定する方がよいでしょう。
また、双方向書字との兼ね合いでは、BR要素は[ISO10646]が言う「行分け文字<LINE SEPARATOR character >」と同様に扱われることが望まれます。
この2つの語の間では改行させたくない、という場合もあるでしょう。そのような場合には文字参照「 」(または数値文字参照で「 」か「 」)を用いることで、改行を禁止する空白類文字として機能させることができます。
HTMLには、2種類のハイフンが存在します。「通常ハイフン<plain hyphen>」と「ソフトハイフン<soft hyphen>」です。「通常ハイフン」は、普通のハイフン文字として扱われ、「ソフトハイフン」は語の途中で改行されても構わない場所を指定する記号として扱われます。
「ソフトハイフン」の扱いに際して、ユーザエージェントは、次の点を勘案しなければなりません。もし「ソフトハイフン」の箇所で改行が行われるのなら、その行末部分にハイフン文字を表示しなければなりません。もし「ソフトハイフン」の箇所で改行が行われないなら、ハイフン文字を表示してはなりません。サーチやソートを行う場合には、「ソフトハイフン」は無視されねばなりません。
HTML文中では、「通常ハイフン」は「-」文字(「-」または「-」)で表され、「ソフトハイフン」は文字実体参照「­」(あるいは数値文字参照の「­」または「­」)で表されます。
<!ENTITY % pre.exclusion "IMG|OBJECT|BIG|SMALL|SUB|SUP">
<!ELEMENT %inline;)* -(%pre.exclusion;) -- preformatted text -->
<!ATTLIST PRE
%attrs; -- %coreattrs, %i18n, %events --
>
開始タグ: 必要、終了タグ: 必要。
属性の定義
他に使用可能な属性
PRE要素はその内容が 「整形済みであること」を視覚系ユーザエージェントに指示します。これを扱う場合、視覚系ユーザエージェントには次の動作が望まれます。
非視覚系ユーザエージェントは、PRE要素中で2つ以上連続する空白類文字を全て表記通りに扱うという必要はありません。
SGMLでの改行の定義については、附記B.3.1にある 改行に関する注意をご覧下さい。
上に抜粋した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個以上で最小の空白類文字群として表示されます。ここで、整形済み文章の記述にタブ文字を用いることは避けるよう、強く要請します。なぜなら、タブによる空白類文字の挿入は、エディタの動作としてはタブ文字ではなく空白類文字など他の文字に置き換えられることが普通なので、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年に発表されたNCSA Mosaicに続く現行のユーザエージェントのほとんどは、正確な行末揃え等をサポートしていません。というのも洗練されたハイフネーション規則等が存在しなければ実現できないことだからです。現在では、スタイルシートの進歩とアンチエイリアスフォントによるドット単位以下の文字表現とにより、以前より細やかな表現が可能になっています。
スタイルシートを使うと、文字の大きさや字体の表現、余白、段落の前後の空白行、段落の最初の字下げ、文字揃え・割り付け、その他多くの表現が可能です。けれどもP要素に関するユーザエージェントの既定の表示方法としては、上に記した伝統手法を踏襲することになるでしょう。原理的には改行を行わずに段落と段落をつなげていくことも可能ですが、伝統的な段落分け作法を無視することは読者の混乱の元になるので、そんな真似は止めておくべきです。
慣習的に、視覚系ユーザエージェントは、表示画面幅に合わせて 折り返しての行送りをするようになっています。行送りの作法は、どんな言語のどんな文字で書かれたHTML文書であるかに依存します。
例えば西洋の用字系であるラテン文字で記した文章の場合、文は空白類文字の部分でのみ行送りされることになっています。初期のユーザエージェントには、開始タグの直後や終了タグの直前で行送りをするといった動作を行ってしまうことで、行送り時の句読点のぶら下がりの扱いを誤ってしまうものもあります。次のような文の扱いをどうするか、という問題です。
A statue of the <A href="cih78">Cihuateteus</A>, who are patron ...
この文をA要素の終了タグの直前で行送りしてしまうと、次のように、コンマが行頭に来てしまいます。
A statue of the Cihuateteus , who are patron ...
[このように表示するユーザエージェントがあるとすれば] それは誤りです。空白類文字がそこに存在しないからです。
<!-- INS/DEL are handled by inclusion on BODY -->
<!ELEMENT (%flow;)* -- inserted text, deleted text -->
<!ATTLIST (INS|DEL)
%attrs; -- %coreattrs, %i18n, %events --
%URI; #IMPLIED -- info on reason for change --
%Datetime; #IMPLIED -- date and time of change --
>
開始タグ: 必要、終了タグ: 必要。
属性の定義
他に使用可能な属性
INS要素とDEL要素は、文書のバージョン管理を行う際に、 挿入部分や削除部分の目印として使われるものです。(例えば法案の草稿で変更点の管理が必要な場合など。)
この2つはHTML要素として特異な性質を持っています。ブロック要素としてもインライン要素としても振る舞う(同時に両者であることはない)のです。ある段落中の語句をマークアップすることもあれば、段落・リスト・表といったブロックレベルの単位をマークアップすることもあり得ます。
下記は、州知事が副官として任命できる人数に関して定めた法案において、3名から5名に変更したといったようなことを示すものです。
<P> 州知事は<DEL>3</DEL><INS>5</INS>名の副官を任命できる。 </P>
インライン要素として扱っているINS要素・DEL要素の内容には、ブロックレベル要素を記してはいけません。
下記は間違った用例<ILLEGAL EXAMPLE>の見本です。
(正しい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>