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 |