Another HTML-lint 5
Another HTML-lint 5

慶應義塾大学内のサイトはW3Cをミラーしているわけではないそうです。

結果の解説に、どうしてもブロックレベル要素とインライン要素の話が出て来てしまう。ここら辺は、なるべくうやむやに、しかし間違いではないように、妙な気を使って書いていましたが、だんだんとそうもいかなくなってきました。これらを解説しようとすると、どうしたってHTMLの基礎を解説することになっちまって、かなりの馬力が必要です。困ったな。他にいくらでも優秀なサイトがあるので、そっちを見てもらうことにしよう。

UTF-8

Jcode.pmを使ってUTF-8をハンドリングしています。いくらか制約があります。

  • 0.57より前の版では、文書から自動的にそれがUTF-8であるかどうかを判定できません。したがって、CHARSETなどによって明示的にUTF-8と指定された場合のみUTF-8として評価します。
  • 変換できない文字は、\xa2\xf7 のように変換されます。
  • 0.40より前の版では、JIS第一、第二水準以外にマップされる文字などは、正しく表示されないかも知れません。特に、ASCII文字中の \ (0x5C)、~ (0x7E) も該当します。

(1999/07/15)

XHTML™ 2.0

XHTML™ 2.0 のドラフトが出ています。DTDが見つからないので対応できません。 (2002/08/08)

XHTML™ 1.1

XHTML™ 1.1が勧告された (2001/05/31)。

XHTML™ 1.1は勧告案 (2001/04)、Modularization of XHTML™は、勧告された (2001/02/22)。

XHTML™ 1.1は、まだドラフトである(2000/03)。次のような特徴があります。

  • HTML4のTransitionalやFramesetな要素が排除された。
  • <a> などの name 属性が廃止された。
  • DTDで、要素がモジュール化され、見通しがよくなり、カスタマイズが容易になった。
  • ルビ(内田明訳)モジュールが含まれている。

(2000/03/27)

XHTML™ Basic

XHTML™ Basicは、2000/12/19 に勧告されました。

XHTML™ BasicというXHTML1.1のサブセットもある。これは、携帯電話やPDAなどの小型情報機器向けの仕様になっていて、イメージ、フォーム、基本的なテーブルなどが含まれています。
規則ファイル作成にあたっては、xhtml-framework-1.mod 内の xhtml-arch.module を IGNORE にしました。

(2000/03/27)

XHTML™ 1.0

XHTML™ 1.0 (Second Edition) が勧告されていました。
<base href> が #REQUIRED になってめでたしめでたし。 (2002/08/08)

XHTML™ 1.0HTML4をベースにしたXMLで、HTMLとしての上っ面だけ見ると次のような特徴があります。

  • 要素名や属性名は小文字で書かなければならない。大文字はだめ。
    <a href="http://k16.org/">
    ×<A HREF="http://k16.org/">
  • 開始タグや終了タグの省略はできない。
    <p>ほにゃらら</p><p>ぴー</p>
    ×<p>ほにゃらら<p>ぴー
  • 属性値はすべて引用符で囲まなければならない。
    <ol start="5">
    ×<ol start=5>
  • 属性名の省略はできない。(属性値の省略ではありません)
    <dl compact="compact">
    ×<dl compact>
  • 空要素タグは /> で終わらせる。(/> の前には空白を空けるよう薦められています)
    実はすべての要素には終了タグがあるので、/> で終わらせるのは、単なる短縮形です。非空要素タグを短縮形で書くことは禁止されています。
    <img src="panda.jpg" alt="panda" />
    <img src="panda.jpg" alt="panda"></img>
    <img src="panda.jpg" alt="panda"/>
    ×<img src="panda.jpg" alt="panda">
    ×<td />
  • SCRIPTやSTYLEの内容がCDATAではなく#PCDATAとなりました。
    これは非常に大きな違いで、CDATAを直接記述するためには内容をコメントで囲めばいいわけではなく、マーク区間を利用します。ただし、CDATAマーク区間中に ]]> を記述することはできません。CDATA以外のマーク区間では、<& も記述することはできません。つまり、]]> を含むスクリプトやスタイルシートの記述を直接HTML中に埋め込むことはできませんし、-- などを含ませることも薦められていません。そのようなときは外部にスクリプトやスタイルシートを用意しなければなりません。
    <script>
    <![CDATA[
    ... if (var > 100) ...
    ]]>
    </script>
    <script>
    <!--
    ... if (var &gt; 100) ...
    //-->
    </script>
    ×<script>
    <!--
    ... if (var > 100) ...
    //-->
    </script>
    ×<script>
    <![CDATA[
    <!--
    ... if (var &gt; 100) ...
    //-->
    ]]>
    </script>
    <script>
    <![CDATA[
    ... if (var < 100) ...
    ]]>
    </script>

と、ここまではチェックしています。この他にも、次のようなのがあります。

  • 属性値の先行後行する空白を捨て、連続空白をひとつの空白にする、というのは行なっています。
  • name 属性は使わずに id 属性を使うように、警告されます。
  • XML名前空間に関しては、対応できていません。
  • 除外要素に関してDTDからは読めずに、Appendix B. にあったりする。これは、XMLの制約による。
  • HTML4.01で追加された属性をDTDに追加しましたが、もしかしたら余計なお世話なのかも。
  • MIMEタイプの変更はありません。text/html のままです。text/xhtml ではありません。text/html ならばHTMLとして評価され、text/xml ならXMLとして評価されます。

(2000/02/08)

HTML4.01

HTML4.0は、HTML4.01 に改訂されました(1999/12/24)。これに伴って HTML4.0 は obsolete になっています。
それほど多くの改訂があるわけではありません。次の属性が追加されています。

  • <IMG NAME>
  • <FORM NAME>
  • <INPUT ISMAP>

あとはいくらかのDTDの修正などです。
仕様書本文にも、いろいろ修正がありますが、ちゃんとは目を通していません。(1999/09/12)

HTML4.0

HTML4.0では、親しまれている "URL"(Uniform Resource Locator) の代わりに、より広義の "URI"(Uniform Resource Identifier) を用いています。これらは、ちゃんと使い分けなければならないのですが、きちんとできてません。詳しくは Web Naming and Addressing Overview

HTML4.0の赤枠で囲まれている ILLEGAL EXAMPLE はすべて警告されるようにした、つもり。

HTML4.0 (Cougar) のDTDで、loose.dtd にあり strict.dtd にないタグのうち、以下を薦められないタグとしました。

  • <APPLET>
  • <CENTER>
  • <DIR>
  • <MENU>
  • <ISINDEX>

これら以外で、loose.dtd にあり strict.dtd にないタグで、フレーム関係以外のものは以下のとおりなんですが、これらは、スタイルシート(CSS1/CSS2)で行なえ、という主旨らしいです。これらも薦められないタグとしましたが、スタイルシートをサポートしていないWWWブラウザのためには使わざるを得ないような気もするんだけど、使っちゃいかんというのならそれはそれでよい。

  • <U>
  • <S>
  • <STRIKE>
  • <FONT>
  • <BASEFONT>

