本文書は、「時の封土」制作にあたっての「技術的な側面」を述べております。実際のゲーム紹介にあたっては、下記のリンクを御覧くださいませ。
XML や XHTML, そして DOM といった技術は、 Flash や DHTML などといった「見栄えがする技術」と比べ、一般の人達にとって、非常に地味で分かりにくい側面を持ちます。直截目に見えないことも理由の一つでしょうが、「堅苦しい」「理解し難い」などといった先入観も少なからず存在するからとも言えます。
また、 XML や XML DOM といった技術は、主にデータベース管理などで用いられており、一般の人達にとっては「敷居が高い」と思われているかも知れません。
そこで、今回の企劃の目的を、以下のように掲げることにしました。
本ゲームのシステムを作り上げていく中で使用した XML/XHTML, DOM の各種仕様と、MSIE/Mozilla の各種実装状況の違いに関して、簡潔に紹介したいと思います。
シナリオデータの記述に XML を採用。読み込みは XML DOM で行います。
new ActiveXObject(Microsoft.XML.DOM)
を宣言。その後、 document.load()
で読み込みます。document.implementation.createDocument()
を宣言し、document.load()
を使います。キーボード及びマウスイベントを埋め込む際には、 DOM で着目する要素にアクセスし、イベントを埋め込みます。(以下、アクセスする要素を element
表します。)
element.onmouseover=...
とします。element.addEventListener()
を用います。event.keyCode
で、キーの UCS コードを読み込みます。E.which
が使えます(E
はイベントオブジェクト)。 DOM3 で議論されている E.keyVal
などは、まだ使用出来ないようです。event.srcElement
で、 Mozilla/Netscape では、 DOM2 の E.target
で、それぞれ当該要素を拾い出します。基本的には DOM 1 + 独自拡張のサポートなので、それを考慮する必要があります。
getElementsByTagName()
を使う場合、タグの名前には接頭辞も必要になります。ただし html:
接頭辞を有する要素は「常に XHTML の要素」と見倣されるので、接頭辞は不要です。xml-stylesheet
処理命令によって「直截表示」されている要素へのアクセスには、基本的に HTML DOM が適用されます。また、Microsoft.XML.DOM で作られた文書へのアクセスには、 XML DOM が適用されます(詳細は後述)。getElementById()
が使えるのに対し、後者の文書では使用できないといった違いがあります。createElement()
によって要素を作成した場合、その要素は必ず XHTML の要素となり、 html:
接頭辞が自動的に附加されます。 CSS でスタイルを指定する場合は、セレクタを html\:xxx
としなければなりません。DOM 2 までほぼサポートされております。全ての文書に XML DOM が適用されます(ただし例外あり)。
createElementNS("http://www.w3.org/1999/xhtml","xxx")
としなければなりません。xxx.style
(HTML DOM) で指定出来ます。ただし、名前空間が http://www.w3.org/1999/xhtml
と宣言されている要素に限ります。それ以外の要素への「局所的な指定」は、どうやら不可能みたいです (DOM 2 では getOverrideStyle
がこれに相当するのですが、残念ながら未実装のようです)。html\:xxx
と指定しても無視されます。ただし、例えば html|xxx
のようには出来ます(html
接頭辞には、 @namespace
で名前空間を設定しなければなりません)。