Mercurial > pub > Impl
diff Lib/IMPL/DOM/Schema/ComplexNode.pm @ 7:94d47b388442
Улучшены тесты
Исправлены ошибки
Улучшена документация
Работа над схемой DOM
author | Sergey |
---|---|
date | Mon, 24 Aug 2009 01:05:34 +0400 |
parents | |
children | fffb153be599 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/DOM/Schema/ComplexNode.pm Mon Aug 24 01:05:34 2009 +0400 @@ -0,0 +1,79 @@ +package IMPL::DOM::Schema::ComplexNode; +use strict; +use warnings; + +use base qw(IMPL::DOM::Schema::Item); +use IMPL::Class::Property; + +BEGIN { + public property nodeType => prop_all; + public property content => { + get => \&_getContent, + set => \&_setContent + } +} + +__PACKAGE__->PassThroughArgs; + +sub _getContent { + $_[0]->firstChild; +} + +sub _setContent { + $_[0]->firstChild($_[1]); +} + +sub Validate { + my ($this,$node) = @_; + + if (my $type = $this->nodeType) { + my $schemaType = $this->Schema->ResolveType($type); + return $schemaType->Validate($node); + } else { + my @errors; + push @errors, $_->Validate foreach @{$this->childNodes}; + + if (@errors and $this->Message) { + return { + Error => 1, + Message => $this->formatMessage($node), + InnerErrors => \@errors + }; + } else { + return @errors; + } + } +} + +1; + +__END__ + +=pod + +=head1 DESCRIPTION + + . , +. + + .. + , . C<content> + +=head2 PROPERTIES + +=over + +=item C<nodeType> + + , . + C<content> . + +=item C<content> + + , C<IMPL::DOM::Schema::NodeSet> +C<IMPL::DOM::Schema::NodeList>, . + . + +=back + +=cut