This procedure is defined in the server but not documented via ad_proc or proc_doc and may be intended as a private interface.

The procedure is defined as:

proc dom::DOMImplementation {method args} {
    
    variable DOMImplementationOptions
    variable DOMImplementationCounter

    switch -- $method {

        hasFeature {

            if {[llength $args] != 2} {
                return -code error "wrong number of arguments"
            }

            # Later on, could use Tcl package facility
            if {[regexp {create|destroy|parse|serialize|trim} [lindex $args 0]]} {
                if {[lindex $args 1] eq "1.0" } {
                    return 1
                } else {
                    return 0
                }
            } else {
                return 0
            }

        }

        create {

            # Bootstrap a document instance

            switch [llength $args] {
                0 {
                    # Allocate unique document array name
                    set name [namespace current]::document[incr DOMImplementationCounter]
                }
                1 {
                    # Use array name provided.  Should check that it is safe.
                    set name [lindex $args 0]
                    unset -nocomplain $name
                }
                default {
                    return -code error "wrong number of arguments"
                }
            }

            set varPrefix ${name}var
            set arrayPrefix ${name}arr

            array set $name [list counter 1  node1 [list id node1 docArray $name		 node:nodeType documentFragment		 node:parentNode {}			 node:childNodes ${varPrefix}1		 documentFragment:masterDoc node1	 document:implementation {}		 document:xmldecl {version 1.0}		 document:documentElement {}		 document:doctype {}			 ]]

            # Initialise child node list
            set ${varPrefix}1 {}

            # Return the new top-level node
            return ${name}(node1)

        }

        destroy {

            # Cleanup a document

            if {[llength $args] != 1} {
                return -code error "wrong number of arguments"
            }
            array set node [set [lindex $args 0]]

            # Patch from Gerald Lester

            ##
            ## First release all the associated variables
            ##
            upvar #0 $node(docArray) docArray
            for {set i 0} {$i < $docArray(counter)} {incr i} {
                unset -nocomplain ${docArrayName}var$i
                unset -nocomplain ${docArrayName}arr$i
            }

            ##
            ## Then release the main document array
            ##
            if {![info exists $node(docArray)]} {
                return -code error "unable to destroy document"
            }
            unset -nocomplain $node(docArray)

            return {}

        }

        parse {

            # This implementation allows use of either of two event-based,
            # non-validating XML parsers:
            # . TclXML Tcl-only parser (version 1.3 or higher)
            # . TclExpat parser

            array set opts {-parser {} -progresscommand {} -chunksize 8196}
            if {[catch {array set opts [lrange $args 1 end]}]} {
                return -code error "bad configuration options"
            }

            # Create a state array for this parse session
            set state [namespace current]::parse[incr DOMImplementationCounter]
            array set $state [array get opts -*]
            array set $state [list progCounter 0]
            set errorCleanup {}

            switch -- $opts(-parser) {
                expat {
                    if {[catch {package require expat} version]} {
                        eval $errorCleanup
                        return -code error "expat extension is not available"
                    }
                    set parser [expat [namespace current]::xmlparser]
                }
                tcl {
                    if {[catch {package require xml 1.3} version]} {
                        eval $errorCleanup
                        return -code error "XML parser package is not available"
                    }
                    set parser [::xml::parser xmlparser]
                }
                default {
                    # Automatically determine which parser to use
                    if {[catch {package require expat} version]} {
                        if {[catch {package require xml 1.3} version]} {
                            eval $errorCleanup
                            return -code error "unable to load XML parser"
                        } else {
                            set parser [::xml::parser xmlparser]
                        }
                    } else {
                        set parser [expat [namespace current]::xmlparser]
                    }
                }
            }

            $parser configure  -elementstartcommand [namespace code [list ParseElementStart $state]]	 -elementendcommand [namespace code [list ParseElementEnd $state]]	 -characterdatacommand [namespace code [list ParseCharacterData $state]]  -processinginstructioncommand [namespace code [list ParseProcessingInstruction $state]]  -final true

            # TclXML has features missing from expat
            catch {
                $parser configure  -xmldeclcommand [namespace code [list ParseXMLDeclaration $state]]  -doctypecommand [namespace code [list ParseDocType $state]]
            }

            # Create top-level document
            array set $state [list docNode [DOMImplementation create]]
            array set $state [list current [lindex [array get $state docNode] 1]]

            # Parse data
            # Bug in TclExpat - doesn't handle non-final inputs
            if {0 && [string length $opts(-progresscommand)]} {
                $parser configure -final false
                while {[string length [lindex $args 0]]} {
                    $parser parse [string range [lindex $args 0] 0 $opts(-chunksize)]
                    #set args [lreplace $args 0 0  #              [string range [lindex $args 0] $opts(-chunksize) end]]
                    lset args 0 [string range [lindex $args 0] $opts(-chunksize) end]
                    uplevel #0 $opts(-progresscommand)
                }
                $parser configure -final true
            } elseif {[catch {$parser parse [lindex $args 0]} err]} {
                catch {rename $parser {}}
                unset -nocomplain $state
                return -code error $err
            }

            # Free data structures which are no longer required
            catch {rename $parser {}}

            set doc [lindex [array get $state docNode] 1]
            unset $state
            return $doc

        }

        serialize {

            if {[llength $args] < 1} {
                return -code error "wrong number of arguments"
            }

            GetHandle documentFragment [lindex $args 0] node
            return [eval [list Serialize:$node(node:nodeType)] $args]

        }

        trim {

            # Removes textNodes that only contain white space

            if {[llength $args] != 1} {
                return -code error "wrong number of arguments"
            }

            Trim [lindex $args 0]

            return {}

        }

        default {
            return -code error "unknown method \"$method\""
        }

    }

    return {}

}

Show another procedure: