<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> 
This is the work-in-progress
specification for the manakai's DOM binding for Perl.
This specification only scopes <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s DOM implementation;
it does not try to define what any other DOM implementation
should do.  However, other DOM implementation
that exposes interfaces to Perl scripts <strong xmlns="http://www.w3.org/1999/xhtml"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MAY</anchor></strong> use this binding.</ed><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> TODO:<ul xmlns="http://www.w3.org/1999/xhtml"><li>Truck the draft for the ECMAScript binding authored by
W3C Web APIs WG</li><li>Write comparison with SVGT 1.2's DOM Perl Language Binding</li><li><cite xml:lang="en-US">XML Binding Language (XBL) 2.0</cite> (<time>2007-03-16 13:20:16 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/xbl/#xbl-element-example">http://www.w3.org/TR/xbl/#xbl-element-example</anchor-external></li><li>The global object (<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Window</anchor></code>)</li></ul></ed><section><h1>Conformance</h1><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"></ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> Statements about conformance in this specification
are only applied to implementations that support related
feature.  For example, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>-level requirements
for treatement of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EventHandler</anchor></code> objects
do not apply to implementations that do not support
DOM Events module.</p></section><section><h1>Objects and interfaces</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end>
A DOM object, i.e. an object implementing one
or more DOM interfaces, <strong><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</anchor></strong> be represented
by a Perl object, i.e. a thingly referenced
by some Perl references and <code xml:lang="en">bless</code>ed in
a Perl class, unless otherwise specified.
The Perl class <strong><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</anchor></strong> implement 
the DOM interfaces implemented by the DOM object.</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">better wording, getFeature consideration</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="114" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[114]</anchor-end> The class implementing a DOM interface <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> inherit non-DOM classes.</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="115" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[115]</anchor-end> For example, the class implementing the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMException</anchor></code> interface
might inherit a class that defines the exception mechanism the implementation is build on top of it.
Another example is that any class implementing DOM interfaces might inherit from the &quot;object&quot;
base class provided by the object-orient programming framework used by the implementation.</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="117" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[117]</anchor-end> The implementation <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> provide ways to determine whether an object implements
a specific DOM interface or not.  However, this is not required.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[66]</anchor-end> Specifications often requires that two objects be <em>same</em>.  They don't have to be same object in Perl
sense, but they have to exhibit following characteristics:<ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="67" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[67]</anchor-end> Two objects <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be equal according to <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">eq</anchor></code> operation if and only if 
they are <em>same</em>.  Operations <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ne</anchor></code> and <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cmp</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be 
consistent with the <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">eq</anchor></code> operation.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="68" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[68]</anchor-end> If the stringifier is not defined for the object, its stringified value <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
be different from the stringified value of any object without stringifier at the moment.
The stringified value <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST NOT</strong></anchor> change.</li></ul></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="69" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[69]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="68" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;68</anchor-internal> ensures that following code works as intended:<pre xmlns="http://www.w3.org/1999/xhtml" class="example perl code">@different_parents = grep { not $found{$node-&gt;parent_node}++ } @node;</pre></comment-p></section><section><h1>Methods and attributes</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end>
A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be implemented as a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end>
A read-only <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> attribute <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be implemented as
a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method that returns the value contained in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> attribute.
The <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> throw an implementation
dependent exception if any argument is specified for the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end>
A read-write <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> attribute <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be implemented as
a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method.  The <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return
the value contained in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> attribute if no argument is
specified for the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method (i.e. the only argument to
the subroutine implementing the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method is the object itself).
Otherwise, the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> try to set
the first argument specified for the method (i.e. the
second argument to the subroutine implementing the
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method) to the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> attribute.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Note that specifying <code xmlns="http://www.w3.org/1999/xhtml" class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code>
as the argument to the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method, which
set the <code xmlns="http://www.w3.org/1999/xhtml" class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> value
to the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> attribute, is different from
specifying no argument, which returns the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor>
attribute value.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end>
A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> parameter to a method is <dfn xml:lang="en">optional</dfn> if
either <code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> or <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boolean</anchor></code>
<code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">false</anchor></code> value is allowed to be specified
to that parameter and any following <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> parameter
is optional.</p><p>The <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> act as if an <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code>
or a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> false value, depending on the data type of the parameter,
is specified to each optional parameter if no argument
corresponding to that parameter is specified.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="98" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[98]</anchor-end> If the return value of the operator is defined as <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">void</anchor>, the method implementing the operation
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return an empty list.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="123" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[123]</anchor-end> Since Perl objects can be overloaded such that stringification and similar operations can be
defined by the application, it is important to ensure the conversion from the Perl value to the WebIDL
value is performed in the right way.</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="124" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[124]</anchor-end> Following pairs of code fragments can make different side effects:<pre class="perl code">## Evaluation order is significant.
$v1 = <span>'</span>'.$_[1];
$v2 = <span>'</span>'.$_[2];

$v2 = <span>'</span>'.$_[2];
$v1 = <span>'</span>'.$_[1];


## Three serializations can be different.
$v1 = <span>'</span>'.$_[1];

$v1 = 0+$_[1];

$v1 = !!$_[1];


## Whether the overloaded operation has been invoked or not is observable.
$v1 = <span>'</span>'.$_[1];
$v2 = <span>'</span>'.$_[2];
return;

$v1 = <span>'</span>'.$_[1];
return if $v1; # or throw an exception
$v2 = <span>'</span>'.$_[2];
return;


## How many times overloaded operation has been invoked is observable.
$v1 = <span>'</span>'.$_[1];
$v1 = <span>'</span>'.$_[1];

$v1 = <span>'</span>'.$_[1];</pre></p></example></section><section><h1>Constants</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="62" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[62]</anchor-end> When a constant is defined by some interface, any platform object implementing the interface <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
have a method whose name is equal to the constant name.  The method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return the constant value.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="65" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[65]</anchor-end> Any class implementing the interface <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">SHOULD</strong></anchor> have a method whose name is equal to the constant name.
If there is such a method, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return the constant value.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="63" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[63]</anchor-end> If there is a module corresponding to the interface, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> have a constant subroutine
whose name is equal to the constant name.  If there is such a constant subroutine, it
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return the constant value.  It <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> be exported from the module.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="64" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[64]</anchor-end> If an implementation supports all of these constant representations, the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ELEMENT_NODE</anchor></code>
constant of the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> interface can be used like this:<pre xmlns="http://www.w3.org/1999/xhtml" class="perl example code"># <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="62" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;62</anchor-internal>
is $node-&gt;ELEMENT_NODE, 1;

# <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="65" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;65</anchor-internal>
is +MyDOM::Node-&gt;ELEMENT_NODE, 1;

# <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="63" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;63</anchor-internal>
use MyDOM::Node;
is ELEMENT_NODE, 1;</pre>Since module or class name appears in invocations of <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="65" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;65</anchor-internal> and <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="63" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;63</anchor-internal>, they are not portable among implementations
by definition, which is why they are not a MUST-level requirement.  Note that when a constant is exported as
mentioned in <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="63" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;63</anchor-internal>, whether it is exported by default or not is implementation dependent.  Moreover,
it can be exported as part of some tag (e.g. <code xmlns="http://www.w3.org/1999/xhtml">:node_type</code>) if desired.</comment-p></section><section><h1>Legacy callers</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> The <code class="IDL" xml:lang="en">legacycaller</code> keyword <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> have no effect.</p></section><section><h1>Exceptions and errors</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="54" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[54]</anchor-end> The following <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL fragment</anchor> <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> be implemented when 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">simple exception</anchor> classes and/or <code>SyntaxError</code> is implemented:</p><figure><pre class="IDL code">[Constructor(optional DOMString message = &quot;&quot;)]
interface Error {
  readonly attribute DOMString name;
  readonly attribute DOMString message;
  readonly attribute DOMString fileName;
  readonly attribute long lineNumber;
  stringifier;
};

[Constructor(optional DOMString message = &quot;&quot;)]
interface EvalError : Error {};

[Constructor(optional DOMString message = &quot;&quot;)]
interface RangeError : Error {};

[Constructor(optional DOMString message = &quot;&quot;)]
interface ReferenceError : Error {};

[Constructor(optional DOMString message = &quot;&quot;)]
interface SyntaxError : Error {};

[Constructor(optional DOMString message = &quot;&quot;)]
interface TypeError : Error {};

