/[pub]/suikawiki/wikidata/page/48544D4C.ns/B6F5C7F2.txt
Suika

Contents of /suikawiki/wikidata/page/48544D4C.ns/B6F5C7F2.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations) (download)
Sun Apr 3 02:06:06 2005 UTC (19 years, 6 months ago) by wakaba
Branch: MAIN
Changes since 1.4: +223 -163 lines
File MIME type: text/plain
auto-committed

1 wakaba 1.5 * HTML 4 の規定
2     [2] HTML 4 <IW:HTML4:"struct/text.html#whitespace">
3     は、次を[DFN[[RUBYB[[[空白]]] [white space]]文字]]としています。
4     - [[ASCII]] [[間隔]] ([CODE(char)[U+0020]] [CODE(char)[[[SPACE]]]]))
5     - ASCII [[タブ]] ([CODE(char)[U+0009]] [CODE(char)[HORIZONTAL TAB]])
6     - ASCII [[改頁]] ([[書式送り]]) ([CODE(char)[U+000C]] [CODE(char)[FORM FEED]])
7     - [[零幅間隔]] ([CODE(char)[U+200C]] [CODE(char)[ZERO-WIDTH SPACE]])
8     - [RUBYB[[[改行]]] [line break]]
9     -- [[復帰]] ([CODE(char)[U+000D]] [CODE(char)[CARRIAGE RETURN]])
10     -- 改行 ([[行送り]]) ([CODE(char)[U+000A]] [CODE(char)[LINE FEED]])
11     -- 復帰改行組 ([CODE(char)[[[CRLF]]]])
12    
13     です。 HTML 4 の[[文書文字集合]]には他にも定義によっては空白文字に属する[[文字]]が色々含まれていますが、
14     HTML 4 の空白は上記だけです。
15     HTML 4 仕様書は、他の種類の空白の扱いについては規定せず、
16     [[著者]]は空白制御のためには適切な[[要素]]や[[スタイル]]を使うべき (should)
17     としています。
18    
19     [3] [CODE(HTMLe)[[[pre]]]] 以外の HTML 要素では、
20     空白が「[DFN[語]]」を分離します。
21     (ここで、語とは、非空白文字の連続体のことです。)
22     [[UA]] は、[[書式付け]]に際して、その[[言語]]・[[用字系]]および対象[[媒体]]の慣習に従って語を識別し、これを配置するべきです
23     (should)。
24    
25     語間に間隔 ([DFN[[RUBYB[語間] [inter-word]]間隔]]) を挿入すると見た目が向上するかもしれません。
26     しかし、間隔の取り方に関する慣習は言語・用字系により種々です。
27     HTML 4 仕様書が挙げている例では、
28     - [[ラテン文字]]では間隔を挿入する
29     - [[タイ文字]]では零幅間隔を挿入する
30     -- 注: [[タイ語]]は、日本語や中文のように語間間隔を入れずに表記します。
31     だけど零幅間隔を使えば単語境界を機械的に識別できるじゃん! という文脈でよく例になります。
32     (しかしながら、 [[TIS620]] には零幅間隔はないと思うし、本当に使われているんだか。)
33     - [[日本語]]や[[中文]]では全く語間間隔を表示しない
34    
35     [[原始文書]]中の空白列は、全く異なって[[レンダリング]]されるかもしれないことに注意が必要です。
36     UA は、原始文書中の空白列をレンダリングするときにはまとめて1つ分の語間間隔にするべきです。
37     これは、自然言語情報 ([CODE(HTMLa)[[[lang]]]] 属性や上位プロトコルからの値)
38     が得られないときでも行うことができ、また行うべき
39     (can & should) とされています。
40     空白が重要なときには、 [CODE(HTMLe)[pre]] 要素型を使います。
41    
42     [4] [[SGML]] の規定や既存 UA 実装の問題から、
43     [[開始タグ]]直後や[[終了タグ]]直前の空白が表示されることを当てにするべきではありません
44     (should not)。
45    
46     たとえば、 [SAMP(HTML)[I <a>love</a> you.]]
47     を [SAMP(HTML)[I<a> love </a>you.]] と書いてしまうと、
48     意図とは異なることが多いでしょう。
49    
50     SGML の問題は、[[記録開始]]や[[記録終了]]の無視に関する規則のことで、
51     [[タグ]]の前後に改行があるときに注意が必要です。
52     詳しくは [CODE(SGML)[[[SGML//空白]]]]を参照。
53    
54     [[#comment]]
55    
56     * XHTML m12n の規定
57    
58     [15] 適合 [[XHTML族利用者エージェント]]は次の規則に従って[[空白]]を処理しなければなりません
59     [SRC[XHTML m12n 1.0 FE 3.5]]。
60    
61     - [[空白]]は [[XML 1.0]] の [CODE(ABNF)[[[S]]]]
62     と同じ4文字です。
63     -- [CODE(char)[[[U+0009]]]] [CODE(char)[[[HORIZONTAL TABULATION]]]]]]
64     -- [CODE(char)[[[U+000A]]]] [CODE(char)[[[LINE FEED]]]]]]
65     -- [CODE(char)[[[U+000D]]]] [CODE(char)[[[CARRIAGE RETURN]]]]]]
66     -- [CODE(char)[[[U+0020]]]] [CODE(char)[[[SPACE]]]]]]
67     - [[XML]] [[処理器]]は[[改行]]を[[正規化]]し、
68     [[応用]]に渡します。
69     -[[利用者エージェント]]は [[XML]] [[処理器]]から受取ったデータを次のように処理しなければなりません。
70     -- [[ブロック要素]]を囲む[[空白]]はすべて除去するべきです。
71     -- [[注釈]]は完全に除去し、[[空白]]の処理に影響させてません。
72     [[注釈]]の両側の[[空白]]は2つの[[空白]]として扱います。
73     -- [CODE(XMLa)[[[xml]]:[[space]]]] が [CODE(XML)[[[preserve]]]]
74     であれば[[空白]]は保存しなければならず、[[ブロック]]中の
75     [CODE(char)[[[LINE FEED]]]] を変換してはなりません。
76     -- [CODE(XMLa)[[[xml]]:[[space]]]] が [CODE(XML)[[[preserve]]]]
77     でなければ、
78     --- [[ブロック要素]]の先頭と末尾の[[空白]]は除去しなければなりません。
79     --- [CODE(char)[[[LINE FEED]]]] は
80     [CODE(char)[[[SPACE]]]], [CODE(char)[[[ZERO-WIDTH SPACE]]]]
81     ([CODE(char)[[[U+200B]]]]) のいずれかに変換するか、
82     または削除しなければなりません。
83     3通りのいずれを選ぶかは[[利用者エージェント]]依存で、
84     [CODE(char)[[[LINE FEED]]]] の前後の[[用字系]]によります。
85     --- [CODE(char)[[[LINE FEED]]]] なしの[[空白]]の列は
86     [CODE(char)[[[SPACE]]]] 1文字に置換しなければなりません。
87     --- [CODE(char)[[[LINE FEED]]]] が1つ以上含まれる[[空白]]の列は、
88     [CODE(char)[[[LINE FEED]]]] が1つだけの時と同じように置換しなければなりません。
89     - [[属性値]]における[[空白]]は [[XML 1.0]]
90     に従って処理します。
91    
92     [17] [[XHTML m12n]] には [CODE(char)[[[LINE FEED]]]]
93     の変換方法に関する参考として次の内容の注記があります。
94    
95     - [CODE(char)[[[LINE FEED]]]] の前後の[[文字]]の[[用字系]]が同じであり、
96     [CODE(char)[[[SPACE]]]] が[[語]]分離子として使われるものであるなら、
97     [CODE(char)[[[SPACE]]]] に変換するべきです。
98     ([[ラテン文字]]、[[ギリシャ文字]]、[[キリル文字]]など)
99     - [CODE(char)[[[LINE FEED]]]] の前後の[[文字]]の[[用字系]]が[[表意文字]]系や[[語]]分離子を使わない[[書字方法]]なら、
100     除去するべきです。 ([[中文]]、[[日本語]]など)
101     - [CODE(char)[[[LINE FEED]]]] の前後の[[文字]]の[[用字系]]が非[[表意文字]]系で[[語]]分離子を使わないものなら、
102     [CODE(char)[[[ZERO-WIDTH SPACE]]]] に変換するか、
103     または除去するべきです。
104     - 前三項の条件に該当しないなら、 [CODE(char)[[[LINE FEED]]]]
105     は [CODE(char)[[[SPACE]]]] に変換するべきです。
106    
107     なお、 [CODE[COMMON]] [[用字系]] ([[句読点]]など)
108     はもう一方の側と同じ[[用字系]]と考えます。
109     [[文字]]の属する用字系の名前は [[UTR]] #24 にあります。
110    
111     [16] 仕様書:
112     -[[XHTML m12n]]
113     --[CSECTION[3.5. XHTML Family User Agent Conformance]]
114     <IW:XHTML1m12n:"conformance.html#s_conform_user_agent">
115    
116     [[#comment]]
117    
118     * FORM FEED
119    
120     [5] HTML 4 は、 >>2 の通り、 [CODE(char)[U+000C]]
121     [CODE(char)[FORM FEED]] ([[改頁]]) を空白の一種としています。
122    
123     ところが、 HTML 4 の [[SGML宣言]]
124     <http://www.w3.org/TR/html4/sgml/sgmldecl.html>
125     は、 [CODE(char)[U+000C]] を [CODE(SGML)[[[UNUSED]]]]
126     としています。もちろん [CODE(SGML)[[[s]]]] にも含まれません。
127    
128     SGML 宣言を信じるとすると、 [CODE(char)[U+000C]]
129     は HTML 4 では使用できず、 >>2 の規定は無駄になります。
130    
131     [6] ''XHTML 1.0 C.15. White Space Characters in HTML vs. XML'' <http://www.w3.org/TR/xhtml1/#C_15>
132     は、 HTML では [CODE(char)[U+000C]]
133     を使えるが、 XHTML では使えないと言っています。
134    
135     [7] 本文が正しく、 [CODE(char)[U+000C]] が使えたとしても、
136     [CODE(SGML)[s]] には含まれないので、 HTML 文書の本文では >>2
137     の通りの扱いを受けますが、 SGML 的には空白として使えません
138     (例えば[[属性指定]]の間には使えません)。
139    
140     [[#comment]]
141    
142    
143     * ZWSP
144    
145     [8] [CODE(char)[U+200C]] [CODE(char)[ZERO-WIDTH SPACE]]
146     は >>2 の通り HTML で空白として扱われます。
147     しかし、 SGML 宣言によれば、 [CODE(SGML)[s]]
148     には含まれません。ですから、 HTML 文書の本文では >>2
149     の通りの扱いを受けますが、 SGML 的には空白として使えません
150     (例えば属性指定の間には使えません)。
151    
152     [[#comment]]
153    
154    
155     * タグ前後の空白
156    
157     [9] SGML の規定により、[[開始タグ]]直後と[[終了タグ]]直前の改行は全要素
158     ([CODE(HTMLe)[[[pre]]]] や [CODE(HTMLe)[[[textarea]]]] を含みます。)
159     で例外なく無視されます。
160    
161     HTML 4 [CITE[B.3.1 Line breaks]]
162     <IW:HTML4:"appendix/notes.html#notes-line-breaks">
163    
164     例 [SRC[HTML 4 B.3.1]]: 次の2段落は同じ内容です。
165     [PRE(HTML)[
166     <P>Thomas is watching TV.</P>
167     <P>
168     Thomas is watching TV.
169     </P>
170     ]PRE]
171    
172     なお、 [[XHTML]] ではこの規定は適用されません。2つ目の段落の内容は改行を含みます。
173    
174     詳しくは [[SGML//空白]]をご覧下さい。
175    
176     [10]
177     >>9 HTML 4 附属書 B (参考) には[Q[すべての要素で例外なく]]なんて書いてありますが、
178     実際には[[強制空要素]]が例外になりますし、要素が [[DTD]] の[[添加要素指定]]に該当するか否かや改行が
179     [CODE(char)[[[CR]]]] か [CODE(char)[[[LF]]]] か両方かその他かで細かいところが変わってきます。
180     (その他なら無視されません。)
181    
182     (XHTML はやっぱりこの問題はありません。
183     [[XML]] では実体を読んだら最初に改行を正規化してしまいますから。)
184     ([[名無しさん]])
185    
186     [[#comment]]
187    
188    
189     * メモ
190    
191     [11]
192     [CITE[Re: HTML での 空白の扱いについて]] <http://groups.google.com/groups?selm=cb68cm%24bte%241%40news.sfc.keio.ac.jp>,
193     <mid:cb68cm$bte$1@news.sfc.keio.ac.jp>
194    
195     ([[名無しさん]] [sage])
196    
197     [12]
198     [[XHTML 1.0]] では、 [[XML 1.0]]
199     に従った [[XML]] としての処理の後、
200     [[CSS 2.0]] によって処理すると規定しています。
201     ただし、 [[CSS 2.0]] は[[ラテン文字]]以外に関する規定がないので将来この部分は修正されるかもしれないとされています。
202    
203     仕様書:
204     - [[XHTML 1.0]]
205     -- [CSECTION[3.2. User Agent Conformance]]
206     <IW:XHTML10:"uaconf">
207    
208     ([[名無しさん]] [sage])
209    
210     [13]
211     XHTML 1.0 での予告通り(?) [[XHTML m12n]]
212     では説明が細かくなっています。
213    
214     - [[XHTML m12n]]
215     -- [CSECTION[3.5. XHTML Family User Agent Conformance]]
216     <IW:XHTMLm12n:"conformance.html#s_conform_user_agent">
217    
218     ([[名無しさん]] [sage])
219    
220     [14]
221 wakaba 1.4 >>12-13
222     正確には、 [[XHTML 1.0]] [[FE]] であった
223     [CODE(XMLa)[xml:space]] の部分が
224     [[XHTML m12n]] には引き継がれてますが、
225 wakaba 1.5 [[XHTML 1.0]] [[SE]] ではカットされていますね。
226     ([[名無しさん]] [sage])
227    

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24