文書オブジェクト模型

DOM (Web)

[76] DOM は、 Webブラウザーで実装されている、 JavaScript によって著者が利用可能な APIデータモデルの総称です。

仕様書

[84] DOMDOM Standard を中心に、 HTML StandardCSSOMShadow DOM など多数の仕様書によって規定されています。 00年代までは 「DOM ○○」という仕様名でしたが、00年代末から「○○ API」 という仕様名が流行しています。

呼称

[91] DOM の提供する APIDOM API ということがあります。 Web API と呼ぶこともあります (が、 Web API には他の意味もあります)。

[93]DOM」という語の指す対象がどこまであるかは、はっきりしていません。 狭義には DOM Standard が規定する範囲が DOM だと言えるでしょうが、 DOM Standard に含まれるか否かは歴史的経緯によるところが大きく、 機能的に明確な基準があるわけではありません。 HTML Standard など他の仕様書との間で相互に移動した機能もいくつかあります。

[94] かつて (00年代) は、 W3C に存在していた DOM WG が制定した仕様書DOM という名前がついており、 それ以後に他の WG で追加で開発された仕様書には DOM という名前がついていない、という違いがありました。 しかしこれも明確な区別を目的としたものではなく、 標準化団体の組織運営の都合や仕様書編集者の好み、 時代の流れのような消極的な選択の結果と思われ、 DOM という語の範囲を決めるのには不適切でしょう。実際、 この時代に開発された Element TraversalSelectors API などは現在の DOM Standard に取り込まれています。

[95] Webブラウザー文書に提供する API の総称と理解するのが最も適切でしょう。

[92] DOM の一部を BOM と呼ぶ人もいますが、 一般的ではありません。

DOM の機能

[77] DOM にはたくさんの機能が含まれています。

[78] DOM木に関するインターフェイスには次のものなどがあります。

[82] CSSOMcanvas に関するインターフェイスには次のものなどがあります。

[80] DOMイベントに関するインターフェイスには次のものなどがあります。

[79] 閲覧文脈ワーカーに関するインターフェイスには次のものなどがあります。

[83] ネットワークに関するインターフェイスには次のものなどがあります。

歴史

[1] 文書物体模型 (Document Object Model, DOM) は、プログラム言語などを介して HTMLXML などの文書や、 WWWブラウザなどの利用者エージェントの機能などにアクセスするための抽象的な界面や処理模型などの総称です。

水準

[9] DOM の仕様には水準 (level) があります。

DOM水準0
Netscape Navigator 3WinIE 3 が実装していた DHTML 機能のうちの object model を指します。標準仕様は存在しませんし、 NN と IE で非互換な部分も少なくありません。
DOM水準1
HTML 文書や XML 文書から作った文書木を扱うためのごく基本的な機能をまとめた仕様です。 DOM 水準 0 の一部を取り込んでいますが、 ブラウザに大きく依存する部分は含まれていません。
DOM水準2
HTML 文書や XML 文書 (XML名前空間を使ったものを含みます。) から作った文書木や CSS スタイル・シートなどを扱うための機能をまとめた仕様です。 細かな部分を除いて DOM 水準 1 の上位互換です。
DOM水準3
HTML 文書や XML 文書 (XML 名前空間を使ったものを含みます。) の文書木を操作したり、 DTDXML Schema に基づいて検証したりするための機能をまとめた仕様です。 XML 文書を読み書きすることもできます。 DOM 水準 2 に対する追加機能として設計されています。

水準は実際には実装の難易度や操作の自由度とはあまり関係が無く、 歴史的な順序関係を示しているに過ぎません。また、 高水準の仕様が低水準の仕様をすべてカバーしているわけではありません。

水準がついている中核部分の仕様とは別に、 SVG のようなマーク付け言語などに対応する仕様もあります。

標準化

[2] DOM の中核部分の標準化W3C が行っています。 詳しくは W3C の DOM に関するサイト W3C Document Object Model http://www.w3.org/DOM/ をご覧下さい。

[8] W3C が制定した DOM 関係の仕様書は Document Object Model (DOM) Specifications http://www.w3.org/DOM/DOMTR にその一覧があります。

[14] XML Schema API http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/

XML Schema に access するための界面です。 DOM じゃないですが、実際上 DOM です。

(名無しさん)

[15] System and Environment Framework http://www.w3.org/TR/sysenv/ (名無しさん)

