[2] [CODE(HTMLe)@en[[[template]]]] [[要素]]に関連付けられた[[内容]]を[DFN[[RUBYB[雛形内容]@en[template content]]]]といい、
[CODE(DOMi)@en[[[DocumentFragment]]]] [[節点]]として表されます。通常の[[要素]]では[[内容]] ([[子供]]) となるものが、
[CODE(HTMLe)@en[[[template]]]] [[要素]]では[[雛形内容]]となります。[[雛形内容]]には [CODE(DOMi)@en[[[HTMLTemplateElement]]]]
[[インターフェイス]]の [DFN[[CODE(DOMa)@en[[[content]]]]]] [[IDL属性]]を通じてアクセスできます。
* 仕様書
[REFS[
- [1] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-12-19 00:10:55 +09:00]] 版)
]REFS]
* 処理モデル
[11] [CODE(HTMLe)@en[[[template]]]] [[要素]]が作られると、自動的に [CODE(DOMi)@en[[[DocumentFragment]]]]
[[節点]]が作られ、[[雛形内容]]となります。
[10] [CODE(HTMLe)@en[[[template]]]] [[要素]]の [[cloning steps]] は、子供も複製するモードの場合
([CODE(DOMm)@en[[[cloneNodes]]]] [[メソッド]]の引数が[[真]]の場合) には[[雛形内容]]も複製します。
[18] [CODE(HTMLe)@en[[[template]]]] [[要素]]と[[雛形内容]]の関係は、一度[[要素]]が作られたらずっと変化することはありません。
;; [16] [CODE(DOMi)@en[[[DocumentFragment]]]] は [CODE(DOMm)@en[[[appendChild]]]] などでもそれ自体には[[親]]ができませんし、
[[ホスト]]が生じる [[DOM]] メソッドは存在しないので、[[親]]や[[ホスト]]が複数生じることはありません。
* 節点文書
[4] [[雛形内容]]である [CODE(DOMi)@en[[[DocumentFragment]]]] とその[[子孫]]の[[節点文書]]
([CODE(DOMa)@en[[[ownerDocument]]]]) は[DFN[[RUBYB[適切な雛形内容所有子文書]@en[appropriate template contents owner document]]]]
[SRC[>>1]] に設定されます。
[5] [[適切な雛形内容所有子文書]]とは[[文書]]ごとに決まる[[文書]]です。
[6] [CODE(HTMLe)@en[[[template]]]] [[要素]]自体が[[雛形内容]]のために作られた[[文書]]に含まれているなら、
その[[文書]]がそのまま[[適切な雛形内容所有子文書]]として使われます。
[7] そうでなく [CODE(HTMLe)@en[[[template]]]] [[要素]]が最外の[[文書]]に属しているなら、
[DFN[[RUBYB[関連付けられた不活性雛形文書]@en[associated inert template document]]]]が[[適切な雛形内容所有子文書]]として使われます。
[[関連付けられた不活性雛形文書]]は[[雛形内容]]専用の[[文書]]で、既になければ新しく作られます。
元の[[文書]]の[[HTML文書]]と[[XML文書]]の違いを引き継ぎます。
;; [8] 従って、 [CODE(HTMLe)@en[[[template]]]] は入れ子にできますが、どんなに深く入れ子にしても、
また並列に [CODE(HTMLe)@en[[[template]]]] がいくつ存在しても、[[文書]]は元の[[文書]]と[[雛形内容]]用の[[文書]]の
2種類だけ存在します。
[9] [[adopt]] により [CODE(HTMLe)@en[[[template]]]] の[[節点文書]]が変更された時は、[[雛形内容]]である
[CODE(DOMi)@en[[[DocumentFragment]]]] が新しい[[文書]]の側の[[適切な雛形内容所有子文書]]へと [[adopt]]
されます。 [SRC[>>1]]
[13] [[雛形内容]]の [CODE(DOMi)@en[[[DocumentFragment]]]] が他の[[文書]]に [[adopt]]
されると[[適切な雛形内容所有子文書]]と[[雛形内容]]の[[節点文書]]が別の[[文書]]になります。
;; [17] これによって、最外[[文書]]の [CODE(HTMLe)@en[[[template]]]] [[要素]]であっても、
[[要素]]と[[雛形内容]]が同じ[[文書]]に属することがあり得ます。 [CODE(HTMLe)@en[[[template]]]]
[[要素]]が[[雛形内容]]側の[[文書]]に [[adopt]] された場合にも同じようなことになります。
;; [14] [[雛形内容]]の中に [CODE(HTMLe)@en[[[template]]]] があった場合、 [[adopt]] 前は内側の[[雛形内容]]も同じ[[文書]]が[[節点文書]]ですが、
[[adopt]] 後は別の[[文書]]になります。その更に内側に [CODE(HTMLe)@en[[[template]]]]
があった場合は、その[[節点文書]]も連鎖的に変更されます。
;; [15] [[adopt]] されても[[雛形内容]]/[[ホスト]]の関係は解消されません。
* 比較と順序
[19] [[雛形内容]]と[[ホスト]]の[[文書順]]には特別な規定はありません。従って、 [CODE(DOMm)@en[[[compareDocumentPosition]]]]
の結果も実装依存となります。
[20] [CODE(DOMm)@en[[[isEqualNode]]]] は[[雛形内容]]を無視して比較します。
* 関連
[3] [CODE(HTMLe)@en[[[template]]]] [[要素]]からみて [CODE(DOMi)@en[[[DocumentFragment]]]] のことを[[雛形内容]]といいますが、
逆に [CODE(DOMi)@en[[[DocumentFragment]]]] からみた [CODE(HTMLe)@en[[[template]]]] [[要素]]は[[ホスト]]といいます。
[12] [[XPath]] や [[XSLT]] との関係は、 [CODE(HTMLe)@en[[[template]]]] [[要素]]の項をご覧ください。