概要

ポリグロット・マークアップを使用する文書は、HTMLとしてまたはXMLとして処理されるいずれかの場合に、(導入で注釈されるようないくつかの例外をともなう)同一の文書ツリーに解析されるバイトストリームとなる文書である。定義された制約セットを満たすポリグロットマークアップは、HTML5の仕様を通して、HTMLとしてまたはXHTMLとして処理されるかどうかにかかわらず、互換性があると解釈される。ポリグロット・マークアップは、特定のDOCTYPE、名前空間宣言、および特定の活字ケース―通常は小文字だが、時折キャメルケース(先頭文字を大文字)―を要素名や属性名に用いる。ポリグロット・マークアップは、特定の属性値に小文字を使用する。さらに、空要素、名前実体参照、およびスクリプトとスタイルの使用に関する制約を含む。

この文書の位置付け

この節は、公開時点におけるこの文書のステータスについて説明する。他の文書がこの文書に取って代わるかもしれない。W3Cが現在公開しているリストとテクニカルレポートの最新版は、W3C technical reports index at http://www.w3.org/TR/で見つけることができる。

注意。この仕様は、もはやアクティブなメンテナンスになく、HTMLワーキンググループは、さらに維持するつもりはない。

この仕様は、著者のXHTMLまたはHTML文書が、HTMLとして解析されようとXMLとして解析されようと適合することを望む著者のための設計ガイドラインを集約するものである。この文書は、特に、著者が利用可能なXMLまたはHTMLパーサを持つかどうかに関わらず受信者にサービスを提供したいという、ウェブ著者にとって有用であることを意図する。このような懸念は、たとえば、コンテンツシンジケーションで、すなわち受信者がレガシーシステム上にある場合に発生するかもしれない。HTMLポリグロットは、XML 1.xからHTML5への移行を含む、XHTMLへおよびXHTMLからの移行を容易にし、そしてこの文書では、そのような文書に対するUTF-8ベースのプロファイルの要件を正確に指定する。

勧告はこの文書でまたは、ポリグロット・コンテンツを公開するかどうかを注視するW3Cによって作成されない。一般に著者は、HTML5構文とメディアタイプ(HTML構文とtext/html、またはXHTML構文とapplication/xhtml+xmlのいずれか)を使用してHTMLコンテンツを公開することが勧められる。

この文書は、ユーザーエージェントのための仕様でなく、ユーザーエージェントに義務を作成しない。この文書は、HTML5適合ユーザーエージェントがHTML文書を処理すべき方法を定義しないことに注意する。また、インターネットメディアタイプtext/htmlの意味も定義しない。これらの定義に対するユーザーエージェントの手引きについては、[HTML5]および[RFC2854]を参照のこと。

HTML WGに当てられる生成物およびHTML/XHTML互換オーサリングガイド(エディタ:Eliot Graff)に当てられる構成物とともに、W3C公開バグデータベース(http://www.w3.org/Bugs/Public/)を使用して、この文書のバグを提出されたい。バグデータベースにアクセスできない場合、以下に記載するメーリングリストに電子メールでコメントを提出できる。

この文書はWorking Group NoteとしてHTMLワーキンググループ によって発行された。この文書に関するコメントを作成したい場合、public-html@w3.org購読アーカイブ)に送信されたい。

Working Group Noteとしての公開はW3Cメンバーの支持を意味するものではない。この文書は草案であり、いつでも更新、他の文書による置き換えや廃止扱いにされうる。進行中の作業以外のものとしてこの文書を引用することは不適切である。

この文書は2004年2月6日のW3C特許ポリシーの下で活動するグループによって作成された。W3Cは、グループの成果物に関するあらゆる開示特許の公開リストを管理する。ここには、特許開示にあたっての指示も含まれている。特許について十分に知識のある人物が、仕様にEssential Claim(s)が認められると判断した場合は、W3C特許ポリシーの第6章に従い情報を開示する必要がある。

この文書は、2015年9月1日付のW3C Process Documentによって管理される。

目次

1. 適合性

非規範的とマークされる節と同様に、この仕様におけるすべてのオーサリングガイドライン、例、および注は、非規範的である。この仕様におけるその他すべては規範的である。

この仕様においてキーワードMUSTMUST NOTREQUIREDSHOULDSHOULD NOTRECOMMENDEDMAYOPTIONALは、[RFC2119]で示されたとおりに解釈される。

2. 導入

この節は非規範的である。

整形式のXML文書でもあるHTML5文書を提供できることは、時として貴重である。たとえば、著者は文書を生成するXMLツールを使用してもよく、著者とその他は、XMLツールを使用する文書を処理してもよい。HTMLとXMLの両方パーサで解析可能な文書を作成するために使用される言語は、ポリグロット・マークアップと呼ばれる。ポリグロット・マークアップはHTML5文書とXML文書の両方である文書の重なり言語である。これらの文書は、text/html(コンテンツがHTML対応のユーザーエージェントに送信される場合)、またはapplication/xhtml+xml(コンテンツがXHTML対応のユーザーエージェントに送信される場合)のいずれかとして供給されることが推奨される。他の許容されるMIMEタイプは、text/xmlapplication/xml、およびサブタイプの4文字"+xml"で終わるすべてのMIMEタイプである。[XML-MT]

2.1 範囲

ポリグロット・マークアップは堅牢な―完全に任意だが―HTML語彙のプロファイルである。すべてのウェブコンテンツはポリグロット・マークアップで作成される必要はなく、これは主として文書の堅牢性の増大を望む著者のためのオプションである。ポリグロット・マークアップは、制御された環境においておよびオーサリングツールに対して、最もよく機能し、有益なオプションになりうる。

コンテンツの二重のコピーを同時に維持しなくても、HTMLとXMLツールチェーンの両方にサービスを提供する強い希望がある際にポリグロット・マークアップは、公開に理想的である。さらに、単一ポリグロット・マークアップ出力は、同じコンテンツに対するHTMLとXHTML出力の両方を生成するよりも、生成するためのより少ないインフラストラクチャが必要である。軽量プロセス―クイックテストや手書きオーサリングさえも―が、HTMLとXHTMLの両方として公開されることを意図したコンテンツに適用された場合、特にそのコンテンツがツールチェーンを通して送信されない場合、ポリグロット・マークアップはまた有益である。

用途の最も一般的なコンテキストを対象としたXMLベースのHTMLツールやシステムは、ポリグロットの入力に依存することはできない。最大限の柔軟性のために、このようなツールは、XML互換のDOMやイベントストリームを生成するHTMLパーサを使用する技術を利用すべきである。

2.2 堅牢性

ポリグロット・マークアップの目標は、ウェブコンテンツ・アクセシビリティ・ガイドライン(WCAG)2.0が記述する方法で堅牢な構文である。:支援技術を含む、現在および将来のユーザーエージェントとの互換性を最大化する。 [WCAG20]

