Mercurial > pub > Impl
comparison Lib/IMPL/DOM/Schema/NodeList.pm @ 102:cf3b6ef2be22
Schema beta version
author | wizard |
---|---|
date | Fri, 07 May 2010 08:05:23 +0400 |
parents | df6b4f054957 |
children | a4b0a819bbda |
comparison
equal
deleted
inserted
replaced
101:d8dc6cad3f55 | 102:cf3b6ef2be22 |
---|---|
17 | 17 |
18 sub CTOR { | 18 sub CTOR { |
19 my ($this,%args) = @_; | 19 my ($this,%args) = @_; |
20 | 20 |
21 $this->messageUnexpected($args{messageUnexpected} || 'A %Node.nodeName% isn\'t allowed in %Node.parentNode.path%'); | 21 $this->messageUnexpected($args{messageUnexpected} || 'A %Node.nodeName% isn\'t allowed in %Node.parentNode.path%'); |
22 $this->messageNodesRequired($args{messageNodesRequired} || 'A %Schema.name% is required in the node %Node.path%'); | 22 $this->messageNodesRequired($args{messageNodesRequired} || 'A %Schema.name% is required in the node %Parent.path%'); |
23 } | 23 } |
24 | 24 |
25 sub Validate { | 25 sub Validate { |
26 my ($this,$node) = @_; | 26 my ($this,$node) = @_; |
27 | 27 |
36 while ($info and not $info->{anyNode} and $info->{nodeName} ne $child->nodeName) { | 36 while ($info and not $info->{anyNode} and $info->{nodeName} ne $child->nodeName) { |
37 # if possible of course :) | 37 # if possible of course :) |
38 return new IMPL::DOM::Schema::ValidationError ( | 38 return new IMPL::DOM::Schema::ValidationError ( |
39 Message => $this->messageUnexpected, | 39 Message => $this->messageUnexpected, |
40 Node => $child, | 40 Node => $child, |
41 Parent => $node, | |
41 Schema => $info->{Schema}, | 42 Schema => $info->{Schema}, |
42 Source => $this | 43 Source => $this |
43 ) if $info->{Min} > $info->{Seen}; | 44 ) if $info->{Min} > $info->{Seen}; |
44 | 45 |
45 $info = shift @nodes; | 46 $info = shift @nodes; |
47 | 48 |
48 # return error if no more children allowed | 49 # return error if no more children allowed |
49 return new IMPL::DOM::Schema::ValidationError ( | 50 return new IMPL::DOM::Schema::ValidationError ( |
50 Message => $this->messageUnexpected, | 51 Message => $this->messageUnexpected, |
51 Node => $child, | 52 Node => $child, |
53 Parent => $node, | |
52 Source => $this | 54 Source => $this |
53 ) unless $info; | 55 ) unless $info; |
54 | 56 |
55 # it's ok, we found schema element for child | 57 # it's ok, we found schema element for child |
56 # but it may be any node or switching node wich would not satisfy current child | 58 # but it may be any node or switching node wich would not satisfy current child |
69 # check count limits | 71 # check count limits |
70 return new IMPL::DOM::Schema::ValidationError ( | 72 return new IMPL::DOM::Schema::ValidationError ( |
71 Error => 1, | 73 Error => 1, |
72 Message => $this->messageUnexpected, | 74 Message => $this->messageUnexpected, |
73 Node => $child, | 75 Node => $child, |
76 Parent => $node, | |
74 Source => $this, | 77 Source => $this, |
75 ) if $info->{Max} and $info->{Seen} > $info->{Max}; | 78 ) if $info->{Max} and $info->{Seen} > $info->{Max}; |
76 } | 79 } |
77 | 80 |
78 # no more children left (but may be should :) | 81 # no more children left (but may be should :) |
79 while ($info) { | 82 while ($info) { |
80 return new IMPL::DOM::Schema::ValidationError ( | 83 return new IMPL::DOM::Schema::ValidationError ( |
81 Error => 1, | 84 Error => 1, |
82 Message => $this->messageNodesRequired, | 85 Message => $this->messageNodesRequired, |
83 Source => $this, | 86 Source => $this, |
87 Parent => $node, | |
84 Schema => $info->{Schema} | 88 Schema => $info->{Schema} |
85 ) if $info->{Seen} < $info->{Min}; | 89 ) if $info->{Seen} < $info->{Min}; |
86 | 90 |
87 $info = shift @nodes; | 91 $info = shift @nodes; |
88 } | 92 } |