この文書「Polyglot マークアップ: HTML 互換の XHTML 文書」は、W3CHTML Working Group による「Polyglot Markup: HTML-Compatible XHTML Documents (W3C Working Draft 24 June 2010)」の日本語訳です。

この日本語訳は参考情報であり、正式な文書ではないことにご注意ください。また、翻訳において生じた誤りが含まれる可能性があります。

原文の最新版 は、この日本語訳が参照した版から更新されている可能性があります。また、この日本語訳自身も更新されている可能性があります。日本語訳の最新版は、http://standards.mitsue.co.jp//resources/w3c/TR/html-polyglot/ から参照することができます。古いものについても、Web 標準仕様 日本語訳一覧 から参照することができます。

公開日:
2010-06-29
翻訳者:
矢倉 眞隆 <>

W3C

Polyglot マークアップ: HTML 互換の XHTML 文書

2010 年 6 月 24 日付 W3C 草案 (Working Draft)

この版:
http://www.w3.org/TR/2010/WD-html-polyglot-20100624/
最新の公開版:
http://www.w3.org/TR/html-polyglot/
最新の編集版:
http://dev.w3.org/html5/html-xhtml-author-guide/html-xhtml-authoring-guide.html
編集者:
Eliot Graff, Microsoft Corporation

概要

Polyglot マークアップを利用する文書は、HTML5 文書であると同時に XML 文書でもあり、さらに HTML 文書でもある。また文書がそうなるにあたり、よく定義された制約が課されていることも表す。制約を満たす polyglot マークアップは処理系が HTML か XHTML であるかに関係なく HTML5 仕様に互換であると解釈される。Polyglot マークアップは特定の DOCTYPE, 名前空間宣言、そして特定の表記を利用する。要素と属性は多くの場合小文字で記すが、まれに camel case で記述することがある。Polyglot マークアップでは特定の属性において、値を小文字で記述する。制約は、空要素、名前実体参照、スクリプトとスタイルシートの利用にも及ぶ。

この文書のステータス