著者は、ポリグロット・マークアップの構文の利益を享受するために、堅牢性の利点を理解する必要はない。しかし、その利点を促進するために、ポリグロット・マークアップがセマンティックを追加しないことを理解する必要があり、そしてそれ自体はHTMLの趣なのはセマンティックと同じである。しかし、ポリグロット・マークアップは、オーサリング処理中を含む、セマンティックを維持するために動作する。他の関連仕様がまだ追加していないアクセシビリティ要件を追加しないように、ポリグロット・マークアップはまた、アクセシビリティを保証するものではない。しかし、ポリグロット・マークアップは必要な慣習に対する指示を通じてアクセシビリティを維持するために動作できる。

ポリグロット・マークアップは、そのシリアライゼーションがさまざまなパーサを使って再解析される際にセマンティックを保持する可能性がある方法で、 DOMツリーのシリアライゼーションに制約を定義することで堅牢性に接近し、それらは完全な機能を備えたことが、バグフリーのHTML5パーサ、多少のHTMLを認識するパーサ、さらにはXMLパーサ。

ほとんどの場合、ポリグロット・マークアップは、それらがHTML5に追加された際に"polyglotness"を考慮に入れる多くはHTMLとXHTMLがそれぞれ規定する妥当性制約と構文要件のまさに純粋な推論である。しかし、堅牢性の理由のために、この仕様は時に必要とされている最小公倍数の原則よりも、さらに踏み込む。

たとえば、シリアライゼーションで制約のセットに含まれているものは、UTF- 8エンコーディングを使用するための要件である。理論的な可能性だけでなく、唯一のオプションとしてUTF-8の選択は、堅牢性の基本原理によって正当化される。たとえば、誰かがKOI8-Rエンコーディングの使用を選択した場合、HTMLの適合やXMLの整形式要件の副作用として、著者ははXMLパーサをサポートするために(MIME Content-Typeのような)より上位のプロトコルに依存することを余儀なくされるだろう。UTF-8を要求することにより、その副作用が回避される。

堅牢な構文を使用すると、より低い能力のパーサで、より高い信頼性の解析をする文書を有効にすることができる。しかし、たとえ文書が完全にHTML5に準拠するツールによって解析されかつ検証されることが期待できたとしても、ポリグロット・マークアップ堅牢性を追加する。一例として、HTMLとしてシリアライズされる場合、p要素の終了タグは完全に任意であり、存在しない場合は推測される。しかし、終了タグを含めることはXMLによって、ひいてはポリグロット・マークアップによって要求されており、転送サイズのわずかな増加(多くの場合、圧縮することで増加は軽減される)以上に害を引き起こさないが、バリデータが状況を検出することができる。ここで、暗黙の終了規則は作者が意図したものと一致しない。

XMLベースのポリグロット・マークアップ構文は、堅牢性を高めるための唯一の方法ではないことに注意する。たとえば、HTMLバリデータやオーサリングツールは、これがHTML構文で必要とされない場合であっても、終了するすべてのタグを必要とするかもしれない。

3. 構文

3.1 原理

ポリグロット・マークアップは以下をもたらす:

ポリグロット・マークアップは、最大限のサポートと最小限のオーサリングの選択を意味する構文によって、堅牢な構文を明示する。

サポートは最大化される:

オーサリングの選択は最小化される

ポリグロット・マークアップは以下を考慮しない:

ポリグロット・マークアップはXMLの規則に従ってスクリプトを記述され(たとえば、document.writeを使用しない)、XMLパーサーで複製することは不可能なHTML要素を除外する(たとえば、noscript要素を使用しない)。非互換モードはDOMとCSSの両方に関連して、XMLモードのレンダリングに最も近いような、ポリグロット・マークアップは、HTMLパーサに非互換モードをトリガーする。ポリグロット・マークアップは、HTMLモードとXMLモードの両方で同じエンコーディングと同じ言語をもたらす。

自身が妥当なHTML5である、ポリグロット・マークアップは、拡張がポリグロット・マークアップの規則に違反しない限り、HTML5の2.2.3節 拡張性で定義されているように拡張性をサポートする。[HTML5] さらに、整形式のXMLであり、application/xhtml+xmlとして提供される場合にポリグロット・マークアップは拡張されうる。

4. HTML文書を記述する

4.1 処理命令とXML宣言

処理命令およびXML宣言はポリグロット・マークアップにおいて禁止する。

4.2 文書の文字エンコーディングを指定する

ポリグロット・マークアップはUTF-8文字エンコーディングを使用し、HTMLとXMLの両方が要求する唯一の文字エンコーディングをサポートする。HTMLは、レガシーエンコーディングにフォールバックするのを避けるために明示的に宣言されるようUTF-8を要求する。[HTML5]

XMLの場合、UTF-8はエンコーディングデフォルトである。文書がtext/htmlとして解釈される可能性がある場合に文書はそのように解釈すべきであるが、文書はXMLコンテンツタイプで提供され、したがってHTMLエンコーディング宣言方法のいずれも使用する必要はない。

ポリグロット・マークアップは、個別にまたは組み合わせて使用されてもよい、以下の方法でUTF-8文字エンコーディングを宣言する (ただし単一のHTMLエンコーディング宣言のみ存在できることに注意する):

XMLとHTMLの両方のパーサーは、バイト順マークをサポートする必要がある。HTMLエンコーディング宣言はXMLでは効果がない。HTMLエンコーディング宣言だけエンコーディング宣言される場合、XML由来のエンコーディングのデフォルトは、XMLパーサーがUTF-8としてコンテンツを扱うことができる。

視覚的にドキュメントのエンコーディングをチェックするために、開発者、テスト担当者、または翻訳生産管理者を支援するため、常に、ドキュメントに表示エンコーディング宣言を含めることをW3C国際化(i18n)グループは推奨する

4.3 DOCTYPE

ポリグロット・マークアップは、[HTML5]の8.1.1節で指定された文書型宣言(DOCTYPE)を使用する。また、DOCTYPEは次の規則に適合させる。

文書型宣言で指定された妥当なXMLに対する文書要素は、万が一も含めて、文書の最上位の要素と正確に一致しなければならない。この規則は、妥当なXML文書よりむしろ、整形式のものに対してに緩和される。XHTMLは小文字のhtml要素を要求するため、ポリグロット文書は、DOCTYPE宣言で指定された要素のために小文字のhtmlを使用すべきである。文書内の文書型定義サブセットの内側の要素および実体宣言をもつカスタマイズされたXHTML DTD、または代替DTDを指すものは、特別な場合の要件を持ってもよいことを念頭に置く。

XMLにおいてabout:legacy-compatを用いることは、XML処理パイプラインに依存し、予測できない解析結果を生じるかもしれないことに注意する。

文書型宣言がXHTMLと互換性がないように、文書型宣言がURIを含むかどうかに関わらず、およびHTML5パーサでの効果に関わらず、ポリグロット・マークアップは、HTML4、HTML3、またはHTML2の文書型宣言を使用しない。

4.4 名前空間

以下の規則は、ポリグロット・マークアップで使用される名前空間に適用する。

4.4.1 要素レベルの名前空間

[HTML5]は、 ルートHTML要素html、ルートSVG要素svg 、およびルートMathML要素mathに対して宣言されない(ネイティヴの)既定名前空間を導入する。XMLの互換性を維持するために、マークアップ言語が文書に含まれる際、ポリグロット・マークアップは以下のデフォルト名前空間を宣言する[XML10]:

  • <html xmlns="http://www.w3.org/1999/xhtml">
  • <math xmlns="http://www.w3.org/1998/Math/MathML">
  • <svg xmlns="http://www.w3.org/2000/svg">