loose.dtd にあり strict.dtd にない属性は以下のとおりです。しかし、<OL START>などは、だめと言われてもCSS1には代替がないので、どうするつもりなんでしょ(CSS2にはある?)。

  • <BODY BACKGROUND BGCOLOR TEXT LINK VLINK ALINK>
  • <BR CLEAR>
  • <CAPTION ALIGN>
  • <DIV ALIGN>
  • <DL COMPACT>
  • <Hn ALIGN>
  • <HR ALIGN NOSHADE SIZE WIDTH>
  • <IMG ALIGN BORDER HSPACE VSPACE>
  • <INPUT ALIGN>
  • <LEGEND ALIGN>
  • <LI TYPE VALUE>
  • <OBJECT ALIGN BORDER HSPACE VSPACE>
  • <OL TYPE COMPACT START>
  • <P ALIGN>
  • <PRE WIDTH>
  • <TABLE ALIGN BGCOLOR>
  • <TD NOWRAP BGCOLOR WIDTH HEIGHT>
  • <TH NOWRAP BGCOLOR WIDTH HEIGHT>
  • <TR BGCOLOR>
  • <UL TYPE COMPACT>

<TD>、<TH>の要素を空にできないと、空のセルを作れないので、空にできるとみなしました。HTML4.0 11.4.2 には、実際にそのような例が出てきます。
<TABLE>、<TD>、<TH>のWIDTH属性が%Pixels;となっていますが、%指定できるように%Length;に変更しました。
loose.dtdでは、<BASE>のHREF属性が必須ではなくなりましたが、HREF属性とTARGET属性のどちらかが必要だとしました。
<SCRIPT>と<STYLE>にTYPE属性が必要となっています。値はContentTypeです。それぞれ、text/javascript とか text/css とか書いてください。
Mozillaにはあるが、<FORM>にNAME属性がない。SCRIPT書くのにちょっと困るかも知れない。しかし、NAME属性はID属性に取って代わられる方向のようだ。
<OBJECT ARCHIVE> は space separated archive list なのに、<APPLET ARCHIVE> は comma separated archive list なんだ。

HTML4.0では、16進の文字参照ができる。&#x6C34; みたいに。

HTML4.0では、IDやNAMEに "_" や ":" が使えると書いてある。つまり、SGML宣言の

LCNMCHAR ".-_:"
UCNMCHAR ".-_:"

の部分だ。SHORTTAG YES はデフォルトなので、HTML4.0では、属性値に "_" や ":" を含む文字列を与えるときに、引用符で囲まなくてもよいということになる。

HTML3.2

HTML3.2のDTDでは、<INPUT>などが<FORM>の外にも書けるようになっているが、HTML 3.2 Reference Specification では "INPUT, SELECT and TEXTAREA are only allowed within FORM elements." と書かれていて矛盾しています。これはおそらくDTDの方が正しい。HTML 4.0 Specification 17.2 Controls では、"The following control elements generally appear within a FORM element declaration. However, these elements may also appear outside of a FORM element declaration when they are used to build user interfaces." と<FORM>の外側に書けるようにした理由が書かれている。
Mozillaでは、<INPUT>などを<FORM>の外に書くと、そういう要素は無視されて表示されない。MSIEでは表示される。

HTML3.2 のDTDには、実体宣言に &quot; が欠落しています。これはW3Cも認めている誤りです。完全DTDベースの W3C HTML Validation Service ではエラーになりますが、補正してある Another HTML-lint 5 ではエラーになりません。

HTML3.0

HTML3.0 (Arena) は、すでに破棄されてしまった仕様です。このHTMLは仕様が大きく、ちょっと荷が重かったのですが、かなり手抜きをして何とか規則ファイルを作ることができました。
DTDの次のような記述は実装されていません。

  • SHORTREF/USEMAPによる短縮参照
  • NOTATIONによる記法宣言

短縮参照は、<MATH>タグなど用に宣言されていて、X2 みたいな表現を、X^2^ と書くだけで済まそう、とかいう代物で、他にもいろいろな短縮形が宣言されています。記法宣言は<STYLE>で行なわれています。

HTML+

HTML+ は、http://www.w3.org/MarkUp/HTMLPlus/htmlplus_1.html を基にしていましたが、最近になって、より新しい DTDの存在を知りました。 (2008/02/19)

DTDに次のような部分がある。

<!ENTITY mdash  SDATA "[ndash ]"--=em dash-->

"[ndash ]" は "[mdash ]" の誤りだろう。 また、

 <!DOCTYPE htmlplus [
<!ENTITY % HTML.tables "INCLUDE">
<!ENTITY % HTML.forms "INCLUDE">
]>

のようにして、拡張しろみたいなことが書かれていて、コアのDTDではTABLE等は使えなくなっている。

<!ENTITY % HTML.tables "IGNORE">
<!ENTITY % HTML.figures "IGNORE">
<!ENTITY % HTML.emph "IGNORE">
<!ENTITY % HTML.forms "IGNORE">

上記をINCLUDEして規則ファイルを作成してあります。

<!ENTITY % HTML.math "IGNORE">

HTML.mathはIGNOREのままです。 HTML.mathとHTML.figuresは背反していて、HTML.figuresをINCLUDEすると、HTML.mathの要素MATHがどこからも参照されなくなる。

<![ %HTML.figures [ <!ENTITY % text "#PCDATA|A|IMG|FIG|%emph;|%misc;"> ]]>
<!ENTITY % text "#PCDATA|A|IMG|%emph;|%misc; %math;">

HTML+は、HTML文書を<HTMLPLUS>~</HTMLPLUS>で囲むことになっていて、ちょっと異色だ。つまり、

<!DOCTYPE HTMLPLUS [ ~ ]>

となっている。
文字参照の定義をHTML1.0のDTDからコピーしたらしく、&amp;と&lt;に同じ間違いがある。&quot;などがあるように書いてあるけど、DTDには欠落している。

DTD中の次の部分

<!ELEMENT HTMLPLUS O O ((HEAD, BODY) | ((%setup;), (%main;)*))>
<!ELEMENT HEAD - - (%setup;) -- delimits document wide properties -->
<!ELEMENT BODY - - (%main;)* -- delimits the document's body -->

は次のように書き換えた。

<!ELEMENT HTMLPLUS O O (HEAD, BODY)>
<!ELEMENT HEAD O O (%setup;) -- delimits document wide properties -->
<!ELEMENT BODY O O (%main;)* -- delimits the document's body -->

これは、オリジナルと若干の意味の相違がある。つまり、オリジナルでは、HEADやBODYの開始タグを書いて終了タグを書かないなどということが禁止されている。
また、ADDRESSとBLOCKQUOTEが定義されているがどこからも参照されていない。

HTML2.0

HTML2.0は破棄されました。(RFC2854)

HTML2.0では、以下のようなDTDのヴァリエーションが書かれていますが、Another HTML-lint 5 では、DOCTYPEにどれを書いてもすべて同じ扱いです。

  • PUBLIC "-//IETF//DTD HTML//EN"
  • PUBLIC "-//IETF//DTD HTML 2.0//EN"
  • PUBLIC "-//IETF//DTD HTML Level 2//EN"
  • PUBLIC "-//IETF//DTD HTML 2.0 Level 2//EN"
  • PUBLIC "-//IETF//DTD HTML Level 1//EN"
  • PUBLIC "-//IETF//DTD HTML 2.0 Level 1//EN"
  • PUBLIC "-//IETF//DTD HTML Strict//EN"
  • PUBLIC "-//IETF//DTD HTML 2.0 Strict//EN"
  • PUBLIC "-//IETF//DTD HTML Strict Level 2//EN"
  • PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//EN"
  • PUBLIC "-//IETF//DTD HTML Strict Level 1//EN"
  • PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 1//EN"