[16] XPath Expressions in XForms http://www.w3.org/TR/xforms/slice7.html#expr-instance (名無しさん)

[17] CGM Open - Techncial http://www.cgmopen.org/technical/readings.html

WebCGM DOM は開発中。 (名無しさん 2004-09-26 14:51:58 +00:00)

[18] CML の DOM は Java の reference 実装だけで IDL がない模様。

(名無しさん)

[19] Voice Extensible Markup Language (VoiceXML) 2.1 http://www.w3.org/TR/2004/WD-voicexml21-20040728/#ref_VXML2

VoiceXML 2.0 の次の版ですが、 DOM 的ポイントは、

  • DOM 水準 2 読取専用部分集合の ECMAScript 束縛が定義されている。
    • ただし、 data 要素で XML 文書を参照した時に使えるだけ。 VoiceXML 文書本体は、相変わらず独自なもののみ。
  • access-control 処理指令による DOM 木への access 制御が定義されている。
    • 但し、ホスト名による all or nothing の制御しかできない。 VoiceXML の data に使う限りほとんど面白味がないような。

DOM の access 制御は汎用化された仕様が独立にあっても良いと思うがどうよ? (名無しさん)

[20] とはいうものの W3C の DOM 担当のところは完全に maintainance mode っぽいからなー (これ以上仕様作っても誰も実装しなさそうだし) と思って Document Object Model Activity Statement http://www.w3.org/DOM/Activity を読んでみる。 DOM 活動には現在 DOM IG 1つだけがあるらしい。 DOM IG の憲章は6月で期限切れと書いてあるが・・・憲章がない。探してみたけど見つからない。非公開なのか? DOM IG は Public Page もないみたいだし (DOM Activity と一体なのか)、 今何やってるんだろうね? (名無しさん 2004-11-17 02:03:22 +00:00)

[22] Digest Values for DOM (DOMHASH) http://www.ietf.org/proceedings/99jul/I-D/draft-hiroshi-dom-hash-01.txt

[27] CSS3 module: Presentation Levels http://www.w3.org/TR/2003/WD-css3-preslev-20030813/ (名無しさん)

[28] >>22 RFC 2803 http://www.ietf.org/rfc/rfc2803.txt (名無しさん)