ポリグロット・マークアップは、ルートHTML要素html、ルートSVG要素svg 、およびルートMathML要素mathで、およびSVGまたはMathML要素の子として使用される任意のHTML要素上でデフォルト名前空間を宣言する。[HTML5]がネイティヴに他のデフォルト宣言または接頭辞要素名前空間の宣言をサポートしないため、ポリグロット・マークアップは、他のデフォルトまたは接頭辞要素名前空間を宣言しない。

4.4.2 属性レベルの名前空間

[HTML5]は、XLink名前空間でおよび接頭辞xlink:をともなう属性に宣言されない(ネイティヴ)サポートを導入する。XML互換性を維持するために、ポリグロット・マークアップは、明示的にXLink名前空間xmlns:xlink="http://www.w3.org/1999/xlink"を宣言する。[XML10]

HTML仕様の適合性規則に適合するために、宣言は、任意のxlink:接頭辞属性を使用する前に発生しなければならないため、宣言が使用される場合、一般的にそのようなセクションのルート要素上(たとえば、SVGセクションのsvg開始タグ上およびMathMLセクションのmath開始タグ上)で、宣言はそれぞれの外部コンテンツに参加する必要がある。

  • xlink:actuate
  • xlink:arcrole
  • xlink:href
  • xlink:role
  • xlink:show
  • xlink:title
  • xlink:type

xml:basexml:langxml:space、およびxml:idで使用されるxml:名前空間接頭辞は、XML文書で宣言される必要はなく、したがってポリグロット・マークアップxmlns経由でこれらの接頭辞を宣言しない。接頭辞は暗黙的にXMLで宣言され、HTMLで適切な属性に自動的に適用される。この属性をもつCSSセレクタを使用する方法についてはCSS名前空間[CSS3NAMESPACE]を参照のこと。

接頭辞ありおよびなしで、属性セレクタおよび名前空間に関連する問題の詳細については、スクリプティングとスタイリングポリグロット・マークアップのセクションを参照のこと。

4.5 要素の構文

ポリグロット・マークアップは、要素に関する以下の規則に適合させる。

4.5.1 必須要素とタグ

ポリグロット・マークアップは、オプションのタグを使用しない。オプションのタグのHTML5のコンセプト―開始タグおよび/または終了タグの欠損―は、コードがそれらのタグが含まれない場合、HTMLパーサ自身が自動的にDOMに追加する要素を隠す。XMLは、欠損する開始および/または終了タグをDOMに追加するそのような機能を持たないため、ないのと同じ、両方のタグが省略されている場合、ポリグロット・マークアップでタグの省略は、両方のタグが省略される場合、整形式でない要素を生成することと等価か、一切要素を追加しないのと等価である。

そのポリグロット・マークアップはオプションのタグを操作せず、たとえば、そのマークアップにおけるtbodyタグの追加に使用されない著者に対して、またはp要素の終了タグを省略することに慣れている誰かに不意打ちを引き起こすかもしれない。しかし、タグに関して整形式にするための要件は、基準以下のパーサおよびオーサリングの不意打ちに対してコードを堅牢にするポリグロット・マークアップの鍵となる特徴である。

4.5.1.1 最小のHTML文書

したがって、すべてのポリグロット・マークアップ文書は、htmlheadtitlebody要素を含む。html要素はルート要素である。headおよびbody要素は、 html要素の子である。title要素はhead要素の子である。したがって、以下は、最も基本的なポリグロット・マークアップ文書になる。

例4
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
  <head>
    <title></title>
  </head>
  <body>
  </body>
</html>
4.5.1.2 要求される要素の例

それがtr要素を使用する際はいつでも、ポリグロット・マークアップは常にtbodythead、またはtfoot要素内でtr要素を包む。HTMLにおいて、1つ以上の隣接tr要素のグループが明示的にtbodythead、またはtfoot要素で囲まれない場合、HTMLパーサはtr要素の周りに新しいtbody要素を作成して囲む。XMLパーサは、このように異なるDOMを作成するための可能性を提供する、tbody要素を作成しない。

以下は正しい:

例5
<table>
<tbody>
<tr>...
以下は間違い:
例6
<table>
<tr>...

それがtable要素内でcol要素を使用する際はいつでも、ポリグロット・マークアップcol要素のグループを囲むcolgroup要素を使用する。HTMLにおいて、1つ以上の隣接col要素のグループが明示的にcolgroup要素で囲まれない場合、HTMLパーサはcol 要素の周りに新しいcolgroup要素を作成して囲む。XMLパーサは、このように異なるDOMを作成するための可能性を提供する、colgroup要素を作成しない。

以下は正しい:

例7
<table>
<colgroup>
<col>...
以下は間違い:
例8
<table>
<col>...

4.5.2 除外される要素

noscript要素はXML文書で使用できないため、ポリグロット・マークアップは、noscript要素を使用しない。[HTML5]

ポリグロット・マークアップは、HTML、XHTMLまたは両方で除外される一切の要素を使用すべきでない。たとえば、文書内で適合しない機能で記載されるすべての要素を含むことは、ポリグロット・マークアップでない文書のリスクを増大させる。

4.5.3 大文字・小文字区別

以下は、マークアップ、スクリプト、またはCSSにおいて、要素名、属性名、またはの属性値のいずれかの用法に適用される。ポリグロット・マークアップは、すべてのASCII文字に対して小文字を使用する。非ASCII文字―ギリシャ文字、キリル文字、あるいは非ASCIIラテン文字など―に対して、ポリグロット・マークアップは、要求されるように、大文字・小文字の区別を尊重する。

4.5.3.1 要素名

ポリグロット・マークアップが混合活字ケースを使用する以下のSVG要素名を場合を除き、ポリグロット・マークアップは、すべてのHTML要素名、すべてのMathML要素名、すべてのSVG要素名に対して小文字を使用する:

  • altGlyph
  • altGlyphDef
  • altGlyphItem
  • animateColor
  • animateMotion
  • animateTransform
  • clipPath
  • feBlend
  • feColorMatrix
  • feComponentTransfer
  • feComposite
  • feConvolveMatrix
  • feDiffuseLighting
  • feDisplacementMap
  • feDistantLight
  • feFlood
  • feFuncA
  • feFuncB
  • feFuncG
  • feFuncR
  • feGaussianBlur
  • feImage
  • feMerge
  • feMergeNode
  • feMorphology
  • feOffset
  • fePointLight
  • feSpecularLighting
  • feSpotLight
  • feTile
  • feTurbulence
  • foreignObject
  • glyphRef
  • linearGradient
  • radialGradient
  • textPath
4.5.3.2 属性名

