HTML 5時代のISO-HTML。

テーマ

HTML 5が勧告された際に、国際標準であるISO-HTML(ISO/IEC 15445:2000JIS-HTML)にも何らかの影響があると思われます。

ここでは、ISO-HTMLがHTML 5の影響をどのような形で受けるかを、DTDの修正箇所を交えて予想してみました。

HTML 5が勧告されると、ISO/IEC 15445:2000(ISO-HTML)はどうなるのでしょうか。

制作者の根拠なき予想では、ISO-HTMLも全面的に改訂されると思います。

これまでにも、HTML 4.0から4.01への改訂などに応じてISO-HTMLの修正が行われており、HTML 5の勧告を無視する事は出来なくなると見ております。

HTML 5はISOやIECにそぐわないのではないか?

HTML 5の仕様はISO-HTMLにはそぐわないのではないかと思われるかも知れません。

確かに、HTML 5はJAVAスクリプトとの連携が重視されておりますが、それだけがHTML 5の新機能ではありません。

それどころか、HTML 5に新たに導入されるセクショニングの概念は、かつてISO及びIECが目指していたもので、これらの新要素は寧ろISO-HTMLに相応しいものと考えられます。

改訂の際のポイント。

ISO及びIECがHTML 5を取り入れてHTMLの規格を改訂するとしたら、以下の点がポイントとなるでしょう。

既存のISO-HTML文書をなるべく不適合にしない

つまり、従来のISO/IEC 15445:2000となるべく上位互換を保つようにします。

このため、既存の要素・属性はHTML 5で削除されてもISO-HTMLでは(非推奨として?)残す事とします。

  • <acronym>要素や<table>要素のsummary属性などが該当します。
  • 但し、余りに理念から懸け離れた文書、例えば見出しが全くないなどのようなものは不適合にされても已むを得ないでしょう。

この結果、新仕様はHTML 5のサブセットとせず、従来のISO/IEC 15445:2000にHTML 5に追加される新機能の一部を付け足す形となります。

従って、HTML 5との互換性についてはDTDではなくユーザーズガイドなどのような文書で指針を決めます。

  • 勿論、「HTML 5の完全なサブセットを」と言う意見が出るかも知れません。ですが、今回は従来のISO-HTMLとの互換性も最大限に配慮するものとして話を進めます。
SGML応用言語化する

HTML 5はSGMLの応用言語である事をやっと否認しました。

一方、ISO及びIECはそれを認める事は考え難いと思われます。何故なら、ハイタイム(HyTime)を利用して他のSGML応用系にHTMLを組み込めるようにするなどの使い道も想定しているからです。

  • ハイタイム(HyTimeISO/IEC 10744)とは、SGML応用言語に於けるリンク機能や時間を含めた座標(番地付け)の概念を組込むための言語。XML リンクランゲージ(XLink)もハイタイムがもたらす機能のごく一部をXML応用言語にて実現出来るようにしたものと言えます。

そうなると、DTDにまとめてSGML応用言語化する作業が行われるに違いありません。

  • 実際にはDTDを一から書くのではなく、既存のDTDを修正するような形になります。

その結果、DTD作成の妨げになる要素や属性は真っ先にカットされる事となるでしょう。

  • 具体的に言えば、<embed>要素はプラグインに合わせて任意の属性を指定出来ますが、そんなのはDTDには表わしようがないのでカットされるでしょう。同様に data- で始まる任意の属性もカットされる筈です。
JAVAスクリプトを前提とした要素はカットする

ISO-HTMLの特徴として、JAVAスクリプトなどのクライアントサイドスクリプトが使えないと言うのがあります。

クライアントサイドスクリプトは実装がまちまちであり、広い互換性を保つのには寧ろ障害にさえなり得るからです。

一方、<canvas>要素はJAVAスクリプトの動作を前提とした要素です。

こう言ったスクリプトがなければ意味がない要素は、先ず排除される事になるでしょう。

互換性に疑念をもたらす要素はカットする

前述の<canvas>要素はもちろん、<video>要素や<audio>要素などは互換性の問題があるため排除の対象となるでしょう。

  • 加えて、<video>要素や<audio>要素は対応コーデックの問題があります。

予想した文法。

ISO及びIECがHTML 5を取り入れてHTMLの規格を改訂した場合、以下のようになると予想しております。

セクショニングの概念。

セクショニングはISOとIECが目指していたものです。従ってこの概念は間違いなく導入されるでしょう。

