Home | History | Annotate | Download | only in dom
      1 /*
      2  * Copyright (c) 2004 World Wide Web Consortium,
      3  *
      4  * (Massachusetts Institute of Technology, European Research Consortium for
      5  * Informatics and Mathematics, Keio University). All Rights Reserved. This
      6  * work is distributed under the W3C(r) Software License [1] in the hope that
      7  * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
      8  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
      9  *
     10  * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
     11  */
     12 
     13 package org.w3c.dom;
     14 
     15 /**
     16  * The <code>Document</code> interface represents the entire HTML or XML
     17  * document. Conceptually, it is the root of the document tree, and provides
     18  * the primary access to the document's data.
     19  * <p>Since elements, text nodes, comments, processing instructions, etc.
     20  * cannot exist outside the context of a <code>Document</code>, the
     21  * <code>Document</code> interface also contains the factory methods needed
     22  * to create these objects. The <code>Node</code> objects created have a
     23  * <code>ownerDocument</code> attribute which associates them with the
     24  * <code>Document</code> within whose context they were created.
     25  * <p>See also the <a href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document Object Model (DOM) Level 3 Core Specification</a>.
     26  */
     27 public interface Document extends Node {
     28     /**
     29      * The Document Type Declaration (see <code>DocumentType</code>)
     30      * associated with this document. For XML documents without a document
     31      * type declaration this returns <code>null</code>. For HTML documents,
     32      * a <code>DocumentType</code> object may be returned, independently of
     33      * the presence or absence of document type declaration in the HTML
     34      * document.
     35      * <br>This provides direct access to the <code>DocumentType</code> node,
     36      * child node of this <code>Document</code>. This node can be set at
     37      * document creation time and later changed through the use of child
     38      * nodes manipulation methods, such as <code>Node.insertBefore</code>,
     39      * or <code>Node.replaceChild</code>. Note, however, that while some
     40      * implementations may instantiate different types of
     41      * <code>Document</code> objects supporting additional features than the
     42      * "Core", such as "HTML" [<a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>DOM Level 2 HTML</a>]
     43      * , based on the <code>DocumentType</code> specified at creation time,
     44      * changing it afterwards is very unlikely to result in a change of the
     45      * features supported.
     46      * @version DOM Level 3
     47      */
     48     public DocumentType getDoctype();
     49 
     50     /**
     51      * The <code>DOMImplementation</code> object that handles this document. A
     52      * DOM application may use objects from multiple implementations.
     53      */
     54     public DOMImplementation getImplementation();
     55 
     56     /**
     57      * This is a convenience attribute that allows direct access to the child
     58      * node that is the document element of the document.
     59      */
     60     public Element getDocumentElement();
     61 
     62     /**
     63      * Creates an element of the type specified. Note that the instance
     64      * returned implements the <code>Element</code> interface, so attributes
     65      * can be specified directly on the returned object.
     66      * <br>In addition, if there are known attributes with default values,
     67      * <code>Attr</code> nodes representing them are automatically created
     68      * and attached to the element.
     69      * <br>To create an element with a qualified name and namespace URI, use
     70      * the <code>createElementNS</code> method.
     71      * @param tagName The name of the element type to instantiate. For XML,
     72      *   this is case-sensitive, otherwise it depends on the
     73      *   case-sensitivity of the markup language in use. In that case, the
     74      *   name is mapped to the canonical form of that markup by the DOM
     75      *   implementation.
     76      * @return A new <code>Element</code> object with the
     77      *   <code>nodeName</code> attribute set to <code>tagName</code>, and
     78      *   <code>localName</code>, <code>prefix</code>, and
     79      *   <code>namespaceURI</code> set to <code>null</code>.
     80      * @exception DOMException
     81      *   INVALID_CHARACTER_ERR: Raised if the specified name is not an XML
     82      *   name according to the XML version in use specified in the
     83      *   <code>Document.xmlVersion</code> attribute.
     84      */
     85     public Element createElement(String tagName)
     86                                  throws DOMException;
     87 
     88     /**
     89      * Creates an empty <code>DocumentFragment</code> object.
     90      * @return A new <code>DocumentFragment</code>.
     91      */
     92     public DocumentFragment createDocumentFragment();
     93 
     94     /**
     95      * Creates a <code>Text</code> node given the specified string.
     96      * @param data The data for the node.
     97      * @return The new <code>Text</code> object.
     98      */
     99     public Text createTextNode(String data);
    100 
    101     /**
    102      * Creates a <code>Comment</code> node given the specified string.
    103      * @param data The data for the node.
    104      * @return The new <code>Comment</code> object.
    105      */
    106     public Comment createComment(String data);
    107 
    108     /**
    109      * Creates a <code>CDATASection</code> node whose value is the specified
    110      * string.
    111      * @param data The data for the <code>CDATASection</code> contents.
    112      * @return The new <code>CDATASection</code> object.
    113      * @exception DOMException
    114      *   NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
    115      */
    116     public CDATASection createCDATASection(String data)
    117                                            throws DOMException;
    118 
    119     /**
    120      * Creates a <code>ProcessingInstruction</code> node given the specified
    121      * name and data strings.
    122      * @param target The target part of the processing instruction.Unlike
    123      *   <code>Document.createElementNS</code> or
    124      *   <code>Document.createAttributeNS</code>, no namespace well-formed
    125      *   checking is done on the target name. Applications should invoke
    126      *   <code>Document.normalizeDocument()</code> with the parameter "
    127      *   namespaces" set to <code>true</code> in order to ensure that the
    128      *   target name is namespace well-formed.
    129      * @param data The data for the node.
    130      * @return The new <code>ProcessingInstruction</code> object.
    131      * @exception DOMException
    132      *   INVALID_CHARACTER_ERR: Raised if the specified target is not an XML
    133      *   name according to the XML version in use specified in the
    134      *   <code>Document.xmlVersion</code> attribute.
    135      *   <br>NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
    136      */
    137     public ProcessingInstruction createProcessingInstruction(String target,
    138                                                              String data)
    139                                                              throws DOMException;
    140 
    141     /**
    142      * Creates an <code>Attr</code> of the given name. Note that the
    143      * <code>Attr</code> instance can then be set on an <code>Element</code>
    144      * using the <code>setAttributeNode</code> method.
    145      * <br>To create an attribute with a qualified name and namespace URI, use
    146      * the <code>createAttributeNS</code> method.
    147      * @param name The name of the attribute.
    148      * @return A new <code>Attr</code> object with the <code>nodeName</code>
    149      *   attribute set to <code>name</code>, and <code>localName</code>,
    150      *   <code>prefix</code>, and <code>namespaceURI</code> set to
    151      *   <code>null</code>. The value of the attribute is the empty string.
    152      * @exception DOMException
    153      *   INVALID_CHARACTER_ERR: Raised if the specified name is not an XML
    154      *   name according to the XML version in use specified in the
    155      *   <code>Document.xmlVersion</code> attribute.
    156      */
    157     public Attr createAttribute(String name)
    158                                 throws DOMException;
    159 
    160     /**
    161      * Creates an <code>EntityReference</code> object. In addition, if the
    162      * referenced entity is known, the child list of the
    163      * <code>EntityReference</code> node is made the same as that of the
    164      * corresponding <code>Entity</code> node.
    165      * <p ><b>Note:</b> If any descendant of the <code>Entity</code> node has
    166      * an unbound namespace prefix, the corresponding descendant of the
    167      * created <code>EntityReference</code> node is also unbound; (its
    168      * <code>namespaceURI</code> is <code>null</code>). The DOM Level 2 and
    169      * 3 do not support any mechanism to resolve namespace prefixes in this
    170      * case.
    171      * @param name The name of the entity to reference.Unlike
    172      *   <code>Document.createElementNS</code> or
    173      *   <code>Document.createAttributeNS</code>, no namespace well-formed
    174      *   checking is done on the entity name. Applications should invoke
    175      *   <code>Document.normalizeDocument()</code> with the parameter "
    176      *   namespaces" set to <code>true</code> in order to ensure that the
    177      *   entity name is namespace well-formed.
    178      * @return The new <code>EntityReference</code> object.
    179      * @exception DOMException
    180      *   INVALID_CHARACTER_ERR: Raised if the specified name is not an XML
    181      *   name according to the XML version in use specified in the
    182      *   <code>Document.xmlVersion</code> attribute.
    183      *   <br>NOT_SUPPORTED_ERR: Raised if this document is an HTML document.
    184      */
    185     public EntityReference createEntityReference(String name)
    186                                                  throws DOMException;
    187 
    188     /**
    189      * Returns a <code>NodeList</code> of all the <code>Elements</code> in
    190      * document order with a given tag name and are contained in the
    191      * document.
    192      * @param tagname  The name of the tag to match on. The special value "*"
    193      *   matches all tags. For XML, the <code>tagname</code> parameter is
    194      *   case-sensitive, otherwise it depends on the case-sensitivity of the
    195      *   markup language in use.
    196      * @return A new <code>NodeList</code> object containing all the matched
    197      *   <code>Elements</code>.
    198      */
    199     public NodeList getElementsByTagName(String tagname);
    200 
    201     /**
    202      * Imports a node from another document to this document, without altering
    203      * or removing the source node from the original document; this method
    204      * creates a new copy of the source node. The returned node has no
    205      * parent; (<code>parentNode</code> is <code>null</code>).
    206      * <br>For all nodes, importing a node creates a node object owned by the
    207      * importing document, with attribute values identical to the source
    208      * node's <code>nodeName</code> and <code>nodeType</code>, plus the
    209      * attributes related to namespaces (<code>prefix</code>,
    210      * <code>localName</code>, and <code>namespaceURI</code>). As in the
    211      * <code>cloneNode</code> operation, the source node is not altered.
    212      * User data associated to the imported node is not carried over.
    213      * However, if any <code>UserDataHandlers</code> has been specified
    214      * along with the associated data these handlers will be called with the
    215      * appropriate parameters before this method returns.
    216      * <br>Additional information is copied as appropriate to the
    217      * <code>nodeType</code>, attempting to mirror the behavior expected if
    218      * a fragment of XML or HTML source was copied from one document to
    219      * another, recognizing that the two documents may have different DTDs
    220      * in the XML case. The following list describes the specifics for each
    221      * type of node.
    222      * <dl>
    223      * <dt>ATTRIBUTE_NODE</dt>
    224      * <dd>The <code>ownerElement</code> attribute
    225      * is set to <code>null</code> and the <code>specified</code> flag is
    226      * set to <code>true</code> on the generated <code>Attr</code>. The
    227      * descendants of the source <code>Attr</code> are recursively imported
    228      * and the resulting nodes reassembled to form the corresponding subtree.
    229      * Note that the <code>deep</code> parameter has no effect on
    230      * <code>Attr</code> nodes; they always carry their children with them
    231      * when imported.</dd>
    232      * <dt>DOCUMENT_FRAGMENT_NODE</dt>
    233      * <dd>If the <code>deep</code> option
    234      * was set to <code>true</code>, the descendants of the source
    235      * <code>DocumentFragment</code> are recursively imported and the
    236      * resulting nodes reassembled under the imported
    237      * <code>DocumentFragment</code> to form the corresponding subtree.
    238      * Otherwise, this simply generates an empty
    239      * <code>DocumentFragment</code>.</dd>
    240      * <dt>DOCUMENT_NODE</dt>
    241      * <dd><code>Document</code>
    242      * nodes cannot be imported.</dd>
    243      * <dt>DOCUMENT_TYPE_NODE</dt>
    244      * <dd><code>DocumentType</code>
    245      * nodes cannot be imported.</dd>
    246      * <dt>ELEMENT_NODE</dt>
    247      * <dd><em>Specified</em> attribute nodes of the source element are imported, and the generated
    248      * <code>Attr</code> nodes are attached to the generated
    249      * <code>Element</code>. Default attributes are <em>not</em> copied, though if the document being imported into defines default
    250      * attributes for this element name, those are assigned. If the
    251      * <code>importNode</code> <code>deep</code> parameter was set to
    252      * <code>true</code>, the descendants of the source element are
    253      * recursively imported and the resulting nodes reassembled to form the
    254      * corresponding subtree.</dd>
    255      * <dt>ENTITY_NODE</dt>
    256      * <dd><code>Entity</code> nodes can be
    257      * imported, however in the current release of the DOM the
    258      * <code>DocumentType</code> is readonly. Ability to add these imported
    259      * nodes to a <code>DocumentType</code> will be considered for addition
    260      * to a future release of the DOM.On import, the <code>publicId</code>,
    261      * <code>systemId</code>, and <code>notationName</code> attributes are
    262      * copied. If a <code>deep</code> import is requested, the descendants
    263      * of the the source <code>Entity</code> are recursively imported and
    264      * the resulting nodes reassembled to form the corresponding subtree.</dd>
    265      * <dt>
    266      * ENTITY_REFERENCE_NODE</dt>
    267      * <dd>Only the <code>EntityReference</code> itself is
    268      * copied, even if a <code>deep</code> import is requested, since the
    269      * source and destination documents might have defined the entity
    270      * differently. If the document being imported into provides a
    271      * definition for this entity name, its value is assigned.</dd>
    272      * <dt>NOTATION_NODE</dt>
    273      * <dd>
    274      * <code>Notation</code> nodes can be imported, however in the current
    275      * release of the DOM the <code>DocumentType</code> is readonly. Ability
    276      * to add these imported nodes to a <code>DocumentType</code> will be
    277      * considered for addition to a future release of the DOM.On import, the
    278      * <code>publicId</code> and <code>systemId</code> attributes are copied.
    279      * Note that the <code>deep</code> parameter has no effect on this type
    280      * of nodes since they cannot have any children.</dd>
    281      * <dt>
    282      * PROCESSING_INSTRUCTION_NODE</dt>
    283      * <dd>The imported node copies its
    284      * <code>target</code> and <code>data</code> values from those of the
    285      * source node.Note that the <code>deep</code> parameter has no effect
    286      * on this type of nodes since they cannot have any children.</dd>
    287      * <dt>TEXT_NODE,
    288      * CDATA_SECTION_NODE, COMMENT_NODE</dt>
    289      * <dd>These three types of nodes inheriting
    290      * from <code>CharacterData</code> copy their <code>data</code> and
    291      * <code>length</code> attributes from those of the source node.Note
    292      * that the <code>deep</code> parameter has no effect on these types of
    293      * nodes since they cannot have any children.</dd>
    294      * </dl>
    295      * @param importedNode The node to import.
    296      * @param deep If <code>true</code>, recursively import the subtree under
    297      *   the specified node; if <code>false</code>, import only the node
    298      *   itself, as explained above. This has no effect on nodes that cannot
    299      *   have any children, and on <code>Attr</code>, and
    300      *   <code>EntityReference</code> nodes.
    301      * @return The imported node that belongs to this <code>Document</code>.
    302      * @exception DOMException
    303      *   NOT_SUPPORTED_ERR: Raised if the type of node being imported is not
    304      *   supported.
    305      *   <br>INVALID_CHARACTER_ERR: Raised if one of the imported names is not
    306      *   an XML name according to the XML version in use specified in the
    307      *   <code>Document.xmlVersion</code> attribute. This may happen when
    308      *   importing an XML 1.1 [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>] element
    309      *   into an XML 1.0 document, for instance.
    310      * @since DOM Level 2
    311      */
    312     public Node importNode(Node importedNode,
    313                            boolean deep)
    314                            throws DOMException;
    315 
    316     /**
    317      * Creates an element of the given qualified name and namespace URI.
    318      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
    319      * , applications must use the value <code>null</code> as the
    320      * namespaceURI parameter for methods if they wish to have no namespace.
    321      * @param namespaceURI The namespace URI of the element to create.
    322      * @param qualifiedName The qualified name of the element type to
    323      *   instantiate.
    324      * @return A new <code>Element</code> object with the following
    325      *   attributes:
    326      * <table border='1' cellpadding='3'>
    327      * <tr>
    328      * <th>Attribute</th>
    329      * <th>Value</th>
    330      * </tr>
    331      * <tr>
    332      * <td valign='top' rowspan='1' colspan='1'><code>Node.nodeName</code></td>
    333      * <td valign='top' rowspan='1' colspan='1'>
    334      *   <code>qualifiedName</code></td>
    335      * </tr>
    336      * <tr>
    337      * <td valign='top' rowspan='1' colspan='1'><code>Node.namespaceURI</code></td>
    338      * <td valign='top' rowspan='1' colspan='1'>
    339      *   <code>namespaceURI</code></td>
    340      * </tr>
    341      * <tr>
    342      * <td valign='top' rowspan='1' colspan='1'><code>Node.prefix</code></td>
    343      * <td valign='top' rowspan='1' colspan='1'>prefix, extracted
    344      *   from <code>qualifiedName</code>, or <code>null</code> if there is
    345      *   no prefix</td>
    346      * </tr>
    347      * <tr>
    348      * <td valign='top' rowspan='1' colspan='1'><code>Node.localName</code></td>
    349      * <td valign='top' rowspan='1' colspan='1'>local name, extracted from
    350      *   <code>qualifiedName</code></td>
    351      * </tr>
    352      * <tr>
    353      * <td valign='top' rowspan='1' colspan='1'><code>Element.tagName</code></td>
    354      * <td valign='top' rowspan='1' colspan='1'>
    355      *   <code>qualifiedName</code></td>
    356      * </tr>
    357      * </table>
    358      * @exception DOMException
    359      *   INVALID_CHARACTER_ERR: Raised if the specified
    360      *   <code>qualifiedName</code> is not an XML name according to the XML
    361      *   version in use specified in the <code>Document.xmlVersion</code>
    362      *   attribute.
    363      *   <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is a
    364      *   malformed qualified name, if the <code>qualifiedName</code> has a
    365      *   prefix and the <code>namespaceURI</code> is <code>null</code>, or
    366      *   if the <code>qualifiedName</code> has a prefix that is "xml" and
    367      *   the <code>namespaceURI</code> is different from "<a href='http://www.w3.org/XML/1998/namespace'>
    368      *   http://www.w3.org/XML/1998/namespace</a>" [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
    369      *   , or if the <code>qualifiedName</code> or its prefix is "xmlns" and
    370      *   the <code>namespaceURI</code> is different from "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>", or if the <code>namespaceURI</code> is "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>" and neither the <code>qualifiedName</code> nor its prefix is "xmlns".
    371      *   <br>NOT_SUPPORTED_ERR: Always thrown if the current document does not
    372      *   support the <code>"XML"</code> feature, since namespaces were
    373      *   defined by XML.
    374      * @since DOM Level 2
    375      */
    376     public Element createElementNS(String namespaceURI,
    377                                    String qualifiedName)
    378                                    throws DOMException;
    379 
    380     /**
    381      * Creates an attribute of the given qualified name and namespace URI.
    382      * <br>Per [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
    383      * , applications must use the value <code>null</code> as the
    384      * <code>namespaceURI</code> parameter for methods if they wish to have
    385      * no namespace.
    386      * @param namespaceURI The namespace URI of the attribute to create.
    387      * @param qualifiedName The qualified name of the attribute to
    388      *   instantiate.
    389      * @return A new <code>Attr</code> object with the following attributes:
    390      * <table border='1' cellpadding='3'>
    391      * <tr>
    392      * <th>
    393      *   Attribute</th>
    394      * <th>Value</th>
    395      * </tr>
    396      * <tr>
    397      * <td valign='top' rowspan='1' colspan='1'><code>Node.nodeName</code></td>
    398      * <td valign='top' rowspan='1' colspan='1'>qualifiedName</td>
    399      * </tr>
    400      * <tr>
    401      * <td valign='top' rowspan='1' colspan='1'>
    402      *   <code>Node.namespaceURI</code></td>
    403      * <td valign='top' rowspan='1' colspan='1'><code>namespaceURI</code></td>
    404      * </tr>
    405      * <tr>
    406      * <td valign='top' rowspan='1' colspan='1'>
    407      *   <code>Node.prefix</code></td>
    408      * <td valign='top' rowspan='1' colspan='1'>prefix, extracted from
    409      *   <code>qualifiedName</code>, or <code>null</code> if there is no
    410      *   prefix</td>
    411      * </tr>
    412      * <tr>
    413      * <td valign='top' rowspan='1' colspan='1'><code>Node.localName</code></td>
    414      * <td valign='top' rowspan='1' colspan='1'>local name, extracted from
    415      *   <code>qualifiedName</code></td>
    416      * </tr>
    417      * <tr>
    418      * <td valign='top' rowspan='1' colspan='1'><code>Attr.name</code></td>
    419      * <td valign='top' rowspan='1' colspan='1'>
    420      *   <code>qualifiedName</code></td>
    421      * </tr>
    422      * <tr>
    423      * <td valign='top' rowspan='1' colspan='1'><code>Node.nodeValue</code></td>
    424      * <td valign='top' rowspan='1' colspan='1'>the empty
    425      *   string</td>
    426      * </tr>
    427      * </table>
    428      * @exception DOMException
    429      *   INVALID_CHARACTER_ERR: Raised if the specified
    430      *   <code>qualifiedName</code> is not an XML name according to the XML
    431      *   version in use specified in the <code>Document.xmlVersion</code>
    432      *   attribute.
    433      *   <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is a
    434      *   malformed qualified name, if the <code>qualifiedName</code> has a
    435      *   prefix and the <code>namespaceURI</code> is <code>null</code>, if
    436      *   the <code>qualifiedName</code> has a prefix that is "xml" and the
    437      *   <code>namespaceURI</code> is different from "<a href='http://www.w3.org/XML/1998/namespace'>
    438      *   http://www.w3.org/XML/1998/namespace</a>", if the <code>qualifiedName</code> or its prefix is "xmlns" and the
    439      *   <code>namespaceURI</code> is different from "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>", or if the <code>namespaceURI</code> is "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>" and neither the <code>qualifiedName</code> nor its prefix is "xmlns".
    440      *   <br>NOT_SUPPORTED_ERR: Always thrown if the current document does not
    441      *   support the <code>"XML"</code> feature, since namespaces were
    442      *   defined by XML.
    443      * @since DOM Level 2
    444      */
    445     public Attr createAttributeNS(String namespaceURI,
    446                                   String qualifiedName)
    447                                   throws DOMException;
    448 
    449     /**
    450      * Returns a <code>NodeList</code> of all the <code>Elements</code> with a
    451      * given local name and namespace URI in document order.
    452      * @param namespaceURI The namespace URI of the elements to match on. The
    453      *   special value <code>"*"</code> matches all namespaces.
    454      * @param localName The local name of the elements to match on. The
    455      *   special value "*" matches all local names.
    456      * @return A new <code>NodeList</code> object containing all the matched
    457      *   <code>Elements</code>.
    458      * @since DOM Level 2
    459      */
    460     public NodeList getElementsByTagNameNS(String namespaceURI,
    461                                            String localName);
    462 
    463     /**
    464      * Returns the <code>Element</code> that has an ID attribute with the
    465      * given value. If no such element exists, this returns <code>null</code>
    466      * . If more than one element has an ID attribute with that value, what
    467      * is returned is undefined.
    468      * <br> The DOM implementation is expected to use the attribute
    469      * <code>Attr.isId</code> to determine if an attribute is of type ID.
    470      * <p ><b>Note:</b> Attributes with the name "ID" or "id" are not of type
    471      * ID unless so defined.
    472      * @param elementId The unique <code>id</code> value for an element.
    473      * @return The matching element or <code>null</code> if there is none.
    474      * @since DOM Level 2
    475      */
    476     public Element getElementById(String elementId);
    477 
    478     /**
    479      * An attribute specifying the encoding used for this document at the time
    480      * of the parsing. This is <code>null</code> when it is not known, such
    481      * as when the <code>Document</code> was created in memory.
    482      * @since DOM Level 3
    483      */
    484     public String getInputEncoding();
    485 
    486     /**
    487      * An attribute specifying, as part of the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-XMLDecl'>XML declaration</a>, the encoding of this document. This is <code>null</code> when
    488      * unspecified or when it is not known, such as when the
    489      * <code>Document</code> was created in memory.
    490      * @since DOM Level 3
    491      */
    492     public String getXmlEncoding();
    493 
    494     /**
    495      * An attribute specifying, as part of the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-XMLDecl'>XML declaration</a>, whether this document is standalone. This is <code>false</code> when
    496      * unspecified.
    497      * <p ><b>Note:</b>  No verification is done on the value when setting
    498      * this attribute. Applications should use
    499      * <code>Document.normalizeDocument()</code> with the "validate"
    500      * parameter to verify if the value matches the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#sec-rmd'>validity
    501      * constraint for standalone document declaration</a> as defined in [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>].
    502      * @since DOM Level 3
    503      */
    504     public boolean getXmlStandalone();
    505     /**
    506      * An attribute specifying, as part of the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-XMLDecl'>XML declaration</a>, whether this document is standalone. This is <code>false</code> when
    507      * unspecified.
    508      * <p ><b>Note:</b>  No verification is done on the value when setting
    509      * this attribute. Applications should use
    510      * <code>Document.normalizeDocument()</code> with the "validate"
    511      * parameter to verify if the value matches the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#sec-rmd'>validity
    512      * constraint for standalone document declaration</a> as defined in [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>].
    513      * @exception DOMException
    514      *    NOT_SUPPORTED_ERR: Raised if this document does not support the
    515      *   "XML" feature.
    516      * @since DOM Level 3
    517      */
    518     public void setXmlStandalone(boolean xmlStandalone)
    519                                   throws DOMException;
    520 
    521     /**
    522      *  An attribute specifying, as part of the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-XMLDecl'>XML declaration</a>, the version number of this document. If there is no declaration and if
    523      * this document supports the "XML" feature, the value is
    524      * <code>"1.0"</code>. If this document does not support the "XML"
    525      * feature, the value is always <code>null</code>. Changing this
    526      * attribute will affect methods that check for invalid characters in
    527      * XML names. Application should invoke
    528      * <code>Document.normalizeDocument()</code> in order to check for
    529      * invalid characters in the <code>Node</code>s that are already part of
    530      * this <code>Document</code>.
    531      * <br> DOM applications may use the
    532      * <code>DOMImplementation.hasFeature(feature, version)</code> method
    533      * with parameter values "XMLVersion" and "1.0" (respectively) to
    534      * determine if an implementation supports [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. DOM
    535      * applications may use the same method with parameter values
    536      * "XMLVersion" and "1.1" (respectively) to determine if an
    537      * implementation supports [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>]. In both
    538      * cases, in order to support XML, an implementation must also support
    539      * the "XML" feature defined in this specification. <code>Document</code>
    540      *  objects supporting a version of the "XMLVersion" feature must not
    541      * raise a <code>NOT_SUPPORTED_ERR</code> exception for the same version
    542      * number when using <code>Document.xmlVersion</code>.
    543      * @since DOM Level 3
    544      */
    545     public String getXmlVersion();
    546     /**
    547      *  An attribute specifying, as part of the <a href='http://www.w3.org/TR/2004/REC-xml-20040204#NT-XMLDecl'>XML declaration</a>, the version number of this document. If there is no declaration and if
    548      * this document supports the "XML" feature, the value is
    549      * <code>"1.0"</code>. If this document does not support the "XML"
    550      * feature, the value is always <code>null</code>. Changing this
    551      * attribute will affect methods that check for invalid characters in
    552      * XML names. Application should invoke
    553      * <code>Document.normalizeDocument()</code> in order to check for
    554      * invalid characters in the <code>Node</code>s that are already part of
    555      * this <code>Document</code>.
    556      * <br> DOM applications may use the
    557      * <code>DOMImplementation.hasFeature(feature, version)</code> method
    558      * with parameter values "XMLVersion" and "1.0" (respectively) to
    559      * determine if an implementation supports [<a href='http://www.w3.org/TR/2004/REC-xml-20040204'>XML 1.0</a>]. DOM
    560      * applications may use the same method with parameter values
    561      * "XMLVersion" and "1.1" (respectively) to determine if an
    562      * implementation supports [<a href='http://www.w3.org/TR/2004/REC-xml11-20040204/'>XML 1.1</a>]. In both
    563      * cases, in order to support XML, an implementation must also support
    564      * the "XML" feature defined in this specification. <code>Document</code>
    565      *  objects supporting a version of the "XMLVersion" feature must not
    566      * raise a <code>NOT_SUPPORTED_ERR</code> exception for the same version
    567      * number when using <code>Document.xmlVersion</code>.
    568      * @exception DOMException
    569      *    NOT_SUPPORTED_ERR: Raised if the version is set to a value that is
    570      *   not supported by this <code>Document</code> or if this document
    571      *   does not support the "XML" feature.
    572      * @since DOM Level 3
    573      */
    574     public void setXmlVersion(String xmlVersion)
    575                                   throws DOMException;
    576 
    577     /**
    578      * An attribute specifying whether error checking is enforced or not. When
    579      * set to <code>false</code>, the implementation is free to not test
    580      * every possible error case normally defined on DOM operations, and not
    581      * raise any <code>DOMException</code> on DOM operations or report
    582      * errors while using <code>Document.normalizeDocument()</code>. In case
    583      * of error, the behavior is undefined. This attribute is
    584      * <code>true</code> by default.
    585      * @since DOM Level 3
    586      */
    587     public boolean getStrictErrorChecking();
    588     /**
    589      * An attribute specifying whether error checking is enforced or not. When
    590      * set to <code>false</code>, the implementation is free to not test
    591      * every possible error case normally defined on DOM operations, and not
    592      * raise any <code>DOMException</code> on DOM operations or report
    593      * errors while using <code>Document.normalizeDocument()</code>. In case
    594      * of error, the behavior is undefined. This attribute is
    595      * <code>true</code> by default.
    596      * @since DOM Level 3
    597      */
    598     public void setStrictErrorChecking(boolean strictErrorChecking);
    599 
    600     /**
    601      *  The location of the document or <code>null</code> if undefined or if
    602      * the <code>Document</code> was created using
    603      * <code>DOMImplementation.createDocument</code>. No lexical checking is
    604      * performed when setting this attribute; this could result in a
    605      * <code>null</code> value returned when using <code>Node.baseURI</code>
    606      * .
    607      * <br> Beware that when the <code>Document</code> supports the feature
    608      * "HTML" [<a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>DOM Level 2 HTML</a>]
    609      * , the href attribute of the HTML BASE element takes precedence over
    610      * this attribute when computing <code>Node.baseURI</code>.
    611      * @since DOM Level 3
    612      */
    613     public String getDocumentURI();
    614     /**
    615      *  The location of the document or <code>null</code> if undefined or if
    616      * the <code>Document</code> was created using
    617      * <code>DOMImplementation.createDocument</code>. No lexical checking is
    618      * performed when setting this attribute; this could result in a
    619      * <code>null</code> value returned when using <code>Node.baseURI</code>
    620      * .
    621      * <br> Beware that when the <code>Document</code> supports the feature
    622      * "HTML" [<a href='http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109'>DOM Level 2 HTML</a>]
    623      * , the href attribute of the HTML BASE element takes precedence over
    624      * this attribute when computing <code>Node.baseURI</code>.
    625      * @since DOM Level 3
    626      */
    627     public void setDocumentURI(String documentURI);
    628 
    629     /**
    630      *  Attempts to adopt a node from another document to this document. If
    631      * supported, it changes the <code>ownerDocument</code> of the source
    632      * node, its children, as well as the attached attribute nodes if there
    633      * are any. If the source node has a parent it is first removed from the
    634      * child list of its parent. This effectively allows moving a subtree
    635      * from one document to another (unlike <code>importNode()</code> which
    636      * create a copy of the source node instead of moving it). When it
    637      * fails, applications should use <code>Document.importNode()</code>
    638      * instead. Note that if the adopted node is already part of this
    639      * document (i.e. the source and target document are the same), this
    640      * method still has the effect of removing the source node from the
    641      * child list of its parent, if any. The following list describes the
    642      * specifics for each type of node.
    643      * <dl>
    644      * <dt>ATTRIBUTE_NODE</dt>
    645      * <dd>The
    646      * <code>ownerElement</code> attribute is set to <code>null</code> and
    647      * the <code>specified</code> flag is set to <code>true</code> on the
    648      * adopted <code>Attr</code>. The descendants of the source
    649      * <code>Attr</code> are recursively adopted.</dd>
    650      * <dt>DOCUMENT_FRAGMENT_NODE</dt>
    651      * <dd>The
    652      * descendants of the source node are recursively adopted.</dd>
    653      * <dt>DOCUMENT_NODE</dt>
    654      * <dd>
    655      * <code>Document</code> nodes cannot be adopted.</dd>
    656      * <dt>DOCUMENT_TYPE_NODE</dt>
    657      * <dd>
    658      * <code>DocumentType</code> nodes cannot be adopted.</dd>
    659      * <dt>ELEMENT_NODE</dt>
    660      * <dd><em>Specified</em> attribute nodes of the source element are adopted. Default attributes
    661      * are discarded, though if the document being adopted into defines
    662      * default attributes for this element name, those are assigned. The
    663      * descendants of the source element are recursively adopted.</dd>
    664      * <dt>ENTITY_NODE</dt>
    665      * <dd>
    666      * <code>Entity</code> nodes cannot be adopted.</dd>
    667      * <dt>ENTITY_REFERENCE_NODE</dt>
    668      * <dd>Only
    669      * the <code>EntityReference</code> node itself is adopted, the
    670      * descendants are discarded, since the source and destination documents
    671      * might have defined the entity differently. If the document being
    672      * imported into provides a definition for this entity name, its value
    673      * is assigned.</dd>
    674      * <dt>NOTATION_NODE</dt>
    675      * <dd><code>Notation</code> nodes cannot be
    676      * adopted.</dd>
    677      * <dt>PROCESSING_INSTRUCTION_NODE, TEXT_NODE, CDATA_SECTION_NODE,
    678      * COMMENT_NODE</dt>
    679      * <dd>These nodes can all be adopted. No specifics.</dd>
    680      * </dl>
    681      * <p ><b>Note:</b>  Since it does not create new nodes unlike the
    682      * <code>Document.importNode()</code> method, this method does not raise
    683      * an <code>INVALID_CHARACTER_ERR</code> exception, and applications
    684      * should use the <code>Document.normalizeDocument()</code> method to
    685      * check if an imported name is not an XML name according to the XML
    686      * version in use.
    687      * @param source The node to move into this document.
    688      * @return The adopted node, or <code>null</code> if this operation
    689      *   fails, such as when the source node comes from a different
    690      *   implementation.
    691      * @exception DOMException
    692      *   NOT_SUPPORTED_ERR: Raised if the source node is of type
    693      *   <code>DOCUMENT</code>, <code>DOCUMENT_TYPE</code>.
    694      *   <br>NO_MODIFICATION_ALLOWED_ERR: Raised when the source node is
    695      *   readonly.
    696      * @since DOM Level 3
    697      */
    698     public Node adoptNode(Node source)
    699                           throws DOMException;
    700 
    701     /**
    702      *  The configuration used when <code>Document.normalizeDocument()</code>
    703      * is invoked.
    704      * @since DOM Level 3
    705      */
    706     public DOMConfiguration getDomConfig();
    707 
    708     /**
    709      *  This method acts as if the document was going through a save and load
    710      * cycle, putting the document in a "normal" form. As a consequence,
    711      * this method updates the replacement tree of
    712      * <code>EntityReference</code> nodes and normalizes <code>Text</code>
    713      * nodes, as defined in the method <code>Node.normalize()</code>.
    714      * <br> Otherwise, the actual result depends on the features being set on
    715      * the <code>Document.domConfig</code> object and governing what
    716      * operations actually take place. Noticeably this method could also
    717      * make the document namespace well-formed according to the algorithm
    718      * described in , check the character normalization, remove the
    719      * <code>CDATASection</code> nodes, etc. See
    720      * <code>DOMConfiguration</code> for details.
    721      * <pre>// Keep in the document
    722      * the information defined // in the XML Information Set (Java example)
    723      * DOMConfiguration docConfig = myDocument.getDomConfig();
    724      * docConfig.setParameter("infoset", Boolean.TRUE);
    725      * myDocument.normalizeDocument();</pre>
    726      *
    727      * <br>Mutation events, when supported, are generated to reflect the
    728      * changes occurring on the document.
    729      * <br> If errors occur during the invocation of this method, such as an
    730      * attempt to update a read-only node or a <code>Node.nodeName</code>
    731      * contains an invalid character according to the XML version in use,
    732      * errors or warnings (<code>DOMError.SEVERITY_ERROR</code> or
    733      * <code>DOMError.SEVERITY_WARNING</code>) will be reported using the
    734      * <code>DOMErrorHandler</code> object associated with the "error-handler
    735      * " parameter. Note this method might also report fatal errors (
    736      * <code>DOMError.SEVERITY_FATAL_ERROR</code>) if an implementation
    737      * cannot recover from an error.
    738      * @since DOM Level 3
    739      */
    740     public void normalizeDocument();
    741 
    742     /**
    743      * Rename an existing node of type <code>ELEMENT_NODE</code> or
    744      * <code>ATTRIBUTE_NODE</code>.
    745      * <br>When possible this simply changes the name of the given node,
    746      * otherwise this creates a new node with the specified name and
    747      * replaces the existing node with the new node as described below.
    748      * <br>If simply changing the name of the given node is not possible, the
    749      * following operations are performed: a new node is created, any
    750      * registered event listener is registered on the new node, any user
    751      * data attached to the old node is removed from that node, the old node
    752      * is removed from its parent if it has one, the children are moved to
    753      * the new node, if the renamed node is an <code>Element</code> its
    754      * attributes are moved to the new node, the new node is inserted at the
    755      * position the old node used to have in its parent's child nodes list
    756      * if it has one, the user data that was attached to the old node is
    757      * attached to the new node.
    758      * <br>When the node being renamed is an <code>Element</code> only the
    759      * specified attributes are moved, default attributes originated from
    760      * the DTD are updated according to the new element name. In addition,
    761      * the implementation may update default attributes from other schemas.
    762      * Applications should use <code>Document.normalizeDocument()</code> to
    763      * guarantee these attributes are up-to-date.
    764      * <br>When the node being renamed is an <code>Attr</code> that is
    765      * attached to an <code>Element</code>, the node is first removed from
    766      * the <code>Element</code> attributes map. Then, once renamed, either
    767      * by modifying the existing node or creating a new one as described
    768      * above, it is put back.
    769      * <br>In addition,
    770      * <ul>
    771      * <li> a user data event <code>NODE_RENAMED</code> is fired,
    772      * </li>
    773      * <li>
    774      * when the implementation supports the feature "MutationNameEvents",
    775      * each mutation operation involved in this method fires the appropriate
    776      * event, and in the end the event {
    777      * <code>http://www.w3.org/2001/xml-events</code>,
    778      * <code>DOMElementNameChanged</code>} or {
    779      * <code>http://www.w3.org/2001/xml-events</code>,
    780      * <code>DOMAttributeNameChanged</code>} is fired.
    781      * </li>
    782      * </ul>
    783      * @param n The node to rename.
    784      * @param namespaceURI The new namespace URI.
    785      * @param qualifiedName The new qualified name.
    786      * @return The renamed node. This is either the specified node or the new
    787      *   node that was created to replace the specified node.
    788      * @exception DOMException
    789      *   NOT_SUPPORTED_ERR: Raised when the type of the specified node is
    790      *   neither <code>ELEMENT_NODE</code> nor <code>ATTRIBUTE_NODE</code>,
    791      *   or if the implementation does not support the renaming of the
    792      *   document element.
    793      *   <br>INVALID_CHARACTER_ERR: Raised if the new qualified name is not an
    794      *   XML name according to the XML version in use specified in the
    795      *   <code>Document.xmlVersion</code> attribute.
    796      *   <br>WRONG_DOCUMENT_ERR: Raised when the specified node was created
    797      *   from a different document than this document.
    798      *   <br>NAMESPACE_ERR: Raised if the <code>qualifiedName</code> is a
    799      *   malformed qualified name, if the <code>qualifiedName</code> has a
    800      *   prefix and the <code>namespaceURI</code> is <code>null</code>, or
    801      *   if the <code>qualifiedName</code> has a prefix that is "xml" and
    802      *   the <code>namespaceURI</code> is different from "<a href='http://www.w3.org/XML/1998/namespace'>
    803      *   http://www.w3.org/XML/1998/namespace</a>" [<a href='http://www.w3.org/TR/1999/REC-xml-names-19990114/'>XML Namespaces</a>]
    804      *   . Also raised, when the node being renamed is an attribute, if the
    805      *   <code>qualifiedName</code>, or its prefix, is "xmlns" and the
    806      *   <code>namespaceURI</code> is different from "<a href='http://www.w3.org/2000/xmlns/'>http://www.w3.org/2000/xmlns/</a>".
    807      * @since DOM Level 3
    808      */
    809     public Node renameNode(Node n,
    810                            String namespaceURI,
    811                            String qualifiedName)
    812                            throws DOMException;
    813 
    814 }
    815