<?xml version="1.0" encoding="us-ascii"?>
<!-- $Id: xml-source.xml,v 1.2 2003/02/26 20:40:49 plehegar Exp $ --><!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.2-Based DOM//EN" "http://www.w3.org/2002/08/xmlspec-v22-dom.dtd">
<spec w3c-doctype="wd" role="public">
  <!--
  *************************************************************************
  * FRONT MATTER                                                          *
  *************************************************************************
  -->
<!-- 
  ****************************************************** 
  | filenames to be used for each section              |
  ******************************************************
-->
<?command-options --map Copyright-Notice copyright-notice
--map Introduction     introduction
--map TOC expanded-toc
--map Core core
--map Events events
--map idl idl-definitions
--map ecma-binding ecma-script-binding
--map java-binding java-binding
--map Index def-index
--map Objects object-index
--map References references
--map Errors errors
--map Level-3-AS abstract-schemas
--map Load-Save load-save
--map XPath xpath
--map KeySet keyset
?>

<?command-options --map -IndexFile-      def-index
--map -OjbectIndexFile-      object-index
--strip-references
--strip-glossary
?>

<?command-options --map-type ECMAScript Object Object
--map-type ECMAScript DOMString String
--map-type ECMAScript "unsigned short" Number
--map-type ECMAScript "unsigned int" Number
--map-type ECMAScript "unsigned long" Number
--map-type ECMAScript long Number
--map-type ECMAScript boolean Boolean

--map-type ECMAScript DOMTimeStamp Date
--map-type ECMAScript DOMObject Object
--map-type ECMAScript DOMUserData "any type"
--map-type ECMAScript DOMInputStream Object
--map-type ECMAScript DOMOutputStream Object
--map-type ECMAScript DOMReader "this is an error and shouldn't be used."
--map-type ECMAScript DOMSystemException Object

--map-type Java Object Object
--map-type Java DOMString String
--map-type Java "unsigned short" short
--map-type Java "unsigned int" int
--map-type Java "unsigned long" int
--map-type Java long int
--map-type Java boolean boolean

--map-type Java DOMTimeStamp long
--map-type Java DOMObject Object
--map-type Java DOMUserData Object
--map-type Java DOMInputStream java.io.InputStream
--map-type Java DOMOutputStream java.io.OutputStream
--map-type Java DOMReader java.io.Reader
--map-type Java DOMSystemException Exception
?>

<header> 
<title>Document Object Model (DOM) Level 3 Core Specification</title>
<version>1.0</version> <w3c-designation>WD-DOM-Level-3-Core-20030226
</w3c-designation> <w3c-doctype>W3C Working Draft</w3c-doctype> <pubdate> 
<day>26</day> <month>February</month> <year>2003</year> 
</pubdate> 
    <publoc>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226</loc>
    </publoc>
    <altlocs>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" role="html" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/xml-source.xml" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">XML file</loc>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" role="plain" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.txt" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">plain text</loc>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" role="postscript" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.ps" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">PostScript file</loc>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" role="pdf" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.pdf" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">PDF file</loc>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" role="html" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">single HTML file</loc>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" role="zip" href="http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.zip" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">ZIP file</loc>
    </altlocs>
    <latestloc>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-Core" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/DOM-Level-3-Core</loc>
    </latestloc>
    <prevlocs>
      <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2002/WD-DOM-Level-3-Core-20021022" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2002/WD-DOM-Level-3-Core-20021022</loc>
    </prevlocs> 
    <authlist> 
    <author role="editor">
      <name>Arnaud Le Hors</name>
      <affiliation>IBM</affiliation>
    </author>
      <author role="editor">
	<name>Philippe Le H&#233;garet</name> 
	<affiliation>W3C</affiliation>
      </author> 
    <author role="editor">
      <name>Lauren Wood</name>
      <affiliation>SoftQuad, Inc. (WG Chair emerata, for DOM Level 1 and 2)</affiliation>
    </author>
    <author role="editor">
      <name>Gavin Nicol</name>
      <affiliation>Inso EPS (for DOM Level 1)</affiliation>
    </author>
      <author role="editor">
	<name>Jonathan Robie</name>
	<affiliation>Texcel Research and Software AG (for DOM Level 1)</affiliation>
      </author>
    <author role="editor">
      <name>Mike Champion</name>
      <affiliation>ArborText and Software AG (for DOM Level 1 from November 20,
        1997)</affiliation>
    </author>
    <author role="editor">
      <name>Steve Byrne</name>
      <affiliation>JavaSoft (for DOM Level 1 until November 19,
        1997)</affiliation>
    </author>
</authlist>
    <!--
    ******************************************************
    * DOCUMENT ABSTRACT                                  *
    ******************************************************
    -->
<abstract id="id-abstract"> 

<p>This specification defines the Document Object Model Core Level 3, a
platform- and language-neutral interface that allows programs and scripts to
dynamically access and update the content, structure and style of documents.
The Document Object Model Core Level 3 builds on the Document Object Model Core
Level 2 <bibref role="normative" ref="DOM2Core"/>.</p>

</abstract>

<status id="Level-3-status"> 


<p><emph>This section describes the status of this document at the time of its
publication. Other documents may supersede this document. The latest status of
this document series is maintained at the W3C.</emph></p>

<p>This document contains the Document Object Model Level 3 Core
specification and is a Working Draft for review by W3C members and other
interested parties. This version introduces two new interfaces:
<code>TypeInfo</code> and <code>DOMConfiguration</code>.</p>

<p>
It is a draft document and may be updated, replaced or obsoleted by
other documents at any time. It is inappropriate to use W3C Working Drafts as
reference material or to cite them as other than "work in progress". This is
work in progress and does not imply endorsement by, or the consensus of, either
W3C or members of the DOM Working Group.
</p>
<p>
Comments on this document are invited and are to be sent to the
public mailing list <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="mailto:www-dom@w3.org" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">www-dom@w3.org</loc>. An archive
is available at <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://lists.w3.org/Archives/Public/www-dom/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://lists.w3.org/Archives/Public/www-dom/</loc>.</p>

<p>This document has been produced as part of the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/DOM/Activity.html" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">W3C DOM Activity</loc>. The authors
of this document are the DOM Working Group members.</p>

      <p>
        Patent disclosures relevant to this specification may be found
        on the Working Group's <loc xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest" href="http://www.w3.org/2002/08/02-DOM-Disclosures.html">patent
        disclosure page</loc>.
      </p>

<p>A list of <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">current W3C Recommendations and
other technical documents</loc> can be found at http://www.w3.org/TR.</p>

</status> 


<sourcedesc>
<p>Created in electronic form.</p>
</sourcedesc>
<langusage>
<language id="en">English</language>
</langusage>
<revisiondesc>
<p>$Revision: 1.2 $</p>
</revisiondesc>
<?GENERATE-TOC?>
</header>
<front>
  
<!-- $Id: xml-source.xml,v 1.2 2003/02/26 20:40:49 plehegar Exp $ -->
<div1 id="TOC">
  <head>Expanded Table of Contents</head>
  <?GENERATE-EXPANDED-TOC?>	
</div1>

  
<!-- $Id: xml-source.xml,v 1.2 2003/02/26 20:40:49 plehegar Exp $ -->
<!--
 *************************************************************************
 * BEGINNING OF COPYRIGHT NOTICE                                         *
 *************************************************************************
