[1] [[要素内容]]で[[子要素]]の周りに現れる[[空白]]を、 [DFN[[RUBY[要素内容空白] [ようそないようくうはく] @en[element content white space]]]]といいます。 [2] 仕様書: - [[JIS X 4151]]‐1992 ([[SGML]]) -- [CSECTION[5.2.1 分離子[CODE@en[s]]]] -- [CSECTION[6.6 内容]] -- [CSECTION[10.2.4 内容モデル]] - [[XML 1]] -- [[妥当性制約]]: [[要素妥当]] -- [[要素内容]] -- [CODE(InfoItem)[[[文字情報項目]]]]: - [[DOM]] -- [CODE(DOMa)@en[[[isElementContentWhitespace]]]] -- [CODE(DOM)@en[[[element-content-whitespace]]]] -- [CSECTION@en[Infoset Mapping]] [4] '''要素内容中の[CODE@en[s]]''' (SGML): [[SGML]]において、[[要素内容]]には[[文字データ]]が出現できませんが、 [CODE@en[[[s]]]]は出現できます [SRC@en[JIS 6.6]]。 [CODE@en[[[s]]]]と[[認知]]されたものは無視されます [SRC@en[JIS 5.2.1]]。 [[XML]]の場合 (>>3) とは違って、[[マーク区間宣言]]や[[文字参照]]も明示的には禁じられていません。 実際[[条件区間]]や[[名前指定文字参照]]で[CODE@en[[[s]]]]が出現することは問題ないと思われます。 ただ、[[XML]]の場合と同じく [WEAK[(というよりこちらが元でしょうが)]]、 [[[CODE(SGML)@en[CDATA]]区間]]や[[数値指定文字参照]]を使うと、 それが[[データ]]として認識されてしまうので、[[妥当]]で''なくなる''と思われます。 @@ JIS 6.6.1 (RS & RE の無視) は[CODE@en[[[s]]]]の無視の更に後に行われるのか?? cf. Web SGML K.3.8.2 (KEEPRSRE) [3] '''要素内容で出現可能な空白''' (XML): [[XML]]において、[[要素内容]]な[[要素]]が[[妥当]]であるためには[[文字データ]]が出現してはなりません。 しかし、[[空白]]は含まれていても構いません。 ここで、[[空白]]とは[[非終端記号]][CODE@en[[[S]]]]に一致する[[文字]]とされています。 [[XML 1]]では[[間隔]]、[[復帰]]、[[改行]]、[[タブ]]の4種類です。 [WEAK[([[XML//空白]]を参照。)]] ただし、出現できるのは[CODE@en[[[S]]]]だけで、 構文上それ以外の形をした[[空白文字]]は認められていません。 つまり、[[[CODE(XML)@en[CDATA]]区間]]や[[文字参照]]は使えません。 [[実体参照]]は認められていますが、その[[置換文]]が[CODE@en[[[S]]]]に[[一致]]しなければなりません。 ;; ややこしいですが、[[置換文]]に[[文字参照]]が含まれていてはいけませんが、[[内部実体]]の[[表記実体値]]に[[文字参照]]が含まれているのは構いません。 [[置換文]]を得る時に[[展開]]されるからです。 [[SGML]]では[CODE@en[[[s]]]]は無視することになっていましたが、 [[XML]]には特にそのような規定はないようです。 [4] '''[CODE(InfoProp)[要素内容空白]]特性''' (XML情報集合): [[XML情報集合]]の[CODE(InfoItem)[[[文字情報項目]]]]には[DFN[[CODE(InfoProp)[[RUBY[要素内容空白] [ようそないようくうはく] @en[element content whitespace]]]]]][[特性]]があります。 この[[特性]]は、その[[文字]]が[[要素内容]]に現れる[[空白]]かどうかを示す[[真理値]]とされています。 - [[検証XML処理器]]はこの情報を提供する必要があります。 - [[要素型宣言]]がない場合や複数の[[要素型宣言]]がある場合、 [[空白文字]]に関してこの[[特性]]は''[[値なし]]''です。 - [[要素型宣言]]を読んでおらず、[CODE(InfoItem)[[[文書情報項目]]]]の[CODE(InfoProp)[[[全宣言処理済]]]]が[[偽]]なら、 [[空白文字]]に関してこの[[特性]]は''[[未知]]''です。 - 非[[空白文字]]に関してこの[[特性]]は常に[[偽]]です。 [5] '''[CODE(DOMa)@en[isElementContentWhitespace]]''' (DOM): [[DOM]]の[CODE(DOMi)@en[[[Text]]]][[界面]]で定義されている[CODE(DOMa)@en[[[isElementContentWhitespace]]]][[属性]] ([[読取専用]]) は、[[要素内容空白]] (定義は >>4 を参照。) をその[[テキスト節点]]が含んでいるかどうかを表すとされています。 また、[[XML情報集合]]との対応に関する[[附属書]]では、 [CODE(InfoProp)@en[[[要素内容空白]]]]が[[真]]の場合のみ[CODE(DOMa)@en[[[isElementContentWhitespace]]]]であるとなっているようです。 [[DOM]]は[[XML情報集合]]とは異なり、隣接する[[文字]]を1つの[CODE(DOMi)@en[[[Text]]]][[節点]]としてまとめています。 それについて、附属書には[Q[隣接するものならすべて同じになるはずだ]]という旨が書かれています。 しかし、[[妥当]]な[[文書]]から構築した[[XML情報集合]]ならその通りですが、 そうでなければ[[空白]]とそうでない[[文字]]が混ざっているかもしれません。 [[XML]][[文書]]から構築したばかりではない、何らかの編集を経た[[情報集合]]なら、[[空白]]でも[CODE(InfoProp)[[[要素内容空白]]]]値が異なるものが混ざっているかもしれません。そうした場合はどうするのでしょうかね? [8] '''[CODE(DOM)@en[element-content-whitespace]]''' (DOM): [[DOM]]の設定オプションに[CODE(DOM)@en[[[element-content-whitespace]]]]があります。 [CODE(DOM)@en[[CODE(DOMi)@en[[[Document]]]].[CODE(DOMm)@en[[[normalizeDocument]]]]]]で、 [[真]]であれば[[要素内容空白]]が保存され、 [[偽]]ならば捨てられます。捨てるのは[CODE(DOMi)@en[[[Text]]]][[節点]]で、 [CODE(DOMa)@en[[[isElementContentWhitespace]]]][[属性]]を見て判断するべきだとされています。 [CODE(DOMi)@en[[[LSParser]]]]および[CODE(DOMi)@en[[[LSSerializer]]]]についても同じオプションが使えることになっています。 [6] '''[Q@en[whitespace]]か[Q@en[white space]]か''': [[DOM]]の場合、[Q@en[white space]]に直すよりも、 [[XML情報集合]]が既に[Q@en[whitespace]]になっているのでそれに合わせておこうという判断がなされたそうです。 [[XML情報集合]]についても、特性名は[Q@en[whitespace]]ですが、 本文中では[Q@en[white space]]になっています。 [[W3C]]の仕様書執筆者に対する指針では[Q@en[white space]]と綴ることになっているようです。 ;; [[white space]]の項も参照して下さい。 [7] [[XPath 1.0]]の[[データ・モデル]]では特に規定がないようです。 * [CODE(DOMa)@en[isElementContentWhitespace]] 属性 (DOM) [9] [[要素内容空白]]とそうでない[[文字列]]が混じっているとどうなるのかよくわかりません。 [10] [CODE(DOMa)@en[[[data]]]] が変化するとどうなるのかよくわかりません。 [11] [CODE(DOMi)@en[[[CDATASection]]]] ではどうなのかよくわかりません。 [12] [CITE@en-US[Text.isElementContentWhitespace - Document Object Model (DOM) | MDN]] ( ([TIME[2012-08-03 15:36:52 +09:00]] 版))