HTML1.0

参考までに、HTML1.0のDTDも見てみました。実用的価値は皆無です。(1998/07/07)
DTDの以下の部分を修正しました。

<!ENTITY % bodyelement
"P | %heading |
%list | DL | HEADERS | ADDRESS | PRE | BLOCKQUOTE
| %literal">

HEADERS というのがどこにも出て来ないので削除した。

<!ENTITY amp "&amp;" -- ampersand -->
<!ENTITY lt "&lt;" -- less than -->

は、それぞれ、"&#38;""&#60;" とした。

よく見ると、HTML1.0でも<PRE>内に<IMG>は書けない。Laura Lemay女史は、何を参考にしたのだろうか。HTML+では<PRE>内に<IMG>が書けるのだが、こういう都合のいいところだけ先取りしていたのだろうか。

Mozilla

HTML Tag Reference (1998/01/26)には記述がないが、<TABLE BACKGROUND> が有効なようだ。<TD>、<TH>なども。いつから有効は、例えば http://www.blooberry.com/indexdot/html/supportkey/t.htm に記述がある。(2000/01/22)

1998/04/24版のHTML4.0の 3 On SGML and HTML を MacのMozilla(4.05/PPC)で開こうとするとMozillaが死ぬ。死なないようにするには、スタイルシートを無効にするか、41行目の <dfn> を削除すればいい(</dfn>も)。

Navigator/Communicator(Mozilla)のDTDは存在しないらしいので、HTML2.0/HTML3.2のDTDをベースに、Netscape社の HTML Tag Reference (1998/01/26)を参考にして捏造しました。その際、リファレンスの納得のいかない記述は曲解しました。それらや疑問点は以下のとおりです。また、リファレンスはDTDに比べて正確さが格段に落ちるため、DTD化にあたってはHTML2.0/HTML3.2を踏襲しています。これらにない部分は、HTML4.0を参考にしています。

  • <LINK>はMozilla4.0からサポートされたが、どうもリファレンスがうそ臭い。REV属性がないようだが、補っておこう。また、HREF属性ではなくSRC属性であるが、実際にはHREFで動作する。HTML4.0を考慮してHREF属性も追加しておこう。
  • <DT>、<DD>が空要素タグとされている。しかし、<DL>中にこれらだけが許されるようにするには、空要素タグではDTDで表現するのがとても面倒だ。終了タグ省略可能にした。
  • <PLAINTEXT>が空要素タグだが、HTMLは</HTML>で終了する都合上終了タグ省略可能とした。
  • <AREA>にALT属性がないが補っておこう。
  • <FORM>の各コントロールは<FORM>の外に出せない。その代わりACTION属性が必須ではないようだ。
  • <INPUT>のTYPE属性は省略可能か。記述がみつからない。HTML3.2は省略可能でTEXTが既定値となっている。実際にはMozillaもそのように動作する。
  • リファレンスにはないが、<INPUT>にWIDTH、HEIGHT、BORDERなどが書けて、ちゃんと評価される
  • 同様に、<IMG NOSAVE>というのが存在する
  • <EMBED>にUNIT属性が追加されているが、新しく追加されたようなことは書いていない。
  • <OBJECT>が追加されている。空要素タグになっているが、HTML4.0ではそうでないし、解説中にも許される要素の説明や、</OBJECT>が出てくるので、終了タグを補った。
  • <LAYER>にはCLASS属性が含まれていない。しかし、Dynamic HTMLの方のサンプルにはしっかりと使われている。これはきっとSTYLE属性とかも書けるに違いない。
  • <HYPE>という秘密のタグが存在する。

ソースが公開されているのだから、その気になればこういったことの実装を確認できるんだけれど、あまりやる気がないなぁ。

Netscape社の作ったものじゃないですが、MozillaのDTDがWebTechsのサイトにあることを発見しました(1997/07/31)。しかし、古いし、あまりよくありませんでした。

MSIE5.0

MSIE5.0に対応したリファレンスがある。しかし、例によって内容は不正確だし矛盾だらけである。(1999/07/29)
きわめてお粗末な DynamicHTML のプログラミングのために、自社製品のIE5上でもランタイムエラーが頻発する。しかも、ダイナミックに変更されたものがすべて表示されているかというと、ちょん切れていたりするから始末が悪い。つまり、Members/Attributes に全属性が表示されている保証はない。再読込みしたり、All を選んだりと試行錯誤が必要だ。まあ、どうせ信用性に乏しいので、たいした問題ではないとも言える。MSIE4.0のときの問題点は、ほとんど解決されていないと思ってよい(問題意識がないのだろう)。<SCRIPT>のコメントは直っているみたいだけど。

  • Syntax に出てくる属性と、Members に出てくる属性が、ほとんどのタグで一致しない。統一性もない。<SELECT> などめちゃくちゃだ(中身が空)。
  • Events がでたらめに見える。MSIE4.0にあったものが落ちていたり、同一カテゴリのタグで使用できる Event が異なっていたり。なるべく多くを包含するようにDTDは作ってあります。
  • The OL element is a block element and requires a closing tag. といっていながら Syntax には終了タグがなかったりする。だいたい closing tag なんてのは正しい用語か。
  • <BODY> の Members には onblur/onfocus/onload/onunload が含まれていないが、Remarks に window object のためなら使えるようなことが書いてある。どういう意味かよくわからんが、追加しておこう (IE4にも)。
  • <DL COMPACT=TRUE> みたいに、こういった属性は値に true/false を採ることができる。
  • <BODY BGPROPERTIES> は、値に FIXED と "" を採り得る。
  • <INPUT TYPE=PASSWORD VCARD_NAME="..."> 属性名に下線を使ってやがる。
  • The NEXTID element does not require a closing tag. とあるのに NEXTID というタグに関する解説はない。
  • <RUBY> は、W3Cのドラフトのサブセットのようにリファレンスからは読めるが、実験してみるとそのドラフト(著者はMSの方)の仕様をすべて満たしているようで、ちゃんと<RP>も解釈できている。つまり、
    <RUBY>日本語<RP>(<RT>にほんご<RP>)</RUBY>
    と書ける。ということは、<RB>も存在するということだが、<RB>は開始終了タグ共省略可能なので、本当にサポートしているのかを確かめるのは難しいんだけど。
    MSIE5なら次はちゃんとかっこの付いていないルビ付きで表示されるはずだ。そうでなければ、ルビがかっこ付きでふつうのテキストとして「日本語(にほんご)」とそのまま表示される。
    日本語(にほんご)
    この<RP>が解釈できることは、非ルビサポートのユーザエージェントのことを考えると、非常に重要だ。リファレンスに公開されていないのは単なるマヌケか。
  • custom Element なんてサポートできない。
  • <HTML XMLNS:namespace> は評価できない。<HTML XMLNS:Prefix1 XMLNS:Prefix2="www.microsoft.com"> なんてHTMLの文法じゃないじゃんか。いや、XMLNS:Prefix1 までで属性名とみなせなくもないか。なおさら評価できないや。
  • <XML> は、うさんくさいのでちょっと保留。

<HTML XMLNS:namespace> と <XML> を解釈するようにしたが、XML名前空間などをちゃんと評価はできない。(1999/10/31)

  • <XML>~</XML> 内には、任意の名前の要素を書けるようにした。ただし、すべてに終了タグが必要。
  • <HTML XMLNS:namespace> で宣言された namespace は、<STYLE> 内で要素名などの詳細を宣言されるが、そこまではチェックしていない。宣言された namespace を使った要素(custom Elemnt)は、インライン要素として評価される。