ポリグロット・マークアップは、すべてのHTML要素に対する属性名、ポリグロット・マークアップが小文字definitionurlを混合活字ケースdefinitionURLに変える場合を除いたすべてのMathML要素名、ポリグロット・マークアップが混合活字ケースを使用する、以下のSVG属性名を除くすべてのSVG属性名に対して小文字を使用する:

  • attributeName
  • attributeType
  • baseFrequency
  • baseProfile
  • calcMode
  • clipPathUnits
  • contentScriptType
  • contentStyleType
  • diffuseConstant
  • edgeMode
  • externalResourcesRequired
  • filterRes
  • filterUnits
  • glyphRef
  • gradientTransform
  • gradientUnits
  • kernelMatrix
  • kernelUnitLength
  • keyPoints
  • keySplines
  • keyTimes
  • lengthAdjust
  • limitingConeAngle
  • markerHeight
  • markerUnits
  • markerWidth
  • maskContentUnits
  • maskUnits
  • numOctaves
  • pathLength
  • patternContentUnits
  • patternTransform
  • patternUnits
  • pointsAtX
  • pointsAtY
  • pointsAtZ
  • preserveAlpha
  • preserveAspectRatio
  • primitiveUnits
  • refX
  • refY
  • repeatCount
  • repeatDur
  • requiredExtensions
  • requiredFeatures
  • specularConstant
  • specularExponent
  • spreadMethod
  • startOffset
  • stdDeviation
  • stitchTiles
  • surfaceScale
  • systemLanguage
  • tableValues
  • targetX
  • targetY
  • textLength
  • viewBox
  • viewTarget
  • xChannelSelector
  • yChannelSelector
  • zoomAndPan
4.5.3.3 属性値

属性値における文字について、ポリグロット・マークアップは、マークアップ、DOM API、およびこれら属性がHTML要素で使用されるCSSとの間の活字ケースの整合性を維持する。

ポリグロット・マークアップは、MIMEタイプ、言語タグ、文字セット、真偽値、メディアクエリ、およびキーワードで発生する次の属性上の値に対する活字ケースの整合性を維持する。必須でないが、活字ケースの一貫性を維持する簡単な方法は、これらの属性に対して小文字の値のみを使用することである。セレクタマッチングのために、XMLで属性値がすべて大文字・小文字区別であるように扱うため、ポリグロット・マークアップは、これらの値に対する活字ケースの整合性を維持する。しかしHTMLは、大文字・小文字不区別としてこれらの属性の値を扱う(HTML5仕様、4.15.1 Case-sensitivityを参照のこと)。[HTML5]

  • accept
  • accept-charset
  • charset
  • checked
  • defer
  • dir
  • direction
  • disabled
  • enctype
  • hreflang
  • http-equiv
  • media
  • method
  • multiple
  • readonly
  • rel(コロンを含まない値の場合)
  • scope
  • selected
  • shape
  • target(キーワードのみ。ブラウジングコンテキスト名は大文字・小文字区別である)
  • typealinkobjectscriptまたはstyle要素で)
  • type(inputで)

RDFaのような他の仕様は、特定の属性の許容値に追加の制約を課すかもしれないことに注意する。

また、XMLプロセッサは、言語情報を含むものとしてlangを認識しないため、ポリグロット・マークアップは(言語属性を参照)langとおよびxml:lang属性の両方を使用することに注意する。しかし、CSS3セレクタ仕様では、xml:langを含む言語属性が大文字・小文字不区別な方法で一致されるよう規定する。[SELECT]

4.6 要素コンテンツ

HTML文書を含む異なる種類の要素に対して、ポリグロット・マークアップは以下のコンテンツの規則に準拠する。

4.6.1 空要素

HTML構文において、空要素は常に空であり、終了タグを一切持たない要素である。HTML仕様や拡張仕様において空として挙げられるすべての要素は、ポリグロット・マークアップにおいてXML空要素タグ<foo/>)の構文形式を持たなければならない。他の要素は、XML空要素タグの構文を使用してはならない。HTML仕様の空要素は次の通り[HTML5]:

area, base, br, col, embed, hr, img, input, keygen, link, meta, param, source, track, wbr

例: ポリグロット・マークアップは、空要素に対して<br/>のような空要素タグ構文を使用し、<br></br>使用しない

例: コンテンツモデルが空でない要素の空のインスタンスを与えられる(たとえば、空のタイトルや段落)ポリグロット・マークアップは、空要素タグ構文を使用しない。つまり、文書は<p></p>を使用し、<p/>を使用しない。

MathMLおよびSVG要素のような外来コンテンツにおける要素は、空要素タグ使用するか、コンテンツを含むかのいずれかであってもよい。