[29] >>22,>>28 I-D 00 では IDL への追加提案が載ってて、 I-D 01 では Java 束縛への追加提案に変わってて、 RFC ではなんにもなくなっているのがなんとも(w (名無しさん)

[30] jp.go.aist.gda.dom http://www.carc.aist.go.jp/nlwww/~siramatu/gdasdk/apidocs/jp/go/aist/gda/dom/package-summary.html

GDA 向けに拡張された DOM の実装。 (名無しさん)

[31]

  1. Level 2 DOM Last Call Disposition of Comments http://www.w3.org/DOM/L2LCcomments_public.html (DOM水準2 LC 期間)
  2. Level 2 DOM Candidate Recommendation Disposition of Comments http://www.w3.org/DOM/L2CRcomments_public.html (DOM水準2 CR 期間)
  3. Level 2 DOM Candidate Recommendation Disposition of Comments http://www.w3.org/DOM/L2CR2comments_public.html (DOM水準2 CR2 期間)
  4. DOM Level 2 HTML Issues List http://www.w3.org/2001/12/DOM-Level-2-issues (DOM水準2 HTML LC 期間)
  5. DOM Level 2 HTML Candidate Recommendation Issues List http://www.w3.org/2002/06/DOM-Level-2-HTML-CR-issues/all.html (DOM水準2 HTML CR3 期間)
  6. DOM Level 3 Core Issues List http://www.w3.org/2003/06/09-dom-core-issues/issues.html (DOM水準3 中核 LC 期間)
  7. DOM Level 3 Load and Save Issues List http://www.w3.org/2003/06/19-dom-ls-issues/issues.html (DOM水準3 LS LC 期間)
  8. DOM Level 3 Validation Issues List http://www.w3.org/2002/10/DOM-Level-3-Val-issues/all.html (DOM水準3 検証 LC 期間)
  9. DOM Level 3 Events Issues List http://www.w3.org/2002/07/DOM-Level-3-Events-issues/issues.html (DOM水準3 事象 LC 期間)
  10. DOM Level 3 XPath Issues List http://www.w3.org/2002/03/DOM-Level-3-XPath-issues/all.html (DOM水準3 XPath LC 期間)
  11. Candidate Recommendations DOM Level 3 Issues http://www.w3.org/2003/12/22-dom-core-issues/issues.html (DOM水準3 中核・LS CR 期間)
  12. DOM Level 3 Validation Issues List http://www.w3.org/2003/12/DOM-Level-3-Val-issues/issues.html (DOM水準3 検証 CR 期間)
  13. DOM Level 3 Issues List http://www.w3.org/2004/02/19-dom-level-3-issues/issues.html (DOM水準3 中核・LS PR 期間)

This document is a "wish list" of enhancements to and concerns about the DOM that were not addressed in Level 1, Level 2, or Level 3. Note that the DOM Working Group has not committed to work on most of these points. (名無しさん)

[33] [DASE] DTV A S E L 1 (DASE-1) P 2: D A E ATSC Standard http://www.atsc.org/standards/a_100_2.pdf は DOM 水準 0 の機能の一部を標準化しています。 (名無しさん [sage])

[34] [DDE] Declarative Data Essence -- Transitional http://www.smpte.org/standards/pdf/s397m.pdf は DOM の subset と少々の拡張からなる profile です。 (名無しさん [sage])

[35] SMPTE 366M-2002, Television — Declarative Data Essence — Document Object Model Level 0 (DOM-0) and Related Object Environment というのがあるそうですが、有料です。 (名無しさん [sage])

[36] ECMAScript Mobile Profile は DOM水準0 を含む DOM の profile をも規定しています。

http://www.openmobilealliance.org/release_program/docs/CopyrightClick.asp?pck=Browsing&file=V2_3-20050118-C/OMA-WAP-ESMP-V1_0-20040709-C.pdf (名無しさん [sage])

[38] XHTML 1.0 の互換性指針には DOM に関する言及があります。

(名無しさん [sage])

[39]

DOM水準3 の事象と XPath は DOM WG が諦めて WG Note にしてしまいましたが、 いつのまにか SVG WG が続きを担当することになっていたそうです。

で、そろそろ PR が出るはずですが・・・でませんねぇ(藁 (名無しさん 2005-04-08 09:18:44 +00:00)

[40] eDOM (名無しさん [sage])

[41] OMA (旧 WAP) の ESMP (ECMAScript + DOM のプロファイルのようなもの) は DOM水準0 の部分も含むオブジェクトを規定しています。

(名無しさん [sage])

[42] >>33 第4部はその Java 束縛。 http://www.atsc.org/standards/a_100_4.pdf (名無しさん [sage])

[43] DOM Binding for .NET http://www.alejandrolapeyre.com.ar/net/dom/ (名無しさん)

[45] SALT 1.0 では (DOM 外の) 物体に関する規定があります。 また、音声ブラウザ用の HTMLHTML DOMプロファイルが定義されていて、その中には DOM水準0 の部分も含まれています。 (名無しさん)

[46] Compound Document Framework 1.0 and WICD Profiles http://www.w3.org/TR/2005/WD-WICD-20050809/

W3C もやればできるじゃないの。やるのが数年遅いが。 (名無しさん 2005-08-10 02:10:14 +00:00)

[47] SVG Roadmap http://www.w3.org/Graphics/SVG/Roadmap.html

DocumentFWDNext WDLCCRPRREC
DOM Level 3 Events01 Sep 2000-31 Mar 2003[Dec 2004][Mar 2005][May 2005]
DOM Level 3 XPath18 Jun 2001-28 Mar 200231 Mar 2003[Mar 2005][May 2005]

あれ? もう勧告されたっけ? wwwwwwwwwwwwwwwwwwwwwwwwwww

(名無しさん 2005-12-29 09:01:29 +00:00)

[48] Component Extension (CX) API requirements Version 1.0 http://www.w3.org/TR/CX (名無しさん)

[49] ACTION-66: Mozilla XSLT DOM Interface from Jonas Sicking on 2006-03-03 (public-webapi@w3.org from March 2006) http://lists.w3.org/Archives/Public/public-webapi/2006Mar/0021.html (名無しさん 2006-03-03 12:18:32 +00:00)

[50] Distributed Multimodal Synchronization Protocol urn:ietf:id:draft-engelsma-dmsp-01

(名無しさん 2006-03-07 02:29:25 +00:00)

[51] WebCGM 2.0 http://www.w3.org/Submission/2006/SUBM-WebCGM20-20060313/ (名無しさん 2006-03-19 08:53:42 +00:00)

[54] 選択子API (名無しさん)

[55] XMLHttpRequest (名無しさん)

[56] Window (名無しさん)

[57] REX (名無しさん)

[58] WebCGM 2.0 - WebCGM DOM (2007-01-25 02:12:49 +09:00 版) http://www.w3.org/TR/2007/REC-webcgm20-20070130/WebCGM20-DOM.html (名無しさん 2007-02-02 14:16:46 +00:00)

[59] WebCGM 2.0 - WebCGM DOM (2006-10-19 00:39:56 +09:00 版) http://docs.oasis-open.org/webcgm/v2.0/OS/WebCGM20-DOM.html (名無しさん 2007-02-02 14:18:26 +00:00)

[61] Submission request to the World Wide Web Consortium (1997-08-10 03:00:04 +09:00 版) http://www.w3.org/Submission/1997/1/

WinIE 4 DHTML Object Model とみられる仕様群。

The submission may distributed within the membership internally and publically outside of the W3C without fee.

とか

We also request that these documents be made publicly available immediately.

とか書かれているにもかかわらず、 Member only で公表されていない。 (名無しさん)

[62] Submission request to the World Wide Web Consortium (1997-08-10 03:00:04 +09:00 版) http://www.w3.org/Submission/1997/1/

WinIE 4 DHTML Object Model とみられる仕様群。

The submission may distributed within the membership internally and publically outside of the W3C without fee.

とか

We also request that these documents be made publicly available immediately.

とか書かれているにもかかわらず、 Member only で公表されていない。 (名無しさん)

[63] DOM Requirements (1997-04-24 09:26:44 +09:00 版) http://web.archive.org/web/19970605012710/www.w3.org/MarkUp/DOM/drafts/requirements.html

DOM data model & XPath data model

[26] Document Object Model (DOM) Requirements http://www.w3.org/TR/2001/WD-DOM-Requirements-20010419/#level3-xpath, http://www.w3.org/TR/2004/NOTE-DOM-Requirements-20040226/#dom-level-3-requirements-level3-xpath (両版とも該当部分は同内容)

XPath in DOM の新しい WG を作るという提案があったそうですが、却下されたそうで、 結局従来の DOM WG で作業していたそうです。 両データ・モデルの関係についての極簡単な考察が述べられています。 XPath 2.0 を待つべきかどうかという問題も提示されています。

[23] XSL Transformations (XSLT) Version 1.1 (2001年8月作業原案) http://www.w3.org/TR/2001/WD-xslt11-20010824/#N11359 は XPath の拡張関数を実装する xslt:script 要素型を定義しており、それとともに DOM 束縛も定義しています。 それには DOM と XPath の data model の対応も含まれています。

XSLT 1.1 は結局 WD のまま放棄され、 XSLT 2.0 の開発が続けられていますが、今のところ XSLT 2.0 に同様の機能はないようです。

[24] XPath Expressions in XForms http://www.w3.org/TR/xforms/slice7.html (XForms 1.0: 2003年10月勧告)

XForms は XPath も DOM 事象もふんだんに用いているのですが、 XPath 式と DOM 物体が直接かかわりあう場面がないため、 両データ・モデルの関係についての規定はありません。

[25] DOM Level 3 XPath IW:DOM3:"XPath/" (2004年2月作業部会ノート)

XPath を DOM に取り入れるために一部データ・モデルを修正しています。 この仕様自体は十分な実装が期待できないため勧告になりませんでした。

Req. では XPath 2.0 データ・モデルについて触れられていましたが、 結局 XPath 1.0 しか扱っていません。 XPath 2.0 を待っていると作業が遅れに遅れた上に、 極めて強い型付きの XPath 2.0 と普通程度に強い型付きの DOM の統合は困難を極めたかもしれません。

実装

[37] SourceForge.net: Project Info - XPath over HTML for MSIE https://sourceforge.net/projects/html-xpath/

WinIEDOM水準3 XPath を使うためのスクリプト。 (名無しさん)

[44] Gecko では定数が例えば el.ELEMENT_NODE (elElement 界面を実装した物体。) でアクセスできますが、 WinIE 6Opera 8 ではそうではありません。

メモ

  • [5] 正直、 DOM が UTF-16 前提にしてるのは問題だと思うのですが。 length は UTF-16 での文字列のオクテット長の半分 (16ビット1バイトのバイト数) を返さないといけないらしいですが、文字列が UTF-16 でない言語では役に立たないのでして。ほんとに言語独立性を考えたのか小一時間(ry
  • [7] Ginga's Translations Web Site http://www.kit.hi-ho.ne.jp/~ginga/
  • [11] MetaGraphic Cell B4F - Scripts http://www2u.biglobe.ne.jp/~oz-07ams/prog/#dom

[13] DOM仕様書入門? http://members.jcom.home.ne.jp/jintrick/Personal/d20043f.html#d16_0

DOM入門に仕様書を推奨する記事です。 DOM の仕様書を初めて読むときには参考になるかもしれません。 (名無しさん 2004-03-17 01:46:35 +00:00)

[21] さてそれで偶々気づいたのだけど、 DOM の頁の幾つかは最初の目次の部分をスクリプト http://www.w3.org/DOM/demo.js で自動生成している。今まで全然気づかなかったぞ。 GJ! (名無しさん 2004-11-17 02:09:32 +00:00)

[52] Bug 153281 - No way to reach original, untransformed XML document from DOM https://bugzilla.mozilla.org/show_bug.cgi?id=153281 (名無しさん 2006-04-01 03:50:11 +00:00)

[53] Comparison of layout engines (DOM) - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28DOM%29 (名無しさん 2006-05-15 22:01:58 +00:00)

[60] DOM Tool | Version 1.1 (2007-02-09 08:20:25 +09:00 版) http://muffinresearch.co.uk/code/javascript/DOMTool/ (名無しさん 2007-02-08 23:25:15 +00:00)

[64] State of the Browsable Web (Dec 2008) ― WebAPIs - vantguarde - web:g ( 版) http://web.g.hatena.ne.jp/vantguarde/20081215/1229353073

[65] mozilla-central mozilla/dom/public/idl/ ( 版) http://mxr.mozilla.org/mozilla-central/source/dom/public/idl/

[66] EMMA: Extensible MultiModal Annotation markup language ( 版) http://www.w3.org/TR/2009/REC-emma-20090210/#appD

EMMAEvent 界面 (参考) が定義されていますが、説明がまったくなく、謎です。

DOM Standard

[75] 紆余曲折を経て DOMW3C から WHATWG へと移り、 DOM Standard として規定されるようになりました。

詳細は DOM Standard を参照。

[67] Simplifying element creation ( (Anne van Kesteren 著, 版)) http://lists.w3.org/Archives/Public/www-dom/2011OctDec/0020.html

[68] IRC logs: freenode / #whatwg / 20120124 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20120124#l-418

[69] [whatwg] DOMTokenList methods would be more useful with a space separated token list ( ( 版)) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-July/036593.html

[70] DOM ECMAScripting ( ( 版)) http://domes.lingua.heliohost.org/

[71] IEの気持ち - 最速チュパカブラ研究会 ( ( 版)) http://d.hatena.ne.jp/gyuque/20071013

[72] Re: [cssom-view] Drop "DOM" prefix from DOMRect et al? ( (Simon Pieters 著, 版)) http://lists.w3.org/Archives/Public/www-style/2013Sep/0751.html

[73] mozilla-central mozilla/content/base/public/nsDeprecatedOperationList.h ( ( 版)) http://mxr.mozilla.org/mozilla-central/source/content/base/public/nsDeprecatedOperationList.h

[74] JavaScript Grid with One Million Records | JavaScript UI - w2ui ( ( 版)) http://w2ui.com/web/blog/7/JavaScript-Grid-with-One-Million-Records

[85] リアルな DOM はなぜ遅いのか - steps to phantasien ( (Hajime Morrita 著, 版)) http://steps.dodgson.org/b/2014/12/11/why-is-real-dom-slow/

[86] 27310 – Virtual DOM and DOM diff ( 版) https://www.w3.org/Bugs/Public/show_bug.cgi?id=27310

[87] 17426 – Consider adding a replaceContents() method ( 版) https://www.w3.org/Bugs/Public/show_bug.cgi?id=17426

[88] Faster DOM | Hacker News ( ()) https://news.ycombinator.com/item?id=11777450

[89] Making the DOM faster — Anne’s Blog ( ()) https://annevankesteren.nl/2016/05/faster-dom

[90] Resource Timing Level 1 ( ()) https://w3c.github.io/resource-timing/#dfn-dom

The term DOM is used to refer to the API set made available to scripts in Web applications, and does not necessarily imply the existence of an actual Document object or of any other Node objects as defined in the DOM specification.