その結果、考えられるDTDの変更点は以下のようになるでしょう。

  • このDTDは、訂正版で修正されております。
<!ENTITY % special "A | BDO | BR | IMG | OBJECT |
                    MAP | Q | SPAN" >

<!-- Logical character styles -->
<!-- The ACRONYM element is deprecated. -->
<!ENTITY % logical.styles "ABBR | ACRONYM | CITE | CODE | DFN | EM |
                           KBD | MARK | SAMP | STRONG | VAR" >

<!-- Physical character styles -->
<!-- The TT element is deprecated. -->
<!ENTITY % physical.styles "B | I | SUB | SUP | TT" >

<!-- Character level elements and text strings -->
<!ENTITY % text "#PCDATA | %physical.styles; | %logical.styles; | %special; | RUBY" >

<!-- Block-like elements eg. paragraphs and lists -->
<!ENTITY % block "ASIDE | BLOCKQUOTE | DIV | DL | FIELDSET | FIGURE | FORM |
                  HR | NAV | OL | P | PRE | TABLE | UL" >

<![ %NoPreparation; [
<!ELEMENT BODY        - O  (HEADER, ARTICLE, FOOTER) +(DEL|INS) >
<!ELEMENT HEADER      O O  (%block;)* >
<!ELEMENT ARTICLE     O O  (HGROUP, (%block;)*, (SECTION)*) >
<!ELEMENT SECTION     O O  (HEADER, HGROUP, (%block;)*, (SECTION)*, FOOTER) >
<!ELEMENT HGROUP      O O  (H1|H2|H3|H4|H5|H6)+ >
<!ELEMENT (H1|H2|H3|H4|H5|H6) - - (%text;)+ >
<!ELEMENT FOOTER      O O  (%block;)* >
                   ]]>
  • DTDに於ける、インライン要素, ブロックレヴェル要素及び<body>要素内容モデルの変更内容はここまで

一方、Pre-HTML(公開前の文書の形を作るためのHTML)では、<section○>要素(○は 2から 6)及び<hgroup○>要素(○は 1から 6)が追加され、これらが<div○>要素に代わるものとなります。

  • Pre-HTMLは公開を前提とした文書型ではないので、既存文書との互換性の議論対象外となります。

この部分のDTDは以下のように書き換えられます。

  • このDTDは、訂正版で修正されております。
<!-- The following marked section is informative only -->
<![ %Preparation; [
<!ELEMENT Pre-HTML    - -  (HEAD, BODY) >
<!ELEMENT BODY        - O  (HEADER, (ARTICLE|SECTION1), FOOTER ) +(DEL|INS) >
<!ELEMENT ARTICLE     O O  (HGROUP1, (%block;)*, (SECTION2)* ) >
<!ELEMENT SECTION1    O O  (HGROUP1, (%block;)*, (SECTION2)* ) >
<!ELEMENT HGORUP1     O O  (H1, (H2, (H3, (H4, (H5, H6?)?)?)?)?) >
<!ELEMENT SECTION2    O O  (HEADER, HGROUP2, (%block;)*, (SECTION3)*, FOOTER ) >
<!ELEMENT HGORUP2     O O  (H2, (H3, (H4, (H5, H6?)?)?)?) >
<!ELEMENT SECTION3    O O  (HEADER, HGROUP3, (%block;)*, (SECTION4)*, FOOTER ) >
<!ELEMENT HGORUP3     O O  (H3, (H4, (H5, H6?)?)?) >
<!ELEMENT SECTION4    O O  (HEADER, HGROUP4, (%block;)*, (SECTION5)*, FOOTER ) >
<!ELEMENT HGORUP4     O O  (H4, (H5, H6?)?) >
<!ELEMENT SECTION5    O O  (HEADER, HGROUP5, (%block;)*, (SECTION6)*, FOOTER ) >
<!ELEMENT HGORUP5     O O  (H5, H6?) >
<!ELEMENT SECTION6    O O  (HEADER, HGROUP6, (%block;)*, FOOTER ) >
<!ELEMENT HGORUP6     O O  (H6) >
<!ELEMENT (H1|H2|H3|H4|H5|H6) - - (%text;)+ >
<!ELEMENT HEADER      O O  (%block;)* >
<!ELEMENT FOOTER      O O  (%block;)* >
                 ]]>

ここで、<article>要素は<section1>要素とも記述出来るものとしております。

  • DTDのPre-HTML関連箇所はここまで

新要素及び変更される要素。

新たに導入される要素の内容モデルや内容モデルが変更される要素について考察しましょう。

