# Interface DOMImplementation

All Known Subinterfaces:
  `DOMImplementationCSS, HTMLDOMImplementation`

public interface DOMImplementation
The `DOMImplementation` interface provides a number of methods for performing operations that are independent of any particular instance of the document object model.

See also the Document Object Model (DOM) Level 3 Core Specification.

Since:
  1.4, DOM Level 2

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Document`
  `createDocument(String namespaceURI, String qualifiedName, DocumentType doctype)`
  Creates a DOM Document object of the specified type with its document element.
  `DocumentType`
  `createDocumentType(String qualifiedName, String publicId, String systemId)`
  Creates an empty `DocumentType` node.
  `Object`
  `getFeature(String feature, String version)`
  This method returns a specialized object which implements the specialized APIs of the specified feature and version, as specified in DOM Features.
  `boolean`
  `hasFeature(String feature, String version)`
  Test if the DOM implementation implements a specific feature and version, as specified in DOM Features.

- ## Method Details

  - ### hasFeature

    boolean hasFeature(String feature, String version)
    Test if the DOM implementation implements a specific feature and version, as specified in DOM Features.
    Parameters:
      `feature` - The name of the feature to test.
      `version` - This is the version number of the feature to test.
    Returns:
      `true` if the feature is implemented in the specified version, `false` otherwise.

  - ### createDocumentType

    DocumentType createDocumentType(String qualifiedName, String publicId, String systemId) throws DOMException
    Creates an empty `DocumentType` node. Entity declarations and notations are not made available. Entity reference expansions and default attribute additions do not occur..
    Parameters:
      `qualifiedName` - The qualified name of the document type to be created.
      `publicId` - The external subset public identifier.
      `systemId` - The external subset system identifier.
    Returns:
      A new `DocumentType` node with `Node.ownerDocument` set to `null`.
    Throws:
      `DOMException` - INVALID_CHARACTER_ERR: Raised if the specified qualified name is not an XML name according to [XML 1.0].
      NAMESPACE_ERR: Raised if the `qualifiedName` is malformed.
      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 [HTML 4.01]).
    Since:
      1.4, DOM Level 2

  - ### createDocument

    Document createDocument(String namespaceURI, String qualifiedName, DocumentType doctype) throws DOMException
    Creates a DOM Document object of the specified type with its document element.
    Note that based on the `DocumentType` given to create the document, the implementation may instantiate specialized `Document` objects that support additional features than the "Core", such as "HTML" [DOM Level 2 HTML] . On the other hand, setting the `DocumentType` after the document was created makes this very unlikely to happen. Alternatively, specialized `Document` creation methods, such as `createHTMLDocument` [DOM Level 2 HTML] , can be used to obtain specific types of `Document` objects.
    Parameters:
      `namespaceURI` - The namespace URI of the document element to create or `null`.
      `qualifiedName` - The qualified name of the document element to be created or `null`.
      `doctype` - The type of document to be created or `null`. When `doctype` is not `null`, its `Node.ownerDocument` attribute is set to the document being created.
    Returns:
      A new `Document` object with its document element. If the `NamespaceURI`, `qualifiedName`, and `doctype` are `null`, the returned `Document` is empty with no document element.
    Throws:
      `DOMException` - INVALID_CHARACTER_ERR: Raised if the specified qualified name is not an XML name according to [XML 1.0].
      NAMESPACE_ERR: Raised if the `qualifiedName` is malformed, if the `qualifiedName` has a prefix and the `namespaceURI` is `null`, or if the `qualifiedName` is `null` and the `namespaceURI` is different from `null`, or if the `qualifiedName` has a prefix that is "xml" and the `namespaceURI` is different from " http://www.w3.org/XML/1998/namespace" [XML Namespaces] , or if the DOM implementation does not support the `"XML"` feature but a non-null namespace URI was provided, since namespaces were defined by XML.
      WRONG_DOCUMENT_ERR: Raised if `doctype` has already been used with a different document or was created from a different implementation.
      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 [HTML 4.01]).
    Since:
      1.4, DOM Level 2

  - ### getFeature

    Object getFeature(String feature, String version)
    This method returns a specialized object which implements the specialized APIs of the specified feature and version, as specified in DOM Features. The specialized object may also be obtained by using binding-specific casting methods but is not necessarily expected to, as discussed in . This method also allow the implementation to provide specialized objects which do not support the `DOMImplementation` interface.
    Parameters:
      `feature` - The name of the feature requested. Note that any plus sign "+" prepended to the name of the feature will be ignored since it is not significant in the context of this method.
      `version` - This is the version number of the feature to test.
    Returns:
      Returns an object which implements the specialized APIs of the specified feature and version, if any, or `null` if there is no object which implements interfaces associated with that feature. If the `DOMObject` returned by this method implements the `DOMImplementation` interface, it must delegate to the primary core `DOMImplementation` and not return results inconsistent with the primary core `DOMImplementation` such as `hasFeature`, `getFeature`, etc.
    Since:
      1.5, DOM Level 3