[1] 空要素は、 HTML や SGML や XML において「空」である要素を指します。 意味は何種類かあります。
[3] HTML では、要素の内容 (あるいは内容モデル) が空である要素のことを 「空要素」と呼んでいました。2014年8月以降、これは内容モデル「なし」 に改称されています >>16。
[4] HTML では空といっても本当に何も無い (childNodes
の length
が0である) 状態だけではありません。
要素間空白、注釈節点、処理指令節点は空かどうかの判断に当たっては無視されます。
[5] XML では、要素の内容が何も無い要素のことを「空要素」 といいます。空要素は開始タグの直後に終了タグを置くことでも表現できますし、 専用の空要素タグで表現することもできます。
EMPTY
で開始タグだけを使う要素 = 空要素 (素の SGML)[7] 素のSGML では、DTDで内容モデルを EMPTY
とした要素型の要素は終了タグを使えず、開始タグだけで表現することになっており、
この要素あるいは要素型を「空要素」といいます。
[8] Web SGML では EMPTY
な要素の終了タグを使うことができるようになって、
見た目上の普通の要素の内容がたまたま無い場合との区別が付きづらくなりました。
このため、内容モデルが EMPTY
な要素には新たに「強制空要素」
という用語が作られました。
:empty
擬似クラス[12] :empty
は子供が無い要素を表します。ここでいう子供がいないとは、
文書木中において要素節点と長さが0でないデータを持つ内容節点
(DOM のテキスト節点、CDATA節点、実体参照など) がないことを言います。
注釈、処理指令、その他の節点は数えてはなりません。 >>11
[18] 元々素のSGMLでは内容モデルが空であることと構文上開始タグのみで終了タグが禁止されていることは同一で、どちらも空要素と呼ばれていました。内容がたまたま空であることには特に名前は与えられていませんでした。
[19] それが XML と Web SGML によって構文解析と妥当性が分離されたことにより、 XML では終了タグのない開始タグのみの要素が存在しないかわりに内容が空である要素のための短縮構文が導入され、 Web SGML では内容が空であることを空要素、構文上終了タグが存在しないことを強制空要素と呼ぶようになりました。
[20] 一方 HTML では、空要素という語の混乱を避けるため、 内容モデルが空であることを内容モデル「なし」、 構文上終了タグが存在しないことをvoid要素と呼ぶようになりました。
Use of empty elements within XML instance documents is a source of controversy for a variety of reasons. An empty element does not simply represent data that is missing. It may express data that is not applicable for some reason, trigger the expression of an attribute, denote all possible values instead of just one, mark the end of a series of data, or appear as a result of an error in XML file generation. Conversely, missing data elements can also have meaning — data not provided by a trading partner. In information exchange environments, different trading partners may allow, require, or ban empty elements. UBL has determined that empty elements do not provide the level of assurance necessary for business information exchanges and therefore will not be used.
[9] XSLT and XQuery Serialization 3.1 () <https://www.w3.org/TR/2017/REC-xslt-xquery-serialization-31-20170321/#XHTMLEMPTY>