=head1 XML::Grove and DOM Level One

XML::Grove is similar in concept to the ECMA Script Language Binding
to DOM Level 1 Core (Appendix E of the DOM Recommendation).

<http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html>

The ECMA Script Language Binding presents DOM properties as ECMA
Script object properties.  The same is true for XML::Grove, XML::Grove
presents DOM properties as Perl blessed hashes.

The biggest difference between the ECMA Script Language Binding and
XML::Grove is that XML::Grove uses a Perl hash for nodes, Perl arrays
for NodeLists, Perl hashes for NamedNodeLists so those object classes
don't exist in XML::Grove.  Because those classes don't exist, you use
ordinary Perl syntax for manipulating the DOM properties (lists and
named node lists) instead of methods like `C<nextSibling()>' or
`C<replaceChild()>'.  Element attributes in XML::Grove are stored in
Perl hashes; attribute types are available through the document
object.

Another difference is that XML::Grove attempts to marry the PerlSAX
and DOM naming so that less (no?) name-changing occurs between using
PerlSAX interfaces and filters and DOM modules.  Where conflicts
occur, the PerlSAX naming is used.

XML::Grove uses a blessed hash for nodes, so the node type is
available using Perl's `C<ref()>' instead of using a `C<nodeType()>'
method and all class names are prefixed with `C<XML::Grove::>'.

The following object descriptions are the most basic and common
provided by many PerlSAX parsers.  PerlSAX parsers often provide
additional properties or objects, refer to your PerlSAX parser
documentation for details.

=head1 Document Object Model Level 1 Core

=head2 Object XML::Grove::Document

=over 12

=item Contents

The children of this object.  This property is an array.

=item Entities

The entities declared in this document.  This property is a hash of
XML::Grove::Entity objects keyed by entity name.

=item Notations

The notations declared in this document.  This property is a hash of
XML::Grove::Notation objects keyed by notation name.

=back

=head2 Object XML::Grove::Element

=over 12

=item Name

The tag type name for this element.  This property is a string.

=item Attributes

The attributes for this element.  This property is a hash and it's
hash values are strings (or arrays with some grove builders).

=item Contents

The children of this object.  This property is an array of XML::Grove
objects.

=back

=head2 Object XML::Grove::Characters

=over 12

=item Data

The text of the character data.  This property is a string.

=back

=head2 Object XML::Grove::Comment

=over 12

=item Data

The text of the character data.  This property is a string.

=back

=head2 Object XML::Grove::CData

The C<CData> object is called a C<CDATASection> in DOM.

=over 12

=item Data

The text of the character data.  This property is a string.

=back

=head2 Object XML::Grove::Notation

=over 12

=item Name

The name of this notation.  This property is a string.

=item SystemId

The system identifier of this notation.  This property is a string.

=item PublicId

The public identifier of this notation.  This property is a string.

=back

=head2 Object XML::Grove::Entity

=over 12

=item Name

The name of this entity.  This property is a string.

=item SystemId

The system identifier of this notation.  This property is a string.

=item PublicId

The public identifier of this notation.  This property is a string.

=item Notation

The notation declared for this entity.  This property is either the
name of the notation as a string or an C<XML::Grove::Notation> object.

=back

=head2 Object XML::Grove::PI

The C<PI> object is called a C<ProcessingInstruction> in DOM.

=over 12

=item Target

The target of the processing instruction.  This property is a string.

=item Data

The text of the processing instruction.  This property is a string.

=back
