annotate Lib/IMPL/DOM/Schema/ComplexNode.pm @ 7:94d47b388442

Улучшены тесты Исправлены ошибки Улучшена документация Работа над схемой DOM
author Sergey
date Mon, 24 Aug 2009 01:05:34 +0400
parents
children fffb153be599
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
1 package IMPL::DOM::Schema::ComplexNode;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
2 use strict;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
3 use warnings;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
4
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
5 use base qw(IMPL::DOM::Schema::Item);
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
6 use IMPL::Class::Property;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
7
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
8 BEGIN {
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
9 public property nodeType => prop_all;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
10 public property content => {
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
11 get => \&_getContent,
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
12 set => \&_setContent
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
13 }
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
14 }
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
15
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
16 __PACKAGE__->PassThroughArgs;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
17
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
18 sub _getContent {
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
19 $_[0]->firstChild;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
20 }
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
21
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
22 sub _setContent {
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
23 $_[0]->firstChild($_[1]);
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
24 }
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
25
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
26 sub Validate {
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
27 my ($this,$node) = @_;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
28
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
29 if (my $type = $this->nodeType) {
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
30 my $schemaType = $this->Schema->ResolveType($type);
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
31 return $schemaType->Validate($node);
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
32 } else {
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
33 my @errors;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
34 push @errors, $_->Validate foreach @{$this->childNodes};
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
35
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
36 if (@errors and $this->Message) {
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
37 return {
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
38 Error => 1,
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
39 Message => $this->formatMessage($node),
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
40 InnerErrors => \@errors
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
41 };
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
42 } else {
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
43 return @errors;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
44 }
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
45 }
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
46 }
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
47
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
48 1;
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
49
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
50 __END__
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
51
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
52 =pod
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
53
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
54 =head1 DESCRIPTION
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
55
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
56 . ,
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
57 .
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
58
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
59 ..
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
60 , . C<content>
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
61
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
62 =head2 PROPERTIES
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
63
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
64 =over
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
65
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
66 =item C<nodeType>
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
67
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
68 , .
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
69 C<content> .
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
70
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
71 =item C<content>
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
72
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
73 , C<IMPL::DOM::Schema::NodeSet>
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
74 C<IMPL::DOM::Schema::NodeList>, .
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
75 .
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
76
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
77 =back
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
78
94d47b388442 Улучшены тесты
Sergey
parents:
diff changeset
79 =cut