annotate Lib/IMPL/DOM/Schema/Validator/Compare.pm @ 329:50ff1595bd62

fixed bug when transforming list properties
author sergey
date Mon, 03 Jun 2013 18:03:54 +0400
parents 89179bb8c388
children 5aff94ba842f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
1 package IMPL::DOM::Schema::Validator::Compare;
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
2 use strict;
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
3
165
76515373dac0 Added Class::Template,
wizard
parents: 125
diff changeset
4 use parent qw(IMPL::DOM::Schema::Validator);
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
5
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
6 use IMPL::Resources::Format qw(FormatMessage);
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
7 use IMPL::Class::Property;
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
8
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
9 BEGIN {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
10 public property targetProperty => prop_all;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
11 public property op => prop_all;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
12 public property nodePath => prop_all;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
13 public property optional => prop_all;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
14 private property _pathTranslated => prop_all;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
15 private property _targetNode => prop_all;
266
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
16 private property _sourceSchema => prop_all;
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
17 public property message => prop_all;
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
18 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
19
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
20 our %CTOR = (
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
21 'IMPL::DOM::Schema::Validator' => sub {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
22 my %args = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
23 $args{nodeName} ||= 'Compare';
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
24 delete @args{qw(targetProperty op nodePath optional message)};
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
25 %args;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
26 }
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
27 );
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
28
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
29 our %Ops = (
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
30 '=' => \&_equals,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
31 'eq' => \&_equalsString,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
32 '!=' => \&_notEquals,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
33 'ne' => \&_notEqualsString,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
34 '=~' => \&_matchRx,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
35 '!~' => \&_notMatchRx,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
36 '<' => \&_less,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
37 '>' => \&_greater,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
38 'lt' => \&_lessString,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
39 'gt' => \&_greaterString
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
40 );
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
41
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
42 my $rxOps = map qr/$_/, join( '|', keys %Ops );
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
43
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
44 sub CTOR {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
45 my ($this,%args) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
46
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
47 $this->targetProperty($args{targetProperty} || 'nodeValue');
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
48 $this->op( $Ops{ $args{op} || '=' } ) or die new IMPL::InvalidArgumentException("Invalid parameter value",'op',$args{op},$this->path);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
49 $this->nodePath($args{nodePath}) or die new IMPL::InvalidArgumentException("The argument is required", 'nodePath', $this->path);
238
b8c724f6de36 DOM model refactoring
sergey
parents: 236
diff changeset
50 $this->message($args{message} || 'The value of %node.path% %source.op% %value% (%source.nodePath%)' );
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
51 $this->optional($args{optional}) if $args{optional};
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
52 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
53
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
54 sub TranslatePath {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
55 my ($this,$path) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
56
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
57 $path ||= '';
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
58
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
59 my @selectQuery;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
60
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
61 my $i = 0;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
62
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
63 foreach my $chunk (split /\//,$path) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
64 $chunk = 'document:*' if $i == 0 and not length $chunk;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
65 next if not length $chunk;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
66
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
67 my $query;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
68 my ($axis,$filter) = ( $chunk =~ /^(?:(\w+):)?(.*)$/);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
69
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
70 if ($filter =~ /^\w+|\*$/ ) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
71 $query = $filter eq '*' ? undef : $filter;
266
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
72 } elsif ( $filter =~ /^(\w+|\*)\s*((?:\[\s*\w+\s*(?:=|!=|=~|!~|eq|ne|lt|gt)\s*["'](?:[^\\'"]|\\[\\"'])*["']\])+)$/) {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
73 my ($nodeName,$filterArgs) = ($1,$2);
266
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
74
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
75
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
76 my @parsedFilters = map {
266
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
77 my ($prop,$op,$value) = ($_ =~ /\s*(\w+)\s*(=|!=|=~|!~|eq|ne|lt|gt)\s*(?:["']((?:[^\\'"]|\\[\\"'])*)["'])/);
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
78
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
79 $value =~ s/\\[\\'"]/$1/g;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
80 {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
81 prop => $prop,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
82 op => $Ops{$op},
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
83 value => $value
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
84 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
85 } grep ( $_, split ( /[\]\[]+/,$filterArgs ) );
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
86
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
87 $query = sub {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
88 my ($node) = shift;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
89
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
90 $node->nodeName eq $nodeName or return 0 if $nodeName ne '*';
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
91 $_->{op}->(
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
92 _resovleProperty($node,$_->{prop}),
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
93 FormatMessage($_->{value},{
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
94 Schema => $this->parentNode,
266
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
95 Node => $this->_targetNode,
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
96 schema => $this->parentNode,
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
97 node => $this->_targetNode,
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
98 source => $this->_sourceSchema
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
99 },\&_resovleProperty)
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
100 ) or return 0 foreach @parsedFilters;
266
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
101 return 1;
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
102 };
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
103 } else {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
104 die new IMPL::Exception("Invalid query syntax",$path,$chunk);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
105 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
106
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
107 push @selectQuery, $axis ? { $axis => $query } : $query;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
108
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
109 $i++;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
110 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
111
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
112 return \@selectQuery;
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
113 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
114
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
115 sub Validate {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
116 my ($this,$node,$ctx) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
117
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
118 my @result;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
119
266
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
120 my $Source = $ctx && $ctx->{Source} || $this->parentNode;
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
121
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
122 $this->_sourceSchema($Source);
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
123
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
124 $this->_targetNode($node);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
125
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
126 my $query = $this->_pathTranslated() || $this->_pathTranslated($this->TranslatePath($this->nodePath));
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
127
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
128 my ($foreignNode) = $node->selectNodes(@$query);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
129
266
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
130
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
131
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
132 if ($foreignNode) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
133 my $value = $this->nodeValue;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
134
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
135 if ($value) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
136 $value = FormatMessage($value, { Schema => $this->parentNode, Node => $this->_targetNode, ForeignNode => $foreignNode },\&_resovleProperty);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
137 } else {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
138 $value = $foreignNode->nodeValue;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
139 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
140
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
141 push @result, new IMPL::DOM::Schema::ValidationError(
236
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
142 node => $node,
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
143 foreignNode => $foreignNode,
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
144 value => $value,
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
145 source => $Source,
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
146 schema => $this->parentNode,
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
147 message => $this->message
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
148 ) unless $this->op->(_resovleProperty($node,$this->targetProperty),$value);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
149 } elsif (not $this->optional) {
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
150 push @result, new IMPL::DOM::Schema::ValidationError(
236
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
151 node => $node,
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
152 value => '',
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
153 source => $Source,
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
154 schema => $this->parentNode,
2904da230022 DOM refactoring
sergey
parents: 194
diff changeset
155 message => $this->message
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
156 );
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
157 }
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
158
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
159 $this->_targetNode(undef);
266
89179bb8c388 *corrected TTView to handle plain (and undefined) values
cin
parents: 238
diff changeset
160 $this->_sourceSchema(undef);
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
161
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
162 return @result;
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
163 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
164
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
165 sub _resovleProperty {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
166 my ($node,$prop) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
167
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
168 return $node->can($prop) ? $node->$prop() : $node->nodeProperty($prop);
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
169 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
170
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
171 sub _matchRx {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
172 $_[0] =~ $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
173 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
174
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
175 sub _notMatchRx {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
176 $_[0] !~ $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
177 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
178
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
179 sub _equals {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
180 $_[0] == $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
181 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
182
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
183 sub _notEquals {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
184 $_[0] != $_[0];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
185 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
186
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
187 sub _equalsString {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
188 $_[0] eq $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
189 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
190
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
191 sub _notEqualsString {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
192 $_[0] ne $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
193 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
194
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
195 sub _less {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
196 $_[0] < $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
197 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
198
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
199 sub _greater {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
200 $_[0] > $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
201 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
202
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
203 sub _lessString {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
204 $_[0] lt $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
205 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
206
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
207 sub _greaterString {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
208 $_[0] gt $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
209 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
210
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
211 sub _lessEq {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
212 $_[0] <= $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
213 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
214
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
215 sub _greaterEq {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
216 $_[0] >= $_[1];
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
217 }
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
218
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
219 1;
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
220
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
221 __END__
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
222
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
223 =pod
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
224
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
225 =head1 NAME
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
226
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
227 C<IMPL::DOM::Schema::Validator::Compare> - ограничение на содержимое текущего узла,
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
228 сравнивая его со значением другого узла.
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
229
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
230 =head1 SYNOPSIS
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
231
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
232 Пример типа описания поля с проверочным полем
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
233
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
234 =begin code xml
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
235
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
236 <schema>
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
237 <SimpleType type="retype_field">
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
238 <Property name="linkedNode" message="Для узла %Node.nodeName% необходимо задать свойство %Source.name%"/>
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
239 <Compare op="eq" nodePath="sibling:*[nodeName eq '%Node.linkedNode%']"/>
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
240 </SimpleType>
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
241 </schema>
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
242
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
243 =begin code xml
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
244
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
245 =head1 DESCRIPTION
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
246
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
247 Позволяет сравнивать значение текущего узла со значением другого узла.
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
diff changeset
248
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 165
diff changeset
249 =cut