MSIE4.0

MSIE4.0では、</P>の直前に<BR>があると、</P>が無視されるように見える。Mac版だけか? さらに、VScriptをサポートしてないって出るぞ。自分とこのページにわんさと使ってるのにいいのか?

MSIE4.0のリファレンスが公開されているのだが、ひどいねこりゃ。ダウンロードイメージがないので、あとでゆっくりというわけにいかないことからしてけしからんのだが、目次に挙がっているのと内容が一致しない、ナヴィゲーションが正しくない、ただ並べてあるだけで意味を理解させようとしているとは思えない(多くの属性の意味不明だ)、記述の正確さは微塵もない、HTMLソースはぐちゃぐちゃ(ど素人が書いたとしか思えん、FrontPageかも)。タグリファレンスのMembersって何だ? MSIE3.0と上位互換性がない。(1998/07/04)

  • 専用のDOCTYPEがあってしかるべきなのに、HTML3.2やHTML4.0の例示があるのはどういうつもりなのか。
  • 今に始まったことじゃないけど、要素限定の記述があいまいだ。というか皆無に近い。HTML4.0を参考にしようにも、ちと無理があるか。
  • 今に始まったことじゃないけど、終了タグがあるのかないのかあいまいだ。
  • 取り得るイベント属性が同じようなタグでも異なっていると、どうも信用できない。
  • Deprecatedな要素がほとんどない。MSIE3.0なんかの流れから、CENTER、COMMENT、EMBED、LISTING、PLAINTEXT、XMPくらいはDeprecatedにしちゃおう。ISINDEXはHTML4.0でdeprecatedだとわざわざ書いてあるからこれも。XMPは no longer recommended て書いてある。
  • ほぼすべてのタグに共通する属性に、CLASS、ID、TITLE、LANG、LANGUAGE、STYLEがあるんだけど、ちょっとづつ違うタグがある。あえてそうしているのかどうか判断が難しい。例えば、<BASEFONT>には、CLASS、ID、LANG属性だけが、<BGSOUND>には、CLASS、ID、LANG、TITLE属性だけが、<COMMENT>には、ID、LANG、TITLE属性だけがあって、他と違う。
  • <BR LANG>がないけど、面倒なので補っておこう。イベントも書いてないけど、Membersにはある。
  • <WBR LANG>がないけど、面倒なので補っておこう。また、これは空要素タグにした。
  • <ISINDEX>は空要素タグだろうよ。<ISINDEX TITLE>がないけど、面倒なので補っておこう。イベント属性があるように書いてあるけど、Membersにはないぞ。
  • <MAP LANGUAGE>がないけど、面倒なので補っておこう。
  • DATAFLD属性、DATASRC属性って何? 属性の値は何?
  • <DT>、<DD>、<LI>、<PLAINTEXT>が空要素タグだけど、それだと要素限定がうまくできないので、終了タグ省略可能にした。
  • <PLAINTEXT>なんて<FRAMESET>と共存するとは思えないけど、DTDが複雑になるのでいつでも書けるとした。
  • <INS>のイベント属性が書いてない。<DEL>と同じにした。
  • <MENU LANGUAGE>がない。<DIR>にはある。補っておこう。
  • <FRAMESET>に書いてあるイベント属性は<FRAME>のものだろう。
  • <HTMLAREA>って何? <TEXTAREA>と似て非なるもののようだな。でも使えるイベント属性は違うんだ。他の属性は同一なのに。ちゃんと考えて違えてるのかな。
  • <A URN>って何? HTML2.0のときにあったやつなんだけど、どうして突然復活するわけ? しかも<A>にだけ。ちなみに、URNてのは Universal Resource Number。
  • <A>のRELとREVの値がSTYLESHEETだけだ。
  • <LINK>のRELとREVの値がSTYLESHEETだけってのは嘘でしょう。と思ったら、何を指定してもSTYLESHEETだとみなして、揚げ句に「そんなスタイルシートはインストールされていない」とエラーが出たりするようです。HTML4.0なんかはなから眼中にないようで、これはちょっとひどいね。
  • <LINK>にはイベント属性がないようで、あるようだ。
  • <NEXTID>の中身がない。だいたいどうしてこんなのが出てくるわけ? HTML2.0にはあるけど、最近のHTMLにはないよ(MSIE3.0にもないけど3.0βにはあるな)。この要素はDTDに含めない。でも、しっかり対応イベントなんか書かれてるんだよな。つくづく何考えてるのかわからんな。
  • <PARAM>は空要素タグとした。
  • <SCRIPT>とか<STYLE>とかにはMembersにイベント属性がある。
  • リファレンスのソースを見れば一目瞭然だけど、ことごとく
    <SCRIPT>
    //<!--
    ...
    // -->
    </SCRIPT>
    という風に書いてある。相当マヌケだ。

MSIE4.0 DTD

MSIE3.0

MSIE3.0のリファレンス(注:デッドリンクです)に対する代表的な疑問点を挙げておきます。これらに対する規則ファイルの修正は、明記されていない場合は行なっていません。ちなみに、このリファレンスはものすごく雑です。漏れや矛盾がぼろぼろあります。"Last Updated: October 24, 1996" なんてことでは、このリファレンスも信頼に足るものではないかも知れません(ベータ版DTDよりも古い!)。

  • HTML3.2のDOCTYPEを用いるように書かれている。しかし、中身は独自拡張を含んだり、HTML3.2とは異なる記述が多くあり、HTML3.2は大嘘の宣言だ。
  • 要素の入れ子に関する記述がない。
  • 開始タグや終了タグの省略可能性がわからない。
  • 見出しに終了タグがないのに、例示に終了タグがあったりすると、どっちが正しいかわからない。
  • <FONT SIZE=+4>とか<BODY BGCOLOR=#FFFF>とか間違った記述がある。
  • <DD>、<DT>、<LI>が空要素タグ。これは、このリファレンス作成者があまりにも無知ゆえだろうから、終了タグ省略可能とした。
  • <EMBED>には、任意の属性が指定できるようだが、そんなのはDTDでは表現できない。
  • <IMG ISMAP=image>とは何か。
  • <TD ALIGN>の既定値がCENTERとなっているが本当か。
  • <UL TYPE>がない。
  • 色名はHTML標準の16色しか示されていないが、Mozillaの色も補った。
  • Deprecatedであろうタグはベータ版DTDと同じにした。

MSIE3.0のスタイルシート対応はめちゃくちゃです。font-size:2em の em を解釈しないので、この場合 2pt または 2px で表示されるようです。この、Another HTML-lint 5 のHTMLは、見出し部などにこのような指定があるため、MSIE3.0ではうまく表示できません。スタイルシートを無効にすればちゃんと表示されます。

MSIE3.0 DTD

MSIE3.0β

MSIE3.0はベータ版DTDが公開されています。このDTDには独自のDOCTYPEなどもちゃんと定義されているのですが、内容が古く、現在のMicrosoftのサイトで公開されているリファレンスとは大きく食い違っています。
公開されているベータ版DTDは、著者自らがいくつものバグやおかしな記述があることを述べています。以下はこのDTDを利用するにあたってのいくつかの疑問点です。これらに対する規則ファイルの修正は、明記されていない場合は行なっていません。

  • <NOBR>が空要素タグである。したがって</NOBR>はない。
  • <EMBED>は空要素タグではない。要素はどういう意味を持つのか。
  • <NOEMBED>が <!ELEMENT NOEMBED - - EMPTY> と定義されている。これは、開始終了タグ共に必要だが要素に何も書けないという意味だ。⇒ これは正しくは、終了タグも書けないという意味だそうです(2003/02/16)。
  • <SCRIPT>は <!ELEMENT SCRIPT - - (#PCDATA)* -(%head.misc)> と定義されている。#PCDATAというのは普通のテキストだが、< や & などは実体参照を用いて書かなくちゃならないし、コメントも <!-- ~ --> を解釈する。一般のどういう文法かわからないスクリプト言語を書かせるのにこれでは不自由である。CDATAに変更しました。
  • <SPAN>がstrictじゃないと、なくなってしまう。補いました。

Strict版と非Strict版の両方用意されていますが、Strict版の方は採用しませんでした。

上がすでにデッドリンクなので → MSIE3.0β DTD

WebExplorer

IBM WebExplorer 1.1 は、最近更新されているのかいないのかわからないけど、どうやら見捨てられてしまっているらしい。資料がほとんどないので、サポートしているタグに何があるのかよくわからない。独特な<ANIMATE>などのタグを解釈するようにはしてみたものの、いまいちです。HTML2.0ベースらしいんだけど、それほど互換性があるようにも見えないしなぁ。今更、こんなのやったってしょうがないといえば、そのとおりです。

WebExplorer1.1 DTD

NCALS HTML2.0

DTD for NCALS HTML2.0。なんか昔とDTDがちょっと違うみたいな気がする。(2002/04/17)

DTD for NCALS HTML2.0 というのがあります。しかし、このDTDは相当おかしな代物です。

  • <- ~ -> というコメントらしい記述がある。<!- というのもある。
  • かっこや引用符の閉じ忘れはざら。
  • 未定義のパラメタ参照がむちゃくちゃたくさんある。

こんなのを信じろというのが無理な話です。

ISO/IEC 15445

ISO/IEC 15445:2000 が改訂されている。FORMに関する改訂など、いろいろと手が加えられているが、DOCTYPEの変更はない。この変更に伴って、1999版DOCTYPEは受け付けなくした。(2001/03/20)

DTD中には、<!ENTITY % Preparation "IGNORE"> という制御用のパラメタが定義されている。これは最終的なHTMLとしてはIGNOREとなるべきものだが、準備段階の文書に対してINCLUDEとして適用すると、<H1><H6> の出現に関して厳密な構造を要求されるようになる。つまり、<H1> の次に <H3> が現れてはならない。<H1> を独立トップページにして、その下位の(複数の) <H2> を別のページに独立させることはできない。

この Preparation に対するDOCTYPEは特に用意されていないが、

<!DOCTYPE Pre-HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">

などとして Preparation に対応させた。HTMLは <Pre-HTML></Pre-HTML> で囲まれる。

ISO/IEC 15445:2000 は、1999からDTDの変更はない。この ISO/IEC 15445:2000 を翻訳したものが 日本工業規格 JIS X 4156:2000 となっている。(2000/11/28)

ISO/IEC 15445、いわゆる ISO-HTML はまだ策定作業中です。作業中であるが、せっかく公開されていることでもあり、そこにあるDTDを組み込んでみました。HTML4.0 にあって 15445 にないパラメタ参照、例えば

<!ENTITY % Charset "CDATA">
<!ENTITY % LanguageCode "NAME">

などを補って、DTDに多少手を加えました。(1999/05/01)

HTML4.0 Mobile

HTML 4.0 Guidelines for Mobile Access (1999/03/15版) は、モバイル用コンテンツ作成者に向けたアクセス性などに関する注意書きなどをまとめたものです。この文書自体、単なるガイドラインに過ぎず、含まれるDTDは参考程度のものでしかない。が、せっかくDTDがあるので、組み込んでみた。このDTDは HTML4.0 Strict のサブセットであり、ISO/IEC 15445 のサブセットでもあるから、DOCTYPEにそれらを用いたとしても間違いではない。(1999/05/01)

Compact HTML

W3Cに Compact HTML というノートがあり、ここにはDTDもある。タグリストの Elements に !- とか !DOCTYPE とか &xxx; とかが並んでるが、これらは Element じゃない。(1999/05/01)

  • タグリストにある !- はなんだろう。
  • <DFN><ISINDEX> は含まれないはずがDTDに中途半端に含まれている。削除した。
  • <META> がDTD中でどこからも参照されていない。<HEAD> の要素に含めた。また、属性に NAME と CONTENT がない。タグリストにもあるし、明らかに間違いだろうから、補った。
  • <SELECT> の文字数 4Kバイト、<TEXTAREA> の文字数 512バイトなどという制限が書いてあるが、チェックしていない。

→ わたしが加工した Compact HTML DTD

iモード

imode XHTML 1.1 になった。 いくつかの属性などが追加された。しかし、それらは iモードHTML5.0 に存在するものである。 DTDの所在は相変わらず不明。(2004/03/03)

HTMLは5.0になった。いくつか属性が追加された。(2003/04/09)

XHTML用という代物が公開された。(2003/02/10)

  • XHTMLであり、整形式であることを要求しているが、示されているPUBLICなDTDの所在は不明。どうやって整形式を書けというのだ (いや、整形式自体は書ける、というツッコミはなし)。
  • XHTML Mobile Profile をベースにしていると書かれているが、既存のiモード用の仕様との互換性をひどく意識したものとなっている。
  • 相変わらず、!-- が要素として解説されており、!DOCTYPE![CDATA[ も要素となった。仕様書の読者層がまったく不明だ。素人相手に意味不明なことを並べて煙に巻くのが目的か。
  • &XXX; も要素として解説されている。文字参照は、以前は &#0;~&#127; だったのに、XHTMLでは、わずかな 16進数の文字参照しか示されていない。10進では書けないってこと? これ以外は書けないってこと? この真意は不明。仕様書を尊重したいが、そんなめんどくさいチェックはしたくないのでしない。
  • 絵文字の参照方法が記述されていないようだ。仕様書を尊重して、絵文字は参照できなくなったと解釈するのが自然だろう。
  • XHTMLではbody要素に直接文字列を記述できないためdiv要素またはp要素を介在させる などとご丁寧な注意書きがある。そんなことはDTDを示してくれれば済む話だ。
  • 扱える文字セットはShiftJISまたはUTF-8、文書サイズ100Kバイト以内(イメージを含む)。
  • 対応表のcti属性がhrefとなっているのは誤りであろう。
  • CSSは、i-CSSなぞと称して、ほとんどを属性値として直接記述する。これは、XHTMLで廃止されている属性をすべて style="xxx" として代替しようという魂胆に過ぎない。
    <style> 要素には <![CDATA[ を用いた正しい記述が要求されるが、a:link などのほんのわずかなスタイルしか記述できない。しかも、i-CSSなのに type="text/css" だ。
    これらは、利用者の便宜を何も考えずに闇雲に格好だけXHTML化しただけの使いにくい仕様と言える。

存在しなければならないDTDがどこに存在するのかわからないので、捏造しなければならない。XHTML-MPをベースにするよりも、既存のiモード4.0用のものをベースにする方が楽だ。
styleの属性値は、タグによってけっこう細かく規定されているようだが、そんなチェックは行なわない。style属性の値はCDATAとする。

→ 捏造した iモード XHTML 1.0 DTD

iモード

imode XHTML 1.1 になった。 いくつかの属性などが追加された。しかし、それらは iモードHTML5.0 に存在するものである。 DTDの所在は相変わらず不明。(2004/03/03)

HTMLは5.0になった。いくつか属性が追加された。(2003/04/09)

XHTML用という代物が公開された。(2003/02/10)

  • XHTMLであり、整形式であることを要求しているが、示されているPUBLICなDTDの所在は不明。どうやって整形式を書けというのだ (いや、整形式自体は書ける、というツッコミはなし)。
  • XHTML Mobile Profile をベースにしていると書かれているが、既存のiモード用の仕様との互換性をひどく意識したものとなっている。
  • 相変わらず、!-- が要素として解説されており、!DOCTYPE![CDATA[ も要素となった。仕様書の読者層がまったく不明だ。素人相手に意味不明なことを並べて煙に巻くのが目的か。
  • &XXX; も要素として解説されている。文字参照は、以前は &#0;~&#127; だったのに、XHTMLでは、わずかな 16進数の文字参照しか示されていない。10進では書けないってこと? これ以外は書けないってこと? この真意は不明。仕様書を尊重したいが、そんなめんどくさいチェックはしたくないのでしない。
  • 絵文字の参照方法が記述されていないようだ。仕様書を尊重して、絵文字は参照できなくなったと解釈するのが自然だろう。
  • XHTMLではbody要素に直接文字列を記述できないためdiv要素またはp要素を介在させる などとご丁寧な注意書きがある。そんなことはDTDを示してくれれば済む話だ。
  • 扱える文字セットはShiftJISまたはUTF-8、文書サイズ100Kバイト以内(イメージを含む)。
  • 対応表のcti属性がhrefとなっているのは誤りであろう。
  • CSSは、i-CSSなぞと称して、ほとんどを属性値として直接記述する。これは、XHTMLで廃止されている属性をすべて style="xxx" として代替しようという魂胆に過ぎない。
    <style> 要素には <![CDATA[ を用いた正しい記述が要求されるが、a:link などのほんのわずかなスタイルしか記述できない。しかも、i-CSSなのに type="text/css" だ。
    これらは、利用者の便宜を何も考えずに闇雲に格好だけXHTML化しただけの使いにくい仕様と言える。

存在しなければならないDTDがどこに存在するのかわからないので、捏造しなければならない。XHTML-MPをベースにするよりも、既存のiモード4.0用のものをベースにする方が楽だ。
styleの属性値は、タグによってけっこう細かく規定されているようだが、そんなチェックは行なわない。style属性の値はCDATAとする。

→ 捏造した iモード XHTML 1.0 DTD

4.0になった。いくつか属性が追加された。(2002/06/19)

3.0になった。<OBJECT> と、<A> の属性が追加された。(2001/03/13)

  • <OPTION VALUE> の長さ制限がなくなった。
  • <A> の subject、body 属性の書式が
    <A href="mailto:メールアドレス"?subject="サブジェクト"&body="本文">
    となっている。どういう積りなのかわからん。引用符の位置を間違えているとも取れるが、属性てんだから属性なんだろう。(注: 2002/03/13現在は訂正されている)
  • <A KANA> の値は、属性名などから推察するに、半角カタカナのみのようだが、実際には英数字も登録できるようだ。
  • <A EMAIL> の値はURLではない。09012345678@docomo.ne.jp の電話番号部分など。いずれにしても @ の前の部分で、電話番号以外は英数字、ハイフン、ピリオド、下線が許される。
  • 「半角英数字」という属性値の制約が出てくる。これは字面どおりだとすると、空白やピリオドやハイフンなど記号類は含まないと読めるが、正解はどうなんだ。
  • さらに突っ込みを入れると、「目安として題面(subject)は30バイト、本文(body)は500バイトにしてください」てのがあって、30バイト以下とは書いていないわけだ(題面て何?)。
  • 2.0の改訂のときに見落としていたけど、CTIという属性が <CTI> として記述されている。MULTIPLE属性も <MULTIPLE> だ。

1.0 にあった一部の制限が、2.0のタグ一覧からは削除されている。また、</P> が明示されるようになったが、</LI> などは出てこない。(2000/05/26)

  • 「HTML2.0、3.2、4.0のサブセットです」と書いてあるが、言っていることが矛盾しているし、そういうような仕様でもない。
  • <INPUT TYPE=TEXT><INPUT TYPE=PASSWORD>SIZEMAXLENGTH の限界値の制限がなくなった。
  • <OPTION> の件数の制限がなくなった。
  • <TEXTAREA>COLSROWS の限界値の制限がなくなった。
  • <PLAINTEXT> が追加されている。HTML3.2の仕様とは異なる。どちらかというと、<XMP> のように振舞う。
  • 扱える文字コードは Shift JIS のみとなっているが、EUC でも表示されるようだ

iモードのHTML Versionが 2.0になっていた。(1999/12/05)
<BLINK> だとか <MARQUEE> だとか <FONT color> だとか、時流に逆らうような改訂であるが、利用者にはありがたいであろう。

NTT DoCoMo の iモードは、タグ一覧が公開されている。HTML3.2ベースと書いてあるが、ベースは明らかにW3Cにある Compact HTML である。iモードはこれをアレンジしたものである。サブセットではない。DTDは Compact HTML を元に作成した。(1999/04/09)

  • コメントが <! ~ > となっているが、これはあんまりじゃないのか。
  • 文字参照は &#127; までということになっているが、&copy; など、その範囲を超えた実体参照を使用できることになっていたり、さらに、数多く内蔵している絵文字は、&#63808; などととんでもなく大きな値に対応している。これから、&#65535; まで参照できるようにしておいた。imode端末文字一覧などが参考になります。
  • <Hn> の n は、1~6なんだろうな。
  • <HTML> の属性 VERSION で、HTMLバージョンを指定することができるようだ(DOCTYPEじゃないところがなんともいえないけど)。この属性値は何が指定できるのだろうか。2.0と3.2だろうか。これによってHTML解釈を制御しているのだろうか。
  • <A HREF="tel:0123456789"> とすれば電話がかけられる。HTML3.2にはない ACCESSKEY 属性をサポートしていて、これと組み合わせれば便利そうだ。
  • <A> の解説に、タグとして ACCESSKEY が出てくるが、それは明らかに間違い。
  • ACCESSKEY の値は、表紙とAタグの説明とでは指定できる文字に矛盾がある。
  • <BR CLEAR> という表現を許すために、<BR CLEAR=CLEAR> を属性値に追加した。
  • <HR> はヘアライン?? どっから持って来た訳だか。だいたいラインはLだろうが。レはレモンのレと言うのと同じだ。
  • <IMG> は2階調GIFのみをサポートしている。URLの存在をチェックするようにしていれば、GIFかどうかはチェックされるが、2階調かどうかはチェックできない。
  • CompactHTMLによって、<A> の要素に <IMG> が書けることになっているが、そのように実装されているか確認したい。
  • </P> が出てこない。他にも </DT></DD></LI> が出てこない。当然CompactHTMLにはある。
  • HTML3.2から追加したタグがあるように書かれているが、タグの追加はない。属性の追加はある。
  • 文字セットはShiftJIS、文書サイズ2Kバイト以内という制限がある。この2Kバイトにはイメージファイルのサイズも含まれている。URLの存在をチェックするようにしていれば、それもチェックされる。
  • いくつかの例を見ると、半角カタカナの使用を認めているようだ。

以下の制限はチェックしています。

  • 文字セットと文書サイズ。
  • ACCESSKEY の値。
  • <INPUT TYPE=TEXT><INPUT TYPE=PASSWORD> での SIZEMAXLENGTH の値。
  • <OPTION> の件数と、VALUE の長さ。
  • <TEXTAREA>COLSROWS の値。

iモードで利用できる絵文字は、すべて機種依存文字の領域ですが、iモードチェック時には除外しています(SJISでのチェック時のみ)。(1999/10/19)

「iモード」は NTT DoCoMo の登録商標

J-SkyWeb

「J-スカイサービス向けHTMLコンテンツ開発ガイド」という文書があり、そこには文字参照ができないことが明記されていました。

だいぶタグが追加されていた。また、ステーション対応とかいうよくわからん機種があって、それだと、通常のJ-Sky対応機種よりも扱えるタグが多い。(2000/10/19)

J-フォン東京株式会社のスカイウェブの情報サービスメニュー向けのHTMLが公開されている。独自拡張した属性が多くあり、MML(Mobile Markup Language)という言語をベースにしている。W3Cにあるものではない。
利用者はHTMLで文書を記述しサーバに置く。スカイウェブサービスセンターは要求のあったHTMLを取得し、MMLに変換して端末に送信する。利用者がMMLそのものを意識する必要はない。(2000/06/18)

  • 「エンコード形式 HTML4.0、3.2、2.0対応」というのはどういう意味か不明。どれでもMMLに変換しますよ、という意味か?
  • <P> は空要素タグのようだ。なんと!
  • <IMG> はPNGのみサポートしている。実際の表示はBMPに変換してから行なうようだが、そのときのサイズを32KBに収めろと言われても、利用者にそんなことはわかるまい。
  • <IMG>MOTION 属性は、アニメーションを実現するために同一タグ中にいくつも記述することができる。そんなのはSGMLじゃない!ってはじめからMMLって言ってるのか。
  • <A HREF="tel:0123456789"> とすれば電話がかけられる。
  • 文字セットはShiftJIS、文書サイズ6Kバイト以内という制限がある。この6Kバイトにはイメージファイルのサイズも含まれている。URLの存在をチェックするようにしていれば、それもチェックされる。
  • 半角カタカナが使えるのか使えないのか不明。<INPUT MODE> にはそのような選択肢はない。使えないことはないとは思うが?
  • 実体参照に関する記述がない。MMLにあるものは書けるのであろう。&#38; なんてのは書けるのだろうか。これに関してMMLには言及がない。書けなくする実装は面倒なので &#255; までは書けるようにしとこう。
  • <UL><OL> の入れ子は3階層まで、<LI> は99個まで、という制限がある。<LI> の制限は入れ子ごとに独立なのかどうかあいまい。入れ子も含めての制限と解釈した。

制限の多い SkyWeb には対応していません。

ドットi

東京電話アステルのドットiと称する独自のHTML仕様が公開されている。iモードと非常によく似ているが、ちょっと違う。(2000/10/26)

  • 「HTML2.0、3.2、4.0のサブセットです」と書いてあるが、言っていることが矛盾しているし、そういうような仕様でもない。どうも、iモードの仕様に書いてあるのをそのままコピーしたようにも見える。
  • 「コンテンツ記述言語はHTMLのサブセットを使用しています」とも書いてある。意味不明。
  • 「アステル絵文字が利用可能です」と書いてあるが、どういう風に利用するのか書いてない。
  • 色の指定に "White" とか書けるのかわからない。すべての例示に色名は出て来ない。
  • <A HREF> などのURLに指定できるスキームは http: mailto: tel: だけだと明記されている。

ドットi DTD

H"

DDIポケットの H" では、H"LINK対応機でHTMLの閲覧ができるそうである。(2002/04/09)

「オープンネットコンテンツ」では、専用に作成されたインターネット上のホームページをH"LINK(Pメー ルDX)対応端末を使って閲覧することができます。

とのことである。「オープンネットコンテンツ」とはなんぞや。仕様書によると、

DDIポケットが提供するセンターを利用して、freeH"/H"およびPメールDX対応PHSから、インターネット上のWWWサーバに置かれたDDIポケットのオープンネットコンテンツ用に作られたホームページへのアクセスを可能にするものです。

だそうだ。

通常のHTMLと共通のタグは、<BR>、<P>、<HR> のみで、ハイパーリンクなどは特殊な方法で指定する。

HDML

流行らないHDMLでは利用者が増えないと悟ったか、au は、XHTMLでのサーヴィスも始めた。一応、XHTML Basic と謳ってタグ一覧が公開されている。tu-ka にはXHTMLの記述はない。(2002/04/08)

この au のXHTMLをどのように扱うかは難しい。DTD不在のくせにもっともらしい宣言だけは用意されていて、あいまいなXHTMLもどきの仕様しかないから、たちが悪い。 仕様としては、HTML変換仕様の方が詳しいようだ。

  • XML宣言中に文字セットについて一般的なことが述べられているが、UTF-8など本当に解釈できるのか。すべてのサンプルは Shift_JIS となっている。
  • DOCTYPEはOPENWAVEのものだが、XHTML Mobile Profile とはシステム記述子が異なっている(しかも引用符で囲まれていない)。
  • このシステム記述子に示されたリソース http://www.openwave.com/DTD/xhtml-basic.dtd は存在しないので、XHTML-MPとどこが違うのかは不明。
  • もし、このリソースが存在しているとして、これには au 独自の <bgsound> とかが含まれているのであろうか。常識的に考えれば、xhtml-basic などという名称からはW3Cのそれを期待するわけで、妙な独自タグが含まれているとは思えないが、それではDOCTYPE詐称ということになってしまう。いや、存在しないこと自体が詐称だな。
  • タグ一覧は、「主要タグ」と形容されており、実際に使えるタグの一覧はない。一般的なタグは市販本を見よ と書いてあるので、XHTML(Basic?)で使えるすべてのタグをサポートしているようにも読めるが、HTML変換仕様にないタグは無視されるだけなのかも知れない。
  • XHTMLでは、以下のようなオーバー・ハングをしてはいけません ということは、XHTMLじゃなければしてもいいのか? オーバー・ハングというのはどこの用語?
  • <brと/>の間には半角スペースが必要です ということは、詰まっている場合はエラーにしなくちゃならないの? HTMLはXHTMLに限らずどこかの段階でHDMLに変換されるようで、それならこの制限も手抜き実装という意味で頷ける。半角スペースを空けなかったらどうなるのかも知りたい。
  • <marquee> とか <blink> とか <plaintext> とか <dir> とか <menu> とか、XHTML的には信じられないようなタグが存在している。これは、既存のHDMLを考慮してのことなのであろう。(と好意的に解釈する)
  • <a>タグ内に<img>タグ、<br>タグ等のインライン要素を挿入した場合には、同一リンク先であってもインライン要素ごとに複数リンクが生成されますのでご注意下さい ってどういうこと?
  • <img> にsrc属性は必須ではないようだ。localsrc、src、dataのいずれかがあればよいようにHTML変換仕様からは読める。data属性はXHTML-MPにはない。
  • <img>と<object>はほとんど等価なタグのようだ。
  • XHTML-MPにある wtai: スキームについて記述がないが、tel: というサンプルがある。
  • CSSも使えるようだが、CSSに関する記述はない(<style>タグは一覧にある)。いや、HTML変換仕様の中にちょこちょこ書いてあるな。
  • コンテンツの容量制限が、画像を含めず 9KBとなっている。

いろいろ読んでいくと、結局ベースにはHDMLがあるようで、それならそれでOPENWAVEのXHTMLとは相容れないんじゃないかと思えてくる。

EZwebなどで利用されている HDML(Handheld Device Markup Language)はHTMLではない。W3CにもDTDではなくBNFとして文法が示されている。だからSGMLでもない。

無理矢理DTDを作れば文法チェックできない話ではない。ただし、そのときでもデータ領域か、ファイル名の指定でのチェックとなる。HTTPでのアクセスはできない。

XHTML Mobile Profile

OPENWAVEが開発者向けに Extensible Hypertext Markup Language Mobile Profile (XHTML-MP) 1.0 の仕様を公開している。完全なDTDを取得できる。
XHTML-MPは、携帯電話やPDA、TVベースWebブラウザなど向けの仕様である。また、XHTML1.0 (HTML 4 の XML 版) の簡略版である XHTML Basic のスーパセットであり、CSSをサポートしている、と書いてあるが、XHTML Basic は XHTML1.1のサブセットであるから、のっけから間違っている。本当に XHTML Basic のスーパセットかは面倒なので確認していない。(2002/04/08)

  • XML宣言のことが書かれていないようだが、サンプルコードには XML1.0 宣言がある。
  • ドキュメントは、すべてのDTD要素を解説しているわけではないようだ。例えば、<body>の属性はDTD中の方が多い。
  • <a href>に wtai: というスキームがあり、電話がかけられる。
  • <brと/>の間を空けるようにとは書かれていない。それどころかすべてのサンプルコードは<br/>と詰まっている。
  • <a id="target"/> と書いてもいいのか? それだと <p/> とかもOKと考えられるが、W3Cの提唱に反している。
  • <address> の解説で、<p><address>~</address></p> と書いている。こいつら、自分とこのDTDもろくに読めないようだ。
  • <img src=""> が許される。おそらく、このときは <img src="" localsrc="moon1"> のように localsrc属性を期待するんだろうが、そうは書かれていない。

特許出願用HTML

特許庁では、HTML形式の書類によるパソコンでの特許の電子出願を受け付けています。ただし、専用のソフト(1998/12現在のバージョンは01.02b)を申請して取得しなければなりません。ソフト自体は無料です。また、パソコンはWindows95/NTのみを想定しているようですし、ISDN回線によるダイアルアップ接続のみをサポートしています。

ここで用いられる特許出願用HTMLはかなり異様なもので、SGMLとしての体裁を有していません。タグの少なさ以外に、特筆すべき性格として以下のようなものがあります。(*) 印の項目が例外扱いされて、チェックされたりされなかったりします。

  • <HTML>以前にいかなる文字も書くことができない。DOCTYPEも書けない。(*)
  • < とタグ名の間に空白を置くことを許している。
  • <IMG>は行頭から始まらなければならない。
  • <IMG>の後は行末まで空白以外の文字があってはならない。空白に全角空白が含まれるのかは明記されていない。
  • 文字セットはShiftJISを想定しているが、実際に利用できる文字は限定されている。(*)
  • Microsoft系の丸付き数字(ShiftJISコード0x8740~0x8748)の使用を認めている。(*)
  • 半角カタカナの使用を認めている。(*)

特許庁では、出願された文書を規定によって(HTMLではない文書に)再整形するわけですが、なぜ出願文書をこんなへんてこりんなHTMLにしたかは不明です。

特許出願用 DTD

RFC2368

RFC2368は、RFC1738で定められている mailto: URL の構文の拡張を定義したものです。ここでは、mailto: URL が次のように定義されています。


mailtoURL = "mailto:" [ to ] [ headers ]
to = #mailbox
headers = "?" header *( "&" header )
header = hname "=" hvalue
hname = *urlc
hvalue = *urlc

これに対していくつか疑問があります。ご存知の方は support@heartcore.co.jp までお教えくださるとありがたいです。(1999/08/03)

  • この構文はRFC1738から引用したように書かれていますが、RFC1738には urlc という構文要素は出てきません。RFC822にも出てきません(当然)。RFC2396uric のことでしょうか。そもそもRFC1738にこのような構文は書かれていません。話の流れから言うと、uric から ? = & を取り除いたもののようです。
  • 構文では hnamehvalue が共に空になり得るので、= だけのheader部が許されることになりますが、本当にそれでいいのでしょうか。

RFC2396

RFC2396は、RFC1738をその後の経緯を踏まえて、一般化したURI構文を規定するものです。ここに書かれている構文で、「おや?」と思ったことを挙げてみます。(1999/08/28)

  • URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
    URI-reference は空でもよいということだが、ちょっと扱いにくいので、
    URI-reference = (absoluteURI | relativeURI) ["#" fragment] | "#" fragment
    としておこう。
  • absoluteURI   = scheme ":" ( hier_part | opaque_part )
    opaque_part = uric_no_slash *uric
    一般URIとしてはいたしかたないのだが、opaque_part によって怪しげな文字列もマッチしてしまう。absoluteURI はあまり役に立たない。
    absoluteURI_hier = scheme ":" hier_part
    みたいなのを用意しておいた方がいいかも知れない。
  • abs_path      = "/"  path_segments
    path_segments = segment *( "/" segment )
    segment = *pchar *( ";" param )
    param = *pchar
    これによると、segment や param は空でよいので、path_segments も空でもよいということで、abs_path は "/" だけでもよいし、"/////////" のようなのでもよいということだ。segment は ";" だけでもOKなので、abs_path は "/;/;/;/;/;/;/" でもよいということだ。本当にそれでいいのか。
    abs_path      = "/" [ path_segments ]
    path_segments = segment *( "/" [ segment ] )
    segment = 1*pchar *( ";" param ) | 1*( ";" param )
    param = 1*pchar
    という風に解釈しておこう。
  • net_path      = "//" authority [ abs_path ]
    authority = server | reg_name
    server = [ [ userinfo "@" ] hostport ]
    userinfo = *( unreserved | escaped |
    ";" | ":" | "&" | "=" | "+" | "$" | "," )
    userinfo は空でもよいということだが、本当か。server も空でよいので、net_path が "//" だけでもよいということになる。本当か。
    net_path      = "//" ( authority [ abs_path ] | abs_path )
    authority = server | reg_name
    server = [ userinfo "@" ] hostport
    userinfo = 1*( unreserved | escaped |
    ";" | ":" | "&" | "=" | "+" | "$" | "," )
    という風に解釈しておこう。
  • IPv4address   = 1*digit "." 1*digit "." 1*digit "." 1*digit
    実際には 0~255 までしか許されないはずなので、次のようにした方がいいかも知れない。
    IPv4part      = [ "0" | "1" ] digit [ digit ] |
    "2" ( ( "0" | "1" | "2" | "3" | "4" ) digit |
    "5" ( "0" | "1" | "2" | "3" | "4" | "5" ) )
    IPv4address = IPv4part "." IPv4part "." IPv4part "." IPv4part
    また、0.0.0.0 は禁止されているので取り除く必要があるのだが、それは面倒。
  • query         = *uric
    fragment = *uric
    これはつまり、"http://www.uso800.ac.jp/hogehoge.cgi?" とか "http://www.uso800.ac.jp/hogehoge.html#" みたいに書いても問題なしということだ。