このセクションは、この文書が公開された時点における状況を記す。他の文書がこの文書を上書きすることがある。W3C より公開される技術文書と、この文書の最新版は W3C 技術文書インデックス (http://www.w3.org/TR/) にて見ることができる。

この文書は、XHTML 文書もしくは HTML 文書を、HTML5 準拠な HTML パーサでも XML パーサでも妥当なものにしたいと考える製作者のために、その指針を要約したものになる。この仕様は Web 製作者による利用を想定している。ユーザーエージェントのための仕様ではないことから、それらに対して制約を設けることはない。この文書では HTML5 準拠なユーザーエージェントがどのように HTML 文書を処理するかについて定義しないことに注意されたい。また、この文書はインターネットメディア型 text/html を定義するものでもない。ユーザーエージェントのための仕様や定義については、[HTML5] および [RFC2854] を参照されたい。

この文書は W3C HTML WG より First Public Working Draft として公開された。この文書は W3C 勧告 (Recommendation) となることを目指している。この文書に関するコメントは、public-html@w3.org (購読, アーカイブ) まで寄せられたい。いかなるフィードバックも歓迎する。

草案 (Working Draft) としての公開は、W3C メンバーからの支持を得たことを意味しない。この文書は更新や差し替え、他の文書により廃止される可能性のある策定途中の文書となる。策定中という旨を明記せず、この文書を参照することは適切ではない。

この文書は 5 February 2004 W3C Patent Policy のもと運営されるグループにより作成された。この文書は参考情報である。 W3C特許情報の開示に関する公開リスト を関連する団体と共にその成果物とあわせて管理している。リストには情報開示に関する説明もあることから、そちらについても参照されたい。特許について十分に知識のある人物が当該仕様に関し Essential Claim(s) が認められると判断した場合、W3C Patent Policy の 第 6 章 に従い情報を開示しなければならない。

目次

1. はじめに

このセクションは非規範的である。

HTML5 文書が妥当な XML 文書としても提供されることは価値がある。たとえば、製作者が XML ツールを利用し文書を生成し、また他者が XML ツールを用いてその文書を処理することを考えよう。これらの文書は text/html で提供される。この文書では、HTML パーサと XML パーサのどちらでも構文解析可能な文書を作成することを polyglot マークアップ と呼ぶ。Polyglot マークアップは作成した文書が HTML5 文書と XML 文書というふたつを満たすように、双方の言語仕様のうち重なる部分を記すものである。

2. 処理命令と XML 宣言

Polyglot マークアップは処理命令 (processing instructions) を利用しない。ただし、XML 宣言の構文解析規則は処理命令ではなく、Prolog and Document Type Declaration にて別に定義されていることに注意されたい。

3. 文字エンコーディング

Polyglot マークアップは UTF-8 もしくは UTF-16 を利用する。UTF-8 が望ましい。Polyglot マークアップで UTF-16 を利用するとき、エンコーディングには BOM を含め、UTF-16LE または UTF-16BE であることを示すべきである (should)。加えて、この場合 polyglot マークアップは meta charset 宣言を含める必要はない。なぜならパーサは定義により、UTF-16 を読む必要があるからである。

正しい文字エンコーディングのため、polyglot マークアップは次の条件を満たさなければならない (must)。

もしくは (OR)

Polyglot マークアップが UTF-8 や UTF-16 以外のエンコーディングを利用する場合、文書は XML 宣言を含めなければならない (must)。ただし、この場合文書は文字集合を指定する meta 要素も含まなければならない (must)。Polyglot マークアップが XML 宣言と meta 要素の両方を含むとき、それらは同じ文字エンコーディングを指定する必要がある (must)。

4. DOCTYPE

Polyglot マークアップは <!DOCTYPE html> という DOCTYPE を利用する。ここで、文字列 html は小文字で記述しなければならない (must) ことに注意されたい。純粋な HTML 文書では、この文字列は大文字小文字を問わないものとして定義されている。 [HTML5]

5. 名前空間

Polyglot マークアップにおける名前空間の利用にあたり、次の規則が適用される。

6. 要素

6.1 必須要素

Polyglot マークアップを利用する文書は html 要素を持たなければならない (must)。また、その htmlhead 要素と body 要素を持たなければならない (must)。そして、headtitle 要素を持たなければならない (must)。

6.1.1

Polyglot マークアップでは、tr を囲む tbody 要素を table 要素内に明示的に持たなければならない。これは、HTML パーサは tbody 要素を挿入するが、XML パーサはその処理を行わないため、異なる DOM が生成されることによる。

正しい例:

<table>
  <tbody>
    <tr>...

正しくない例:

<table>
  <tr>...

6.2 大文字と小文字の区別

次に記すガイドラインは、要素名、属性名、属性値のマークアップや、スクリプト、CSS に適用される。必須である場合、polyglot マークアップは ASCII 文字をすべて小文字で記述する。しかし、ギリシャ文字、キリル文字、その他の ASCII でないラテン文字をはじめ、ASCII ではない文字には適用されない。

6.2.1 要素名

Polyglot マークアップでは要素名の表記において、大文字と小文字を使い分ける。

  • Polyglot マークアップではすべての HTML 要素を小文字で表記する。
  • Polyglot マークアップではすべての MathML 要素を小文字で表記する。
  • Polyglot マークアップではすべての SVG 要素を、次に挙げる例外を除き小文字で表記する。これらの例外は、ここに表記する通りに書かなければならない (must)。
    • 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

6.2.2 属性名

Polyglot マークアップでは属性名の表記において、大文字と小文字を使い分ける。

  • Polyglot マークアップではすべての HTML 要素について、属性名を小文字で表記する。
  • Polyglot マークアップではすべての MathML 要素について、次の例外を除き、属性名を小文字で表記する。

    definitionurl 属性は definitionURL と記述しなければならない (must)。

  • Polyglot マークアップではすべての SVG 要素について、次に挙げる例外を除き属性名を小文字で表記する。これらの例外は、ここに表記する通りに書かなければならない (must)。
    • 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

6.2.3 属性値

Polyglot マークアップでは、HTML 要素に次のリストで示された属性が存在する場合、その値を小文字で記述する。より詳しくは、必須とされた場合、polyglot マークアップでは、属性値中のすべての ASCII 文字を小文字で表記しなければならない (must)。しかし、ギリシャ文字、キリル文字、その他の ASCII でないラテン文字をはじめ、ASCII ではない文字には適用されない。次のリストにない属性が HTML 要素中にある場合、その値は大文字と小文字を混在させることができる (may)。HTML 以外の要素に与えられた属性の値には、大文字と小文字を混在させることができる。

  • accept
  • accept-charset
  • align
  • alink
  • axis
  • bgcolor
  • charset
  • checked
  • clear
  • codetype
  • color
  • compact
  • declare
  • defer
  • dir
  • direction
  • disabled
  • enctype
  • face
  • frame
  • hreflang
  • http-equiv
  • lang
  • language
  • link
  • media
  • method
  • multiple
  • nohref
  • noresize
  • noshade
  • nowrap
  • readonly
  • rel
  • rev
  • rules
  • scope
  • scrolling
  • selected
  • shape
  • target
  • text
  • type
  • valign
  • valuetype
  • vlink

6.3 空要素

Polyglot マークアップでは、次に挙げる要素を空要素としてのみ用いる。

Polyglot マークアップでは、空要素を最小タグ構文で表記する。すなわち、<br/> といったものになる。XML で許可される <br></br> は既存のユーザーエージェントにおいて不確かな結果を返す。

訳注: HTML5 の HTML 構文では、<br></br> がふたつの br 要素として解釈されます。

内容モデルが EMPTY ではない要素について、何も内容を持たないインスタンスがある場合 (例: 空のタイトルや空の段落)、polyglot markup は最小タグ構文を用いない (つまり <p /> ではなく <p></p> と記述する)。

MathML 要素や SVG 要素については、空要素についても最小タグ構文と、開始タグ終了タグによる表記を行えることに注意されたい。

7. 属性

Polyglot マークアップでは属性値に改行や複数の連続する空白文字を含まない。これらはユーザーエージェントにより処理が異なる。

Polyglot マークアップでは、すべての値を引用符で括る。引用符はシングルクオートもしくはダブルクオートで囲むことができる (may)。

属性値の項も参照されたい。

8. 名前付き実体参照

Polyglot マークアップでは、次に挙げる名前付き実体参照のみを利用する。

このリストに掲載されていない実体について、polyglot 文書は文字参照を利用する。たとえば、polyglot マークアップでは &nbsp; の代わりに &#160; を利用する。

9. スクリプトとスタイルシート

スクリプトとスタイルシートの命令は、インラインで埋め込むのではなく、外部ファイルにリンクすべきである (should)。しかし、polyglot マークアップでは、xml-stylesheet 処理命令で外部スタイルシートをリンクすることはできない (must not)。処理命令と XML 宣言 も参照されたい。

次の例は、外部スクリプトと外部スタイルシートを読み込む適切な表記である。

<script src="external.js"></script>
<link rel="stylesheet" href="external.css"/>

document.write()document.writeln() は HTML 文書では妥当であるが、これらの関数は XHTML では利用できない。このため、polyglot マークアップでこれらの関数は使用しない。代わりに、innerHTML を使用することになる。このとき、innerHTML プロパティは文字列をとることに注意されたい。XHTML において、XML パーサは文字列を XML として構文解析する。HTML において、HTML パーサは文字列を HTML として構文解析する。この構文解析処理の違いのため、polyglot マークアップに沿わない内容をパーサに送った場合、XML パーサと HTML パーサの間で、結果として生成される DOM に違いが現れる。

9.1 外部スクリプトと外部スタイルシート

Polyglot マークアップでは、スクリプトやスタイルシートが <&, ]]>, -- を使用する場合、それらを外部リソースとして参照する。ここで、XML パーサはコメントの内容を削除することが許可されているため、これまで利用されてきたスクリプトやスタイルシートの内容をコメント中に記述し、後方互換を保つという手法は XML ベースのユーザーエージェントでは動作しない可能性があることに注意されたい。