前提条件:ブロックレヴェル要素の定義。

ブロックレヴェル要素として定義される要素は、以下の通りです(はHTML 5で追加された要素)。

<h○>要素<address>要素が含まれていない事に注意してください。これらの要素は特別なブロックとされているので、一般のブロックレヴェルと同列には扱えません。

  • この扱いは従来のISO-HTMLと同じです。
  • ブロックレヴェル要素一覧はここまで

<body>要素。

<body>要素の内容モデルは、以下のように変更されます。

  1. <header>要素
  2. <article>要素(Pre-HTMLでは<section1>要素も可)
  3. <footer>要素

これら三つの要素の開始・終了タグは全て省略可能です。

  • これらの三つの要素は、マークアップするまでもなく厳然と存在しているものと考えられるからです。

従って、従来のマークアップが否定される事はありません。

<article>要素。

<article>要素の内容モデルは、以下のようになります。

  1. <hgroup>要素
  2. 任意の個数のブロックレヴェル要素
  3. 零個以上の<section>要素

HTML 5とは異なり、<article>要素は文書の本文として再定義されており、従って<body>要素の直下にしか存在し得ません。

また、<article>要素は、定義上文書には必ず存在するものとしており、従って開始タグ・終了タグとも省略が認められております。

ところで、<hgroup>要素(つまり<h○>要素)が必須と言う事は、当然、<h○>要素が最低一つはないとHTMLとして不適合となります(Pre-HTMLから文書を作成した場合は当然<h1>要素が必須となります)。

ですが、ISO/IEC 15445:2000が見出しで構造を暗示すると言う発想を導入した経緯を考えると、この縛りは寧ろ妥当と思われます。

尚、Pre-HTMLでの<article>要素は、<section1>要素と等価となり、内容モデルもそれに合わせたものとなります。

<hgroup>要素。

  • この項目は、訂正版で全面的に訂正されております。

<hgroup>要素の内容モデルは、以下のようになります。

  1. 一個以上の<h○>要素

<hgroup>要素は、見出しがあればその上位に厳然と存在するものとしており、従って開始タグ・終了タグとも省略が認められております。

尚、Pre-HTMLでは、<hgroup○>要素が定義されておりますが、これは<h○>要素が必須で、その後に<h6>要素までが順番に任意に記述出来るものとしております。

例えば、<hgroup2>要素なら、<h2>要素が必須で、そのあと必要に応じて<h3>要素, <h4>要素, …<h6>要素の順に記述が可能になります。

<section>要素。

<section>要素の内容モデルは、以下のようになります。

  1. <header>要素
  2. <hgroup>要素
  3. 任意の個数のブロックレヴェル要素
  4. 零個以上の下位<section>要素
  5. <footer>要素

<section>要素は、やはり存在が暗示されるものであり、従って開始タグ・終了タグとも省略が認められております。

尚、Pre-HTMLでは、<section○>要素が定義されておりますが、これは<hgroup>要素の代わりに<hgroup○>要素、<section>要素の代わりに<section△>(△は○に 1加えた数)となります。但し、<section6>要素には下位の<section7>要素は入れられません。

例えば、<section2>要素なら、

  1. <header>要素
  2. <hgroup2>要素
  3. 任意の個数のブロックレヴェル要素
  4. 零個以上の<section3>要素
  5. <footer>要素

となります。

<header>要素の内容モデルは、零個以上のブロックレヴェル要素となります。

見出しより前には必ず存在しているものとしており、従って開始・終了タグとも省略が可能です。

逆に、見出しより前の要素は全て<header>要素とする事となります。

<footer>要素の内容モデルは、零個以上のブロックレヴェル要素となります。

下位セクションより後に必ず存在しているものとしており、従って開始・終了タグとも省略が可能です。

逆に、下位セクションより後ろの要素は全て<footer>要素とする事となります。

<aside>要素。

<aside>要素本文と関連の薄い記述のブロックと定義され、ブロックレヴェル要素とされます。

内容モデル及び属性リストは以下のようになります。

<!ELEMENT ASIDE         - -  (%block;)+ >
<!ATTLIST ASIDE 
    %core;                         -- Element CLASS, ID and TITLE --
    %i18n;                         -- Internationalization DIR and LANG -->

つまり、<aside>要素の内容モデルとしては、

  1. 一個以上のブロックレヴェル要素

となりますが、HTML 5と違って見出しなどは入れられません。

尚、<aside>要素は開始・終了タグとも必須です。