[Constructor(optional DOMString message = &quot;&quot;)]
interface URIError : Error {};</pre></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="183" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[183]</anchor-end> The constructors of these interfaces <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> return a new object
implementing the respective interface.  The object's <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">name</f> <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST>
be set to the name of the interface.  The object's <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">message</f> <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST>
be set to the <var>message</var> argument.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="182" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[182]</anchor-end> An object which is a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">simple exception</anchor> or <code class="DOMi" xml:lang="en">DOMException</code>
<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> be an object <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">implementing</anchor> the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl Error Object Interface Level 1</anchor>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/manakai/perl-web-dom/blob/master/lib/Web/DOM/Error.pod#error-object-api">https://github.com/manakai/perl-web-dom/blob/master/lib/Web/DOM/Error.pod#error-object-api</anchor-external>.
Semantics of attributes <code>name</code>, <code>message</code>, <code>fileName</code>, and
<code>lineNumber</code> and the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">stringifier</anchor> are defined by that specification.
The constructor is expected to set the <code>fileName</code> and <code>lineNumber</code>
of the created object.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> To <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">throw</anchor> an <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">exception</anchor> <var>exception</var>, <code>die</code> <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST>
be invoked with <var>exception</var>.</p><history xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><delete><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="53" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[53]</anchor-end> Implementations are encouraged to employ the
<code xmlns="http://www.w3.org/1999/xhtml" class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Error</anchor></code> module as a basis
to construct their own exception mechanism.</comment-p></delete><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="57" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[57]</anchor-end> The <dfn><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fileName</anchor></code></dfn> attribute <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return the string identifying
the file where the method or attribute that throws the exception is invoked.
The <dfn><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lineNumber</anchor></code></dfn> attribute <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
return the line number in the file, where the method or attribute that throws the exception is invoked.
How to determine the these values are implementation dependent.</p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="58" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[58]</anchor-end> The stringifier <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">WebIDL</src> method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return the message <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">WebIDL</src>
followed by string <code> at </code> followed by the <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">fileName</anchor></code> followed by string
<code> line </code> followed by stringified <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">XXXref</src> representation of <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lineNumber</anchor></code> followed
by <code>.</code> followed by the value equal to Perl expression <code class="perl">&quot;\n&quot;</code>.</p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="116" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[116]</anchor-end> The <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMError</anchor></code> object's <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&quot;&quot;</anchor></code> operation <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
return the implementation-specific value that describes the error.</p></history></section><section><h1>Events</h1><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">...</ed></section><section><h1>Method names</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> The name of the method corresponding to an IDL attribute or method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be the value
returned by the following steps:<figure><ol><li>Let <var xml:lang="en">n</var> be the name of the IDL attribute or method.</li><li>If it is an IDL attribute and the IDL attribute <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reflect</anchor>s the content attribute with
name <var xml:lang="en">attr</var>:<ol><li>If <var xml:lang="en">n</var> is equal to <var xml:lang="en">attr</var> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII case-insensitively</anchor>, return <var xml:lang="en">attr</var> and abort these steps.</li></ol></li><li>Otherwise, if it is a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">camel-cased attribute</anchor> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-camel-cased-attribute">http://dev.w3.org/csswg/cssom/#dom-cssstyledeclaration-camel-cased-attribute</anchor-external>
of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSSStyleDeclaration</anchor></code> interface:<ol><li>Let <var xml:lang="en">prop</var> be the result of the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL attribute to CSS property</anchor> algorithm for the attribute.</li><li>Replace any <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code> character in <var xml:lang="en">prop</var> by the <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_</anchor></code> character.</li><li>Return <var xml:lang="en">prop</var> and abort these steps.</li></ol></li><li>If the <code>method_name_map</code> JSON object in <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/manakai/data-web-defs/blob/master/data/dom-perl.json">https://github.com/manakai/data-web-defs/blob/master/data/dom-perl.json</anchor-external>
contains a name <var xml:lang="en">name</var>, return the corresponding value and abort these steps.<ol><li><del>If there is a row in the table <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;14</anchor-internal> whose first column is equal to <var xml:lang="en">n</var>, return the value of the second column of the row and abort these steps.</del></li></ol></li><li>Otherwise, replace a sequence of one or more uppercase
letters at the end of <var xml:lang="en">n</var>, if any, by the lowercase
variant of the sequence.</li><li>Replace any sequence of two or more uppercase letters
in <var xml:lang="en">n</var> by a sequence of a 
<code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LOW LINE</anchor></code> character, 
the lowercase variant of the sequence except the last letter, 
a <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LOW LINE</anchor></code> character,
and the lowercase variant of the last letter of the sequence.</li><li>Replace any uppercase letter 
by a <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LOW LINE</anchor></code> character
followed by the lowercase variant of the letter.</li><li>Then, return <var xml:lang="en">n</var>.</li></ol></figure></p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="139" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[139]</anchor-end> For example, <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">localName</anchor></code>
is mapped to <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local_name</anchor></code>,
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">setAttributeNS</anchor></code> to
<code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">set_attribute_ns</anchor></code>,
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createLSInput</anchor></code> to
<code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">create_ls_input</anchor></code>, and
<code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MozBoxSizing</anchor></code> to
<code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_moz_box_sizing</anchor></code>.</p></example><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="140" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[140]</anchor-end> If a random interface defines the <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">itemId</anchor></code> attribute, its Perl name is 
<code class="perl">item_id</code>.  However, since the <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">itemId</anchor></code> attribute of the
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLElement</anchor></code> interface <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reflects</anchor> the <code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">itemid</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">content attribute</anchor>, its Perl name is <code class="perl">itemid</code>.</p></example><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end>
<strong>Exceptions</strong>.<table><tbody><tr><td><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor></td><td><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Perl Binding</anchor></td><td>Note</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">accessKey</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">accesskey</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLInputElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTextAreaElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLButtonElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLLabelElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLLegendElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLAnchorElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLAreaElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">aLink</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">alink</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLBodyElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bgColor</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bgcolor</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLDocument</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLBodyElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableRowElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableCellElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cellPadding</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cellpadding</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cellSpacing</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cellspacing</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">codeBase</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">codebase</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLObjectElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLAppletElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">codeType</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">codetype</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLObjectElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">colSpan</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">colspan</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableCellElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createTFoot</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">create_tfoot</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createTHead</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">create_thead</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">dateTime</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">datetime</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLModElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">dateTime</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">datetime</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTimeElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">deleteTFoot</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">delete_tfoot</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">deleteTHead</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">delete_thead</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">findOffset16</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">find_offset_16</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">StringExtended</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Core</anchor> informative)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">findOffset32</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">find_offset_32</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">StringExtended</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Core</anchor> informative)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">frameBorder</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">frameborder</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLFrameElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLIFrameElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">getAbsoluteReference3986</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">get_absolute_reference_3986</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">getAbsoluteReference3987</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">get_absolute_reference_3987</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">getIRIReference3987</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">get_iri_reference_3987</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">getURIReference3986</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">get_uri_reference_3986</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isAbsoluteIRI3987</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">is_absolute_iri_3987</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isAbsoluteURI3986</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">is_absolute_uri_3986</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isIRI3987</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">is_iri_3987</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isIRIReference3987</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">is_iri_reference_3987</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isMap</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ismap</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLImageElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isRelativeIRIReference3987</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">is_iri_reference_3987</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isRelativeReference3986</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">is_relative_reference_3986</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isSameDocumentReference3986</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">is_same_document_reference_3986</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isURI3986</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">is_uri_3986</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isURIReference3986</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">is_uri_reference_3986</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URIReference</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai</anchor>'s extension)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">itemValue</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">itemvalue</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLElement</anchor></code></td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">longDesc</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">longdesc</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLImageElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLFrameElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLIFrameElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">marginHeight</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">marginheight</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLFrameElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLIFrameElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">marginWidth</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">marginwidth</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLFrameElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLIFrameElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">maxLength</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">maxlength</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLInputElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">noHref</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">nohref</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLAreaElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">noResize</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">noresize</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLFrameElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">noShade</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">noshade</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLHRElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">noWrap</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">nowrap</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableCellElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">readOnly</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">readonly</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLInputElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTextAreaElement</anchor></code>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rowSpan</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">rowspan</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableCellElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">scrollbar3dLightShadowColor</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">scrollbar_3dlight_color</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSSStyleDeclarationProperties</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSSOM</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">scrollbarDarkShadowColor</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">scrollbar_darkshadow_color</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSSStyleDeclarationProperties</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSSOM</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tabIndex</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tabindex</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLSelectElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLInputElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTextAreaElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLButtonElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLAnchorElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLObjectElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLAreaElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tBodies</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tbodies</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tFoot</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tfoot</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tHead</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">thead</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">timeStamp</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">timestamp</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Event</anchor></code></td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">url</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLDocument</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">useMap</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">usemap</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLInputElement</anchor></code> , <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLImageElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLObjectElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">utf16Offset</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">utf16_offset</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMLocator</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Core</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">utf32Offset</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">utf32_offset</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMLocator</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Core</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">vAlign</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valign</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableColElement</anchor></code> , <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableSectionElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableRowElement</anchor></code>, <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLTableCellElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valueType</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valuetype</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLParamElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">vLink</anchor></code></td><td><code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">vlink</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLBodyElement</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM HTML</anchor>)</td></tr></tbody></table></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Editor's note (informative): <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakai//Issue//1//9</anchor></comment-p></delete></section><section><h1>Data types</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> In this section, <dfn xml:lang="en">number type</dfn>s includes:
<code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">long</anchor></code>, <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unsigned long</anchor></code>,
<code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unsigned long long</anchor></code>,
<code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">short</anchor></code>, 
and <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unsigned short</anchor></code>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end>
If the return value of the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> method or the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> attribute
is of number type and a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method return a value
in that type, jt <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return a value
that can be evaluated as a number (by, e.g., <code class="perl" xml:lang="en">0+</code>
operation).</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end>
If a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> method parameter or the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> attribute is 
of number type and it is necessary for a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> method to
get the specified value, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> evaluate
the specified value as a value (by, e.g., <code class="perl" xml:lang="en">0+</code>
operation).</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">
Similary, IDL type &lt;TYPE^^DISCore|QName::idl|boolean&gt;<pre xmlns="http://www.w3.org/1999/xhtml">    is expected to be evaluated in the Boolean context.</pre></ed><pre>    IDL type &lt;TYPE^^DISCore|QName::idl|any&gt; is corresponding to any scalar valu\
e
    in Perl.  IDL type &lt;TYPE^^DISCore|QName::idl|Object&gt; is bound to object.</pre><section><h1>Execution of algorithms defined for JavaScript</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="84" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[84]</anchor-end> When an algorithm for JavaScript is executed for a Perl value, the word &quot;ECMAScript value&quot; 
