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