4.6.2 生テキスト要素(scriptおよびstyle

ポリグロット・マークアップにおいて、 HTML仕様や拡張仕様において生テキスト要素として挙げられるすべての要素のコンテンツは、この節で定義される特別な要求事項に適合させなければならない

HTML5は以下の生テキスト要素を定義する:

script, style

HTMLにおいて、scriptおよびstyle要素のコンテンツは、あたかも生テキスト要素はCDATAであったかのように扱われ、そのため&および<は、これら要素が要素を閉じる終了タグとして出現する場合を除き、特別でない。しかしXHTMLにおいて、同じ構成要素は、タグ、文字参照、CDATAなどとして扱われる。

1 HTMLおよびXMLが生テキスト要素を解析する方法の違いに関する概要
曖昧な文字列情報HTMLの解釈XMLの解釈
<![CDATA[セクション]]>の内側の場合<![CDATA[セクション]]>の外側の場合
< 小なり記号解釈されない(ただし</scriptおよび</style列を参照のこと) 解釈されない解釈される (コメントタグ、コメント、CDATA)
&アンパサンド解釈されない解釈されない解釈される 文字参照または実体を開始する
<!--コメントの開始部分的に解釈されない解釈されない解釈される
-->コメントの終了部分的に解釈されない解釈されない解釈される
<![CDATA[CDATA宣言の開始解釈されない解釈されない解釈される (CDATAブロックを開始する)
]]>CDATA宣言の終了解釈されない解釈されない解釈される (CDATAブロックを終了する)
cdata contentCDATAセクションのコンテンツ解釈されない
</script script要素の内側に発生しかつ"tab" (U+0009), "LF" (U+000A), "FF" (U+000C), "CR" (U+000D), U+0020 SPACE, ">" (U+003E)、または"/" (U+002F)のいずれか1つが続く親を終える解釈されない親を終える
</stylestyle要素の内側に発生しかつ"tab" (U+0009), "LF" (U+000A), "FF" (U+000C), "CR" (U+000D), U+0020 SPACE, ">" (U+003E)、または"/" (U+002F)のいずれか1つが続く親を終える解釈されない親を終える
<foo></bar>その他すべてのタグ、整形式かどうか解釈されない解釈されない解釈される通常の解析規則を仮定して
&#foo;文字参照解釈されない解釈されない解釈される通常の解析規則を仮定して
上記の文字列のいずれでもない任意の他の文字列解釈されない解釈されない解釈されない

構文的に、ポリグロットのサブセットは以下で発見される

  • どちらか 安全なテキストコンテンツにコンテンツを制限する、つまり、HTMLとXMLで同じように解釈されるテキスト。
  • または CDATAセクションでコンテンツを包むことによって制約の違いを均一にすることを試みる。CDATAコードは、HTMLパーサによってテキストとして見られている(したがって、スクリプトやスタイル言語を妨害できる)。一方でXMLパーサは、マークアップセマンティクスなしでにテキストとしてコンテンツを見る。

安全なテキストコンテンツにコンテンツを制限することは、より多くの計画とコードの制御を必要とするが、それはスクリプトやスタイル言語を機能させるために余分で潜在的に破壊可能なコードを必要としないため、CDATAオプションよりも堅牢であると言える。一方CDATAオプションは、著者が安全なテキストコンテンツの制限を意識しないため、またはコンテンツが安全であることを保証できないツールによってコードが挿入されるため、発生する可能性がある様々なエラーに対してより多くの自由と堅牢性を提供する。

4.6.2.1 安全なテキストコンテンツを配信するためのオプション

ポリグロット・マークアップは、外部と内部の両方に安全なテキストコンテンツを配信できる。

  • 外部の安全なテキストコンテンツ ポリグロット・マークアップは、インラインコードを含むよりもむしろ外部ファイルへのリンクによるスクリプトやスタイルシートを含めることができる。外部ファイルは、それぞれのスクリプトやスタイルシートとして解析され、安全なテキストコンテンツと同じ制限によって限定されるものではない。
    2 外部スクリプトやスタイルシートへのリンクの例
    例9
    <!-- Ways to link to external scripts or stylesheets -->
    <script src="external.js" ></script>
    <link href="external.css" rel="stylesheet"/>
    <style>@import "external.css";</style>
  • インラインの安全なテキストコンテンツ ポリグロット・マークアップは、HTMLとXMLで異なって解釈される文字または構文を使用しない。これは、文字<および&だけでなく、CDATA終了マーク文字列―]]>を使用しないことを意味する。ポリグロット・マークアップは、それら文字が妥当であるように、文字実体か数値文字参照かを使用するかどうかに関して不可知論である。つまり、ポリグロット・マークアップに対して、&amp;&#x3C;に違いはない。
    3 安全なテキストコンテンツではないコンテンツの例
    例10
    <!-- Unsafe content: < and & are not escaped
    This code is not XML well-formed. -->
    <style>q::before{content:"<";}</style>
    <script>var a = "&";</script> <!-- Unsafe content: < and & are escaped at markup language level.
    This code means different things in HTML vs XML -->
    <style>q::before{content:"&lt;";}</style>
    <script>var a = "&amp;";</script> <!-- Safe content: < and & escaped at scripting/stylesheet level -->
    <style>q::before{content:"\00003c";}</style>
    <script>var a = "\u0026";</script>

    CSSに対して、インラインの安全なテキストコンテンツのオプションは、<および&として、ほとんどの場合非常によく働き、CSSの重要な部分でなく、非常に頻繁に使用されないであろう。しかし、それがJavaScriptに至る場合、&および<は、言語の鍵となる動詞(オペレーター)であり、したがってすぐにトラブルになる― 外部の安全なテキストコンテンツを使用するのがより良い。

4 曖昧な文字列を一切含まないインラインコンテンツ
例11
<!-- The following example of inline script is polyglot markup because there are no ambiguous strings within the script element. -->
<script>document.body.appendChild(document.createElement("div"));</script>

曖昧な文字列を使用するための回避策は、stylescriptsrc属性の内側に適切にエスケープ文字を含めることである。

4.6.2.2 安全なCDATAコンテンツ

ポリグロット・マークアップは、 CDATAセクションに包まれた生テキストコンテンツを受け入れる。しかし、(まさにCDATA終了マーク文字列―]]>を除いて )あらゆるコンテンツ許可する代わりに、特定の生テキスト要素のHTMLの制約に対応するサブセットのみが許可される。上記表の解析の違いにおける「HTMLの解釈」欄を参照のこと―テキスト「解釈しない」をもつすべてのセルはまた、CDATAとして解釈されず、したがって、CDATAの安全なサブセットを構成する。

CDATAセクションにおいて生テキストを包むことは、新たな問題をもたらす。HTMLとして実行される場合 、CDATAセクションの開始および終了マークは、スクリプトまたはスタイルシートのインタプリタによって見られ、したがって構文エラーが発生しても、スクリプトおよびスタイルシートの実行を停止できる。解決策は、スクリプトまたはスタイルシート言語のコメント方法を使用して、CDATA開始および終了マークをコメントアウトすることである。さらに、scriptがコードブロックコンテナとして使用される場合のように、XMLコメントの内側で非表示にすることで、スクリプト/スタイリングコメントをコメントアウトする必要があるかもしれない。

4.6.2.2.1 CDATA使用のための安全な規則

以下規則は、CDATAがCSSに対する使用を制限することを前提としている。

一般的な規則:

  • CDATAセクションは、<script>および<style>上のHTMLの制限事項を前提としている。
  • 生のテキスト要素ごとに1つだけのCDATAセクションがある場合もある。
  • CDATAセクションは、要素を含むそのセクションの最初に出現しなければならず、したがってその要素の最初の子でなければならない。
    • CDATAセクションの後に1つのノードのみが存在する―空白、またはXMLコメント、またはスクリプト/スタイル言語の構造(スクリプト/スタイル言語の通常のコメント)で構成するかもしれない、なるべく1行のコードのみ。
    • CDATAセクションの前に1つのノードのみが存在する―空白、またはXMLコメント、またはスクリプト/スタイル言語の構造(スクリプト/スタイル言語の通常のコメント)で構成するかもしれない、なるべく1行のコードのみ。

「CDATAセクションは、要素を含むそのセクションの最初に出現しなければならず、したがってその要素の最初の子でなければならない。」という記述は、パーサが文字および空白に基づいてDOMノードを作成してもよい方法のためである。次のスクリプト要素がCDATAノードの外側に空白を含まないため、この要素は、HTMLとして解析されようとXMLとして解析されようと、1つのノードを持つ:

<script><![CDATA[foo]]>/<script>

著者は、CDATA「開始タグ」と「終了タグ」をコメントアウトする必要があるかもしれないので、ポリグロット・マークアップはCDATAセクションの前後に1つのノードを可能にする。次の例は、CDATAセクションの前に1つのテキストノード、CDATAセクション自身の1つのノード、およびCDATAセクションの後に1つのノードの、3つのノードを持つ:

