Mercurial > pub > Impl
comparison Lib/IMPL/DOM/Schema.pm @ 34:a8086f85a571
Dom Builder
author | Sergey |
---|---|
date | Mon, 16 Nov 2009 18:39:25 +0300 |
parents | 7f00786f8210 |
children | c2e7f7c96bcd |
comparison
equal
deleted
inserted
replaced
33:0004faa276dc | 34:a8086f85a571 |
---|---|
21 'IMPL::DOM::Document' => sub { nodeName => 'schema' } | 21 'IMPL::DOM::Document' => sub { nodeName => 'schema' } |
22 ); | 22 ); |
23 | 23 |
24 BEGIN { | 24 BEGIN { |
25 private _direct property _TypesMap => prop_all; | 25 private _direct property _TypesMap => prop_all; |
26 public _direct property BaseSchemas => prop_get | owner_set; | |
27 private _direct property _Validators => prop_all; | |
26 } | 28 } |
27 | 29 |
28 sub resolveType { | 30 sub resolveType { |
29 $_[0]->{$_TypesMap}->{$_[1]}; | 31 $_[0]->{$_TypesMap}->{$_[1]}; |
30 } | 32 } |
33 | |
34 #sub Create { | |
35 # my ($this,$nodeName,$class,$refArgs) = @_; | |
36 | |
37 # goto &SUPER::Create unless $class eq 'IMPL::DOM::Schema::Validator' | |
38 #} | |
31 | 39 |
32 sub Process { | 40 sub Process { |
33 my ($this) = @_; | 41 my ($this) = @_; |
34 | 42 |
35 $this->{$_TypesMap} = { map { $_->type, $_ } $this->selectNodes(sub { $_[0]->nodeName eq 'ComplexType' || $_[0]->nodeName eq 'SimpleType' } ) }; | 43 $this->{$_TypesMap} = { map { $_->type, $_ } $this->selectNodes(sub { $_[0]->nodeName eq 'ComplexType' || $_[0]->nodeName eq 'SimpleType' } ) }; |
39 my ($this,$node) = @_; | 47 my ($this,$node) = @_; |
40 | 48 |
41 if ( my ($schemaNode) = $this->selectNodes(sub { $_[0]->name eq $node->nodeName })) { | 49 if ( my ($schemaNode) = $this->selectNodes(sub { $_[0]->name eq $node->nodeName })) { |
42 $schemaNode->Validate($node); | 50 $schemaNode->Validate($node); |
43 } else { | 51 } else { |
44 return IMPL::DOM::Schema::ValidationError(Message=> "A specified document doesn't match the schema"); | 52 return new IMPL::DOM::Schema::ValidationError(Message=> "A specified document doesn't match the schema"); |
45 } | 53 } |
46 } | 54 } |
47 | 55 |
48 my $schema; | 56 my $schema; |
49 | 57 |
97 IMPL::DOM::Schema::NodeList->new()->appendRange( | 105 IMPL::DOM::Schema::NodeList->new()->appendRange( |
98 IMPL::DOM::Schema::SwitchNode->new()->appendRange( | 106 IMPL::DOM::Schema::SwitchNode->new()->appendRange( |
99 IMPL::DOM::Schema::Node->new(name => 'NodeSet', type => 'NodeSet'), | 107 IMPL::DOM::Schema::Node->new(name => 'NodeSet', type => 'NodeSet'), |
100 IMPL::DOM::Schema::Node->new(name => 'NodeList',type => 'NodeList'), | 108 IMPL::DOM::Schema::Node->new(name => 'NodeList',type => 'NodeList'), |
101 ), | 109 ), |
102 IMPL::DOM::Schema::AnyNode->new(maxOccur => 'unbounded', minOccur => 0) | 110 IMPL::DOM::Schema::AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator') |
103 ), | 111 ), |
104 new IMPL::DOM::Schema::Property(name => 'type') | 112 new IMPL::DOM::Schema::Property(name => 'type') |
105 ), | 113 ), |
106 IMPL::DOM::Schema::ComplexType->new(type => 'ComplexNode', nativeType => 'IMPL::DOM::Schema::ComplexNode')->appendRange( | 114 IMPL::DOM::Schema::ComplexType->new(type => 'ComplexNode', nativeType => 'IMPL::DOM::Schema::ComplexNode')->appendRange( |
107 IMPL::DOM::Schema::NodeList->new()->appendRange( | 115 IMPL::DOM::Schema::NodeList->new()->appendRange( |
108 IMPL::DOM::Schema::SwitchNode->new()->appendRange( | 116 IMPL::DOM::Schema::SwitchNode->new()->appendRange( |
109 IMPL::DOM::Schema::Node->new(name => 'NodeSet', type => 'NodeSet'), | 117 IMPL::DOM::Schema::Node->new(name => 'NodeSet', type => 'NodeSet'), |
110 IMPL::DOM::Schema::Node->new(name => 'NodeList',type => 'NodeList'), | 118 IMPL::DOM::Schema::Node->new(name => 'NodeList',type => 'NodeList'), |
111 ), | 119 ), |
112 IMPL::DOM::Schema::AnyNode->new(maxOccur => 'unbounded', minOccur => 0) | 120 IMPL::DOM::Schema::AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator') |
113 ), | 121 ), |
114 new IMPL::DOM::Schema::Property(name => 'name') | 122 new IMPL::DOM::Schema::Property(name => 'name') |
115 ), | 123 ), |
116 IMPL::DOM::Schema::ComplexType->new(type => 'SimpleType', nativeType => 'IMPL::DOM::Schema::SimpleType')->appendRange( | 124 IMPL::DOM::Schema::ComplexType->new(type => 'SimpleType', nativeType => 'IMPL::DOM::Schema::SimpleType')->appendRange( |
117 IMPL::DOM::Schema::NodeSet->new()->appendRange( | 125 IMPL::DOM::Schema::NodeSet->new()->appendRange( |
118 IMPL::DOM::Schema::AnyNode->new(maxOccur => 'unbounded', minOccur => 0) | 126 IMPL::DOM::Schema::AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator') |
119 ), | 127 ), |
120 new IMPL::DOM::Schema::Property(name => 'type') | 128 new IMPL::DOM::Schema::Property(name => 'type') |
121 ), | 129 ), |
122 IMPL::DOM::Schema::ComplexType->new(type => 'SimpleNode', nativeType => 'IMPL::DOM::Schema::SimpleNode')->appendRange( | 130 IMPL::DOM::Schema::ComplexType->new(type => 'SimpleNode', nativeType => 'IMPL::DOM::Schema::SimpleNode')->appendRange( |
123 IMPL::DOM::Schema::NodeSet->new()->appendRange( | 131 IMPL::DOM::Schema::NodeSet->new()->appendRange( |
132 IMPL::DOM::Schema::AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator') | |
133 ), | |
134 new IMPL::DOM::Schema::Property(name => 'name') | |
135 ), | |
136 IMPL::DOM::Schema::ComplexType->new(type => 'Validator', nativeType => 'IMPL::DOM::Schema::Validator')->appendRange( | |
137 IMPL::DOM::Schema::NodeList->new()->appendRange( | |
124 IMPL::DOM::Schema::AnyNode->new(maxOccur => 'unbounded', minOccur => 0) | 138 IMPL::DOM::Schema::AnyNode->new(maxOccur => 'unbounded', minOccur => 0) |
125 ), | 139 ), |
126 new IMPL::DOM::Schema::Property(name => 'name') | 140 new IMPL::DOM::Schema::Property(name => 'name') |
127 ) | 141 ) |
128 ); | 142 ); |
183 <Node minOcuur="0" maxOccur="unbounded" name="SimpleNode" type="SimpleNode"/> | 197 <Node minOcuur="0" maxOccur="unbounded" name="SimpleNode" type="SimpleNode"/> |
184 <SimpleNode minOcuur="0" maxOccur="unbounded" name="Node"/> | 198 <SimpleNode minOcuur="0" maxOccur="unbounded" name="Node"/> |
185 </NodeSet> | 199 </NodeSet> |
186 </ComplexType> | 200 </ComplexType> |
187 | 201 |
188 | |
189 <ComplexType type="ComplexType"> | 202 <ComplexType type="ComplexType"> |
190 <NodeList> | 203 <NodeList> |
191 <Node name="NodeSet" type="NodeContainer" minOcuur=0/> | 204 <Node name="NodeSet" type="NodeContainer" minOcuur=0/> |
192 <Node name="NodeList" type="NodeContainer" minOccur=0/> | 205 <Node name="NodeList" type="NodeContainer" minOccur=0/> |
193 <AnyNode minOccur="0" maxOccur="unbounded"/> | 206 <AnyNode minOccur="0" maxOccur="unbounded" type="Validator"/> |
194 </NodeList> | 207 </NodeList> |
195 </ComplexType> | 208 </ComplexType> |
196 | 209 |
197 <ComplexType type="ComplexNode"> | 210 <ComplexType type="ComplexNode"> |
198 <NodeList> | 211 <NodeList> |
199 <Node name="NodeSet" type="NodeContainer" minOcuur=0/> | 212 <Node name="NodeSet" type="NodeContainer" minOcuur=0/> |
200 <Node name="NodeList" type="NodeContainer" minOccur=0/> | 213 <Node name="NodeList" type="NodeContainer" minOccur=0/> |
201 <AnyNode minOccur="0" maxOccur="unbounded"/> | 214 <AnyNode minOccur="0" maxOccur="unbounded" type="Validator"/> |
202 </NodeList> | 215 </NodeList> |
203 </ComplexType> | 216 </ComplexType> |
204 | 217 |
205 <ComplexType type="SimpleNode"> | 218 <ComplexType type="SimpleNode"> |
206 <NodeSet> | 219 <NodeSet> |
220 <AnyNode minOccur=0 maxOccur="unbounded" type="Validator"/> | |
221 </NodeSet> | |
222 </ComplexType> | |
223 | |
224 <ComplexType type="SimpleType"> | |
225 <NodeSet> | |
226 <AnyNode minOccur=0 maxOccur="unbounded" type="Validator"/> | |
227 </NodeSet> | |
228 </ComplexType> | |
229 | |
230 <ComplexType type="Validator"> | |
231 <NodeSet> | |
207 <AnyNode minOccur=0 maxOccur="unbounded"/> | 232 <AnyNode minOccur=0 maxOccur="unbounded"/> |
208 </NodeSet> | 233 </NodeSet> |
209 </ComplexType> | 234 </ComplexType> |
210 | 235 |
211 <ComplexType type="SimpleType"> | |
212 <NodeSet> | |
213 <AnyNode minOccur=0 maxOccur="unbounded"/> | |
214 </NodeSet> | |
215 </ComplexType> | |
216 | |
217 </schema> | 236 </schema> |
218 | 237 |
219 =cut | 238 =cut |