<nav>要素ナヴィゲーションリンクのブロックと定義され、ブロックレヴェル要素とされます。

内容モデル及び属性リストは以下のようになります。

<!ELEMENT NAV         - -  (%block;)+ >
<!ATTLIST NAV 
    %core;                         -- Element CLASS, ID and TITLE --
    %i18n;                         -- Internationalization DIR and LANG -->

つまり、<nav>要素の内容モデルとしては、

  1. 一個以上のブロックレヴェル要素

となりますが、HTML 5と違って見出しなどは入れられません。

尚、<nav>要素は開始・終了タグとも必須です。

<figure>要素。

<figure>要素画像など本文に含まれないコンテンツのブロックと定義され、ブロックレヴェル要素とされます。

内容モデル及び属性リストは以下のようになります。

<!ELEMENT FIGURE      - -  ((FIGCAPTION, (%block;|%text;)+)|((%block;|%text;)+, FIGCAPTION?)) >
<!ATTLIST FIGURE 
    %core;                         -- Element CLASS, ID and TITLE --
    %i18n;                         -- Internationalization DIR and LANG -->

<!ELEMENT FIGCAPTION  - -  (%text;)+ >
<!ATTLIST FIGCAPTION 
    %core;                         -- Element CLASS, ID and TITLE --
    %i18n;                         -- Internationalization DIR and LANG -->
  • DTDでの<figure>要素の内容モデルと属性リストの記述はここまで

つまり、<figure>要素の内容モデルとしては、

のいずれかとなります。

勿論、HTML 5と違って見出しなどは入れられません。

尚、<figcaption>要素は開始・終了タグとも必須です。

<mark>要素。

<mark>要素はHTML 5から導入されるインライン要素で、目立たせたテキストです。

内容モデル及び属性リストは、<dfn>要素を除く他の一般論理インライン要素に準じます。

<ruby>要素。

<ruby>要素はHTML 5から導入されるインライン要素で、ルビつきのテキストです。

XHTMLでも定義がありますが、HTML 5での定義はそれとは異なったものとなっております。

新仕様では、HTML 5に準じる事としているため、以下のような内容モデルとなります。

<!ENTITY % ruby.content "#PCDATA | %physical.styles; | %logical.styles; | %special;" >
<!ELEMENT RUBY        - -  (%ruby.content, (RT | (RP, RT, RP)))+ >
<!ATTLIST RUBY
    %core;                         -- Element CLASS, ID and TITLE --
    %i18n;                         -- Internationalization DIR and LANG -->

<!ELEMENT RT          - -  (%ruby.content)+ >
<!ATTLIST RT
    %core;                         -- Element CLASS, ID and TITLE --
    %i18n;                         -- Internationalization DIR and LANG -->

<!ELEMENT RP          - -  (%ruby.content)+ >
<!ATTLIST RP
    %core;                         -- Element CLASS, ID and TITLE --
    %i18n;                         -- Internationalization DIR and LANG -->
  • DTDでの<ruby>要素の内容モデルと属性リストの記述はここまで

ここで、%ruby.content と言う実体を宣言しているのは、通常のインライン要素と違い、<ruby>要素の入れ子を禁じているからです。

  • 平成22年 3月 2日現在のHTML 5の仕様案には入れ子を禁じる記述はありませんが、現実問題として対応すべきでしょう。

このため、通常のインライン要素の定義(実体 %text)ではテキストでも物理要素でも論理要素でも特殊インライン要素でもないものとして、別に加えております。

<dfn>要素。

<dfn>要素はHTML 5に合わせるため、以下のように内容モデルを変更します。

<!ELEMENT DFN           - -  (%text;)* -(DFN) >

つまり、HTML 5同様、内容として<dfn>要素を入れられないものとします。

  • そもそも、定義語に定義語が含まれると言うのも余りありません。

この影響で、一般のインライン要素の内容モデル定義も、

<!ELEMENT (%logical.styles|%physical.styles;)
                      - -  (%text;)+ >

から、

<!ELEMENT (%physical.styles;)
                      - -  (%text;)+ >
<!ELEMENT (ABBR|ACRONYM|CITE|CODE|EM|KBD|MARK|SAMP|STRONG|VAR)
                      - -  (%text;)+ >

へと変更します。

これは、%logical.styles には DFN も含まれているため除外しなければならないからです。

<tt>要素の扱い。

<acronym>要素の扱い。

HTML 5から削除される予定の<tt>要素及び<acronym>要素は、新仕様でも残りますが、これらはあくまでも既存文書との互換性を高めるための措置であり、新規文書作成の際には用いないよう求めるものとします(非推奨)。