Fig. 5 CDATA section that is commented out, resulting in a total of three DOM nodes.
例12
<script>/*<![CDATA[*/
    foo
    /*]]>*/</script>

]]>文字列は:

  • <![CDATA[がコメントアウトされる場合、常にコメントアウトされる。
  • <![CDATA[がコメントアウトされる場合、一切コメントアウトされない。
  • 例13
    <script> //<![CDATA[ Foo; //]]>  </script>

<![CDATA[文字列は3つの方法で操作されうる:

  1. <![CDATA[ ― コメントアウトせずに
    例14
    <script type="not-CSS-and-not-JS"><![CDATA[foo]]></script>

    コメントアウトすることなく<![CDATA[ブロックを使用することは、HTMLとして解析される場合、type="text/css"またはtype="text/javascript"コンテンツとして適合しない。

  2. //<![CDATA[―ブロック全体に対してスクリプト言語のコメントを使用する。
    例15
    <script>//<![CDATA[ FOO; //]]></script>

    コメントはCDATAセクションの前にノードで開始していることに注意する。

  3. <!--//--><![CDATA[―2と同じだが、スクリプトのコメントは、XMLコメント内に隠される。
    例16
    <script><!--//--><![CDATA[ FOO; //]]></script>

    スクリプト言語が、 構文的に正当として<!--を受け入れなければならないことに注意する。JavaScriptはそうであるが、他のスクリプト言語ではそうでないかもしれない。

    このアプローチはCSSに対応する。しかし、上記の規則2は妥当性を防止する。

4.6.2.2.2 scriptにおけるコメント構文

ポリグロット・マークアップは、script要素内のコメントの内側に開始<script>タグを配置しない。HTMLパーサがscript要素内のコメントの内側に開始<script>タグに遭遇する場合、互換性関連の理由のため、終了コメント文字列(-->)が最初に出現しない限り、それは次の</script>終了タグ上で要素を閉じない。代わりに、パーサが最初に任意のコメント最後を参照しない場合、要素は、2つ目の</script>終了タグで閉じられる。コメントと2つ目の<script>要素の終了タグも見つからない場合、文書の残りの部分はコメントアウトされる。この動作は、style要素で発生しないことに注意する。

4.6.3 エスケープ可能な生テキスト要素

エスケープ可能な生テキスト要素は、文字参照が許可されているが、HTMLパーサがテキストとしてではなくマークアップとして要素を扱う要素である。ポリグロット・マークアップに対して、エスケープ可能な生テキスト要素は、以下のとおり:

  • title
  • textarea

文字実体がエスケープ可能な生テキスト要素に対して許可される場合を除いて、ポリグロット・マークアップは、エスケープ可能な生テキスト要素のための安全なテキストコンテンツと同じ規則を使用する。

4.6.4 外来要素

外来コンテンツ要素の正確な規則は、それぞれの仕様で定義される。

4.6.5 Special elements

他に指定される場合を除いて、要素は、ポリグロット・マークアップに適用するもの以外の特別な制限はない。

XML文書においてiframeHTML仕様は特別な抑止を設定するため、iframe要素はポリグロット・マークアップで制限を持つ。[HTML5]

4.7 テキスト

4.7.1 textareaおよびpre要素における改行

ポリグロット・マークアップtextareaまたはpre要素のいずれかを使用する場合、要素内のテキストは改行で始めるべきでない。これは、HTMLおよびSGMLベースシステムは最初の改行を削除する一方で、XMLパーサは削除しないためである。

4.8 属性

ポリグロット・マークアップは、引用符ですべての属性値を囲む。ポリグロット・マークアップは、単一引用符または二重引用符のいずれかで属性値を囲む。

ポリグロット・マークアップは、属性内で直接入力した改行文字を使用しない。

属性値の中で、ポリグロット・マークアップは、リテラル文字を使用するよりむしろ数値文字参照として、タブ、ラインフィードおよびキャリッジリターンを表す。たとえば、属性値の中で、ポリグロット・マークアップは、逐語的にリテラルな'\t'ではなくタブのために&#x9;を使用する。これは、XMLにおいて属性値の正規化のためである。[XML10]コメントは、ソース行の終わりではなく、全属性値の最後でコメントアウトしてしまうので、属性値内のJavaScriptおよびCSSは、属性値の正規化の影響を受けていることにも注意すること。

次の例は、srcdoc属性内でラインフィード、タブ、および小なり記号文字の数値文字参照(エスケープされた文字)を使用している。

例17
<iframe srcdoc="&lt;p>Hello &#x0A; &#x09; world!&lt;/p>" src="demo_iframe_srcdoc.htm"></iframe>

XMLで属性値の正規化のために[XML10]、ポリグロット・マークアップは、属性内で改行文字を使用しない。事実上、属性内で改行を伴うソースコードに対して、XMLおよびHTMLを介して生成するDOMは異なる。しかし、空白の違いがない限り、ページには何の影響も与えない:

  • 明示的にJavaScriptによって試験され、小さな結果の違いをレンダリングする。
  • @altのコンテンツとして、コンテンツが視覚的にレンダリングされる属性で使用される。

直接入力される改行文字はURIを含む任意の属性において明らかに使用できないことに注意する。

属性値も参照のこと。

4.8.1 許可されない属性

次の属性は、ポリグロット・マークアップ内のHTMLまたはXHTMLにおいて許可されない。これらの属性は、XMLとして解析される文書において効果を持つが、text/htmlとして解析される文書において影響はない。したがって、HTML5の仕様はtext/html文書において無効としてそれらを定義する。[HTML5]

  • xml:space
  • xml:base

xml:spaceおよびxml:base属性は、SVGおよびMathML要素で許可されることに注意すること。したがって、これら属性が外来コンテンツとしてSVGまたはMathML内に出現する場合、属性はポリグロット・マークアップにおいて出現してもよい。

4.8.2 言語属性

要素の言語へのマッピングを指定する場合、ポリグロット・マークアップは、langxml:lang属性の両方を使用する。いずれの属性も他のものなしで使用されるべきでなく、ポリグロット・マークアップは、langxml:langの両方のための同一の値を維持する。

ルート要素は、常に言語を指定すべきである、さもないと、HTMLのフォールバック言語の効果は、参加してもよく、かつ文書がXMLとして消費される(フォールバック言語が動作するために必要とされていない場合)またはfile URIを経由して消費される(外部Content-Languageを経由してフォールバック言語が動作しない場合)かどうかに依存して言語が変化する。内部http-equiv="Content-Language meta要素は、HTML5に不適合であることに注意する。詳細については、たとえば、HTML5の言語決定規則を参照のこと。

4.8.3 特別な配慮を持つ属性

次の属性またはその検討は、ポリグロット・マークアップのための一般的な規則に対する例外を必要とする。

4.8.3.1 id属性

ポリグロット・マークアップは、id属性値内で一切の空白文字を含まない。これは、id属性値がHTML5で空白文字を含まないかもしれないためである。[HTML5]

ポリグロット・マークアップは、すべてのid属性が文書内で一意でなければならず、文字で始まる、正当なXML名でなければならないことを保証する。[XML10]

4.9 名前実体参照

ポリグロット・マークアップは以下の名前実体参照を使用する:

前のリストを超える実体に対して、ポリグロット・マークアップは文字参照を使用する。たとえば、ポリグロット・マークアップは、&nbsp;の代わりに&#xA0;を使用する。ポリグロット・マークアップ(前の例で、&#160;のような)エスケープ文字に10進値を使用してもよいことに注意する。しかし、Character Model for the World Wide Webは、両方が利用可能な場合、コンテンツが10進形式よりもむしろ16進形式の文字エスケープを使用すべきであると推奨する。[CHARMOD]

これらは文字として使用される場合、ポリグロット・マークアップは、常に小なり記号(<)およびアンパサンド(&)のための文字参照を使用し、しかし、外来コンテンツの内側のCDATA、コメント内の文字および安全なCDATAに対して、以下の規則が適用される:

4.10 コメント

ポリグロット・マークアップは、"<!"または"<!--"のいずれかでコメントを開始する。ポリグロット・マークアップは、">"または"->"のいずれかでコメントを開始しない。

4.11 ポリグロット・マークアップのスクリプトとスタイル

JavaScriptおよびCSSをポリグロット・マークアップに適用する場合、目標は、HTMLまたはXMLとして消費されるかどうかに関わらず同じ結果を得ることである。したがって、XMLとHTMLで異なる結果を与えるスクリプトやスタイルの機能を認識することが重要である。この問題は、生テキスト要素に対してポリグロット使用規則に加える。

4.11.1 JavaScript:innerHTMLdocument.write()

document.write()およびdocument.writeln()はHTMLで動作するが、どちらの機能もXHTMLで動作しない。ポリグロットの代替は、HTMLとXHTMLの両方に対して動作するinnerHTMLプロパティである。

innerHTMLプロパティは、文字列を取得する。しかし、HTMLパーサがHTMLにおいてHTMLとしてその文字列を解析する一方で、XMLパーサはXHTMLにおいてXMLとしてその文字列を解析する。そして解析におけるこの違いのために、innerHTMLが挿入するコードは、ポリグロット・マークアップのためのガイドラインに従わなければならず、その結果XMLパーサによって生成された結果のDOMは、HTMLパーサによって生成されたDOMと相違ない。

4.11.2 CSS:名前空間接頭辞を要求する属性セレクタ

CSSは、著者がいわゆる属性セレクタ[attr]{property:value}を使用してその属性を参照することで要素の選択を有効にする。一般に、ポリグロット・マークアップは、属性に影響しないデフォルト名前空間に依存するため、属性セレクタは自由に使用できる。

しかし、ポリグロット・マークアップに要求される属性の一部は、名前空間付けされる。xmlnsのように、一部はデフォルトで名前空間付けされる。一部の属性は、xml:xmlns:およびxlink:のようにデフォルトで名前空間付けされる接頭辞によって名前空間化される。さらに拡張仕様は、HTML仕様で定義されたもの以外であっても、他の名前空間付けされた属性を許可してもよい。その結果、属性が名前空間に関連付けされる場合、[xmlns]{rule:foo} のようなセレクタは、XHTMLで動作しない。接頭辞付けられた属性に対しても厳密に同じである。たとえそれがコロンをエスケープしたとしても([xml\:lang]{rule:foo})、そのようなセレクタはHTMLでのみ動作する(xlink:に対する名前空間宣言を除く。これはXMLでおよびHTMLで動作し、そして両方の構文で名前空間化された方法で選択されなければならない。)

XMLで名前空間付き属性を選択可能にするために、属性セレクタは名前空間接頭辞を含まなければならない。[SELECT]

接頭辞のない、名前空間付き属性xmlns属性の場合、HTMLとXMLの両方で動作するポリグロット・セレクタは、属性の名前空間に関係なく、セレクタがすべての属性名を一致することを示す、名前空間接頭辞にアスタリスク(*)を使用して作成できる。

例18
[*|xmlns]{color:lime}

次に、接頭辞付き属性について、ポリグロットマークアップでなく、 HTML仕様の規則のために、xml:lang="foo"の存在を指示するそれ自身が、対応するlang="foo"を伴わなければならず、準拠するポリグロット文書において、 それはxmlns属性と同じアプローチを使用できる。

例19
[*|lang]{color:lime}

しかし、xml:lang="foo"lang="foo"の両方を使用するポリグロット・マークアップの要件は、XMLパーサとHTMLパーサの両方で、[lang]{color:lime}でさえも動作することを意味する。

ポリグロットsvg要素のために必要とされるxmlns:xlink属性に関しては、xml:langとは対照的であるため、HTML/XHTMLにおける外来コンテンツ要素に属し、HTMLで名前空間付けされる。したがって、唯一の方法―HTML内だけでなくXML内で― セレクタとしてこの属性を使用することは、CSSでxmlns:接頭辞の名前空間を宣言することによってである。

例20

             @namespace xmlns "http://www.w3.org/2000/xmlns/";
             [xmlns|-xlink]{border:dashed lime 3px}

ユーザーエージェントがCSSおよび/またはマークアップで名前空間をサポートしない場合で、1つのセレクタより多くを使用することが必要である。著者が接頭辞を宣言する場合にこれは発生する可能性がある―デフォルトまたは接頭辞付き―ユーザーエージェントがCSS名前空間接頭辞を持つ属性セレクタをサポートしていない場合、拡張仕様で許可される。

例21

            /*Selector for legacy user agents without support for namespace prefixed attribute selector:*/
            [xmlns],
            /*Selector for user agents with support for namespace prefixed attribute selector:*/
            [*|xmlns]
            {color:lime}

5. 文書例

以下のコード例は、ポリグロット・マークアップとして機能し、XHTMLまたはHTMLのいずれかとして検証する。http://dev.w3.org/html5/html-polyglot/SamplePage.htmlで、HTMLとして配信されるページ、およびhttp://dev.w3.org/html5/html-polyglot/SamplePage.xhtmlで、XHTMLとして配信される同一バイトで表示できる。

たとえば文書は'text/html'として提供される。この例のように'text/html'として提供される場合、一部のレガシーユーザーエージェントは、SVGをサポートしない。例のページは、'application/xhtml+xml'として提供されうる、ファイル拡張子.htmlをもつ、ポリグロット・マークアップの遵守を維持し、SVGのレンダリングを可能にする。

Example 22
<!DOCTYPE html>

<html id="SampleDoc" xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

  <head>
    <title>A Sample Page Using Polglot Markup</title>
    <meta charset='utf-8' />
        <!-- The HTML encoding declaration (meta element with the charset
             attribute) is used to declare the encoding ofor HTML parsers, in line with the section on
             Specifying a document’s character encoding -->
	<!-- The link element is self-closing as described in the section on Void Elements -->
	<!-- Style commands are included by linking to an external file rather than including them in-line,
	     as described in the section on The safe text content option for script and style elements.  -->
	<link type="text/css" rel="stylesheet" href="Sample.css"/>
  </head>

  <body>
<nav><p><strong>NB:</strong> These bytes are available served as <a href="SamplePage.xhtml">XHTML</a>
             and as <a href="SamplePage.html">HTML</a></p></nav>

    <h1>Sample Page Using Polyglot Markup</h1>
    <p>
      The source code for <a href="#SampleDoc">this document</a> uses <dfn id="sampleDef">polyglot markup</dfn>,
      a document that is a stream of bytes that parses into identical document trees
      (with the exception of the xmlns attribute on the root element) when processed as HTML and when processed as XML.
      The source code for this document also contains additional comments about the use of
      <a href="#sampleDef">polyglot markup</a>.
    </p>

    <h2>Foreign Elements</h2>
    <p>
      The following shapes use SVG elements.
      <a href="#sampleDef">Polyglot markup</a> introduces undeclared (native) default namespaces
      for the the root SVG element (<code>svg</code>) and respects the mixed-case element names and values
      when appropriate, as described in the section on Element-Level Namespaces, the section on Element Names
      and the section on Attribute values.
    </p>

    <!-- <a href="#sampleDef">Polyglot markup</a> declares the xlink: namespace on the <svg> element to maintain XML-compatibility  -->
    <svg width="350" height="250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
      <g>
        <title>Three SVG shapes</title>
        <desc>
          This SVG image contains an ellipse filled with a gradient that goes from white to blue as it moves outward from the center.
          A yellow rectangle with a black border overlaps the ellipse in the upper-left quadrant,
          and a red spiral on a white background overlaps the ellipse in the bottom-right quadrant.
          The red spiral is also a link to the example code for that SVG shape.
        </desc>
        <defs>
          <!-- Note that "radialGradient" and "myGradient" respect mixed-case values. -->
          <radialGradient id="myGradient" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
            <stop offset="0%" style="stop-color:rgb(200,200,200); stop-opacity:0"/>
            <stop offset="100%" style="stop-color:rgb(0,0,255); stop-opacity:1"/>
          </radialGradient>
        </defs>
      <ellipse cx="50%" cy="50%" rx="50%" ry="42%" style="fill:url(#myGradient)"/>
      <rect x="0" y="0" width="100" height="100" style="fill: yellow; stroke: black;"/>
      <a xlink:href="http://www.example.org/foo">
        <!--
          Note that the following attribute contains newlines which will produce a different DOM,
          but will not affect the way in which SVG functions in the least.
        -->
        <path transform="translate(60, -175)"
                 d="M153 334 C153 334 151 334 151 334 C151 339 153 344 156 344 C164 344 171 339 171 334
                    C171 322 164 314 156 314 C142 314 131 322 131 334 C131 350 142 364 156 364
                    C175 364 191 350 191 334 C191 311 175 294 156 294 C131 294 111 311 111 334
                    C111 361 131 384 156 384 C186 384 211 361 211 334 C211 300 186 274 156 274"
                 style="fill:white;stroke:red;stroke-width:2"/>
        </a>
      </g>
    </svg>
    <h2>Void Elements</h2>
    <!-- Given an empty instance of an element whose content model is not EMPTY (in this case, an empty paragraph)
    <a href="#sampleDef">polyglot markup</a> does not use the minimized form, as described in Section 6.4 Void Elements -->
    <p></p>
    <p>
      There is an empty <code>p</code> element before this paragraph.
      <a href="#sampleDef">Polyglot markup</a> uses <code>&lt;p>&lt;/p></code> and not <code>&lt;p/></code>.
    </p>
    <p>
      <a href="#sampleDef">Polyglot markup</a> treats certain elements as self-closing,
      void elements, such as the following <code>img</code> element.
    </p>
    <img height="48" width="72" alt="W3C" src="http://www.w3.org/Icons/w3c_home"/>
    <p>
      For more information, see the Void Elements section.
    </p>


    <h2>Required Elements</h2>
    <p>
      The following table uses the required <code>tbody</code> element, as described in the
      Required elements and tags section.
    </p>
    <table>
      <tbody>
        <tr>
          <th>Column One</th>
          <th>Column Two</th>
        </tr>
        <tr>
          <td>Row 1, Column 1</td>
          <td>Row 1, Column 2</td>
        </tr>
        <tr>
          <td>Row 2, Column 1</td>
          <td>Row 2, Column 2</td>
        </tr>
        <tr>
          <td>Row 3, Column 1</td>
          <td>Row 3, Column 2</td>
        </tr>
      </tbody>
    </table>

    <p>
      The following table makes use of the <code>col</code> element and therefore uses the
        then required <code>colgroup</code> element as <code>col</code> element wrapper for,
        as described in the Required elements and tags section.
    </p>
    <table>
      <colgroup>
        <col style="background-color:silver"/>
        <col style="background-color:gray"/>
        <col style="background-color:yellow"/>
      </colgroup>
      <tbody>
        <tr>
          <th>ISBN</th>
          <th>Title</th>
          <th>Price</th>
        </tr>
        <tr>
          <td>3476896</td>
          <td>My first HTML</td>
          <td>$53</td>
        </tr>
        <tr>
          <td>1234567</td>
          <td>Intermediate Polyglot</td>
          <td>$49</td>
        </tr>
      </tbody>
    </table>

    <h2>Named Entity References</h2>
    <p>
      The paragraph you now read, uses the string <code>&amp;amp;</code> for ampersands (“&amp;”) and uses,
      as described in the section on Named entity references, the string <code>&amp;#xA0;</code>
      for a non-breaking space between the following two words: <i>“<a href="#sampleDef">polyglot&#xA0;markup</a>”</i>.
    </p>
  </body>
</html>

A. 謝辞

Many thanks to Robin Berjon, David Carlisle, Daniel Glazman, Richard Ishida, Tony Ross, Sam Ruby, Jonas Sicking, Henri Sivonen, Manu Sporny, and Philip Taylor. Special thanks to the W3C TAG and the W3C Internationalization (i18n) Core Working Group.

B. 参考文献

B.1 規範情報

[CHARMOD]
Martin Dürst; François Yergeau; Richard Ishida; Misha Wolf; Tex Texin et al. Character Model for the World Wide Web 1.0: Fundamentals. 15 February 2005. W3C Recommendation. URL: http://www.w3.org/TR/charmod/
[CSS3NAMESPACE]
Elika Etemad; Anne van Kesteren. CSS Namespaces Module. 29 September 2011. W3C Recommendation. URL: http://www.w3.org/TR/css3-namespace/
[HTML5]
Ian Hickson, Robin Berjon; Steve Faulkner; Travis Leithead; Erika Doyle Navara; Edward O'Connor; Silvia Pfeiffer. HTML5. October 2014. W3C Recommendation. URL: http://www.w3.org/TR/html5/
[HTTP11]
R. Fielding, Ed.; J. Reschke, Ed.. Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. June 2014. Proposed Standard. URL: http://www.ietf.org/rfc/rfc7231.txt
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: http://www.ietf.org/rfc/rfc2119.txt
[RFC2854]
D. Connolly; L. Masinter. The 'text/html' Media Type. June 2000. Informational. URL: http://www.ietf.org/rfc/rfc2854.txt
[SELECT]
Tantek Çelik; Elika Etemad; Daniel Glazman; Ian Hickson; Peter Linss; John Williams et al. Selectors Level 3. 29 September 2011. W3C Recommendation. URL: http://www.w3.org/TR/css3-selectors/
[XML-MT]
M. Murata, S. St.Laurent, D. Kohn. XML Media Types. IETF RFC 3023. URL: http://www.ietf.org/rfc/rfc3023.txt.
[XML10]
Tim Bray; Jean Paoli; Michael Sperberg-McQueen; Eve Maler; François Yergeau et al. Extensible Markup Language (XML) 1.0 (Fifth Edition). 26 November 2008. W3C Recommendation. URL: http://www.w3.org/TR/xml

B.2 参考情報

[WCAG20]
Ben Caldwell; Michael Cooper; Loretta Guarino Reid; Gregg Vanderheiden et al. Web Content Accessibility Guidelines (WCAG) 2.0. 11 December 2008. W3C Recommendation. URL: http://www.w3.org/TR/WCAG20/