comparison Lib/IMPL/DOM/Schema/NodeSet.pm @ 24:7f00786f8210

Первая рабочая реазизация схемы и навигаторов
author Sergey
date Mon, 05 Oct 2009 00:48:49 +0400
parents 267460284fb3
children 16ada169ca75
comparison
equal deleted inserted replaced
23:716b287d4795 24:7f00786f8210
18 sub CTOR { 18 sub CTOR {
19 my ($this,%args) = @_; 19 my ($this,%args) = @_;
20 20
21 $this->messageMax( $args{messageMax} || 'Too many %Node.nodeName% nodes'); 21 $this->messageMax( $args{messageMax} || 'Too many %Node.nodeName% nodes');
22 $this->messageMin( $args{messageMin} || '%Schema.name% nodes expected'); 22 $this->messageMin( $args{messageMin} || '%Schema.name% nodes expected');
23 $this->messageUnexpected( $args{messageUnexpected} || 'A %Node.nodeName% isn\'t allowed here'); 23 $this->messageUnexpected( $args{messageUnexpected} || 'A %Node.nodeName% isn\'t allowed in %Node.parentNode.path%');
24 } 24 }
25 25
26 sub Validate { 26 sub Validate {
27 my ($this,$node) = @_; 27 my ($this,$node) = @_;
28 28
39 } 39 }
40 40
41 foreach my $child ( @{$node->childNodes} ) { 41 foreach my $child ( @{$node->childNodes} ) {
42 if (my $info = $nodes{$child->nodeName} || $anyNode) { 42 if (my $info = $nodes{$child->nodeName} || $anyNode) {
43 $info->{Seen}++; 43 $info->{Seen}++;
44 push @errors,new IMPL::DOM::Schema::VaidationError ( 44 push @errors,new IMPL::DOM::Schema::ValidationError (
45 Source => $this, 45 Source => $this,
46 Node => $child, 46 Node => $child,
47 Schema => $info->{Schema}, 47 Schema => $info->{Schema},
48 Message => $this->messageMax 48 Message => $this->messageMax
49 ) if ($info->{Max} and $info->{Seen} > $info->{Max}); 49 ) if ($info->{Max} and $info->{Seen} > $info->{Max});
50 50
51 if (my @localErrors = $info->{Schema}->Validate($child)) { 51 if (my @localErrors = $info->{Schema}->Validate($child)) {
52 push @errors,@localErrors; 52 push @errors,@localErrors;
53 } 53 }
54 } else { 54 } else {
55 push @errors, new IMPL::DOM::Schema::VaidationError ( 55 push @errors, new IMPL::DOM::Schema::ValidationError (
56 Source => $this, 56 Source => $this,
57 Node => $child, 57 Node => $child,
58 Schema => $info->{Schema}, 58 Schema => $info->{Schema},
59 Message => $this->messageUnexpected 59 Message => $this->messageUnexpected
60 ) 60 )
61 } 61 }
62 } 62 }
63 63
64 foreach my $info (values %nodes) { 64 foreach my $info (values %nodes) {
65 push @errors, new IMPL::DOM::Schema::VaidationError ( 65 push @errors, new IMPL::DOM::Schema::ValidationError (
66 Source => $this, 66 Source => $this,
67 Schema => $info->{Schema}, 67 Schema => $info->{Schema},
68 Node => $node, 68 Node => $node,
69 Message => $this->messageMin 69 Message => $this->messageMin
70 ) if $info->{Min} > $info->{Seen}; 70 ) if $info->{Min} > $info->{Seen};