Mercurial > pub > Impl
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 406:f23fcb19d3c1 | 407:c6e90e02dd17 |
|---|---|
| 1 package IMPL::DOM::Schema::ComplexNode; | |
| 2 use strict; | |
| 3 use warnings; | |
| 4 | |
| 5 use IMPL::declare { | |
| 6 base => [ | |
| 7 'IMPL::DOM::Schema::Node' => sub {my %args = @_; $args{nodeName} ||= 'ComplexNode'; %args } | |
| 8 ], | |
| 9 props => [ | |
| 10 content => { | |
| 11 get => \&_getContent, | |
| 12 set => \&_setContent | |
| 13 } | |
| 14 ] | |
| 15 }; | |
| 16 | |
| 17 | |
| 18 sub _getContent { | |
| 19 $_[0]->firstChild; | |
| 20 } | |
| 21 | |
| 22 sub _setContent { | |
| 23 $_[0]->firstChild($_[1]); | |
| 24 } | |
| 25 | |
| 26 sub Validate { | |
| 27 my ($this,$node,$ctx) = @_; | |
| 28 | |
| 29 # для случаев анонимных типов, указанных прямо в узле | |
| 30 $ctx->{schemaNode} ||= $this; | |
| 31 $ctx->{schemaType} = $this; | |
| 32 | |
| 33 map $_->Validate($node,$ctx), @{$this->childNodes}; | |
| 34 } | |
| 35 | |
| 36 1; | |
| 37 | |
| 38 __END__ | |
| 39 | |
| 40 =pod | |
| 41 | |
| 42 =head1 DESCRIPTION | |
| 43 | |
| 44 Описывает сложный узел. Требует либо соответствие структуры, либо соответствия | |
| 45 типу. | |
| 46 | |
| 47 Дочерними элементами могут быть правила контроля свойств и т.п. | |
| 48 Первым дочерним элементом может быть только содержимое узла, см. C<content> | |
| 49 | |
| 50 =head2 PROPERTIES | |
| 51 | |
| 52 =over | |
| 53 | |
| 54 =item C<content> | |
| 55 | |
| 56 Содержимое узла, может быть либо C<IMPL::DOM::Schema::NodeSet> либо | |
| 57 C<IMPL::DOM::Schema::NodeList>, в зависимости от того важен порядок или нет. | |
| 58 Это свойство ссылается на первый дочерний элемент узла. | |
| 59 | |
| 60 =back | |
| 61 | |
| 62 =cut |