<a>要素の扱い。

<a>要素について、取扱いが変更されます。

<a>要素の内容モデル。

HTML 5では、<a>要素の下位にインタラクティヴ内容要素を入れてはいけない事としております。

但し、該当する要素であっても、条件に依りインタラクティヴ内容とならない場合があります。

加えて、新仕様でもHTML 5での内容の概念(インタラクティヴ内容など)を導入しない事とするため、インタラクティヴ内容要素に該当するもので例外が少ないものを<a>要素の下位に入れられないものとします。

その結果、以下のように内容モデルが変更されます。

<!ELEMENT A           - -  (%text;)* -(A|BUTTON|INPUT|LABEL|SELECT|TEXTAREA) >

尚、HTML 5ではインタラクティヴ内容要素でない限り、従来のブロックレヴェル要素となる内容を入れる事も許されておりますが、ISO/IECでは依然それは認めません。

<a>要素の属性の扱い。

<a>要素のname属性はHTML 5から削除されるものの、文法エラーとしないと言う扱いです。

かねてよりISO及びIECもname属性はid属性に置き換えるべきとの見解を持っているため、新仕様でもこの考えに従うものとします。

つまり、あくまでも<a>要素のname属性は既存文書との互換性を高めるための措置として残すものの、新規文書作成の際には用いないよう求めるものとします(非推奨)。

また、rev属性及びcharset属性もHTML 5から削除されるため、同様の措置を執ります。

  • rev属性は<link>要素にも定義されておりますが、こちらも同様の扱いとします。

<table>要素のsummary属性の扱い。

<table>要素のsummary属性はHTML 5から削除されるものの、文法エラーとしないと言う扱いです。

しかし、ISO及びIECはかねてから<table>要素にsummary属性を必須としており、このため、新仕様でも必須属性となります。

  • WHATWGはsummary属性が機能しない事を批判しておりますが、それは機能するようにしないのが悪いと判断してもいます。

<object>要素の属性の扱い。

  • この節は私情で書いたものです。

<object>要素について、HTML 5ではJAVA関係の属性が一部削除され、またdata属性かtype属性のいずれかを必須としております。

制作者は、これは無属性の<object>要素を<p>要素などにブロックレヴェル要素を押し込むために用いると言う、本来の定義に反した(よこしま)な使い方を封じるための措置と判断しております。

  • 但し、内容モデルでも透明な内容、すなわち開始・終了タグ及び<param>要素を取り払っても文法違反とならない内容としており、この点でも邪な使い方を禁じるようにしております。

これを受けて、新仕様でもそのような邪な使い方を禁じるべく、data属性とtype属性を必須とします。

これに依り、DTDは以下のように変更されます。

<!ATTLIST OBJECT
    %core;                         -- Element CLASS, ID and TITLE --
    %i18n;                         -- Internationalization DIR and LANG --
    DATA       %URI;     #REQUIRED -- Reference to objects data --
    NAME       CDATA      #IMPLIED -- Submit as part of form --
    TABINDEX   NUMBER     #IMPLIED -- Position in tabbing order --
    TYPE       CDATA     #REQUIRED -- Internet content type for data --
    USEMAP     %URI;      #IMPLIED -- Reference to image map -->
  • DTDでの<object>要素の変更された属性リストはここまで

実は、<p>要素などの内容モデルからブロックレヴェル要素を子孫に持たせないようにする(<!ELEMENT>宣言の後ろに -(%block;) を付け足す)事も考えたのですが、そうすると本来の使い方に即した使い方も出来なくなる恐れがあったのでそのようにはしませんでした。

  • 但し、実際にブロックレヴェル要素を内容に持つ<object>要素を<p>要素などに与えると、HTML 5では文法違反となります。

まとめ。

今回は、ISO/IEC 15445:2000との上位互換性を最大限に維持する事に主眼を置いて書いてみました。

もちろん、ISOやIECがHTML規格の見直しを行う事としたら、「HTML 5との互換性を追及すべき」と言う意見が出るかも知れませんが、HTML 5の規格化に於ける思想にISOやIECの思想と相容れない面があるのは否めません。

その結果、HTML 5で新たに導入される予定の要素のうち、新仕様に導入されるものはそれ程多くはならないと思われます。

今回、<article>要素や<section>要素はマークアップ不要としたのは、以下の二つの理由に依ります。

制作者としては、後者の方がより重要ではないかと思っております。