49
|
1 package IMPL::DOM::Schema::SwitchNode;
|
|
2 use strict;
|
|
3 use warnings;
|
|
4
|
|
5 use base qw(IMPL::DOM::Schema::AnyNode);
|
|
6 use IMPL::Class::Property;
|
|
7 require IMPL::DOM::Schema::ValidationError;
|
152
|
8 use IMPL::DOM::Property qw(_dom);
|
49
|
9
|
|
10 our %CTOR = (
|
|
11 'IMPL::DOM::Schema::AnyNode' => sub {
|
|
12 my %args = @_;
|
|
13
|
|
14 $args{nodeName} ||= 'SwitchNode';
|
|
15
|
|
16 %args;
|
|
17 }
|
|
18 );
|
|
19
|
|
20 BEGIN {
|
152
|
21 public _dom property messageNoMatch => prop_all;
|
49
|
22 }
|
|
23
|
|
24 sub CTOR {
|
|
25 my ($this,%args) = @_;
|
|
26
|
125
|
27 $this->messageNoMatch($args{messageNoMatch} || 'A node %Node.nodeName% isn\'t expected in the %Parent.path%');
|
49
|
28 }
|
|
29
|
|
30 sub Validate {
|
125
|
31 my ($this,$node,$ctx) = @_;
|
|
32
|
49
|
33 if ( my ($schema) = $this->selectNodes(sub {$_[0]->name eq $node->nodeName} ) ) {
|
|
34 return $schema->Validate($node);
|
|
35 } else {
|
|
36 return new IMPL::DOM::Schema::ValidationError(
|
|
37 Node => $node,
|
|
38 Source => $this,
|
|
39 Message => $this->messageNoMatch
|
|
40 );
|
|
41 }
|
|
42 }
|
|
43
|
|
44 1;
|
|
45
|
|
46 __END__
|
|
47
|
|
48 =pod
|
|
49
|
|
50 =head1 DESCRIPTION
|
|
51
|
|
52 Представляет узел, который может быть одним из узлов, которые лежат внутри него.
|
|
53 Это более строгий вариант C<IMPL::DOM::Schema::AnyNode>.
|
|
54
|
|
55 =cut
|