Mercurial > pub > Impl
diff lib/IMPL/DOM/Schema/ComplexNode.pm @ 407:c6e90e02dd17 ref20150831
renamed Lib->lib
author | cin |
---|---|
date | Fri, 04 Sep 2015 19:40:23 +0300 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/IMPL/DOM/Schema/ComplexNode.pm Fri Sep 04 19:40:23 2015 +0300 @@ -0,0 +1,62 @@ +package IMPL::DOM::Schema::ComplexNode; +use strict; +use warnings; + +use IMPL::declare { + base => [ + 'IMPL::DOM::Schema::Node' => sub {my %args = @_; $args{nodeName} ||= 'ComplexNode'; %args } + ], + props => [ + content => { + get => \&_getContent, + set => \&_setContent + } + ] +}; + + +sub _getContent { + $_[0]->firstChild; +} + +sub _setContent { + $_[0]->firstChild($_[1]); +} + +sub Validate { + my ($this,$node,$ctx) = @_; + + # для случаев анонимных типов, указанных прямо в узле + $ctx->{schemaNode} ||= $this; + $ctx->{schemaType} = $this; + + map $_->Validate($node,$ctx), @{$this->childNodes}; +} + +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