Mercurial > pub > Impl
view Lib/IMPL/DOM/Schema/ComplexNode.pm @ 18:818c74b038ae
DOM Schema + tests
author | Sergey |
---|---|
date | Thu, 10 Sep 2009 17:42:47 +0400 |
parents | 5899df8c289e |
children | 1ca530e5c9c5 |
line wrap: on
line source
package IMPL::DOM::Schema::ComplexNode; use strict; use warnings; use base qw(IMPL::DOM::Schema::Node); use IMPL::Class::Property; BEGIN { 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}; return @errors; } } 1; __END__ =pod =head1 DESCRIPTION Описывает сложный узел. Требует либо соответствие структуры, либо соответствия типу. Дочерними элементами могут быть правила контроля свойств и т.п. Первым дочерним элементом может быть только содержимое узла, см. C<content> =head2 PROPERTIES =over =item C<content> Содержимое узла, может быть либо C<IMPL::DOM::Schema::NodeSet> либо C<IMPL::DOM::Schema::NodeList>, в зависимости от того важен порядок или нет. Это свойство ссылается на первый дочерний элемент узла. =back =cut