49
|
1 package IMPL::DOM::Schema::ComplexNode;
|
|
2 use strict;
|
|
3 use warnings;
|
|
4
|
388
|
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 };
|
49
|
16
|
|
17
|
|
18 sub _getContent {
|
|
19 $_[0]->firstChild;
|
|
20 }
|
|
21
|
|
22 sub _setContent {
|
|
23 $_[0]->firstChild($_[1]);
|
|
24 }
|
|
25
|
|
26 sub Validate {
|
105
|
27 my ($this,$node,$ctx) = @_;
|
49
|
28
|
388
|
29 # для случаев анонимных типов, указанных прямо в узле
|
|
30 $ctx->{schemaNode} ||= $this;
|
|
31 $ctx->{schemaType} = $this;
|
|
32
|
105
|
33 map $_->Validate($node,$ctx), @{$this->childNodes};
|
49
|
34 }
|
|
35
|
|
36 1;
|
|
37
|
|
38 __END__
|
|
39
|
|
40 =pod
|
|
41
|
|
42 =head1 DESCRIPTION
|
|
43
|
180
|
44 Описывает сложный узел. Требует либо соответствие структуры, либо соответствия
|
|
45 типу.
|
49
|
46
|
180
|
47 Дочерними элементами могут быть правила контроля свойств и т.п.
|
|
48 Первым дочерним элементом может быть только содержимое узла, см. C<content>
|
49
|
49
|
|
50 =head2 PROPERTIES
|
|
51
|
|
52 =over
|
|
53
|
|
54 =item C<content>
|
|
55
|
180
|
56 Содержимое узла, может быть либо C<IMPL::DOM::Schema::NodeSet> либо
|
|
57 C<IMPL::DOM::Schema::NodeList>, в зависимости от того важен порядок или нет.
|
|
58 Это свойство ссылается на первый дочерний элемент узла.
|
49
|
59
|
|
60 =back
|
|
61
|
|
62 =cut
|