in the algorithm is read as &quot;Perl value&quot; instead.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="85" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[85]</anchor-end> Whenever the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor> <code class="JS" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ToNumber</anchor>()</code> operation
is applied to <var>$n</var>, the following steps <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> be run instead:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="179" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[179]</anchor-end> Return the result of evaluate Perl expression <code class="perl"><n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0</n> + <var>$x</var></code> in 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">scalar context</anchor>.</li></ol></figure></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="180" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[180]</anchor-end> This can invoke an <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">author</anchor>-defined code if <var xmlns="http://www.w3.org/1999/xhtml">$x</var> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">overload</anchor>s
the <code xmlns="http://www.w3.org/1999/xhtml">0+</code> operation.</comment-p></section><section><h1><code class="IDL" xml:lang="en">boolean</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="120" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[120]</anchor-end> If a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebIDL</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boolean</anchor> value <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">true</anchor> or <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">false</anchor> is converted into a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> value,
it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be converted to a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> true or false value, respectively.
If the value is returned in context where both <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">boolean</anchor> and <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> can be returned,
the false value <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be represented as non-<code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code> value in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor>.</p></section><section><h1><code class="IDL" xml:lang="en">unsigned long</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="83" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[83]</anchor-end> A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> value is converted to an IDL <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unsigned long</anchor></code> value by running the
algorithm for JavaScript <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://dev.w3.org/2006/webapi/WebIDL/#es-unsigned-long">http://dev.w3.org/2006/webapi/WebIDL/#es-unsigned-long</anchor-external>.</p></section><section><h1><code class="IDL" xml:lang="en">unsigned short</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="118" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[118]</anchor-end> A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> value is converted to an IDL <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unsigned short</anchor></code> value by running the
algorithm for JavaScript <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://dev.w3.org/2006/webapi/WebIDL/#es-unsigned-short">http://dev.w3.org/2006/webapi/WebIDL/#es-unsigned-short</anchor-external>.</p></section><section><h1><code class="IDL" xml:lang="en">null</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end>
The <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> value in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> is bound to
<code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code> in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end>
If something is defined to return or set <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code>,
it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return or set <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code>
unless otherwise specified.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end>
Where <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> is allowed to
be specified, an implementation <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> behave as if a
<code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> is specified when
a <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code> is specified.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end>
Where <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> is <em>not</em> allowed to
be specified, how an implementation behaves when
a <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code> depends on the 
expected data type.  An implementation <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor>
cause zero or more <q xml:lang="en">uninitialized</q> warnings
reported by Perl or <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> report its own
<q xml:lang="en">uninitialized</q> warnings, when warnings
are enabled by e.g. <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">use</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">warnings</anchor></code>
pragma.</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">TODO: Make relationship to <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor>
<code xmlns="http://www.w3.org/1999/xhtml" class="JS" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undefined</anchor></code> and
<code xmlns="http://www.w3.org/1999/xhtml" class="JS" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code> clearer.</ed></section><section><h1><code class="DOM" xml:lang="en">DOMString</code> and <code class="IDL" xml:lang="en">USVString</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="181" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[181]</anchor-end> For the purpose of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Perl Binding</anchor>, <code class="IDL" xml:lang="en">USVString</code>
<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> be treated as a synonym for <code class="IDL" xml:lang="en">DOMString</code>.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="70" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[70]</anchor-end> In <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebIDL</anchor> and <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor>, strings are defined in terms of UTF-16 code units,
while in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> they are represented in UTF-8 based encoding in most environments.</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="75" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[75]</anchor-end> This specification does not support any environment where Perl character strings are not
represented in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">utf8</anchor> (e.g. <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EBCDIC</anchor> environment).</comment-p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="96" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[96]</anchor-end> Since some methods are defined in terms of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-16 code units</anchor>, if the index used by the method
identifies a location between surrogate code points, a character is broken into two surrogate code points.
If the string <code class="perl">&quot;a\x{10003}b&quot;</code> is split into two substrings with index two (2),
the first substring is <code class="perl">&quot;a\x{D800}&quot;</code> and the second substring is <code class="perl">&quot;\x{DC03}b&quot;</code>.</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="71" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[71]</anchor-end> When a string in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebIDL</anchor> context is exposed to Perl, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be represented
as the value that can be interpreted as a sequence of characters.  If no character in
the sequence is greater than U+00FF, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> be represented as the value 
that can be interpreted as a sequence of bytes encoded in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Latin-1</anchor>.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="72" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[72]</anchor-end> The <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Latin-1</anchor> encoding in this context is different from the Web <code xmlns="http://www.w3.org/1999/xhtml" class="charset" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">iso-8859-1</anchor></code>
encoding, which is equivalent to the <code xmlns="http://www.w3.org/1999/xhtml" class="charset" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">windows-1252</anchor></code> encoding <src><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Encoding</anchor></src>. </comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="73" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[73]</anchor-end> When a value in Perl in interpreted in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebIDL</anchor> context, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
be first stringified by concatenated with the empty string and then interpreted as the
sequence of characters.  If the result of the stringification is the sequence of the bytes,
then it is interpreted as encoded in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Latin-1</anchor> encoding.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="74" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[74]</anchor-end> A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> string can contain non-Unicode characters (i.e. code points greater than <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+10FFFF</anchor>).
Unless otherwise specified, such a character <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be treated as if that were an unassigned
Unicode character.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="91" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[91]</anchor-end> Therefore, the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">code-point length</anchor> of the string consist of a character greater than <code xmlns="http://www.w3.org/1999/xhtml" class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+10FFFF</anchor></code>
is one (1).</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="92" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[92]</anchor-end> A <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> string can contain both surrogate code points and code points greater than <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">U+FFFF</anchor></code>.
Since a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> string is not encoded in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-16</anchor>, combination of surrogate code points does not represent
a character, but are barely interpreted as sequence of those code points as is.</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="93" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[93]</anchor-end> For example, a string <code class="perl">&quot;\x{10003}&quot;</code> is different from <code class="perl">&quot;\x{D800}\x{DC03}&quot;</code>.</p></example><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="94" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[94]</anchor-end> When a string ending with a high surrogate code point is concatenated with a string starting by
a low surrogate code point by a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> operation, these two code points <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be replaced
by corresponding code point.</p><example><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="95" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[95]</anchor-end> For example, if <code class="perl">&quot;a\x{D800}&quot;</code> is followed by <code class="perl">&quot;\x{DC03}b&quot;</code>, then
the result is string <code class="perl">&quot;a\x{10003}b&quot;</code>.</p></example></delete><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="97" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[97]</anchor-end> Even when strings beginning with or ending by surrogate pair code points are concatenated,
they are not automatically converted into a Unicode character.  Therefore, even if same sequence of operations are
performed, semantics of result strings could be different in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Perl Binding</anchor> and 
in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor>-based Web browser environment.
However, this does not mean requirements in Web platform specifications apply differently
among these environments.</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="121" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[121]</anchor-end> The number of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode code points</anchor> in the string <code class="perl">&quot;a\x{D800}\x{DC03}b&quot;</code> is three
in both environments.</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end>
Some methods are defined to accept a scalar reference
specified as a value of a parameter.  Such a method,
when a scalar reference is specified as a parameter value,
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> dereference the parameter value as a
scalar reference (i.e. by operator <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">${}</anchor></code>)
before it is in use, if the <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ref</anchor></code> of the parameter
value is <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SCALAR</anchor></code>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="89" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[89]</anchor-end> If the <code class="IDL" xml:lang="en"><strong>[</strong><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TreatNullAs</anchor>=<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EmptyString</anchor><strong>]</strong></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">extended attribute</anchor> is specified,
when the value is <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor> it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be converted to the empty string before it is processed.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="90" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[90]</anchor-end> The <code xmlns="http://www.w3.org/1999/xhtml" class="IDL" xml:lang="en"><strong>[</strong><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TreatUndefinedAs</anchor><strong>]</strong></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">extended attribute</anchor> is ignored
by the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Perl Binding</anchor>.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="155" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[155]</anchor-end> Whether a string <var>$P</var> is an <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">array index property name</anchor>
<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> be determined by the following steps:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="174" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[174]</anchor-end> Let <var>$n</var> be the result of <code class="perl">0+<var>$P</var><title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">0+</title></code>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="175" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[175]</anchor-end> Let <var>$s</var> be the result of <code class="perl">&quot;&quot;.<var>$n</var><title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">&quot;&quot;</title></code>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="176" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[176]</anchor-end> If not <code class="perl"><var>$n</var> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">eq</anchor> <var>$s</var></code>, then return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">false</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="177" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[177]</anchor-end> Return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">true</anchor>.</li></ol></figure></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="178" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[178]</anchor-end> These steps are referenced by the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMm" xml:lang="en">item<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">item (DOM)</title></code>
method of the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en">HTMLAllCollection</code> interface.</comment-p></section><section><h1><code class="DOMi" xml:lang="en">StringExtended</code></h1><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="99" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[99]</anchor-end> The operations of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">StringExtended</anchor></code> interface <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">DOM3CORE</src>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be implemented as functions, where the zeroth argument to the function
is treated as the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">context object</anchor> (i.e. the string) and the first argument to the function
is treated as the argument to the operation.  The <code class="IDL">int</code> data type <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be
handled as <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebIDL</anchor> <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unsigned long</anchor></code> data type.  The <code xml:lang="en">StringIndexOutOfBoundsException</code>
exception <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be treated as the &quot;<code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IndexSizeError</anchor></code>&quot; exception.</p></delete></section><section><h1>Enumeration types</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="135" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[135]</anchor-end> Enumeration types are represented as character strings in Perl.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="136" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[136]</anchor-end> If an invalid value is specified to the method argument where the enumeration type is expected,
a <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TypeError</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be thrown.</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="137" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[137]</anchor-end> Much more stricter definition is necessary...</ed></section><section><h1><code class="DOM" xml:lang="en">DOMTimeStamp</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <strong><code class="DOM" xml:lang="en">DOMTimeStamp</code> for a Calendar Date-Time</strong></p><p>A <code class="DOM" xml:lang="en">DOMTimeStamp</code> value that is
an absolute date-time <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be represented
by a scalar value of the number of the seconds
from <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">1970-01-01T00:00:00Z</anchor></code>.
The scalar value <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> contain fraction part,
which represents a fraction of a second.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">For example, <code xmlns="http://www.w3.org/1999/xhtml"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">1970-01-01T00:00:00Z</anchor></code>
is mapped to a numeric value of <code xmlns="http://www.w3.org/1999/xhtml" class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0</anchor></code>.</comment-p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Leap seconds, days before <code xmlns="http://www.w3.org/1999/xhtml"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">1970-01-01T00:00:00Z</anchor></code></ed></section><section><h1>Objects</h1><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">XXX this wording is a bit unclear</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="80" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[80]</anchor-end> If <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebIDL</anchor> definition for the method parameter is typed with an interface but the
value that is not an instance of the interface is specified as the argument, then
a <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TypeError</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be thrown and the processing of the method
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be aborted.  This type checking <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be performed in the
order of parameters.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="81" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[81]</anchor-end> Likewise, if <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebIDL</anchor> definition for the attribute is typed with an interface but the
value that is not an instance of the interface is specified as the new value of the attribute,
then a <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TypeError</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be thrown and the processing of the method
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be aborted.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="82" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[82]</anchor-end> An implementation <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> treat an object from another DOM implementation
as implementing no DOM interface at all.</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">XXX but it might be treated as user object (rather than platform object).</ed></section><section><h1><code class="DOMi" xml:lang="en">DOMUserData</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="100" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[100]</anchor-end> The <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMUserData</anchor></code> data type <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">DOM3CORE</src>
corresponding to any scalar value in <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor>.</p></section></section><section><h1>Security</h1></section><section><h1>Features</h1></section><section><h1><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementationRegistry</anchor></code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end>
The variable
<code class="perl" xml:lang="en">$<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Message::DOM::DOMImplementationRegistry</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> contain a value via which methods
provided by <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementationRegistry</anchor></code>
object can be invoked.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">For example,<pre xmlns="http://www.w3.org/1999/xhtml" class="perl example code">$Message::DOM::DOMImplementationRegistry-&gt;get_dom_implementation</pre></comment-p><p>returns a DOM implementation.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">The <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementationRegistry</anchor></code>
<q xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">object</q> don't have to be an object in the Perl
context; it might be a string representing
the package name of the class implementing
the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementationRegistry</anchor></code>
<q xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">interface</q>.</comment-p></section><section><h1>Operator overloading</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="127" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[127]</anchor-end> The implementation <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST NOT</strong></anchor> overload the following operators (using the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">overload</anchor></code>
pragma) in a way that contradicts with this specification and any <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">applicable specifications</anchor>:<figure><p><code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&quot;&quot;</anchor></code>, <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0+</anchor></code>, <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bool</anchor></code>,
<code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">@{}</anchor></code>, <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">%{}</anchor></code>, <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&amp;{}</anchor></code>,
<code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cmp</anchor></code>, <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">eq</anchor></code>, <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ne</anchor></code>,
<code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lt</anchor></code>, <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">le</anchor></code>, <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">gt</anchor></code>, and <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ge</anchor></code>.</p></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> Unless otherwise specified, an object implementing some DOM interface <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">SHOULD NOT</strong></anchor> overload 
these operators.  If these operators are overloaded in implementation-specific ways, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
behave as if it were not overloaded to the extent applications don't have to distinguish whether it is
overloaded or not.</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="128" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[128]</anchor-end> For example, an implementation can choose to let the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&quot;&quot;</anchor></code> operator of the
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Element</anchor></code> object to return the internal address of the object followed by the class name
of the implementation.  An application can use this string to distinguish element objects each other,
or element objects and non-DOM objects, as it does for non-DOM objects.  However, the implementation
cannot choose to let the operator to return the XML representation of the element.</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> In any way, when an operator is overloaded,
it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be consistent with other operators.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">For example, if the <code xmlns="http://www.w3.org/1999/xhtml" class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">eq</anchor></code>
operator is overloaded,<pre xmlns="http://www.w3.org/1999/xhtml" class="perl example code">my $eq = $a eq $b;
my $ne = $a ne $b;
die unless ($eq and not $ne) or (not $eq and $ne);</pre></comment-p><p>... must not die.</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">More details - <ul xmlns="http://www.w3.org/1999/xhtml"><li>Even if &quot;&quot; is overloaded and results in false, bool must return true.</li><li>eq, ne, and cmp must be consistent.</li><li>==, !=, and &lt;=&gt; must be consistent.</li></ul></ed><section><h1>Array-like and / or hash-like objects</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="86" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[86]</anchor-end> If an interface <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">supports indexed properties</anchor> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://dev.w3.org/2006/webapi/WebIDL/#dfn-support-indexed-properties">http://dev.w3.org/2006/webapi/WebIDL/#dfn-support-indexed-properties</anchor-external>,
the object implementing the interface <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> behave as if that were a blessed array reference,
at least to the extent allowed by defining the Perl <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">overload</anchor></code> pragma's <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">@{}</anchor></code> operator.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="87" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[87]</anchor-end> If only the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">indexed property getter</anchor> is defined for the interface, the object <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
behave as if that were a read-only array reference.</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="88" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[88]</anchor-end> Following code fragment illustrates how the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NodeList</anchor></code> object behave:<pre class="perl example code">my $node_list = $node-&gt;child_nodes;
warn scalar @$node_list;      # Number of child nodes
warn $node_list-&gt;[1];         # Child node with index 1 (= second node in the children list)
warn $node_list-&gt;[-1];        # Last child node
$node_list-&gt;[2] = $new_node;  # Error because setter is not defined for NodeList</pre></p><p xmlns="http://www.w3.org/1999/xhtml">Please note that index <code class="perl">-1</code> is converted by Perl to the index of the last element in the
array before WebIDL processing (i.e. <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unsigned long</anchor></code> conversion), it would return
different item in the list from the corresponding normal method;<pre class="perl example code">warn $node_list-&gt;[-1];        # last item in the list
warn $node_list-&gt;item (-1);   # (-1 % 2^32 == 4294967295)th item (undef in most cases)</pre></p></example><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">better wording</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end>
For following interfaces, dereferencing an object
as array acts as if it is an array:<ul><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementationList</anchor></code></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMStringList</anchor></code></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TextTrackCueList</anchor></code></li></ul></p><p>That is, 
<code class="perl" xml:lang="en"><var xml:lang="en">$obj</var>-&gt;<strong>[</strong><var xml:lang="en">$n</var><strong>]</strong></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return the same value as
<code class="perl" xml:lang="en"><var xml:lang="en">$obj</var>-&gt;item (<var xml:lang="en">$n</var>)</code>
if <var xml:lang="en">$obj</var> is an object implementing 
any of interfaces listed above and <var xml:lang="en">$n</var>
is a non-negative integer less than
<code class="perl" xml:lang="en"><var xml:lang="en">$obj</var>-&gt;length</code>.</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">If <var xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">$n</var> is negative, then 
length - $n.
If length is zero, greater than $n, smaller than -length,
non-number, then?</ed><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="138" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[138]</anchor-end> Need to define <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMTokenList</anchor> binding</ed><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NameList</anchor></code></ed><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">[ArrayClass]</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="50" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[50]</anchor-end> The <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">to_a</anchor></code> method and the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">as_list</anchor></code> of an
array-like object <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return a reference to a new array that contains
the items in the array-like object, in order.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="51" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[51]</anchor-end> The <code xmlns="http://www.w3.org/1999/xhtml" class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">as_list</anchor></code> method is provided for compatibility with 
<code xmlns="http://www.w3.org/1999/xhtml" class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Template::Iterator</anchor></code> module.  It should not be used for other purposes.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="52" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[52]</anchor-end> The <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">to_list</anchor></code> method of an array-like object <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
return a Perl list that contains the items in the array-like object, in order.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="154" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[154]</anchor-end> The <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSSStyleDeclaration</anchor></code> interface does not have these methods.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="113" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[113]</anchor-end> If an interface <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">supports named properties</anchor>, they <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be accessible by
dereferencing the object by the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">%{}</anchor></code> operator.</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Need to define it much more strictly...</ed><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="126" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[126]</anchor-end> <var xmlns="http://www.w3.org/1999/xhtml">T</var>[] (e.g. DOMString[]) - tied array; obj.domstringlist = [&quot;str1&quot;, &quot;str2&quot;]</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="133" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[133]</anchor-end> <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">keys</anchor></code> and <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">each</anchor></code> do not have to preserve the order
of items in the hash-like object.  However, the order has to be stable such that <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">each</anchor></code>
can be used for iteration.</p><section><h1>Read-only array-like or hash-like objects</h1><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end>
If an array-like or hash-like object is read-only,
<code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">STORE</anchor></code>, <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">STORESIZE</anchor></code>,
<code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DELETE</anchor></code>, and any other operations
that implies these operations <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
throw an <code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NO_MODIFICATION_ALLOWED_ERR</anchor></code>
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMException</anchor></code>.</p></delete><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="112" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[112]</anchor-end> When an array or hash is read-only, any attempt to modify it or its values <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> throw
an exception.  Whether an exception is thrown or not, any attempt to modify them <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
be ignored.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="129" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[129]</anchor-end> Whether that exception is a string or an object, what the stringified representation of the
exception is, or whether the exception is actually thrown or not, is implementation dependent.
This is a quality of implementation issue, as what is the behavior of the &quot;native&quot; Perl read-only array or hash
is somewhat unclear or unstable.</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="134" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[134]</anchor-end> <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NodeList</anchor></code>, <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLCollection</anchor></code>, and <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamedNodeMap</anchor></code>
can be used as read-pnly array-like object.</comment-p></section><section><h1>The <code class="DOMi" xml:lang="en">DOMConfiguration</code> interface</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="105" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[105]</anchor-end> The <dfn>Perl parameter name</dfn> of a parameter is the value returned by the following steps:<figure><ol><li>Let <var xml:lang="en">name</var> be the parameter name.</li><li>If <var xml:lang="en">name</var> starts with <code>http://</code>, return <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> and abort these steps.</li><li>Replace any <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code> character in <var xml:lang="en">name</var> by a <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_</anchor></code> character.</li><li>Return <var xml:lang="en">name</var>.</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="106" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[106]</anchor-end> The <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">supported property names</anchor> of a <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMConfiguration</anchor></code> object is the
values returned by the following steps:<figure><ol><li>Let <var xml:lang="en">values</var> be the array of the string containing the values in the
<code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">parameterNames</anchor></code> attribute of the object.</li><li>For each item <var xml:lang="en">value</var> in the array, in order:<ol><li>Let <var xml:lang="en">perl value</var> be the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl parameter name</anchor> of the parameter whose name is <var xml:lang="en">name</var>.</li><li>If <var xml:lang="en">perl value</var> is <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>, delete <var xml:lang="en">value</var> from <var xml:lang="en">values</var>.</li><li>Otherwise, replace <var xml:lang="en">value</var> in <var xml:lang="en">values</var> by <var xml:lang="en">perl value</var>.</li></ol></li><li>Return <var xml:lang="en">values</var>.</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="107" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[107]</anchor-end> To <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">determine the value of a named property</anchor> of a <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMConfiguration</anchor></code> object,
the following steps <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be run:<figure><ol><li>Let <var xml:lang="en">name</var> be the property name.</li><li>If <var xml:lang="en">name</var> is one of the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">supported property names</anchor>, return the value
that would be returned if the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">getParameter</anchor></code> method is invoked with
the parameter name whose <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl parameter name</anchor> is <var xml:lang="en">name</var>.</li><li>Otherwise, return <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code>.</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="108" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[108]</anchor-end> To <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">set the value of an existing named property</anchor> or <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">set the value of a new named property</anchor>
of a <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMConfiguration</anchor></code> object, the following steps <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be run:<figure><ol><li>Let <var xml:lang="en">name</var> be the property name.</li><li>If <var xml:lang="en">name</var> is one of the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">supported property names</anchor>, return the value
that would be returned if the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">setParameter</anchor></code> method is invoked with
the parameter name whose <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl parameter name</anchor> is <var xml:lang="en">name</var> and the assigned value.
For the purpose of this invocation only, the <COCDE xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">setParameter</anchor></COCDE> method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST NOT</strong></anchor>
treat the <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code> value as <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebIDL</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor>.</li></ol></figure></p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="110" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[110]</anchor-end> The following code set &quot;false&quot; to the parameter:<pre class="perl example code">$config = $document-&gt;dom_config;
$config-&gt;{manakai_strict_document_children} = undef;
ok not $config-&gt;{manakai_strict_document_children};</pre></p><p xmlns="http://www.w3.org/1999/xhtml">However, the following code unset the parameter:<pre class="perl example code">$config-&gt;set_parameter ('manakai-strict-document-children', undef);
ok $config-&gt;{manakai_strict_document_children};</pre></p><p xmlns="http://www.w3.org/1999/xhtml">Since the default value of the parameter is &quot;true&quot;, unsetting the parameter results
in the &quot;true&quot; value set to the parameter.</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="109" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[109]</anchor-end> To <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">delete an existing named property</anchor> of a <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMConfiguration</anchor></code> object,
the following steps <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be run:<figure><ol><li>Let <var xml:lang="en">name</var> be the property name.</li><li>If <var xml:lang="en">name</var> is one of the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">supported property names</anchor>, return the value
that would be returned if the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">setParameter</anchor></code> method is invoked with
the parameter name whose <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl parameter name</anchor> is <var xml:lang="en">name</var> and <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor></code>.</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="111" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[111]</anchor-end> The <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL</anchor> data type of the second argument to the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">setParameter</anchor></code> method 
is <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMUserData</anchor></code>, which can be any <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> scalar value, while parameters have
their expected value type defined.  Therefore &quot;casting&quot; of the value is performed within the
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">setParameter</anchor></code> method.  It <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be performed by applying the steps
to convert the Perl value into <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebIDL</anchor> value of appropriate data type.  If this fails,
as defined in the DOM3 Core specification, a &quot;<code class="DOMe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TypeMismatchError</anchor></code>&quot; exception
is thrown.</p></section></section><section><h1>Constructor</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> The <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">new</anchor></code> method is reserved.</p></section><section><h1>Cloning method</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> The <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">clone</anchor></code> method is reserved.</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">It is planned to make <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code>'s
<code xmlns="http://www.w3.org/1999/xhtml" class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">clone</anchor></code> method an alias of
<code xmlns="http://www.w3.org/1999/xhtml" class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cloneNode</anchor></code> method.</ed></section><section><h1>Stringify method</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> Method names <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">stringify</anchor></code>, <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">as_string</anchor></code>,
and <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">to_string</anchor></code> are reserved.</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">XXX What &quot;reserved&quot; means?</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="60" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[60]</anchor-end> If the WebIDL interface has the stringifier <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">WebIDL</src> defined, the <code class="perl">&quot;&quot;</code>
operator of the class <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be overloaded such that stringifying the object 
invoke the stringifier.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="61" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[61]</anchor-end> Unless otherwise defined, the <code class="perl" xml:lang="en">bool</code> operator of the class <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
return a true value, whatever value is returned by the stringifier.</p></section></section><section><h1>Function-like interfaces</h1><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Maybe support for non-coderef objects (arbitrary object with &quot;handle_event&quot; method,
or &amp;{} overloaded) will be dropped...</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end>
Several interfaces are defined as <dfn xml:lang="en">function-like</dfn>.
Only Perl native <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CODE</anchor></code> references, i.e.
values whose <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ref</anchor></code> is <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CODE</anchor></code>,
and objects for which the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&amp;{}</anchor></code> operation is defined
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be treated as if they implement the 
function-like interfaces and are referred to as objects
implementing the function-like interfaces.  Each function-like interface
has a method, typically named as <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">handleEvent</anchor></code>.
Invoking that method on the object implementing a function-like
interface from another language binding invokes the 
object itself, by <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&amp;{}</anchor></code> operation.  In the Perl binding itself,
however, the method of the interface is not directly accessible on 
the object implementing the interface.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Unlike in ECMAScript language binding, arbitrary object
with <code xmlns="http://www.w3.org/1999/xhtml" class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">handle_event</anchor></code> method (and no
<code xmlns="http://www.w3.org/1999/xhtml" class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&amp;{}</anchor></code> operation defined) does not 
implement the function-like interfaces.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> Function-like interfaces are:<ul><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMErrorHandler</anchor></code></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EventHandler</anchor></code></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NodeFilter</anchor></code></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UserDataHandler</anchor></code></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">VoidCallback</anchor></code></li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> 
When the method would be invoked, the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&amp;{}</anchor></code>
operation <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be performed over the object with appropriate
arguments.  The return value of the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&amp;{}</anchor></code>
operation <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be treated as if the return value
of the method.  If the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&amp;{}</anchor></code> operation
results in an exception is raised, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
be treated as if it is an exception raised by the method.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">For example, <pre xmlns="http://www.w3.org/1999/xhtml" class="perl example code">$node-&gt;add_event_listener ('click', sub {
  my $ev = shift;
  print $ev-&gt;details, &quot;\n&quot;;
  return 0;
});</pre></comment-p><p>would make the subroutine invoked when the node is clicked.
The subroutine, implementing the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EventHandler</anchor></code>
interface and treated as if it is the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">handleEvent</anchor></code>
method, would <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">print</anchor></code>s the 
number of clicks and then cancel the default action
for the event.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> Though in some of function-like interfaces constants are defined,
they are not accessible via the object implemeting that interface
in the Perl binding.  Other interface might provide
such constants alternatively.  For example, 
objects implementing the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code>
interface provides contants in <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UserDataHandler</anchor></code>
interface (see <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;42</anchor-internal>).</p><section><h1>Legacy caller</h1><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="144" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[144]</anchor-end> If an interface defines the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">legacy caller</anchor>, the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&amp;{}</anchor></code> operation of the corresponding class
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> invoke the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">legacy caller</anchor> and return its result.</p></delete></section></section><section><h1>Dictionaries</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="153" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[153]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">dictionary</anchor> is represented by a hash reference.</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">details...</ed></section><section><h1>Specifics</h1><section><h1>The <code class="DOMi" xml:lang="en">Node</code> interface</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end>
Multiple calles of the getter of 
<code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attributes</anchor></code> or
<code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">childNodes</anchor></code> on a <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return the same object respectively in terms
of Perl <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">eq</anchor></code> operator.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">For example, <pre xmlns="http://www.w3.org/1999/xhtml" class="perl example code">my $c1 = $node-&gt;child_nodes;
my $c2 = $node-&gt;child_nodes;
die unless $c1 eq $c2;</pre></comment-p><p>... must not die.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> The <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakaiAppendText</anchor></code>
method of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> interface
accepts a scalar reference (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal>) as the first parameter.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end>
A package that implements the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code>
interface <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> implement the <code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OperationType</anchor></code>
constant group of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UserDataHandler</anchor></code>
interface.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">For example, <code xmlns="http://www.w3.org/1999/xhtml" class="perl example" xml:lang="en"><var>$node</var>-&gt;NODE_CLONED</code>
where <code xmlns="http://www.w3.org/1999/xhtml" class="perl" xml:lang="en"><var>$node</var></code> is a <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code>
object must return the value of <code xmlns="http://www.w3.org/1999/xhtml" class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">1</anchor></code>.</comment-p></section><section><h1>The <code class="DOMi" xml:lang="en">Document</code> interface</h1><section><h1>Qualified name methods</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="119" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[119]</anchor-end> Methods <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createElementNS</anchor></code>, <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createAttributeNS</anchor></code>,
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">setAttributeNS</anchor></code>, <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createDocument</anchor></code>:</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end><ol><li>If the second parameter, <code class="DOMp" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">qualifiedName</anchor></code>,
is an array reference, i.e. the <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ref</anchor></code>
operator with that parameter returns a string
of <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ARRAY</anchor></code>, then the parameter 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be interpreted as following:<ul><li>The namespace prefix part of the qualified name
is the zeroth item in the array.  If it is 
<code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code>, then there is
no namespace prefix (i.e. the qualified name has no
<code class="char" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">COLON</anchor></code> character).</li><li>The local name part of the qualified name
is the first item in the array.  It <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST NOT</strong></anchor>
be <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code>; if it is, then
it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be treated as if an empty string
is specified.</li></ul></li></ol></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Second (third) or more items, if any, are ignored.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="122" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[122]</anchor-end> In addition to qualified name's syntax tests performed by these methods, following steps
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be run:<figure><ol><li>If the namespace prefix is not <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null</anchor> and is not an XML <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NCName</anchor>, throw a &quot;<code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamespaceError</anchor></code>&quot;
exception.</li><li>If the local name is not an XML <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NCName</anchor>, throw a &quot;<code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamespaceError</anchor></code>&quot; exception.</li></ol></figure></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">The <code xmlns="http://www.w3.org/1999/xhtml" class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">strictErrorChecking</anchor></code> attribute also affects these checks.</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Unlike these methods, the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMp" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">qualifiedName</anchor></code>
parameter of the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createDocumentType</anchor></code>
method of the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementation</anchor></code>
interface has <em xmlns="http://www.w3.org/1999/xhtml">no</em> special interpretation for
an array reference, since the method does not
parse the parameter as a pair of 
namespace prefix and local name.</comment-p></section><section><h1>The <code class="DOMm" xml:lang="en">createDocumentType</code> method</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="125" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[125]</anchor-end> If the second or third argument to the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createDocumentType</anchor></code> method of the 
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementation</anchor></code> interface is <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">undef</anchor></code>, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
be converted to the empty string.</p></section><section><h1>Methods <code class="DOMm" xml:lang="en">createTextNode</code>, <code class="DOMm" xml:lang="en">createComment</code>, <code class="DOMm" xml:lang="en">createCDATASection</code></h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> Methods <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createTextNode</anchor></code>,
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createComment</anchor></code>, and
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createCDATASection</anchor></code> of the 
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Document</anchor></code> interface
accept a scalar reference (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal>) as the first parameter.</p></section></section><section><h1>The <code class="DOMi" xml:lang="en">DOMStringList</code> interface</h1><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">==</ed><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Should we allow any Perl array reference
as <code xmlns="http://www.w3.org/1999/xhtml" class="DOMp" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">arg</anchor></code>?</ed></section><section><h1>The <code class="DOMi" xml:lang="en">DOMStirngMap</code> interface</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="147" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[147]</anchor-end> For the purpose of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Perl Binding</anchor>, following definitions <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be applied:</p><figure><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="148" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[148]</anchor-end> <dfn>The algorithm for getting the list of name-value pairs</dfn></figcaption><ol><li>Let <var>list</var> be an empty list of name-value pairs.</li><li>For each content attribute on the element whose first five characters are the string &quot;data-&quot; and whose remaining characters (if any) do not include U+005F <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LOW LINE</anchor></code> character (<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_</anchor></code>), add a name-value pair to <var>list</var> whose name is the attribute's name with the first five characters removed and whose value is the attribute's value.</li><li>For each name <var>list</var>, replace each U+005F <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LOW LINE</anchor></code> character (<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_</anchor></code>) by a U+002D <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HYPHEN-MINUS</anchor></code> character (<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code>).</li><li>Return <var xml:lang="en">list</var>.</li></ol></figure><figure><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="149" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[149]</anchor-end> <dfn>The algorithm for setting names to certain values</dfn></figcaption><ol><li>Let <var xml:lang="en">name</var> be the name passed to the algorithm.</li><li>Let <var xml:lang="en">value</var> be the value passed to the algorithm.</li><li>If <var xml:lang="en">name</var> contains a U+002D <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HYPHEN-MINUS</anchor></code> character (<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code>), throw a <code class="DOMe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SyntaxError</anchor></code> exception and abort these steps.</li><li>Replace each U+005F <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LOW LINE</anchor></code> character (<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_</anchor></code>) in <var xml:lang="en">name</var> by a U+002D <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HYPHEN-MINUS</anchor></code> character (<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code>).</li><li>Insert the string <code class="HTML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">data-</anchor></code> at the front of <var xml:lang="en">name</var>.</li><li>Set the value of the attribute with the name <var xml:lang="en">name</var>, to the value <var xml:lang="en">value</var>, replacing any previous value if the attribute already existed. If <code class="DOM" xml:lang="en">setAttribute()</code> would have thrown an exception when setting an attribute with the name <var xml:lang="en">name</var>, then this must throw the same exception.</li></ol></figure><figure><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="150" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[150]</anchor-end> <dfn>The algorithm for deleting names</dfn></figcaption><ol><li>Let <var xml:lang="en">name</var> be the name passed to the algorithm.</li><li>Replace each U+005F <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LOW LINE</anchor></code> character (<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_</anchor></code>) in <var xml:lang="en">name</var> by a U+002D <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HYPHEN-MINUS</anchor></code> character (<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code>).</li><li>Insert the string <code class="HTML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">data-</anchor></code> at the front of <var xml:lang="en">name</var>.</li><li>Remove the attribute with the name <var xml:lang="en">name</var>, if such an attribute exists. Do nothing otherwise.</li></ol></figure><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="151" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[151]</anchor-end> The subset of the <code xmlns="http://www.w3.org/1999/xhtml" class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">data-*</anchor></code> attributes accessible via the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMStringMap</anchor></code>
object of the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM Perl Binding</anchor> is different from those in JavaScript binding or the set of valid
<code xmlns="http://www.w3.org/1999/xhtml" class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">data-*</anchor></code> attribute names.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="152" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[152]</anchor-end> The <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CLEAR</anchor></code> operation of the hash reference returned by the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">%{}</anchor></code> operation
on the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMStringMap</anchor></code> object <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> remove all attributes in the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">null namespace</anchor> whose name 
begins with <code class="HTMLa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">data-</anchor></code>.</p></section><section><h1>The <code class="DOMi" xml:lang="en">NodeList</code> interface</h1><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end>
For any <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NodeList</anchor></code> object,
the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">==</anchor></code> operator <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
be so overloaded that it returns whether 
two arguments are equal in the equality defined
for the <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isEqualNode</anchor></code> method
of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> interface.</p><p xmlns="http://www.w3.org/1999/xhtml"><em>However</em>, if the other operand is not a
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NodeList</anchor></code> object, then
it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return a false value.</p></delete></section><section><h1>The <code class="DOMi" xml:lang="en">NamedNodeMap</code> interface</h1><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end>
For any <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamedNodeMap</anchor></code> object,
the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">==</anchor></code> operator <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
be so overloaded that it returns whether 
two arguments are equal in the equality defined
for the <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">isEqualNode</anchor></code> method
of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> interface.</p></delete><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="130" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[130]</anchor-end> The <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamedNodeMap</anchor></code> object <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be treated as a read-only hash-like object,
where keys are those accessible via the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">getNamedItem</anchor></code> method.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="131" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[131]</anchor-end> If there are multiple items with same name in the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamedNodeMap</anchor></code>,
the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">getNamedItem</anchor></code> method returns the first one.</comment-p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="132" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[132]</anchor-end> This definition is not so strict...</ed></section><section><h1>The <code class="DOMi" xml:lang="en">XPathNSResolver</code> Interface</h1><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="162" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[162]</anchor-end> The <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code> interface is part of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM XPath</anchor>.  The
<code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NSResolver</anchor></code> interface is a variant of the <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code>
interface defined in the earlier versions of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Selectors API</anchor>.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> The <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code> interface is unusual in that it can be existed both
as a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">platform object</anchor> and as a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">user object</anchor>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> The <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createNSResolver</anchor></code> method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> return a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">platform object</anchor>
implementing the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code> interface.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="163" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[163]</anchor-end> For the purpose of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code> interface used as a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">user object</anchor>,
its IDL definition <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be interpreted as if it were a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">callback interface</anchor>.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="164" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[164]</anchor-end> In other word, a Perl code reference can be used as a <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNSResolver</anchor></code> object.</comment-p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="165" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[165]</anchor-end> For example, the return value of the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">createNSResolver</anchor></code> method
can be specified as an argument to the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">evaluate</anchor></code> method:<pre class="perl code">$resolver = $document-&gt;create_ns_resolver ($node);
$result = $document-&gt;evaluate ($expr, $ctx, $resolver);</pre></p><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="166" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[166]</anchor-end> A code reference returning the namespace URL can also be used as an argument:<pre class="perl code">$result = $document-&gt;evaluate ($expr, $ctx, sub {
  my ($self, $prefix) = @_;
  return $PrefixToURL-&gt;{$prefix};
});</pre></p></example></section><section><h1><code class="JS" xml:lang="en">document.all</code></h1><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="141" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[141]</anchor-end> The <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">item</anchor></code> method and the <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&amp;{}</anchor></code> operation
of the <code class="JS" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">document.all</anchor></code> object <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> run these steps:<figure><ol><li>Convert the argument from Perl to IDL as a <code class="DOMi" xml:lang="en">DOMString</code> value and let <var xml:lang="en">index</var> be the result.</li><li>If <var xml:lang="en">index</var> is a <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">valid non-negative integer</anchor>, invoke the operation <code>item(unsigned long index)</code> of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLCollection</anchor></code> interface with <var xml:lang="en">index</var>, return its result, and abort these steps.</li><li>Otherwise, invoke the operation <code>item(DOMString name)</code> of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLAllCollection</anchor></code>
interface with <var xml:lang="en">index</var> and return its result.</li></ol></figure></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="142" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[142]</anchor-end> Based on <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> behavior.  <time xmlns="http://www.w3.org/1999/xhtml">2013-01-16T13:39:59.300Z</time></comment-p></delete><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="143" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[143]</anchor-end> The <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLAllCollection</anchor></code>'s <code class="perl"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bool</anchor></code> operation <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
return the false value.</p></delete><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="145" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[145]</anchor-end> The <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">namedItem</anchor></code> method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> always return the same object
if the same argument is specified.</p><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="146" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[146]</anchor-end> The <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">tags</anchor></code> method <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> always return the same object
if the same argument (after <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">converted to ASCII lowercase</anchor> if it is an <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML document</anchor>) is specified.</p></delete></section><section><h1>The <code class="DOMi" xml:lang="en">DOMImplementation</code> interface</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> If the class for the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementation</anchor></code> interface has the
constructor method, i.e. the <code class="perl" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">new</anchor></code> method, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor>
follow these steps:<figure><ol><li>Let <var xml:lang="en">document</var> be the document returned by invoking the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Document</anchor></code> constructor <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">DOM</src>.</li><li>Return the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMImplementation</anchor></code> object that is associated with
<var xml:lang="en">document</var>.</li></ol></figure></p></section><section><h1>The <code class="DOMi" xml:lang="en">HTMLPropertiesCollection</code> interface and the <code class="DOMi" xml:lang="en">PropertyNodeList</code> interface</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="167" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[167]</anchor-end> An <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLPropertiesCollection</anchor></code> object <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be represented as a read-only hash
reference in Perl.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="170" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[170]</anchor-end> Note that &quot;read-only&quot; hash is different from <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">restricted hash</anchor> of <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor> in DOM Perl Binding.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="168" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[168]</anchor-end> The keys of the hash <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be the values that would be returned by the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">names</anchor></code> attribute
of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLPropertiesCollection</anchor></code>.</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="169" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[169]</anchor-end> In <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor>, order of hash keys are undefined.</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="171" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[171]</anchor-end> The values of the hash <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PropertyNodeList</anchor></code> objects corresponding
to the keys, respectively.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="172" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[172]</anchor-end> A <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PropertyNodeList</anchor></code> object <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be represented as a read-only array
reference in Perl.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="173" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[173]</anchor-end> The items of the array <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MUST</strong></anchor> be the nodes in the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PropertyNodeList</anchor></code>, in same order.</p></section><section><h1>The <code>AbortSignal</code> interface</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="55" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[55]</anchor-end> The following <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL fragment</anchor> <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> be implemented:</p><pre class="IDL code"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">partial interface</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">AbortSignal</anchor> {
  <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">IDL attribute</title></anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ManakaiAbortCallback</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakaiOnabort</anchor>;
  <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">IDL attribute</title></anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMException</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">manakaiError</anchor>;
};
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">callback</anchor> <dfn>ManakaiAbortCallback</dfn> = <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">void</anchor> ();</pre><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="56" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[56]</anchor-end> An <code>AbortSignal</code> object has an associated <dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">abort callback</f></dfn>
and <dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">error object</f></dfn>, 
which are initially <code>null</code>.  When an <code>AbortSignal</code> object is created,
the following steps <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> be run:</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="59" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[59]</anchor-end> Add the following steps to the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">context object</anchor>:<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="196" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[196]</anchor-end> Set the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">context object</anchor>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">error object</f> to a new <code>DOMException</code> object 
whose <code>name</code> is <code>AbortError</code>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="76" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[76]</anchor-end> Let <var>cb</var> be the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">context object</anchor>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">abort callback</f>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="77" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[77]</anchor-end> If <var>cb</var> is not <code>null</code>:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="78" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[78]</anchor-end> Run <var>cb</var>.  If this throws an exception, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">report the exception</anchor>.</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="79" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[79]</anchor-end> Set the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">context object</anchor>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">abort callback</f> to <code>null</code>.</li></ol></li></ol></figure></li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="184" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[184]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">On getting</anchor>, the <dfn><code>manakaiOnabort</code></dfn> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">IDL attribute</title></anchor> of
the <code>AbortSignal</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">interface</anchor> <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> run these steps:</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="185" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[185]</anchor-end> Return the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">context object</anchor>'s <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">abort callback</anchor>.</li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="186" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[186]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">On setting</anchor>, the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">IDL attribute</title></anchor> <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> run these steps:</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="187" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[187]</anchor-end> If the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">context object</anchor>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">aborted flag</f> is not set:<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="188" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[188]</anchor-end> Set <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">context object</anchor>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">abort callback</f> to the new value.</li></ol></li></ol></figure><note xmlns="urn:x-suika-fam-cx:markup:ietf:html:3:draft:00:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="190" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[190]</anchor-end> This <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">IDL attribute</title></anchor> can be used by non-DOM applications
to register the abort action.</p></note><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="193" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[193]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">On getting</anchor>, the <dfn><code>manakaiError</code></dfn>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">IDL attribute</title></anchor> <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> run these steps:</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="194" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[194]</anchor-end> Return the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">context object</anchor>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">error object</f>.</li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="195" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[195]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">On setting</anchor>, the <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">IDL attribute</title></anchor> <MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MUST</MUST> run these steps:</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="197" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[197]</anchor-end> Set <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">context object</anchor>'s <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">error object</f> to the new value.</li></ol></figure></section></section><section><h1>Exposing unsupported features</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="156" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[156]</anchor-end> In general, when a feature is not supported at all, it <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">SHOULD NOT</strong></anchor> be exposed to
the application.</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="157" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[157]</anchor-end> If an implementation does not support the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">adoptNode</anchor></code> method of the
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Document</anchor></code> interface, the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Document</anchor></code> object ought not have
the <code class="perl">adopt_node</code> method.</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="158" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[158]</anchor-end> When a feature might or might not be supported depending on the configuration of the implementation,
the feature <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">MAY</strong></anchor> be exposed even when it is not enabled.</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="159" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[159]</anchor-end> If a CSS implementation does support the <code class="CSS" xml:lang="en">'<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">float</anchor>'</code> property but the associated
renderer does not support floating of the box, the <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cssFloat</anchor></code> attribute of the
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSSStyleDeclaration</anchor></code> interface might be exposed as the <code class="perl" xml:lang="en">css_float</code>
method.  As the method is defined in terms of the <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">getPropertyValue</anchor></code> and
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">setProperty</anchor></code> methods, these methods' behavior on unsupported CSS properties apples.
(That is, the method return the empty on getting, or do nothing on setting.)</p></example><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="160" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[160]</anchor-end> An <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">event handler IDL attribute</anchor> might be exposed even when the implementation is currently not
connected to the device that would fire the event in question.</p></example><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="161" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[161]</anchor-end> There might be the <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">geolocation</anchor></code> attribute of the <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Navigator</anchor></code> object
even when no positioning device is known to available.</p></example></section><section><h1>Garbage collection</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="101" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[101]</anchor-end> Since <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Perl</anchor>'s garbage collection is <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">reference count</anchor>, simply implementing various <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor>
attributes as references could cause objects that could not be freed at all.  To work around this
situation, implementations can adopt different strategies, including:<ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="102" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[102]</anchor-end> Force the application to explicitly invoke some method to destroy a tree</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="103" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[103]</anchor-end> Force the application to keep a reference to the root node</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="104" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[104]</anchor-end> Implement implementation's own garbage collection mechanism</li></ul></p><p>For the purpose of DOM conformance, limitations caused by those strategies are considered
&quot;platform-specific limitations&quot; <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://dom.spec.whatwg.org/#conformance">http://dom.spec.whatwg.org/#conformance</anchor-external>.</p></section><section><h1>References</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="191" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[191]</anchor-end> The terms
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">interface</anchor></dfn>,
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attribute<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">IDL attribute</title></anchor></dfn>, and
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL fragment</anchor></dfn>
is defined by the <cite>Web IDL</cite> specification.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="192" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[192]</anchor-end> The term
<dfn><code>AbortSignal</code></dfn>
is defined by the <cite>DOM Standard</cite>.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="189" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[189]</anchor-end> The term
<dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">report an exception</anchor></dfn>
is defined by the <cite>HTML Standard</cite>.</p><section><h1>Normative References</h1><dl><dt>[DOMCore]</dt><dd><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><dl xmlns="http://www.w3.org/1999/xhtml"><dt>[DOMEvents]</dt><dd><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><dl xmlns="http://www.w3.org/1999/xhtml"><dt>[DOMLS]</dt><dd><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><dl xmlns="http://www.w3.org/1999/xhtml"><dt>[DOMTraversal]</dt><dd><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><dl xmlns="http://www.w3.org/1999/xhtml"><dt>[SelectorsAPI]</dt><dd>
<cite xml:lang="en">Selectors API</cite>, W3C Editor's Draft, 29 August 2007, 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://dev.w3.org/cvsweb/~checkout~/2006/webapi/selectors-api/Overview.html?rev=1.28&amp;content-type=text/html;%20charset=utf-8">http://dev.w3.org/cvsweb/~checkout~/2006/webapi/selectors-api/Overview.html?rev=1.28&amp;content-type=text/html;%20charset=utf-8</anchor-external>. 
The latest published version of Selectors API is available at 
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/selectors-api/">http://www.w3.org/TR/selectors-api/</anchor-external>. 
(Latest version of the specifcation whose maturity level is higher 
than Candidate Recommendation, if any, or latest Editor's Draft 
is referenced.)</dd></dl></ed></dd></dl></ed></dd></dl></ed></dd></dl></ed></dd></dl></section><section><h1>Informative References</h1><dl><dt>[SVGPB]</dt><dd><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">SVG's Perl binding</ed></dd></dl></section></section><section><h1>memo</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end></p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Maybe we should define &quot;==&quot; for DOMImplementationList
(and any other array like objects)
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end></p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">DOMImplementationList.push (non-dom-impl)</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end></p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">%Message::DOM::DOMImplementationRegistry::SourceClass
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end>
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;38</anchor-internal> $SourceClass</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end></p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Node.isEqualNode == Node.==</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</anchor-end></p><blockquote><p>In binding languages that support setting to a readonly attribute setting media to a string must set the value of mediaText on the MediaList object.</p></blockquote><p>[CSSOM]</p></section></body></html>