package XML::Validator::Schema::Node;
use base qw(Tree::DAG_Node);

=head1 NAME

XML::Validator::Schema::Node

=head1 DESCRIPTION

Base class for nodes in the schema tree.  Used by both temporary nodes
resolved during compilation (ex. ::ModelNode) and permanent nodes
(ex. ::ElementNode).

This is an abstract base class and may not be directly instantiated.

=cut

sub new {
    my $pkg = shift;
    croak("Illegal attempt to instantiate a Node directly!")
      if $pkg eq __PACKAGE__;
    return $pkg->SUPER::new(@_);
}

sub parse {
    my $pkg = shift;
    croak("$pkg neglected to supply a parse() implementation!");
}

# override to declare root-ness
sub is_root {
    return 0 if shift->{mother};
    return 1;
}

1;