-->
<div1 id="Copyright-Notice">
  <head>W3C Copyright Notices and Licenses</head>

  <p role="important">
    Copyright &#169; 2003 <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World
    Wide Web Consortium</loc>, (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute of
    Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European
    Research Consortium for Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All Rights
    Reserved.
  </p>
  <p>
    This document is published under the <specref ref="Copyright-notice-document"/>. The bindings within this document
    are published under the <specref ref="Copyright-notice-software"/>.
    The software license requires "Notice of any changes or
    modifications to the W3C files, including the date changes were
    made." Consequently, modified versions of the DOM bindings must
    document that they do not conform to the W3C standard; in the case
    of the IDL definitions, the pragma prefix can no longer be
    'w3c.org'; in the case of the Java language binding, the package
    names can no longer be in the 'org.w3c' package.
  </p>
  <div2 id="Copyright-notice-document">
    <head>W3C<sup>&#174;</sup> Document Copyright Notice and License</head>
    <note>
      <p>
	This section is a copy of the W3C<sup>&#174;</sup> Document
	Notice and License and could be found at <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231</loc>.
      </p>
    </note>
    <p role="important">
      Copyright &#169; 2003 <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World Wide Web Consortium</loc>, (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute of
      Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European
      Research Consortium for Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All Rights
      Reserved.
    </p>
    <p role="important">      
      http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231
    </p>
    <p>
      Public documents on the W3C site are provided by the copyright
      holders under the following license. By using and/or copying this
      document, or the W3C document from which this statement is linked,
      you (the licensee) agree that you have read, understood, and will
      comply with the following terms and conditions:
    </p>
    <p>
      Permission to copy, and distribute the contents of this document,
      or the W3C document from which this statement is linked, in any
      medium for any purpose and without fee or royalty is hereby
      granted, provided that you include the following on
      <emph>ALL</emph> copies of the document, or portions thereof, that
      you use:
    </p>
    <olist>
      <item>
	<p>
	  A link or URL to the original W3C document.
	</p>
      </item>
      <item>
	<p>
	  The pre-existing copyright notice of the original author, or
	  if it doesn't exist, a notice (hypertext is preferred, but a
	  textual representation is permitted) of the form:
	  "Copyright &#169; [$date-of-document] <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World Wide Web Consortium</loc>,
	  (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute
	  of Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European Research Consortium for
	  Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All
	  Rights Reserved.  <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231</loc>"
	</p>
      </item>
      <item>
	<p>
	  <emph>If it exists</emph>, the STATUS of the W3C document.
	</p>
      </item>
    </olist>
    <p>
      When space permits, inclusion of the full text of this <emph role="important">NOTICE</emph> should be provided. We request that
      authorship attribution be provided in any software, documents, or other
      items or products that you create pursuant to the implementation of the
      contents of this document, or any portion thereof.
    </p>
    <p>
      No right to create modifications or derivatives of W3C documents is
      granted pursuant to this license. However, if additional requirements
      (documented in the <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Legal/IPR-FAQ" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Copyright
      FAQ</loc>) are satisfied, the right to create modifications or
      derivatives is sometimes granted by the W3C to individuals complying with
      those requirements.
    </p>
    <p>
      THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
      NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT
      LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
      PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT
      ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH
      CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
      TRADEMARKS OR OTHER RIGHTS.
    </p>
    <p>
      COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
      CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE
      PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.
    </p>
    <p>
      The name and trademarks of copyright holders may NOT be used in
      advertising or publicity pertaining to this document or its contents
      without specific, written prior permission. Title to copyright in this
      document will at all times remain with copyright holders.
    </p>
  </div2>
  <div2 id="Copyright-notice-software">
    <head>W3C<sup>&#174;</sup> Software Copyright Notice and License</head>
    <note>
      <p>
	This section is a copy of the W3C<sup>&#174;</sup> Software
	Copyright Notice and License and could be found at <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231</loc>
      </p>
    </note>
    <p role="important">
      Copyright &#169; 2003 <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World Wide Web Consortium</loc>, (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute of
      Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European
      Research Consortium for Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All Rights
      Reserved.
    </p>
    <p role="important">      
      http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
    </p>
    <p>
      This work (and included software, documentation such as READMEs,
      or other related items) is being provided by the copyright holders
      under the following license. By obtaining, using and/or copying
      this work, you (the licensee) agree that you have read,
      understood, and will comply with the following terms and
      conditions.
    </p>
    <p>
      Permission to copy, modify, and distribute this software and its
      documentation, with or without modification, for any purpose and
      without fee or royalty is hereby granted, provided that you
      include the following on ALL copies of the software and
      documentation or portions thereof, including modifications:
    </p>
    <olist>
      <item>
	<p>The full text of this NOTICE in a location viewable to users of the
	redistributed or derivative work.</p>
      </item>
      <item>
	<p>
	  Any pre-existing intellectual property disclaimers, notices,
	  or terms and conditions. If none exist, the <specref ref="Copyright-short-notice"/> should be included (hypertext
	  is preferred, text is permitted) within the body of any
	  redistributed or derivative code.
	</p>
      </item>
      <item>
	<p>
	  Notice of any changes or modifications to the files, including
	  the date changes were made. (We recommend you provide URIs to
	  the location from which the code is derived.)
	</p>
      </item>
    </olist>
    <p>
      THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT
      HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
      INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS
      FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR
      DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
      TRADEMARKS OR OTHER RIGHTS.
    </p>
    <p>
      COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
      CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
      DOCUMENTATION.
    </p>
    <p>
      The name and trademarks of copyright holders may NOT be used in
      advertising or publicity pertaining to the software without specific,
      written prior permission. Title to copyright in this software and any
      associated documentation will at all times remain with copyright holders.
    </p>
  </div2>
  <div2 id="Copyright-short-notice">
    <head>W3C<sup>&#174;</sup> Short Software Notice</head>

    <note>
      <p>
	This section is a copy of the W3C<sup>&#174;</sup> Short Software
	Notice and could be found at <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/Consortium/Legal/2002/copyright-software-short-notice-20021231" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/Consortium/Legal/2002/copyright-software-short-notice-20021231</loc>
      </p>
    </note>
    <p role="important">
      Copyright &#169; 2003 <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World
      Wide Web Consortium</loc>, (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute of
      Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European
      Research Consortium for Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All Rights
      Reserved.
    </p>
    <p>
      Copyright &#169; [$date-of-software] <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">World Wide Web Consortium</loc>, (<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.lcs.mit.edu/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Massachusetts Institute of
      Technology</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.ercim.org/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">European
      Research Consortium for Informatics and Mathematics</loc>, <loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.keio.ac.jp/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Keio University</loc>). All Rights
      Reserved. This work is distributed under the W3C<sup>&#174;</sup>
      Software License [1] in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    </p>
    <p>
      [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
    </p>
  </div2>
</div1>
<!--
 *************************************************************************
 * END OF COPYRIGHT NOTICE                                               *
 *************************************************************************
-->

  
<!-- $Id: xml-source.xml,v 1.2 2003/02/26 20:40:49 plehegar Exp $ -->
<!--
 *************************************************************************
 * BEGINNING OF DOM INTRODUCTION                                         * 
 *************************************************************************
-->
<div1 id="Introduction">
  <head>What is the Document Object Model?</head>

  <orglist role="editors">
    <member>
      <name>Philippe Le H&#233;garet</name>
      <affiliation>W3C</affiliation>
    </member>
    <member>
      <name>Lauren Wood</name>
      <affiliation>SoftQuad Software Inc. (for DOM Level 2)</affiliation>
    </member>
    <member>
      <name>Jonathan Robie</name>
      <affiliation>Texcel (for DOM Level 1)</affiliation>
    </member>
  </orglist>

  <div2 id="ID-E7C3082">
    <head>Introduction</head>
    <p>The Document Object Model (DOM) is an application programming interface 
      (<termref def="dt-API">API</termref>) for valid <termref def="dt-HTML">HTML</termref> and
      well-formed <termref def="dt-XML">XML</termref> documents. It defines the logical structure of documents and
      the way a document is accessed and manipulated. In the DOM specification,
      the term "document" is used in the broad sense - increasingly, XML is being used as a
      way of representing many different kinds of information that may
      be stored in diverse systems, and much of this would traditionally
      be seen as data rather than as documents. Nevertheless, XML presents
      this data as documents, and the DOM may be used to manage this data.</p>

    <p>With the Document
      Object Model, programmers can build documents, navigate
      their structure, and add, modify, or delete elements and content.
      Anything found in an HTML or XML document can be accessed,
      changed, deleted, or added using the Document Object Model,
      with a few exceptions - in particular, the DOM <termref def="dt-interface">interfaces</termref> for
      the XML internal and external subsets have not yet been specified.</p>
    <p>As a W3C specification, one important objective for the Document
      Object Model is to provide a standard programming interface that
      can be used in a wide variety of environments and <termref def="dt-application">applications</termref>.
      The DOM is designed to be used with any programming
      language. In order to provide a precise, language-independent
      specification of the DOM interfaces, we have chosen to define
      the specifications in Object Management Group (OMG) IDL <bibref role="normative" ref="OMGIDL"/>, as defined in the CORBA 2.3.1 specification <bibref role="informative" ref="CORBA"/>. In addition to the OMG IDL specification, we provide
      <termref def="dt-lang-binding">language bindings</termref> for Java <bibref role="normative" ref="Java"/> and ECMAScript <bibref role="normative" ref="ECMAScript"/> (an industry-standard scripting
      language based on JavaScript <bibref role="informative" ref="JavaScript"/> and JScript
      <bibref role="informative" ref="JScript"/>).</p> 
    <note><p>OMG IDL is used only as a language-independent and
	implementation-neutral way to specify <termref def="dt-interface">interfaces</termref>. Various other
	IDLs could have been used (<bibref role="informative" ref="COM"/>, <bibref role="informative" ref="JavaIDL"/>, <bibref role="informative" ref="MSIDL"/>, ...). In general, IDLs 
	are designed for specific computing environments. The Document Object
	Model can be implemented in any computing environment, and does not 
	require the object binding runtimes generally associated with 
	such IDLs.
      </p></note>

  </div2>
  <div2 id="ID-E7C30821">
    <head>What the Document Object Model is</head>
    <p>The DOM is a programming <termref def="dt-API">API</termref> for documents.
      It is based on an object structure that closely resembles the structure of the
      documents it <termref def="dt-model">models</termref>. For instance, consider this table, taken
      from an XHTML document: </p>
    <eg role="code" xml:space="preserve">
      &lt;table&gt;
      &lt;tbody&gt; 
      &lt;tr&gt; 
      &lt;td&gt;Shady Grove&lt;/td&gt;
      &lt;td&gt;Aeolian&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;tr&gt;
      &lt;td&gt;Over the River, Charlie&lt;/td&gt;        
      &lt;td&gt;Dorian&lt;/td&gt; 
      &lt;/tr&gt; 
      &lt;/tbody&gt;
      &lt;/table&gt;
    </eg> 
    <p>A graphical representation of the DOM of the example table is:
      <graphic xmlns:xlink="http://www.w3.org/1999/xlink" source="./images/table.png" alt="graphical representation of the DOM of the example table" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
    </p>
    <p>In the DOM, documents have a logical
      structure which is very much like a tree; to be more precise, which is
      like a "forest" or "grove",
      which can contain more than one tree. Each document contains zero or one
      doctype nodes, one document element node,
      and zero or more comments 
		or processing instructions; the document element serves as the root
		of the element tree for the document. However, the DOM
      does not specify that documents must be <emph>implemented</emph> as a
      tree or a grove<!--but not the same as an sgml grove-->, nor
      does it specify how the relationships among objects be
      implemented. The DOM is a logical model that may be implemented in any
      convenient manner. In this
      specification, we use the term <emph>structure model</emph> to
      describe the tree-like representation of a document.
      We also use the term "tree" when referring to the arrangement of 
      those information items which can be reached by using "tree-walking" 
      methods; (this does not include attributes).
      One important property of DOM structure models
      is <emph>structural isomorphism</emph>: if any two Document
      Object Model implementations are used to create a representation
      of the same document, they will create the same structure model,
      in accordance with the XML Information Set <bibref role="informative" ref="InfoSet"/>.</p>
    <note><p>There may be some variations depending on the parser being
	used to build the DOM. For instance, the DOM may not contain
	white spaces in element content if the parser discards them.</p>
    </note>
      <p>The name "Document Object Model" was chosen because
      it is an "<termref def="dt-object-model">object model</termref>" in the traditional
      object oriented design sense: documents are modeled using
      objects, and the model encompasses not only the structure of a
      document, but also the behavior of a document and the objects
      of which it is composed. In other words, the nodes in the
      above diagram do not represent a data structure, they
      represent objects, which have functions and identity. As an
      object model, the DOM identifies:</p>
    <ulist>
      <item><p>the interfaces and objects used to represent and manipulate
	  a document</p></item>
      <item><p>the semantics of these interfaces and objects - including
	  both behavior and attributes</p></item>
      <item><p>the relationships and collaborations among these interfaces
	  and objects</p></item>
    </ulist>
    
    <p>The structure of SGML documents has traditionally been
      represented by an abstract <termref def="dt-datamodel">data model</termref>, not by an object model.
      In an abstract <termref def="dt-datamodel">data model</termref>, the model is centered around the
      data. In object oriented programming languages, the data itself
      is encapsulated in objects that hide the data, protecting it
      from direct external manipulation. The functions associated with
      these objects determine how the objects may be manipulated, and
      they are part of the object model.</p>

  </div2>
  <div2 id="ID-E7C30822">
    <head>What the Document Object Model is not</head>
    <p>This section is designed to give a more precise understanding
      of the DOM by distinguishing it from other
      systems that may seem to be like it.</p>
    <ulist>
      <item><p>The Document Object Model is not a binary specification.
	  DOM programs written in the same language binding will be
	  source code compatible across platforms, but the DOM
	  does not define any form of binary interoperability.</p></item>
      <item><p>The Document Object Model is not a way of persisting objects
	  to XML or HTML. Instead of specifying how objects may be
	  represented in XML, the DOM specifies how
	  XML and HTML documents are represented as objects, so that
	  they may be used in object oriented programs.</p></item>
      <item><p>The Document Object Model is not a set of data structures;
	  it is an <termref def="dt-object-model">object model</termref> that specifies interfaces. Although this
	  document contains diagrams showing parent/child relationships,
	  these are logical relationships defined by the programming
	  interfaces, not representations of any particular internal
	  data structures.</p></item>

      <item><p>The Document Object Model does not define what information in a
	  document is relevant or how information in a document is structured. For
	  XML, this is specified by the XML Information Set <bibref role="informative" ref="InfoSet"/>. The DOM is simply an <termref def="dt-API">API</termref> to this information set. <!-- @@SEEME
	  --></p></item>

      <item><p>The Document Object Model, despite its name, is not a
	  competitor to the Component Object Model <bibref role="informative" ref="COM"/>. COM, like
	  CORBA, is a language independent way to specify interfaces and
	  objects; the DOM is a set of interfaces and
	  objects designed for managing HTML and XML documents. The DOM
	  may be implemented using language-independent systems like COM
	  or CORBA; it may also be implemented using language-specific
	  bindings like the Java or ECMAScript bindings specified in
	  this document.</p></item>
    </ulist>
  </div2>
  <div2 id="ID-E7C30823">
    <head>Where the Document Object Model came from</head>
    <p>The DOM originated as a specification to
      allow JavaScript scripts and Java programs to be portable among
      Web browsers.  "Dynamic HTML" was  the immediate ancestor of the
      Document Object Model, and it was originally thought of largely
      in terms of  browsers. However, when the DOM
      Working Group was formed at W3C, it was also joined by vendors in other
      domains, including HTML or XML editors and document
      repositories. Several of these vendors had worked with SGML
      before XML was developed; as a result, the DOM
      has been influenced by SGML Groves and the HyTime standard. Some
      of these vendors had also developed their own object models for
      documents in order to provide an API for SGML/XML
      editors or document repositories, and these object models have
      also influenced the DOM.</p>
  </div2>
  

  <div2 id="ID-E7C30824"><head>Entities and the DOM Core</head>
    <p>In the fundamental DOM interfaces, there are no objects representing
      entities. Numeric character references, and references to the
      pre-defined entities in HTML and XML, are replaced by the
      single character that makes up the entity's replacement.
      For example, in:   
    </p>
      <eg role="code" xml:space="preserve">
        &lt;p&gt;This is a dog &amp;amp; a cat&lt;/p&gt;        
      </eg>
    <p>
      the "&amp;amp;" will be replaced by the character "&amp;", and the text
      in the P element will form a single continuous sequence of
      characters. Since numeric character references and pre-defined entities
      are not recognized as such in CDATA sections, or in the SCRIPT and STYLE
      elements in HTML, they are not replaced by the single character they
      appear to refer to. If the example above were enclosed in a CDATA
      section, the "&amp;amp;" would not be replaced by "&amp;"; neither would
      the &lt;p&gt; be recognized as a start tag. The representation of general
      entities, both internal and external, are defined within the
      extended (XML) interfaces of <specref ref="Core"/>.</p>
    <p>
      Note: When a DOM representation of a document is serialized
      as XML or HTML text, applications will need to check each
      character in text data to see if it needs to be escaped
      using a numeric or pre-defined entity. Failing to do so
      could result in invalid HTML or XML. Also, <termref def="dt-implementation">implementations</termref> should be
      aware of the fact that serialization into a character encoding
      ("charset") that does not fully cover ISO 10646 may fail if there are
      characters in markup or CDATA sections that are not present in the
      encoding.</p>
  </div2>

  <div2 id="ID-Conformance">
    <head>Conformance</head>
    <p>
      This section explains the different levels of conformance to DOM Level 3.
      DOM Level 3 consists of ? modules. It is possible to conform to DOM
      Level 3, or to a DOM Level 3 module.
    </p>

    <p>
      An implementation is DOM Level 3 conformant if it supports the Core
      module defined in this document (see <specref ref="ID-BBACDC08"/>). An
      implementation conforms to a DOM Level 3 module if it supports all the
      interfaces for that module and the associated semantics.
    </p>
    <p>
      Here is the complete list of DOM Level 3.0 modules and the features used
      by them.  Feature names are case-insensitive.
    </p>

    <glist>
      <gitem>
	<label>Core module</label>
	<def>
	  <p>
	    defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="core.html#ID-BBACDC08" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"Core"</xspecref>.
	  </p>
	</def>
      </gitem>
      <gitem>
	<label>XML module</label>
	<def>
	  <p>
	    Defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="core.html#ID-E067D597" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"XML"</xspecref>.
	  </p>
	</def>
      </gitem>
      <gitem>
	<label>Events module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-Events/events.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"Events"</xspecref> in <bibref role="informative" ref="DOMEvents"/>.</p>
	</def>
      </gitem>
      <gitem>
	<label>User interface Events module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-Events/events.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"UIEvents"</xspecref> in
	  <bibref role="informative" ref="DOMEvents"/>.</p>
	</def>
      </gitem>
      <gitem>
	<label>Mouse Events module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-Events/events.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"MouseEvents"</xspecref> in
	  <bibref role="informative" ref="DOMEvents"/>.</p>
	</def>
      </gitem>
      <gitem>
	<label>Text Events module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-Events/events.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"TextEvents"</xspecref> in
	  <bibref role="informative" ref="DOMEvents"/>.</p>
	</def>
      </gitem>
      <gitem>
	<label>Mutation Events module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-Events/events.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"MutationEvents"</xspecref> in
	  <bibref role="informative" ref="DOMEvents"/>.</p>
	</def>
      </gitem>
      <gitem>
	<label>HTML Events module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-Events/events.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"HTMLEvents"</xspecref> in
	  <bibref role="informative" ref="DOMEvents"/>.</p>
	</def>
      </gitem>
      <!-- REVISIT: LS and AS features -->
      <gitem>
	<label>Load module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-LS/load-save.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"LS-Load"</xspecref> in <bibref role="informative" ref="DOMLS"/>.</p>
	</def>
      </gitem>
      <gitem>
	<label>Asynchronous load module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-LS/load-save.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"LS-Load-async"</xspecref>
	  in <bibref role="informative" ref="DOMLS"/>.</p>
	</def>
      </gitem>
      <gitem>
	<label>Save module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-LS/load-save.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"LS-Save"</xspecref>
	  in <bibref role="informative" ref="DOMLS"/>.</p>
	</def>
      </gitem>
      <gitem>
	<label>Validation module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-Val/validation.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"VAL-DOC"</xspecref>
	  in <bibref role="informative" ref="DOMVal"/>.</p>
	</def>
      </gitem>
      <gitem>
	<label>XPath module</label>
	<def>
	  <p>defines the feature <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">"XPath"</xspecref> in
	   <bibref role="informative" ref="DOMXPath"/>.</p>
	</def>
      </gitem>
    </glist>
    
    <p>
      A DOM implementation must not return <code>true</code> to the
      <code>hasFeature(feature, version)</code> <termref def="dt-method">method</termref> of the <code>DOMImplementation</code>
      interface for that feature unless the implementation conforms to that
      module. The <code>version</code> number for all features used in DOM
      Level 3.0 is <code>"3.0"</code>.
    </p>
  </div2>

  <div2 id="ID-E7C30826"><head>DOM Interfaces and DOM Implementations</head>

    <p>The DOM specifies interfaces which may be used to manage XML or
      HTML documents. It is important to realize that these interfaces
      are an abstraction - much like "abstract base classes" in C++,
      they are a means of specifying a way to access and manipulate an
      application's internal representation of a document. Interfaces 
	do not imply a particular concrete
      implementation. Each DOM application is free to maintain
      documents in any convenient representation, as long as the
      interfaces shown in this specification are supported. Some
      DOM implementations will be existing programs that use the
      DOM interfaces to access software written long before the
      DOM specification existed. Therefore, the DOM is designed
      to avoid implementation dependencies; in particular,</p>
    <olist>
      <item><p>Attributes defined in the IDL do not imply concrete
	  objects which must have specific data members - in the
	  language bindings, they are translated to a pair of
	  get()/set() functions, not to a data member. Read-only
	  attributes have only a get() function in the language
	  bindings.  </p>
      </item>
      <item><p>DOM applications may provide additional interfaces
	  and objects not found in this specification and still be
	  considered DOM conformant.</p></item>
      <item><p>Because we specify interfaces and not the actual
	  objects that are to be created, the DOM cannot know what
	  constructors to call for an implementation.  In general,
	  DOM users call the createX() methods on the Document
	  class to create document structures, and DOM
	  implementations create their own internal representations
	  of these structures in their implementations of the
	  createX() functions.
	</p></item>
    </olist>
    <p>
      The Level 2 interfaces were extended to provide both Level 2 and Level 3
      functionality.
    </p>
    <p>
      DOM implementations in languages other than Java or ECMAScript may choose
      bindings that are appropriate and natural for their language and run time
      environment.  For example, some systems may need to create a Document3
      class which inherits from a Document class and contains the new methods
      and attributes.
    </p>
    <p>DOM Level 3 does not specify multithreading mechanisms.</p>
  </div2>
</div1>
<!--
  *************************************************************************
  * END OF DOM INTRODUCTION                                               *
  *************************************************************************
-->


</front> 
 
<body>
  
<!-- $Id: xml-source.xml,v 1.2 2003/02/26 20:40:49 plehegar Exp $ -->
<!--
 *************************************************************************
 * BEGINNING OF CORE                                                     *
 *************************************************************************
-->
<div1 id="Core">
  <head>Document Object Model Core</head>
  <orglist role="editors">
    <member>
      <name>Arnaud Le Hors</name>
      <affiliation>IBM</affiliation>
    </member>
    <member>
      <name>Philippe Le H&#233;garet</name>
      <affiliation>W3C</affiliation>
    </member>
    <member>
      <name>Gavin Nicol</name>
      <affiliation>Inso EPS (for DOM Level 1)</affiliation>
    </member>
    <member>
      <name>Lauren Wood</name>
      <affiliation>SoftQuad, Inc. (for DOM Level 1)</affiliation>
    </member>
    <member>
      <name>Mike Champion</name>
      <affiliation>ArborText and Software AG (for DOM Level 1 from November 20,
        1997)</affiliation>
    </member>
    <member>
      <name>Steve Byrne</name>
      <affiliation>JavaSoft (for DOM Level 1 until November 19,
        1997)</affiliation>
    </member>
  </orglist>
  <?GENERATE-MINI-TOC?>
  <!--
  ******************************************************
  | INTRODUCTION                                       |
  ******************************************************
  -->
  <div2 id="ID-1590626201">
    <head>Overview of the DOM Core Interfaces</head> <p>This section
    defines a set of objects and interfaces for accessing and
    manipulating document objects. The functionality specified in this
    section (the <emph>Core</emph> functionality) is sufficient to allow
    software developers and web script authors to access and manipulate
    parsed HTML and XML content inside conforming products. The DOM Core
    <termref def="dt-API">API</termref> also allows creation and
    population of a <code>Document</code> object using only DOM API
    calls. A solution for loading a <code>Document</code> and saving it
    persistently is proposed in <bibref role="informative" ref="DOMLS"/>.
    </p>

    <div3 id="ID-1590626202"><head>The DOM Structure Model</head>	
      <p>The DOM presents documents as a hierarchy of <code>Node</code> objects
        that also implement other, more specialized interfaces. Some types of
        nodes may have <termref def="dt-child">child</termref> nodes of various
        types, and others are leaf nodes that cannot have anything below them
        in the document structure. For XML and HTML, the node types, and which
        node types they may have as children, are as follows:
        <ulist>	
          <item>
            <p><code>Document</code> -- <code>Element</code> (maximum of one),
              <code>ProcessingInstruction</code>, <code>Comment</code>,
              <code>DocumentType</code> (maximum of one) </p>
          </item>	
          <item>
            <p><code>DocumentFragment</code> -- <code>Element</code>,
              <code>ProcessingInstruction</code>, <code>Comment</code>,
              <code>Text</code>, <code>CDATASection</code>,
              <code>EntityReference</code> </p>
          </item>	
          <item>
            <p><code>DocumentType</code> -- no children</p>
          </item>	
          <item>
            <p><code>EntityReference</code> -- <code>Element</code>,
              <code>ProcessingInstruction</code>, <code>Comment</code>,
              <code>Text</code>, <code>CDATASection</code>,
              <code>EntityReference</code> </p>
          </item>	
          <item>
            <p><code>Element</code> -- <code>Element</code>, <code>Text</code>,
              <code>Comment</code>, <code>ProcessingInstruction</code>,
              <code>CDATASection</code>, <code>EntityReference</code></p>
          </item>	
          <item>
            <p><code>Attr</code> -- <code>Text</code>,
              <code>EntityReference</code></p>
          </item>	
          <item>
            <p><code>ProcessingInstruction</code> -- no children</p>
          </item>	
          <item>
            <p><code>Comment</code> -- no children</p>
          </item>	
          <item>
            <p><code>Text</code> -- no children</p>
          </item>	
          <item>
            <p><code>CDATASection</code> -- no children</p>
          </item>	
          <item>
            <p><code>Entity</code> -- <code>Element</code>,
              <code>ProcessingInstruction</code>, <code>Comment</code>,
              <code>Text</code>, <code>CDATASection</code>,
              <code>EntityReference</code></p>
          </item>	
          <item>
            <p><code>Notation</code> -- no children</p>
          </item>	
        </ulist> </p>
      <p>The DOM also specifies a <code>NodeList</code> interface to handle
        ordered lists of <code>Nodes</code>, such as the children of a
        <code>Node</code>, or the <termref def="dt-element">elements</termref>
        returned by the <code>getElementsByTagName</code> method of the
        <code>Element</code> interface, and also a <code>NamedNodeMap</code>
        interface to handle unordered sets of nodes referenced by their name
        attribute, such as the attributes of an <code>Element</code>.
        <termdef id="td-live" term="live"> <code>NodeList</code> and
          <code>NamedNodeMap</code> objects in the DOM are <term>live</term>;
          that is, changes to the underlying document structure are reflected
          in all relevant <code>NodeList</code> and <code>NamedNodeMap</code>
          objects. For example, if a DOM user gets a <code>NodeList</code>
          object containing the children of an <code>Element</code>, then
          subsequently adds more children to that
          <termref def="dt-element">element</termref> (or removes children, or
          modifies them), those changes are automatically reflected in the
          <code>NodeList</code>, without further action on the user's
          part. Likewise, changes to a <code>Node</code> in the tree are
          reflected in all references to that <code>Node</code> in
          <code>NodeList</code> and <code>NamedNodeMap</code>
          objects.</termdef></p> <p>Finally, the interfaces <code>Text</code>,
        <code>Comment</code>, and <code>CDATASection</code> all inherit from
        the <code>CharacterData</code> interface.</p>
    </div3>
    <div3 id="ID-249F15BA"><head>Memory Management</head>
      <p>Most of the APIs defined by this specification are
        <emph>interfaces</emph> rather than classes. That means that an
        implementation need only expose methods with the defined names and
        specified operation, not implement classes that correspond directly to
        the interfaces. This allows the DOM APIs to be implemented as a thin
        veneer on top of legacy applications with their own data structures, or
        on top of newer applications with different class hierarchies. This
        also means that ordinary constructors (in the Java or C++ sense) cannot
        be used to create DOM objects, since the underlying objects to be
        constructed may have little relationship to the DOM interfaces. The
        conventional solution to this in object-oriented design is to define
        <emph>factory</emph> methods that create instances of objects that
        implement the various interfaces. Objects implementing some interface
        "X" are created by a "createX()" method on the <code>Document</code>
        interface; this is because all DOM objects live in the context of a
        specific Document.</p>
      <p>The Core DOM APIs are designed to be compatible with a wide range of
        languages, including both general-user scripting languages and the more
        challenging languages used mostly by professional programmers. Thus,
        the DOM APIs need to operate across a variety of memory management
        philosophies, from language bindings that do not expose memory
        management to the user at all, through those (notably Java) that
        provide explicit constructors but provide an automatic garbage
        collection mechanism to automatically reclaim unused memory, to those
        (especially C/C++) that generally require the programmer to explicitly
        allocate object memory, track where it is used, and explicitly free it
        for re-use. To ensure a consistent API across these platforms, the DOM
        does not address memory management issues at all, but instead leaves
        these for the implementation. Neither of the explicit language bindings
        defined by the DOM API (for
        <termref def="dt-ECMAScript">ECMAScript</termref> and Java) require any
        memory management methods, but DOM bindings for other languages
        (especially C or C++) may require such support. These extensions will
        be the responsibility of those adapting the DOM API to a specific
        language, not the DOM Working Group.</p>
    </div3>
    <div3 id="ID-45A944CB">
      <head>Naming Conventions</head>
      <p>While it would be nice to have attribute and method names that are
        short, informative, internally consistent, and familiar to users of
        similar APIs, the names also should not clash with the names in legacy
        APIs supported by DOM implementations. Furthermore, both OMG IDL and
        <code>ECMAScript</code> have significant limitations in their ability
        to disambiguate names from different namespaces that make it difficult
        to avoid naming conflicts with short, familiar names. So, DOM names
        tend to be long and descriptive in order to be unique across all
        environments.</p>
      <p>The Working Group has also attempted to be internally consistent in
        its use of various terms, even though these may not be common
        distinctions in other APIs. For example, the DOM API uses the method
        name "remove" when the method changes the structural model, and the
        method name "delete" when the method gets rid of something inside the
        structure model. The thing that is deleted is not returned. The thing
        that is removed may be returned, when it makes sense to return it.</p>
    </div3>
    <div3 id="ID-1CED5498">
      <head>Inheritance vs. Flattened Views of the API</head>
      <p>The DOM Core <termref def="dt-API">APIs</termref> present two somewhat
        different sets of interfaces to an XML/HTML document: one presenting an
        "object oriented" approach with a hierarchy of
        <termref def="dt-inheritance">inheritance</termref>, and a "simplified"
        view that allows all manipulation to be done via the <code>Node</code>
        interface without requiring casts (in Java and other C-like languages)
        or query interface calls in <termref def="dt-COM">COM</termref>
        environments. These operations are fairly expensive in Java and COM,
        and the DOM may be used in performance-critical environments, so we
        allow significant functionality using just the <code>Node</code>
        interface. Because many other users will find the
        <termref def="dt-inheritance">inheritance</termref> hierarchy easier to
        understand than the "everything is a <code>Node</code>" approach to the
        DOM, we also support the full higher-level interfaces for those who
        prefer a more object-oriented <termref def="dt-API">API</termref>. </p>
      <p>In practice, this means that there is a certain amount of redundancy
        in the <termref def="dt-API">API</termref>. The Working Group considers
        the "<termref def="dt-inheritance">inheritance</termref>" approach the
        primary view of the API, and the full set of functionality on
        <code>Node</code> to be "extra" functionality that users may employ,
        but that does not eliminate the need for methods on other interfaces
        that an object-oriented analysis would dictate. (Of course, when the
        O-O analysis yields an attribute or method that is identical to one on
        the <code>Node</code> interface, we don't specify a completely
        redundant one.) Thus, even though there is a generic
        <code>nodeName</code> attribute on the <code>Node</code> interface,
        there is still a <code>tagName</code> attribute on the
        <code>Element</code> interface; these two attributes must contain the
        same value, but the it is worthwhile to support both, given the
        different constituencies the DOM <termref def="dt-API">API</termref>
        must satisfy.</p>
    </div3>
    <div3 id="ID-C74D1578">
      <head>The <code>DOMString</code> type</head>
      <p>To ensure interoperability, the DOM specifies the following:</p>
      <definitions>
	<typedef name="DOMString" id="DOMString">
	  <descr>
	    <p>A <code>DOMString</code> is a sequence of
	      <termref def="dt-16-bit-unit">16-bit units</termref>.</p>
	  </descr>
	  <sequence type="unsigned short"/>
	</typedef>
      </definitions>	
      <p>Applications must encode <code>DOMString</code> using UTF-16
	(defined in <bibref ref="Unicode"/> and Amendment 1 of
	<bibref ref="ISO10646"/>).</p>
      <p>The UTF-16 encoding was chosen because of its widespread industry
      practice. Note that for both HTML and XML, the document character set
      (and therefore the notation of numeric character references) is based on
      UCS <bibref ref="ISO10646"/>. A single numeric character reference in a
      source document may therefore in some cases correspond to two 16-bit
      units in a <code>DOMString</code> (a high surrogate and a low
      surrogate).</p>
      <note>
	<p>Even though the DOM defines the name of the string type to be
	  <code>DOMString</code>, bindings may use different names. For
	  example for Java, <code>DOMString</code> is bound to the
	  <code>String</code> type because it also uses UTF-16 as its
	  encoding.</p>
      </note>
      <note>
        <p>As of August 2000, the OMG IDL specification
          (<bibref ref="OMGIDL"/>) included a <code>wstring</code>
            type. However, that definition did not meet the interoperability
            criteria of the DOM <termref def="dt-API">API</termref> since it
            relied on negotiation to decide the width and encoding of a
            character.</p>
      </note>
    </div3>
    <div3 id="Core-DOMTimeStamp">
      <head>The <code>DOMTimeStamp</code> type</head>
      <p>To ensure interoperability, the DOM specifies the following:</p>
      <definitions>
	<typedef name="DOMTimeStamp" id="DOMTimeStamp">
	  <descr>
	    <p>A <code>DOMTimeStamp</code> represents a number of
	      milliseconds.</p>
	  </descr>
	  <typename>unsigned long long</typename>
	</typedef>
      </definitions>	
      <note>
	<p> Even though the DOM uses the type <code>DOMTimeStamp</code>,
	  bindings may use different types. For example for Java,
	  <code>DOMTimeStamp</code> is bound to the <code>long</code>
	  type. In ECMAScript, <code>DOMTimeStamp</code> is bound to the
	  <code>Date</code> type because the range of the
	  <code>integer</code> type is too small.</p>
      </note>	
    </div3>
    <div3 id="Core-DOMUserData">
      <head>The <code>DOMUserData</code> type</head>
      <p>To ensure interoperability, the DOM specifies the following:</p>
      <definitions>
	<typedef name="DOMUserData" id="DOMUserData">
	  <descr>
	    <p>A <code>DOMUserData</code> represents a reference to an
              application object.</p>
	  </descr>
	  <typename>any</typename>
	</typedef>
      </definitions>
      <note>
	<p>Even though the DOM uses the type <code>DOMUserData</code>, bindings
	  may use different types. For example, in Java <code>DOMUserData</code>
          is bound to the <code>Object</code> type, while in ECMAScript
          <code>DOMUserData</code> is bound to <code>any type</code>.</p>
      </note>	
      <issue id="DOMKeyObject-1" status="open">
        <p>What does DOMUserData map to in ECMAScript?</p>
        <resolution>
          <p>"any type"</p>
        </resolution>
      </issue>
    </div3>
    <div3 id="Core-DOMObject">
      <head>The <code>DOMObject</code> type</head>
      <p>To ensure interoperability, the DOM specifies the following:</p>
      <definitions>
	<typedef name="DOMObject" id="DOMObject">
	  <descr>
	    <p>A <code>DOMObject</code> represents a reference to an
              application object.</p>
	  </descr>
	  <typename>Object</typename>
	</typedef>
      </definitions>
      <note>
	<p>Even though the DOM uses the type <code>DOMObject</code>, bindings
	may use different types. For example, in Java and ECMAScript
	<code>DOMObject</code> is bound to the <code>Object</code> type.</p>
      </note>
    </div3>
    <div3 id="ID-5DFED1F0">
      <head>String comparisons in the DOM</head>
      <p>The DOM has many interfaces that imply string matching. HTML
        processors generally assume an uppercase (less often, lowercase)
        normalization of names for such things as
        <termref def="dt-element">elements</termref>, while XML is explicitly
        case sensitive. For the purposes of the DOM, string matching is
        performed purely by binary
        <termref def="dt-string-compare">comparison</termref> of the
        <termref def="dt-16-bit-unit">16-bit units</termref> of the
        <code>DOMString</code>. In addition, the DOM assumes that any case
        normalizations take place in the processor, <emph>before</emph> the DOM
        structures are built.</p>
      <p>
	The W3C Text normalization, as defined in <bibref role="informative" ref="Charmod"/>, is
	assumed to happen at serialization time. The DOM Level 3 Load and Save
	module <bibref role="informative" ref="DOMLS"/> provides a serialization mechanism (see
	the <code>DOMWriter</code> interface, section 2.3.1) and defines the
	<code>"ls-normalize-characters"</code> to assure that text is
	serialized in the W3C Text Normalization form. Other serialization
	mechanisms built on top of the DOM Level 3 Core also have to assure
	that text is serialized in the W3C Text Normalization form.
      </p>

<!--
      <note>	
        <p>Besides case folding, there are additional normalizations that can
          be applied to text. The W3C I18N Working Group is in the process of
          defining exactly which normalizations are necessary, and where they
          should be applied. The W3C I18N Working Group expects to require
          early normalization, which means that data read into the DOM is
          assumed to already be normalized. The DOM and applications built on
          top of it in this case only have to assure that text remains
          normalized when being changed. For further details, please see
          <bibref ref="Charmod"/>.</p>
      </note>
-->
      <note role="editorial">
	<p>
	  We need to review the case sensitivity of methods and attributes and
	  how it fits with XML and HTML. Current wording is not clear at all
	  ...
	</p>
      </note>
    </div3>
    <div3 id="Namespaces-Considerations">
      <head>XML Namespaces</head>

      <p>The DOM Level 2 (and higher) supports XML namespaces <bibref ref="Namespaces"/> by augmenting several interfaces of the DOM Level 1
        Core to allow creating and manipulating <termref def="dt-element">elements</termref> and attributes associated to a
        namespace.</p>
      <p>As far as the DOM is concerned, special attributes used for declaring
        <termref def="dt-XML-namespace">XML namespaces</termref> are still
        exposed and can be manipulated just like any other attribute. However,
        nodes are permanently bound to <termref def="dt-namespaceURI">namespace
          URIs</termref> as they get created. Consequently, moving a node
        within a document, using the DOM, in no case results in a change of its
        <termref def="dt-namespaceprefix">namespace prefix</termref> or
        namespace URI. Similarly, creating a node with a namespace prefix and
        namespace URI, or changing the namespace prefix of a node, does not
        result in any addition, removal, or modification of any special
        attributes for declaring the appropriate XML namespaces. Namespace
        validation is not enforced; the DOM application is responsible. In
        particular, since the mapping between prefixes and namespace URIs is
        not enforced, in general, the resulting document cannot be serialized
        naively. For example, applications may have to declare every namespace
        in use when serializing a document.</p>
      <p>In general, the DOM implementation (and higher) doesn't perform any
        URI normalization or  canonicalization. The URIs given to the DOM are
        assumed to be valid (e.g., characters such as white spaces are properly
        escaped), and no lexical checking is performed. Absolute URI references
        are treated as strings and <termref def="dt-string-compare">compared
          literally</termref>. How relative namespace URI references are
        treated is undefined. To ensure interoperability only absolute
        namespace URI references (i.e., URI references beginning with a scheme
        name and a colon) should be used. Applications should use the value null as the namespaceURI parameter
	for methods if they wish to have no namespace. In programming
	languages where empty strings can be differentiated from null,
	the way empty strings are treated, when given as a namespace URI
	to a DOM Level 2 method, is implementation dependent. This is
	true even though the DOM does no lexical checking of URIs.</p> 
      <note>
	<p>
	  <code>setAttributeNS(null, ...)</code> put the attribute in
	  the <term>per-element-type partitions</term> as defined in
	  <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/1999/REC-xml-names-19990114" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">XML Namespace
	  Partitions</xspecref> in <bibref ref="Namespaces"/>.
	</p>
      </note>
      <note>
        <p>In the DOM, all namespace declaration attributes are <emph>by
            definition</emph> bound to the namespace URI:
          "<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2000/xmlns/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/2000/xmlns/</loc>". These are the attributes
          whose <termref def="dt-namespaceprefix">namespace prefix</termref> or
          <termref def="dt-qualifiedname">qualified name</termref> is
          "xmlns". Although, at the time of writing, this is not part of the
          XML Namespaces specification <bibref ref="Namespaces"/>, it is
            planned to be incorporated in a future revision.</p>
      </note>
      <p>In a document with no namespaces, the
        <termref def="dt-child">child</termref> list of an
        <code>EntityReference</code> node is always the same as that of the
        corresponding <code>Entity</code>. This is not true in a document where
        an entity contains unbound <termref def="dt-namespaceprefix">namespace
          prefixes</termref>. In such a case, the
        <termref def="dt-descendant">descendants</termref> of the corresponding
        <code>EntityReference</code> nodes may be bound to different
        <termref def="dt-namespaceURI">namespace URIs</termref>, depending on
        where the entity references are. Also, because, in the DOM, nodes
        always remain bound to the same namespace URI, moving such
        <code>EntityReference</code> nodes can lead to documents that cannot be
        serialized. This is also true when the DOM Level 1 method
        <code>createEntityReference</code> of the <code>Document</code>
        interface is used to create entity references that correspond to such
        entities, since the <termref def="dt-descendant">descendants</termref>
        of the returned <code>EntityReference</code> are unbound. The DOM Level
        2 does not support any mechanism to resolve namespace prefixes. For all
        of these reasons, use of such entities and entity references should be
        avoided or used with extreme care. A future Level of the DOM may
        include some additional support for handling these.</p>
      <p>The new methods, such as <code>createElementNS</code> and
        <code>createAttributeNS</code> of the <code>Document</code> interface,
        are meant to be used by namespace aware applications. Simple
        applications that do not use namespaces can use the DOM Level 1
        methods, such as <code>createElement</code> and
        <code>createAttribute</code>. Elements and attributes created in this
        way do not have any namespace prefix, namespace URI, or local name.</p>
      <note>
	<p role="Infoset">
	  Given that the property [in-scope namespaces] defined in <bibref ref="InfoSet"/> is not accessible from DOM Level 3 Core, the
	  properties [prefix] and [namespace name] defined by the Namespace
	  Information Item in <bibref ref="InfoSet"/> are not accessible from
	  DOM Level 3 Core. However, <bibref role="informative" ref="DOMXPath"/> does provide a way to access them.
	</p>
      </note>      
      <note>
        <p>DOM Level 1 methods are namespace ignorant. Therefore, while it is
          safe to use these methods when not dealing with namespaces, using
          them and the new ones at the same time should be avoided. DOM Level 1
          methods solely identify attribute nodes by their
          <code>nodeName</code>. On the contrary, the DOM Level 2 methods
          related to namespaces, identify attribute nodes by their
          <code>namespaceURI</code> and <code>localName</code>. Because of this
          fundamental difference, mixing both sets of methods can lead to
          unpredictable results. In particular, using
          <code>setAttributeNS</code>, an
          <termref def="dt-element">element</termref> may have two attributes
          (or more) that have the same <code>nodeName</code>, but different
          <code>namespaceURI</code>s. Calling <code>getAttribute</code> with
          that <code>nodeName</code> could then return any of those
          attributes. The result depends on the implementation. Similarly,
          using <code>setAttributeNode</code>, one can set two attributes (or
          more) that have different <code>nodeNames</code> but the same
          <code>prefix</code> and <code>namespaceURI</code>. In this case
          <code>getAttributeNodeNS</code> will return either attribute, in an
          implementation dependent manner. The only guarantee in such cases is
          that all methods that access a named item by its
          <code>nodeName</code> will access the same item, and all methods
          which access a node by its URI and local name will access the same
          node. For instance, <code>setAttribute</code> and
          <code>setAttributeNS</code> affect the node that
          <code>getAttribute</code> and <code>getAttributeNS</code>,
          respectively, return.</p>
      </note>
    </div3>

    <div3 id="baseURIs-Considerations">
      <head>Base URIs</head>

      <p>The DOM Level 3 adds support for the [base URI] property defined in
        <bibref ref="InfoSet"/> by providing a new attribute on the
        <code>Node</code> interface that exposes this information. However,
        unlike the <code>namespaceURI</code> attribute, the
        <code>baseURI</code> attribute is not a static piece of information
        that every node carries. Instead, it is a value that is dynamically
        computed according to <bibref ref="XMLBase"/>. This means its value
        depends on the location of the node in the tree and moving the node
        from one place to another in the tree may affect its value. Other
        changes, such as adding or changing an xml:base attribute on the node
        being queried or one of its ancestors may also affect its value.
      </p>
      <p>One consequence of this it that when external entity references are
        expanded while building a <code>Document</code> one may need to add, or
        update it if one already exists, an xml:base attribute to the
        <code>Element</code> nodes originally contained in the entity being
        expanded so that the <code>baseURI</code> returns the correct value. In
        the case of <code>ProcessingInstruction</code> nodes originally
        contained in the entity being expanded the information is lost.
        <bibref role="informative" ref="DOMLS"/> handles elements as described
        here and generates a warning in the latter case.
      </p>

      <issue id="baseURI-5" status="closed">
        <p>This does not work for PIs.</p>
        <resolution>
          <p>Info is lost, a warning is generated (Telcon 29 Apr 2002)</p>
        </resolution>
      </issue>
    </div3>

    <div3 id="Embedded-DOM">
      <head>Mixed DOM implementations</head>

      <p>As new XML vocabularies are developed, those defining the vocabularies
	are also beginning to define specialized APIs for manipulating XML
	instances of those vocabularies. This is usually done by extending the
	DOM to provide interfaces and methods that perform operations
	frequently needed their users. For example, the MathML <bibref role="informative" ref="MathML2"/> and SVG
	<bibref role="informative" ref="SVG1"/> specifications are developing DOM extensions to allow users to
	manipulate instances of these vocabularies using semantics appropriate
	to images and mathematics (respectively) as well as the generic DOM XML
	semantics. Instances of SVG or MathML are often embedded in XML
	documents conforming to a different schema such as XHTML.
      </p>

      <p>
	While the XML Namespaces Recommendation provides a mechanism for
	integrating these documents at the syntax level, it has become clear
	that the DOM Level 2 Recommendation <bibref ref="DOM2Core"/> is not
	rich enough to cover all the issues that have been encountered in
	having these different DOM implementations be used together in a single
	application. DOM Level 3 deals with the requirements brought about by
	embedding fragments written according to a specific markup language
	(the embedded component) in a document where the rest of the markup is
	not written according to that specific markup language (the host
	document). It does not deal with fragments embedded by reference or
	linking.</p>

      <p>A DOM implementation supporting DOM Level 3 Core should be able to
	collaborate with subcomponents implementing specific DOMs to assemble a
	compound document that can be traversed and manipulated via DOM
	interfaces as if it were a seamless whole.</p>

      <p>The normal typecast operation on an object should support the
	interfaces expected by legacy code for a given document type.
	Typecasting techniques may not be adequate for selecting between
	multiple DOM specializations of an object which were combined at run
	time, because they may not all be part of the same object as defined by
	the binding's object model. Conflicts are most obvious with the
	<code>Document</code> object, since it is shared as owner by the rest
	of the document. In a homogeneous document, elements rely on the
	Document for specialized services and construction of specialized
	nodes. In a heterogeneous document, elements from different modules
	expect different services and APIs from the same <code>Document</code>
	object, since there can only be one owner and root of the document
	hierarchy.</p>
    </div3>

    <div3 id="Bootstrap">
      <head>Bootstrapping</head>

      <p>Because previous versions of the DOM specification only defined a set
        of interfaces, applications had to rely on some implementation
        dependent code to start from. However, hard-coding the application to a
        specific implementation prevents the application from running on other
        implementations and from using the most-suitable implementation of the
        environment. At the same time, implementations may also need to load
        modules or perform other setup to efficiently adapt to different and
        sometimes mutually-exclusive feature sets.</p>

      <p>To solve these problems this specification introduces a
        <code>DOMImplementationRegistry</code> object with a function that lets
        an application find implementations, based on the specific features
        it requires. How this object is found and what it exactly looks like is
        not defined here, because this cannot be done in a language-independent
        manner. Instead, each language binding defines its own way of doing
        this. See <specref ref="java-binding"/> and
          <specref ref="ecma-binding"/> for specifics.</p>

      <p>In all cases, though, the <code>DOMImplementationRegistry</code>
        provides a <code>getDOMImplementation</code> method accepting a
        features string, which is passed to every known
        <code>DOMImplementationSource</code> until a suitable
        <code>DOMImplementation</code> is found and returned.
	The <code>DOMImplementationRegistry</code>
        also provides a <code>getDOMImplementations</code> method accepting a
        features string, which is passed to every known
        <code>DOMImplementationSource</code>, and returns a list of suitable
        <code>DOMImplementations</code>. Those two methods are
        the same as the ones found on the <code>DOMImplementationSource</code>
        interface defined below. </p>

      <p>Any number of <code>DOMImplementationSource</code> objects can be
        registered. A source may return one or more
        <code>DOMImplementation</code> singletons or construct new
        <code>DOMImplementation</code> objects, depending upon whether the
        requested features require specialized state in the
        <code>DOMImplementation</code> object.</p>

      <issue id="Level-3-Bootstrap-1" status="open">
        <p>Is this not generic enough?</p>
        <resolution>
          <p>Yes. (F2F 31 Jul 2001)</p>
        </resolution>
      </issue>
      <issue id="Level-3-Bootstrap-2" status="open">
        <p>Should the method <code>getDOMImplementation</code> be called
          <code>byFeature</code> instead?</p>
        <resolution>
          <p>No. (F2F 31 Jul 2001)</p>
        </resolution>
      </issue>
    </div3>

  </div2>
  <!--
  ******************************************************
  | DOCUMENT OBJECT MODEL APIs                         |
  ******************************************************
  -->
  <div2 id="ID-BBACDC08">
    <head>Fundamental Interfaces</head>

    <p>The interfaces within this section are considered
      <emph>fundamental</emph>, and must be fully implemented by all conforming
      implementations of the DOM, including all HTML DOM implementations
      <bibref role="informative" ref="DOM2HTML"/>, unless otherwise specified.
    </p>
    <p>A DOM application may use the <code>hasFeature(feature, version)</code>
    method of the <code>DOMImplementation</code> interface with parameter
    values "Core" and "3.0" (respectively) to determine whether or not this
    module is supported by the implementation. Any implementation that conforms
    to DOM Level 3 or a DOM Level 3 module must conform to the Core
    module. Please refer to additional information about <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2002/WD-DOM-Level-3-Core-20021022/introduction.html#ID-Conformance" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">conformance</xspecref> in this specification.
    The DOM Level 3 Core module is backward compatible with the DOM Level 2
      Core <bibref ref="DOM2Core"/> module, i.e. a DOM Level 3 Core
      implementation who returns <code>true</code> for "Core"
      with the <code>version</code> number <code>"3.0"</code> must also return
      <code>true</code> for this <code>feature</code> when the
      <code>version</code> number is <code>"2.0"</code>,
      <code>""</code> or, <code>null</code>.
    </p>

    <definitions>
      
<!-- $Date: 2003/02/26 20:40:49 $ $Revision: 1.2 $ -->
<!--[ Exceptions description ]-->
<exception name="DOMException" id="ID-17189187">
  <descr>
    <p>DOM operations only raise exceptions in "exceptional"
      circumstances, i.e., when an operation is impossible to perform (either
      for logical reasons, because data is lost, or because the implementation
      has become unstable). In general, DOM methods return specific error
      values in ordinary processing situations, such as out-of-bound errors
      when using <code>NodeList</code>.</p>
    <p>Implementations should raise other exceptions under other circumstances.
      For example, implementations should raise an implementation-dependent 
      exception if a <code>null</code> argument is passed when
      <code>null</code> was not expected.</p>
    <p>Some languages and object systems do not support the concept of
      exceptions. For such systems, error conditions may be indicated using
      native error reporting mechanisms. For some bindings, for example,
      methods may return error codes similar to those listed in the
      corresponding method descriptions.</p>
  </descr>
  <component id="ID-146F692A" name="code">
    <typename>unsigned short</typename>
  </component>
</exception>
<group id="ID-258A00AF" name="ExceptionCode">
  <descr>
    <p>An integer indicating the type of error generated.</p>
    <note>
      <p>Other numeric codes are reserved for W3C for possible future use.</p>
    </note>
  </descr>
  <constant id="DOMException-INDEX_SIZE_ERR" name="INDEX_SIZE_ERR" type="unsigned short" value="1">
    <descr>
      <p>If index or size is negative, or greater than the allowed value</p>
    </descr>
  </constant>
  <constant id="DOMException-DOMSTRING_SIZE_ERR" name="DOMSTRING_SIZE_ERR" type="unsigned short" value="2">
    <descr>
      <p>If the specified range of text does not fit into a DOMString</p>
    </descr>
  </constant>
  <constant id="DOMException-HIERARCHY_REQUEST_ERR" name="HIERARCHY_REQUEST_ERR" type="unsigned short" value="3">
    <descr>
      <p>If any node is inserted somewhere it doesn't belong</p>
    </descr>
  </constant>
  <constant id="DOMException-WRONG_DOCUMENT_ERR" name="WRONG_DOCUMENT_ERR" type="unsigned short" value="4">
    <descr>
      <p>If a node is used in a different document than the one that created it
        (that doesn't support it)</p>
    </descr>
  </constant>
  <constant id="DOMException-INVALID_CHARACTER_ERR" name="INVALID_CHARACTER_ERR" type="unsigned short" value="5">
    <descr>
      <p>If an invalid or illegal character is specified, such as in a
        name. See <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">production 2</xspecref>
        in the XML specification for the definition of a legal character, and 
        <xspecref xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Name" xlink:type="simple" xlink:show="new" xlink:actuate="onRequest">production 5</xspecref> for the
        definition of a legal name character.</p>
    </descr>
  </constant>
  <constant id="DOMException-NO_DATA_ALLOWED_ERR" name="NO_DATA_ALLOWED_ERR" type="unsigned short" value="6">
    <descr>
      <p>If data is specified for a node which does not support data</p>
    </descr>
  </constant>
  <constant id="DOMException-NO_MODIFICATION_ALLOWED_ERR" name="NO_MODIFICATION_ALLOWED_ERR" type="unsigned short" value="7">
    <descr>
      <p>If an attempt is made to modify an object where modifications are not
        allowed</p>
    </descr>
  </constant>
  <constant id="DOMException-NOT_FOUND_ERR" name="NOT_FOUND_ERR" type="unsigned short" value="8">
    <descr>
      <p>If an attempt is made to reference a node in a context where it does
        not exist</p>
    </descr>
  </constant>
  <constant id="DOMException-NOT_SUPPORTED_ERR" name="NOT_SUPPORTED_ERR" type="unsigned short" value="9">
    <descr>
      <p>If the implementation does not support the requested type of object or
        operation.</p>
    </descr>
  </constant>
  <constant id="DOMException-INUSE_ATTRIBUTE_ERR" name="INUSE_ATTRIBUTE_ERR" type="unsigned short" value="10">
    <descr>
      <p>If an attempt is made to add an attribute that is already in use
	elsewhere</p>
    </descr>
  </constant>
  <!-- ****** DOM Level 2 additions ****** -->
  <constant id="DOMException-INVALID_STATE_ERR" name="INVALID_STATE_ERR" type="unsigned short" value="11" since="DOM Level 2">
    <descr>
      <p>If an attempt is made to use an object that is not, or is no longer,
        usable.</p>
    </descr>
  </constant>
  <constant id="DOMException-SYNTAX_ERR" name="SYNTAX_ERR" type="unsigned short" value="12" since="DOM Level 2">
    <descr>
      <p>If an invalid or illegal string is specified.</p>
    </descr>
  </constant>
  <constant id="DOMException-INVALID_MODIFICATION_ERR" name="INVALID_MODIFICATION_ERR" type="unsigned short" value="13" since="DOM Level 2">
    <descr>
      <p>If an attempt is made to modify the type of the underlying object.</p>
    </descr>
  </constant>
  <constant id="DOMException-NAMESPACE_ERR" name="NAMESPACE_ERR" type="unsigned short" value="14" since="DOM Level 2">
    <descr>
      <p>If an attempt is made to create or change an object in a way which is
        incorrect with regard to namespaces.</p>
    </descr>
  </constant>
  <constant id="DOMException-INVALID_ACCESS_ERR" name="INVALID_ACCESS_ERR" type="unsigned short" value="15" since="DOM Level 2">
    <descr>
      <p>If a parameter or an operation is not supported by the underlying
        object.</p>
    </descr>
  </constant>
  <constant id="DOMException-VALIDATION_ERR" name="VALIDATION_ERR" type="unsigned short" value="16" since="DOM Level 3">
    <descr>
      <p>If a call to a method such as <code>insertBefore</code> or
      <code>removeChild</code> would make the <code>Node</code> invalid with
      respect to <termref def="dt-partially-valid">"partial
      validity"</termref>, this exception would be raised and the operation
      would not be done. This code is used in <bibref role="informative" ref="DOMVal"/>. Refer to this specification for further information.</p>
    </descr>
  </constant>
</group>
 
<!-- $Date: 2003/02/26 20:40:49 $ -->
<!--[ NameList object description ]-->
<interface name="DOMStringList" id="DOMStringList" since="DOM Level 3">
  <descr>
    <p>
      The <code>DOMStringList</code> interface provides the abstraction
      of an ordered collection of parallel pairs of name and namespace
      values, without defining or constraining how this collection is
      implemented. The items in the <code>DOMStringList</code> are accessible
      via an integral index, starting from 0.
    </p>
  </descr>

  <method name="item" id="DOMStringList-item">
    <descr>
      <p>
	Returns the <code>index</code>th item in the collection. If
	<code>index</code> is greater than or equal to the number of
	<code>DOMString</code>s in the list, this returns
	<code>null</code>.
      </p>
    </descr>
    <parameters>
      <param name="index" type="unsigned long" attr="in">
	<descr>
          <p>Index into the collection.</p>
        </descr>
      </param>
    </parameters>
    <returns type="DOMString">
      <descr>
        <p>
	  The <code>DOMString</code> at the <code>index</code>th
	  position in the <code>DOMStringList</code>, or
	  <code>null</code> if that is not a valid index.
	</p>
      </descr>
    </returns>
    <raises>
      <!-- No exceptions -->
    </raises>
  </method>

  <attribute type="unsigned long" readonly="yes" name="length" id="DOMStringList-length">
    <descr>
      <p>The number of <code>DOMString</code>s in the list. The range of
      valid child node indices is 0 to <code>length-1</code>
      inclusive.</p>
    </descr>
  </attribute>
</interface>
      
 
<!-- $Date: 2003/02/26 20:40:49 $ -->
<!--[ NameList object description ]-->
<interface name="NameList" id="NameList" since="DOM Level 3">
  <descr>
    <p>
      The <code>NameList</code> interface provides the abstraction of an
      ordered collection of parallel pairs of name and namespace values,
      without defining or constraining how this collection is
      implemented. The items in the <code>NameList</code> are accessible
      via an integral index, starting from 0.
    </p>
  </descr>

  <method name="getName" id="NameList-getName">
    <descr>
      <p>
	Returns the <code>index</code>th name item in the collection.
      </p>
    </descr>
    <parameters>
      <param name="index" type="unsigned long" attr="in">
	<descr>
          <p>Index into the collection.</p>
        </descr>
      </param>
    </parameters>
    <returns type="DOMString">
      <descr>
        <p>
	  The <code>DOMString</code> at the <code>index</code>th
	  position in the <code>NameList</code>.
	</p>
      </descr>
    </returns>
    <raises>
      <exception name="DOMException">
	<descr>
	  <p>
	    INDEX_SIZE_ERR: If <code>index</code> is
	    greater than or equal to the number of nodes in the list.
	  </p>
	</descr>
      </exception>
    </raises>
  </method>

  <method name="getNamespaceURI" id="NameList-getNamespaceURI">
    <descr>
      <p>
	Returns the <code>index</code>th namespaceURI item in the
	collection.
      </p>
    </descr>
    <parameters>
      <param name="index" type="unsigned long" attr="in">
	<descr>
          <p>Index into the collection.</p>
        </descr>
      </param>
    </parameters>
    <returns type="DOMString">
      <descr>
        <p>
	  The <code>DOMString</code> at the <code>index</code>th
	  position in the <code>NameList</code>.
	</p>
      </descr>
    </returns>
    <raises>
      <exception name="DOMException">
	<descr>
	  <p>
	    INDEX_SIZE_ERR: If <code>index</code> is greater than or
	    equal to the number of nodes in the list.
	  </p>
	</descr>
      </exception>
    </raises>
  </method>

  <attribute type="unsigned long" readonly="yes" name="length" id="NameList-length">
    <descr>
      <p>
	The number of pairs (name and namespaceURI) in the list. The
	range of valid child node indices is 0 to <code>length-1</code>
	inclusive.</p>
    </descr>
  </attribute>
</interface>
      

      
<!-- $Date: 2003/02/26 20:40:49 $ -->
<!--[ NameList object description ]-->
<interface name="DOMImplementationList" id="DOMImplementationList" since="DOM Level 3">
  <descr>
    <p>
      The <code>DOMImplementationList</code> interface provides the
      abstraction of an ordered collection of DOM implementations,
      without defining or constraining how this collection is
      implemented. The items in the <code>DOMImplementationList</code>
      are accessible via an integral index, starting from 0.
    </p>
  </descr>

  <method name="item" id="DOMImplementationList-item">
    <descr>
      <p>
	Returns the <code>index</code>th item in the collection. If
	<code>index</code> is greater than or equal to the number of
	<code>DOMImplementation</code>s in the list, this returns
	<code>null</code>.
      </p>
    </descr>
    <parameters>
      <param name="index" type="unsigned long" attr="in">
	<descr>
          <p>Index into the collection.</p>
        </descr>
      </param>
    </parameters>
    <returns type="DOMImplementation">
      <descr>
        <p>
	  The <code>DOMImplementation</code> at the <code>index</code>th
	  position in the <code>DOMImplementationList</code>, or
	  <code>null</code> if that is not a valid index.
	</p>
      </descr>
    </returns>
    <raises>
      <!-- No exceptions -->
    </raises>
  </method>

  <attribute type="unsigned long" readonly="yes" name="length" id="DOMImplementationList-length">
    <descr>
      <p>
	The number of <code>DOMImplementation</code>s in the list. The
	range of valid child node indices is 0 to <code>length-1</code>
	inclusive.
      </p>
    </descr>
  </attribute>
</interface>
      
 
<!-- $Id: xml-source.xml,v 1.2 2003/02/26 20:40:49 plehegar Exp $ -->
<interface name="DOMImplementationSource" id="DOMImplementationSource" since="DOM Level 3">
  <descr>
    <p>This interface permits a DOM implementer to supply one or more
      implementations, based upon requested features. Each implemented
      <code>DOMImplementationSource</code> object is listed in the
      binding-specific list of available sources so that its
      <code>DOMImplementation</code> objects are made available.</p>
  </descr>
  <method name="getDOMImplementation" id="ID-getDOMImpl">
    <descr>
      <p>
	A method to request the first DOM implementation that support the
	specified features.
      </p>
    </descr>
    <parameters>
      <param name="features" type="DOMString" attr="in">
        <descr>
          <p>A string that specifies which features are required. This is a
            space separated list in which each feature is specified by its name
            optionally followed by a space and a version number. This is
            something like: "XML 1.0 Traversal Events 2.0"</p>
        </descr>
      </param>
    </parameters>
    <returns type="DOMImplementation">
      <descr>
        <p>The first DOM implementation that support the desired features, or
          <code>null</code> if this source has none.</p>
      </descr>
    </returns>
    <raises>
      <!-- Throws no exceptions -->
    </raises>
  </method>

  <method name="getDOMImplementations" id="ID-getDOMImpls">
    <descr>
      <p>A method to request a list of DOM implementations that support
      the specified features.</p>
    </descr>
    <parameters>
      <param name="features" type="DOMString" attr="in">
        <descr>
          <p>A string that specifies which features are required. This is a
            space separated list in which each feature is specified by its name
            optionally followed by a space and a version number. This is
            something like: "XML 1.0 Traversal Events 2.0"</p>
        </descr>
      </param>
    </parameters>
    <returns type="DOMImplementationList">
      <descr>
        <p>A list of DOM implementations that support the desired
        features.</p>
      </descr>
    </returns>
    <raises>
      <!-- Throws no exceptions -->
    </raises>
  </method>
</interface>

      
<!--[ DOMImplementation object description ]-->    
<!-- $Date: 2003/02/26 20:40:49 $ $Revision: 1.2 $ -->
<interface name="DOMImplementation" id="ID-102161490">
  <descr>
    <p>The <code>DOMImplementation</code> interface provides a number of
      methods for performing operations that are independent of any particular
      instance of the document object model.</p>
  </descr>
  <method name="hasFeature" id="ID-5CED94D7">
    <descr>
      <p>Test if the DOM implementation implements a specific feature.</p>
    </descr>
    <parameters>
      <param name="feature" type="DOMString" attr="in">
	<descr>
          <p>The name of the feature to test (case-insensitive). The values
          used by DOM features are defined throughout the DOM Level 3
          specifications and listed in the <specref ref="ID-Conformance"/>
          section. The name must be an <termref def="dt-XML-name">XML
          name</termref>. To avoid possible conflicts, as a convention, names
          referring to features defined outside the DOM specification should be
          made unique.</p>
        </descr>
      </param>
      <param name="version" type="DOMString" attr="in">
	<descr>
          <p>This is the version number of the feature to test. In Level 3, the
          string can be either "3.0", "2.0" or "1.0". If the version is
          <code>null</code> or empty string, supporting any version of the
          feature causes the method to return <code>true</code>.</p>
        </descr>
      </param>
    </parameters>
    <returns type="boolean">
      <descr>
        <p><code>true</code> if the feature is implemented in the specified
          version, <code>false</code> otherwise.</p>
      </descr>
    </returns>
    <raises>
      <!-- Throws no exceptions -->
    </raises>
  </method>

  <!-- ****** DOM Level 2 additions ****** -->
  <method name="createDocumentType" id="Level-2-Core-DOM-createDocType" since="DOM Level 2">
    <descr>
      <p>Creates an empty <code>DocumentType</code> node. Entity declarations
        and notations are not made available. Entity reference expansions and
        default attribute additions do not occur.<!-- It is expected that a future
        version of the DOM will provide a way for populating a
        <code>DocumentType</code> -->.</p>
    </descr>
    <parameters>
      <param name="qualifiedName" type="DOMString" attr="in">
	<descr>
          <p>The <termref def="dt-qualifiedname">qualified name</termref>
	    of the document type to be created.</p>
	</descr>
      </param>
      <param name="publicId" type="DOMString" attr="in">
	<descr>
          <p>The external subset public identifier.</p>
	</descr>
      </param>
      <param name="systemId" type="DOMString" attr="in">
	<descr>
          <p>The external subset system identifier.</p>
	</descr>
      </param>
    </parameters>
    <returns type="DocumentType">
      <descr>
        <p>A new <code>DocumentType</code> node with
          <code>Node.ownerDocument</code> set to <code>null</code>.</p>
      </descr>
    </returns>
    <raises>
      <exception name="DOMException">
	<descr>
          <p>INVALID_CHARACTER_ERR: Raised if the specified qualified name
	    contains an illegal character.</p>
	  <p>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is
	    malformed.</p>
          <p>NOT_SUPPORTED_ERR: May be raised if the implementation does
	    not support the feature "XML" and the language exposed
	    through the Document does not support XML Namespaces (such
	    as <bibref ref="HTML40"/>).
          </p>
	</descr>
      </exception>
    </raises>
  </method>

  <method name="createDocument" id="Level-2-Core-DOM-createDocument" since="DOM Level 2">
    <descr>
      <p>Creates a DOM Document object of the specified type with its document
        element.</p>
      <p>Note that based on the <code>DocumentType</code> given to create the
        document, the implementation may instantiate specialized
        <code>Document</code> objects that support additional features than the
        "Core", such as "HTML" <bibref role="informative" ref="DOM2HTML"/>.
        On the other hand, setting the <code>DocumentType</code> after the
        document was created makes this very unlikely to happen. Alternatively,
        specialized <code>Document</code> creation methods, such as
        <code>createHTMLDocument</code>
        <bibref role="informative" ref="DOM2HTML"/>, can be used to obtain
        specific types of <code>Document</code> objects.</p>
    </descr>
    <parameters>
      <param name="namespaceURI" type="DOMString" attr="in">
	<descr>
          <p>The <termref def="dt-namespaceURI">namespace URI</termref> of the
            document element to create or <code>null</code>.</p>
	</descr>
      </param>
      <param name="qualifiedName" type="DOMString" attr="in">
	<descr>
          <p>The <termref def="dt-qualifiedname">qualified name</termref> of
            the document element to be created or <code>null</code>.</p>
	</descr>
      </param>
      <param name="doctype" type="DocumentType" attr="in">
	<descr>
          <p>The type of document to be created or <code>null</code>.</p>
	  <p>When <code>doctype</code> is not <code>null</code>, its
	    <code>Node.ownerDocument</code> attribute is set to the document
	    being created.</p>
	</descr>
      </param>
    </parameters>
    <returns type="Document">
      <descr>
        <p>A new <code>Document</code> object with its document element. If the
	  <code>NamespaceURI</code>, <code>qualifiedName</code>, and
	  <code>doctype</code> are <code>null</code>, the returned
	  <code>Document</code> is empty with no document element.</p>
      </descr>
    </returns>
    <raises>
      <exception name="DOMException">
	<descr>
          <p>INVALID_CHARACTER_ERR: Raised if the specified qualified name
	    contains an illegal character.</p>
	  <p>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is
            malformed, if the <code>qualifiedName</code> has a prefix and the
            <code>namespaceURI</code> is <code>null</code>, or if the
	    <code>qualifiedName</code> is <code>null</code> and the
            <code>namespaceURI</code> is different from <code>null</code>, or if the
            <code>qualifiedName</code> has a prefix that is "xml" and the
            <code>namespaceURI</code> is different from
            "<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/XML/1998/namespace" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/XML/1998/namespace</loc>" <bibref ref="Namespaces"/>,
              or if the DOM implementation does not support the
              <code>"XML"</code> feature but a non-null namespace URI was
              provided, since namespaces were defined by XML.</p>
	  <p>WRONG_DOCUMENT_ERR: Raised if <code>doctype</code> has already
	    been used with a different document or was created from a different
            implementation.</p>

          <p>NOT_SUPPORTED_ERR: May be raised if the implementation does
	    not support the feature "XML" and the language exposed
	    through the Document does not support XML Namespaces (such
	    as <bibref ref="HTML40"/>).
          </p>
	</descr>
      </exception>
    </raises>
  </method>

  <!-- ****** DOM Level 3 additions ****** -->
  <method name="getFeature" id="DOMImplementation3-getFeature" since="DOM Level 3">
    <descr>
      <p>
	This method returns a specialized object which implements the
	specialized APIs of the specified feature and version. The
	specialized object may also be obtained by using
	binding-specific casting methods but is not necessarily expected
	to, as discussed in <specref ref="Embedded-DOM"/>. This method
	also allow the implementation to provide specialized objects
	which do not support the <code>DOMImplementation</code> interface.
      </p>
    </descr>
    <parameters>
      <param name="feature" type="DOMString" attr="in">
        <descr>
          <p>The name of the feature requested (case-insensitive).</p>
        </descr>
      </param>
      <param name="version" type="DOMString" attr="in">
        <descr>
          <p>
	    This is the version number of the feature to test. If the
	    version is <code>null</code> or the empty string, supporting
	    any version of the feature will cause the method to return
	    an object that supports at least one version of the feature.
	  </p>
        </descr>
      </param>
    </parameters>
    <returns type="Node">
      <descr>
        <p>
	  Returns an object which implements the specialized APIs of the
	  specified feature and version, if any, or <code>null</code> if
	  there is no object which implements interfaces associated with
	  that feature. If the <code>DOMObject</code> returned by this
	  method implements the <code>DOMImplementation</code>
	  interface, it must delegate to the primary core
	  <code>Node</code> and not return results inconsistent with the
	  primary core <code>Node</code> such as attributes, childNodes,
	  etc.
	</p>
      </descr>
    </returns>
    <raises>
    </raises>
  </method>
</interface>
 
<!--[ DocumentFragment object description ]-->    
<!-- $Date: 2003/02/26 20:40:49 $ $Revision: 1.2 $ -->
<interface name="DocumentFragment" inherits="Node" id="ID-B63ED1A3">
  <descr>
    <p><code>DocumentFragment</code> is a "lightweight" or "minimal"
      <code>Document</code> object. It is very common to want to be able to
      extract a portion of a document's tree or to create a new fragment of a
      document. Imagine implementing a user command like cut or rearranging a
      document by moving fragments around. It is desirable to have an object
      which can hold such fragments and it is quite natural to use a Node for
      this purpose. While it is true that a <code>Document</code> object could
      fulfill this role, a <code>Document</code> object can potentially be a
      heavyweight object, depending on the underlying implementation. What is
      really needed for this is a very lightweight
      object. <code>DocumentFragment</code> is such an object.</p>
    <p>Furthermore, various operations -- such as inserting nodes as children
      of another <code>Node</code> -- may take <code>DocumentFragment</code>
      objects as arguments;  this results in all the child nodes of the
      <code>DocumentFragment</code> being moved to the child list of this
      node.</p>
    <p>The children of a <code>DocumentFragment</code> node are zero or more
      nodes representing the tops of any sub-trees defining the structure of
      the document. <code>DocumentFragment</code> nodes do not need to be
      <termref def="dt-well-formed">well-formed XML documents</termref>
      (although they do need to follow the rules imposed upon well-formed XML
      parsed entities, which can have multiple top nodes). For example, a
      <code>DocumentFragment</code> might have only one child and that child
      node could be a <code>Text</code> node. Such a structure model represents
      neither an HTML document nor a well-formed XML document.</p>
    <p>When a <code>DocumentFragment</code> is inserted into a
      <code>Document</code> (or indeed any other <code>Node</code> that may
      take children) the children of the <code>DocumentFragment</code> and not
      the <code>DocumentFragment</code> itself are inserted into the
      <code>Node</code>. This makes the <code>DocumentFragment</code> very
      useful when the user wishes to create nodes that are
      <termref def="dt-sibling">siblings</termref>; the
      <code>DocumentFragment</code> acts as the parent of these nodes so that
      the user can use the standard methods from the <code>Node</code>
      interface, such as <code>insertBefore</code> and
      <code>appendChild</code>.</p>
    <note>
      <p role="Infoset">
	The properties [notations] and [unparsed entities] defined by the
	Document Information Item in <bibref ref="InfoSet"/> are accessible
	through the <code>DocumentType</code> interface. The property [all
	declarations processed] is not accessible through the DOM API.
      </p>
    </note>
  </descr> 
</interface>

<!--[ Document object description ]-->    
<interface name="Document" inherits="Node" id="i-Document">
  <descr>
    <p>The <code>Document</code> interface represents the entire HTML or XML
      document. Conceptually, it is the
      <termref def="dt-root-node">root</termref> of the document tree, and
      provides the primary access to the document's data.</p>
    <p>Since elements, text nodes, comments, processing instructions,
      etc. cannot exist outside the context of a <code>Document</code>, the
      <code>Document</code> interface also contains the factory methods needed
      to create these objects. The <code>Node</code> objects created have a
      <code>ownerDocument</code> attribute which associates them with the
      <code>Document</code> within whose context they were created.</p>
  </descr>

  <attribute id="ID-B63ED1A31" name="doctype" type="DocumentType" readonly="yes" version="DOM Level 3">
    <descr>
      <p>The Document Type Declaration (see <code>DocumentType</code>)
        associated with this document. For HTML documents as well as XML
        documents without a document type declaration this returns
        <code>null</code>.</p>
      <p>This provides direct access to the <code>DocumentType</code> node,
        child node of this <code>Document</code>. This node can be set at
        document creation time and later changed through the use of child nodes
        manipulation methods, such as <code>insertBefore</code>, or
        <code>replaceChild</code>. Note, however, that while some
        implementations may instantiate different types of
        <code>Document</code> objects supporting additional features than the
        "Core", such as "HTML" <bibref role="informative" ref="DOM2HTML"/>,
        based on the <code>DocumentType</code> specified at creation time,
        changing it afterwards is very unlikely to result in a change of the
        features supported.</p>
    </descr> 
  </attribute>

  <attribute readonly="yes" name="implementation" type="DOMImplementation" id="ID-1B793EBA">
    <descr>
      <p>The <code>DOMImplementation</code> object that handles this
        document. A DOM application may use objects from multiple
        implementations.</p>
    </descr> 
  </attribute>
  
  <attribute readonly="yes" name="documentElement" type="Element" id="ID-87CD092">
    <descr>

      <p>This is a <termref def="dt-convenience">convenience</termref>
	attribute that allows direct access to the child node that is the
	<termref def="dt-document-element">document element</termref> of the
	document.</p>
      <p role="Infoset">
	<termdef id="infoset-document-element" term="[document element]">This
	attribute represents the property [document element] defined in
	<bibref ref="InfoSet"/></termdef>.
      </p>
    </descr>
  </attribute>

  <!-- ********** -->
  <method name="createElement" id="ID-2141741547">
    <descr>
      <p>Creates an element of the type specified. Note that the instance
        returned implements the <code>Element</code> interface, so attributes
        can be specified directly  on the returned object.</p>
      <p>In addition, if there are known attributes with default values,
	<code>Attr</code> nodes representing them are automatically created and
	attached to the element.</p>
      <p>To create an element with a <termref def="dt-qualifiedname">qualified name</termref> and <termref def="dt-namespaceURI">namespace URI</termref>, use the
	<code>createElementNS</code> method.</p>
    </descr>
    <parameters>
      <param name="tagName" type="DOMString" attr="in">
	<descr>
          <p>The name of the element type to instantiate. For XML, this is
            case-sensitive, otherwise it depends on the case-sentivity of the
            markup language in use. In that case, the name is mapped to the
            canonical form of that markup by the DOM implementation.</p>
        </descr>
      </param>
    </parameters>
    <returns type="Element">
      <descr><p>A new <code>Element</code> object with the
          <code>nodeName</code> attribute set to <code>tagName</code>, and
          <code>localName</code>, <code>prefix</code>, and
          <code>namespaceURI</code> set to <code>null</code>.</p>
      </descr>
    </returns>
    <raises>
      <exception name="DOMException">
        <descr>
          <p>INVALID_CHARACTER_ERR: Raised if the specified name contains an
            illegal character.</p>
        </descr>
      </exception>
    </raises>
  </method>
  
  <!-- ********** -->
  <method name="createDocumentFragment" id="ID-35CB04B5">
    <descr>
      <p>Creates an empty <code>DocumentFragment</code> object.</p>
    </descr>
    <parameters>
      <!-- No parameters -->
    </parameters>
    <returns type="DocumentFragment">
      <descr>
        <p>A new <code>DocumentFragment</code>.</p>
      </descr>
    </returns>
    <raises>
      <!-- Throws no exceptions -->
    </raises>
  </method>

  <!-- ********** -->
  <method name="createTextNode" id="ID-1975348127">
    <descr>
      <p>Creates a <code>Text</code> node given the specified string.</p>
    </descr> 
    <parameters>
      <param name="data" type="DOMString" attr="in">
	<descr>
          <p>The data for the node.</p>
        </descr>
      </param>
    </parameters>
    <returns type="Text">
      <descr>
        <p>The new <code>Text</code> object.</p>
      </descr>
    </returns>
    <raises>
      <!-- Throws no exceptions -->
    </raises>
  </method>

  <!-- ********** -->
  <method name="createComment" id="ID-1334481328">
    <descr>
      <p>Creates a <code>Comment</code> node given the specified string.</p>
    </descr> 
    <parameters>
      <param name="data" type="DOMString" attr="in">
	<descr>
          <p>The data for the node.</p>
        </descr>
      </param>
    </parameters>
    <returns type="Comment">
      <descr>
        <p>The new <code>Comment</code> object.</p>
      </descr>
    </returns>
    <raises>
      <!-- Throws no exceptions -->
    </raises>
  </method>

  <!-- ********** -->
  <method name="createCDATASection" id="ID-D26C0AF8">
    <descr>
      <p>Creates a <code>CDATASection</code> node whose value is the specified
        string.</p>
    </descr> 
    <parameters>
      <param name="data" type="DOMString" attr="in">
	<descr>
          <p>The data for the <code>CDATASection</code> contents.</p>
	</descr>
      </param>
    </parameters>
    <returns type="CDATASection">
      <descr>
        <p>The new <code>CDATASection</code> object.</p>
      </descr>
    </returns>
    <raises>
      <exception name="DOMException">
        <descr>
          <p>NOT_SUPPORTED_ERR: Raised if this document is an HTML
            document.</p>
        </descr>
      </exception>
    </raises>
  </method>

  <!-- ********** -->
  <method name="createProcessingInstruction" id="ID-135944439">
    <descr>
      <p>Creates a <code>ProcessingInstruction</code> node given the specified
        name and data strings.</p>
    </descr> 
    <parameters>
      <param name="target" type="DOMString" attr="in">
	<descr>
          <p>The target part of the processing instruction.</p>
        </descr>
      </param>
      <param name="data" type="DOMString" attr="in">
	<descr>
          <p>The data for the node.</p>
        </descr>
      </param>
    </parameters>
    <returns type="ProcessingInstruction">
      <descr>
        <p>The new <code>ProcessingInstruction</code> object.</p>
      </descr>
    </returns>
    <raises>
      <exception name="DOMException">
        <descr>
          <p>INVALID_CHARACTER_ERR: Raised if the specified target contains an
            illegal character.</p>
          <p>NOT_SUPPORTED_ERR: Raised if this document is an HTML
            document.</p>
	</descr>
      </exception>
    </raises>
  </method>

  <!-- ********** -->
  <method name="createAttribute" id="ID-1084891198">
    <descr>
      <p>Creates an <code>Attr</code> of the given name. Note that the
        <code>Attr</code> instance can then be set on an <code>Element</code>
        using the <code>setAttributeNode</code> method. </p>
      <p>To create an attribute with a <termref def="dt-qualifiedname">qualified name</termref> and <termref def="dt-namespaceURI">namespace URI</termref>, use
	the <code>createAttributeNS</code> method.</p>
    </descr>
    <parameters>
      <param name="name" type="DOMString" attr="in">
	<descr>
          <p>The name of the attribute.</p>
        </descr>
      </param>
    </parameters>
    <returns type="Attr">
      <descr>
        <p>A new <code>Attr</code> object with the <code>nodeName</code>
          attribute set to <code>name</code>, and <code>localName</code>,
          <code>prefix</code>, and <code>namespaceURI</code> set to
          <code>null</code>. The value of the attribute is the empty
          string.</p>
      </descr>
    </returns>
    <raises>
      <exception name="DOMException">
        <descr>
          <p>INVALID_CHARACTER_ERR: Raised if the specified name contains an
            illegal character.</p>
        </descr>
      </exception>
    </raises>
  </method>

  <method name="createEntityReference" id="ID-392B75AE">
    <descr>
      <p>Creates an <code>EntityReference</code> object. In addition, if the
        referenced entity is known, the child list of the
        <code>EntityReference</code> node is made the same as that of the
        corresponding <code>Entity</code> node.</p>
      <note>
        <p>If any descendant of the <code>Entity</code> node has an unbound
          <termref def="dt-namespaceprefix">namespace prefix</termref>, the
          corresponding descendant of the created <code>EntityReference</code>
          node is also unbound; (its <code>namespaceURI</code> is
          <code>null</code>). The DOM Level 2 and 3 do not support any mechanism to
          resolve namespace prefixes in this case.</p>
      </note>
    </descr>
    <parameters>
      <param name="name" type="DOMString" attr="in">
	<descr>
          <p>The name of the entity to reference.</p>
        </descr>
      </param>
    </parameters>
    <returns type="EntityReference">
      <descr><p>The new <code>EntityReference</code> object.</p></descr>
    </returns>
    <raises>
      <exception name="DOMException">
	<descr>
          <p>INVALID_CHARACTER_ERR: Raised if the specified name contains an
            illegal character.</p>
          <p>NOT_SUPPORTED_ERR: Raised if this document is an HTML
            document.</p>
	</descr>
      </exception>
    </raises>
  </method>

  <!-- ********** -->
  <method name="getElementsByTagName" id="ID-A6C9094">
    <descr>
      <p>Returns a <code>NodeList</code> of all the
	<code>Elements</code> in <termref def="dt-document-order">document
          order</termref> with a given tag name and are contained in the
	document.</p>
    </descr>
    <parameters>
      <param name="tagname" type="DOMString" attr="in">
	<descr>
          <p>The name of the tag to match on. The special value "*" matches all
            tags. For XML, this is case-sensitive, otherwise it depends on the
            case-sentivity of the markup language in use.</p>
        </descr>
      </param>
    </parameters>
    <returns type="NodeList">
      <descr>
        <p>A new <code>NodeList</code> object containing all the matched
          <code>Elements</code>.</p>
      </descr>
    </returns>
    <raises>
      <!-- Throws no exceptions -->
    </raises>
  </method>

  <!-- ****** DOM Level 2 additions ****** -->
  <method name="importNode" id="Core-Document-importNode" since="DOM Level 2">
    <descr>
      <p>Imports a node from another document to this document. The returned
	node has no parent; (<code>parentNode</code> is <code>null</code>). The
	source node is not altered or removed from the original document; this
	method creates a new copy of the source node.</p>

      <p>For all nodes, importing a node creates a node object owned by the
	importing document, with attribute values identical to the source
	node's <code>nodeName</code> and <code>nodeType</code>, plus the
	attributes related to namespaces (<code>prefix</code>,
	<code>localName</code>, and <code>namespaceURI</code>). As in the
	<code>cloneNode</code> operation, the source node is not altered. User
        data associated to the imported node is not carried over. However,
        if any <code>UserDataHandlers</code> has been specified along with the
        associated data these handlers will be called with the appropriate
        parameters before this method returns.</p>

      <p>Additional information is copied as appropriate to the
        <code>nodeType</code>, attempting to mirror the behavior expected if a
        fragment of XML or HTML source was copied from one document to another,
        recognizing that the two documents may have different DTDs in the XML
        case. The following list describes the specifics for each type of node.

	<glist>
	  <gitem>
	    <label>ATTRIBUTE_NODE</label>

	    <def>
              <p>The <code>ownerElement</code> attribute is set to
                <code>null</code> and the <code>specified</code> flag is set to
		<code>true</code> on the generated <code>Attr</code>. The
		<termref def="dt-descendant">descendants</termref> of the
                source <code>Attr</code> are recursively imported and the
                resulting nodes reassembled to form the corresponding
                subtree.</p>
	      <p>Note that the <code>deep</code> parameter has no effect on 
		<code>Attr</code> nodes; they always carry their children with
		them when imported.</p>
	    </def>
	  </gitem>
	  <gitem>
	    <label>DOCUMENT_FRAGMENT_NODE</label>
	    <def>
              <p>If the <code>deep</code> option was set to
                <code>true</code>, the
                <termref def="dt-descendant">descendants</termref> of the
                source <code>DocumentFragment</code> are recursively imported
                and the resulting nodes reassembled under the imported
                <code>DocumentFragment</code> to form the corresponding
                subtree. Otherwise, this simply generates an empty
                <code>DocumentFragment</code>.</p>
	    </def>
	  </gitem>
	  <gitem>
	    <label>DOCUMENT_NODE</label>
	    <def>
              <p><code>Document</code> nodes cannot be imported.</p>
	    </def>
	  </gitem>
	  <gitem>
	    <label>DOCUMENT_TYPE_NODE</label>
	    <def>
              <p><code>DocumentType</code> nodes cannot be imported.</p>
	    </def>
	  </gitem>
	  <gitem>
	    <label>ELEMENT_NODE</label>
	    <def>
              <p><emph>Specified</emph> attribute nodes of the source element
                are imported, and the generated <code>Attr</code> nodes are
                attached to the generated <code>Element</code>. Default
                attributes are <emph>not</emph> copied, though if the document
                being imported into defines default attributes for this element
                name, those are assigned. If the <code>importNode</code>
                <code>deep</code> parameter was set to <code>true</code>, the
                <termref def="dt-descendant">descendants</termref> of the
                source element are recursively imported and the resulting nodes
                reassembled to form the corresponding subtree.</p>
	    </def>
	  </gitem>
	  <gitem>
	    <label>ENTITY_NODE</label>
	    <def>
              <p><code>Entity</code> nodes can be imported, however in the
		current release of the DOM the <code>DocumentType</code> is
		readonly. Ability to add these imported nodes to a
		<code>DocumentType</code> will be considered for addition to a
		future release of the DOM.</p>
	      <p>On import, the <code>publicId</code>, <code>systemId</code>,
		and <code>notationName</code> attributes are copied. If a
		<code>deep</code> import is requested, the
                <termref def="dt-descendant">descendants</termref> of the
		the source <code>Entity</code> are recursively imported and the
		resulting nodes reassembled to form the corresponding
		subtree.</p>
	    </def>
	  </gitem>
	  <gitem>
	    <label>ENTITY_REFERENCE_NODE</label>
	    <def>
              <p>Only the <code>EntityReference</code> itself is copied, even
                if a <code>deep</code> import is requested, since the source
                and destination documents might have defined the entity
                differently. If the document being imported into provides a
                definition for this entity name, its value is assigned.</p>
	    </def>
	  </gitem>
	  <gitem>
	    <label>NOTATION_NODE</label>
	    <def>
              <p><code>Notation</code> nodes can be imported, however in the
		current release of the DOM the <code>DocumentType</code> is
		readonly. Ability to add these imported nodes to a
		<code>DocumentType</code> will be considered for addition to a
		future release of the DOM.</p>
	      <p>On import, the <code>publicId</code> and
		<code>systemId</code> attributes are copied.</p>
	      <p>Note that the <code>deep</code> parameter has no effect on 
		this type of nodes since they cannot have any children.</p>
	    </def>
	  </gitem>
	  <gitem>
	    <label>PROCESSING_INSTRUCTION_NODE</label>
	    <def>
              <p>The imported node copies its <code>target</code> and
                <code>data</code> values from those of the source node.</p>
	      <p>Note that the <code>deep</code> parameter has no effect on 
		this type of nodes since they cannot have any children.</p>
	    </def>
	  </gitem>
	  <gitem>
	    <label>TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE</label>
	    <def>
              <p>These three types of nodes inheriting from
                <code>CharacterData</code> copy their <code>data</code> and
		<code>length</code> attributes from those of the source
		node.</p>
	      <p>Note that the <code>deep</code> parameter has no effect on 
		these types of nodes since they cannot have any children.</p>
	    </def>
	  </gitem>
	</glist>
      </p>
    </descr>
    <parameters>
      <param name="importedNode" type="Node" attr="in">
	<descr>
          <p>The node to import.</p>
        </descr>
      </param>
      <param name="deep" type="boolean" attr="in">
	<descr>
          <p>If <code>true</code>, recursively import the subtree under the
            specified node; if <code>false</code>, import only the node itself,
            as explained above. This has no effect on nodes that cannot have
            any children, and on <code>Attr</code>, and
            <code>EntityReference</code> nodes.</p>
	</descr>
      </param>
    </parameters>
    <returns type="Node">
      <descr>
        <p>The imported node that belongs to this <code>Document</code>.</p>
      </descr>
    </returns>
    <raises>
      <exception name="DOMException" version="DOM Level 3">
	<descr>
          <p>NOT_SUPPORTED_ERR: Raised if the type of node being imported
	    is not supported.</p>
          <p>INVALID_CHARACTER_ERR: Raised if one the imported names contain an
            illegal character. This may happen when importing an XML 1.1
            <bibref role="informative" ref="XML11"/> element into an XML 1.0 document, for
              instance.</p>
        </descr>
      </exception>
    </raises>
  </method>

  <method name="createElementNS" id="ID-DocCrElNS" since="DOM Level 2">
    <descr>
      <p>Creates an element of the given <termref def="dt-qualifiedname">qualified name</termref> and <termref def="dt-namespaceURI">namespace URI</termref>.</p>
      <p>Per <bibref ref="Namespaces"/>, applications must use the value <code>null</code>
      as the namespaceURI parameter for methods if they wish to have no
      namespace.</p>
    </descr>
    <parameters>
      <param name="namespaceURI" type="DOMString" attr="in">
	<descr>
          <p>The <termref def="dt-namespaceURI">namespace URI</termref> of the
            element to create.</p>
	</descr>
      </param>
      <param name="qualifiedName" type="DOMString" attr="in">
	<descr>
          <p>The <termref def="dt-qualifiedname">qualified name</termref> of
            the element type to instantiate.</p>
	</descr>
      </param>
    </parameters>
    <returns type="Element">
      <descr>
        <p>A new <code>Element</code> object with the following attributes:</p>
	<table summary="Layout table: the first cell the name property,                the second cell contains his initial value">
	  <tbody>
	    <tr><th rowspan="1" colspan="1">Attribute</th><th rowspan="1" colspan="1">Value</th></tr>
	    <tr><td rowspan="1" colspan="1"><code>Node.nodeName</code></td>
	      <td rowspan="1" colspan="1"><code>qualifiedName</code></td>
	    </tr>
	    <tr><td rowspan="1" colspan="1"><code>Node.namespaceURI</code></td>
	      <td rowspan="1" colspan="1"><code>namespaceURI</code></td></tr>
	    <tr><td rowspan="1" colspan="1"><code>Node.prefix</code></td><td rowspan="1" colspan="1">prefix, extracted from
		<code>qualifiedName</code>, or <code>null</code> if there is no
		prefix</td></tr>
	    <tr><td rowspan="1" colspan="1"><code>Node.localName</code></td>
              <td rowspan="1" colspan="1"><termref def="dt-localname">local name</termref>, extracted
                from <code>qualifiedName</code></td></tr>
	    <tr><td rowspan="1" colspan="1"><code>Element.tagName</code></td>
	      <td rowspan="1" colspan="1"><code>qualifiedName</code></td>
	    </tr>
	  </tbody>
	</table>
      </descr>
    </returns>
    <raises>
      <exception name="DOMException">
	<descr>
          <p>INVALID_CHARACTER_ERR: Raised if the specified <code>qualifiedName</code>
	    contains an illegal character.</p>
	  <p>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is
            a malformed <termref def="dt-qualifiedname">qualified name</termref>, if the
            <code>qualifiedName</code> has a prefix and the
            <code>namespaceURI</code> is <code>null</code>, or if the
            <code>qualifiedName</code> has a prefix that is "xml" and the
            <code>namespaceURI</code> is different from
            "<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/XML/1998/namespace" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/XML/1998/namespace</loc>"
            <bibref ref="Namespaces"/>, or if the
            <code>qualifiedName</code> or its prefix is "xmlns" and the
            <code>namespaceURI</code> is different from
            "<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2000/xmlns/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/2000/xmlns/</loc>", or if the
            <code>namespaceURI</code> is
            "<loc xmlns:xlink="http://www.w3.org/1999/xlink" href="http://www.w3.org/2000/xmlns/" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/2000/xmlns/</loc>" and neither the
   