9.2 インラインスクリプトとインラインスタイルシート

Polyglot マークアップで、ソースコード中にクリプトやスタイルシートを記述しなければならない場合、安全な内容 (safe content) もしくは命令を CDATA セクションで囲む必要がある。しかし、polyglot マークアップでは、インラインで記述する内容が外部内容 (foreign content) 内で利用されない限りは、CDATA セクションを使用しない。

9.2.1 安全な内容

安全な内容 (safe content) とは、<& を含まない内容である。次の例は <script> 内に問題を引き起こす可能性のある文字を含まないため、安全と言える。

<script>document.body.appendChild(document.createElement("div"));</script>

9.2.2 命令をCDATA セクションで括る

CDATA セクション内にインラインで命令を記述した場合、XHTML と HTML では同じ DOM を得られないことに注意されたい。しかし、これはコードが <script> 要素や <style> 要素内にあるテキストノードの数に依存するものでない限りほとんど問題とはならない。次の例は CDATA セクションで括られた、インラインスクリプトもしくはインラインスタイルシートの命令を示すものである。

<script>
//<![CDATA[
	(script goes here)
//]]>
</script>
<style>
/*<![CDATA[*/
	(styles go here)
/*]]>*/
</style>

MathML や SVG を利用する場合、パーサは XML の構文解析規則に従う。Polyglot マークアップは MathML や SVG を利用する場合、DOM から CDATA インスタンスを得る事に頼らない。これは HTML パーサが DOM 内に CDATA インスタンスを生成しないことにある。

10. 外部内容の構文解析規則における例外

A. Acknowledgements

Many thanks to Daniel Glazman, Tony Ross, Sam Ruby, Jonas Sicking, Henri Sivonen, and Philip Taylor. Special thanks to the W3C TAG.

B. References

B.1 Normative references

[HTML5]
Ian Hickson; David Hyatt. HTML 5. 4 March 2010. W3C Working Draft. (Work in progress.) URL: http://www.w3.org/TR/2010/WD-html5-20100304/
[RFC2854]
D. Connolly; L. Masinter. The 'text/html' Media Type. June 2000. Internet RFC 2854. URL: http://www.rfc-editor.org/rfc/rfc2854.txt

B.2 Informative references

No informative references.