annotate Lib/IMPL/DOM/Schema.pm @ 250:129e48bb5afb

DOM refactoring ObjectToDOM methods are virtual QueryToDOM uses inflators Fixed transform for the complex values in the ObjectToDOM QueryToDOM doesn't allow to use complex values (HASHes) as values for nodes (overpost problem)
author sergey
date Wed, 07 Nov 2012 04:17:53 +0400
parents 2746a8e5a6c4
children 0f59b2de72af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
1 package IMPL::DOM::Schema;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
2 use strict;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
3 use warnings;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
4
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
5 use IMPL::require {
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
6 ComplexNode => 'IMPL::DOM::Schema::ComplexNode',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
7 ComplexType => 'IMPL::DOM::Schema::ComplexType',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
8 SimpleNode => 'IMPL::DOM::Schema::SimpleNode',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
9 SimpleType => 'IMPL::DOM::Schema::SimpleType',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
10 Node => 'IMPL::DOM::Schema::Node',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
11 AnyNode => 'IMPL::DOM::Schema::AnyNode',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
12 NodeList => 'IMPL::DOM::Schema::NodeList',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
13 NodeSet => 'IMPL::DOM::Schema::NodeSet',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
14 Property => 'IMPL::DOM::Schema::Property',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
15 SwitchNode => 'IMPL::DOM::Schema::SwitchNode',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
16 Validator => 'IMPL::DOM::Schema::Validator',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
17 Builder => 'IMPL::DOM::Navigator::Builder',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
18 XMLReader => 'IMPL::DOM::XMLReader',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
19 InflateFactory => 'IMPL::DOM::Schema::InflateFactory',
232
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
20 Loader => 'IMPL::Code::Loader'
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
21 };
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
22
166
4267a2ac3d46 Added Class::Template,
wizard
parents: 152
diff changeset
23 use parent qw(IMPL::DOM::Document);
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
24 use IMPL::Class::Property;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
25 use IMPL::Class::Property::Direct;
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
26 use File::Spec;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
27
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
28 our %CTOR = (
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
29 'IMPL::DOM::Document' => sub { nodeName => 'schema' }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
30 );
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
31
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
32 BEGIN {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
33 private _direct property _TypesMap => prop_all;
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
34 public _direct property baseDir => prop_all;
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
35 public _direct property BaseSchemas => prop_get | owner_set;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
36 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
37
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
38 my $validatorLoader = Loader->new(prefix => Validator, verifyNames => 1);
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
39
250
129e48bb5afb DOM refactoring
sergey
parents: 246
diff changeset
40 #TODO rename and remove
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
41 sub resolveType {
246
2746a8e5a6c4 Fixed regressions in DOM due previous refactorings
sergey
parents: 245
diff changeset
42 $_[0]->{$_TypesMap}->{$_[1]} or die IMPL::KeyNotFoundException->new($_[1]);
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
43 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
44
102
cf3b6ef2be22 Schema beta version
wizard
parents: 101
diff changeset
45 sub CTOR {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
46 my ($this,%args) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
47
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
48 $this->{$baseDir} = ($args{baseDir} || '.');
102
cf3b6ef2be22 Schema beta version
wizard
parents: 101
diff changeset
49 }
cf3b6ef2be22 Schema beta version
wizard
parents: 101
diff changeset
50
250
129e48bb5afb DOM refactoring
sergey
parents: 246
diff changeset
51 # compat
129e48bb5afb DOM refactoring
sergey
parents: 246
diff changeset
52 sub ResolveType {
129e48bb5afb DOM refactoring
sergey
parents: 246
diff changeset
53 goto &resolveType
129e48bb5afb DOM refactoring
sergey
parents: 246
diff changeset
54 }
129e48bb5afb DOM refactoring
sergey
parents: 246
diff changeset
55
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
56 sub Create {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
57 my ($this,$nodeName,$class,$refArgs) = @_;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
58
100
df6b4f054957 Schema in progress
wizard
parents: 98
diff changeset
59 die new IMPL::Exception('Invalid node class') unless $class->isa('IMPL::DOM::Node');
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
60
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
61 if ($class->isa('IMPL::DOM::Schema::Validator')) {
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
62 $class = $validatorLoader->GetFullName($nodeName);
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
63 unless (eval {$class->can('new')}) {
232
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
64 eval {
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
65 $validatorLoader->Require($nodeName);
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
66 };
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
67 my $e = $@;
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
68 die new IMPL::Exception("Invalid validator",$class,$e) if $e;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
69 }
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
70 }
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
71
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
72 return $this->SUPER::Create($nodeName,$class,$refArgs);
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
73 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
74
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
75 sub Process {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
76 my ($this) = @_;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
77
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
78 # process instructions
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
79 $this->Include($_) foreach map $_->nodeProperty('source'), $this->selectNodes('Include');
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
80
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
81 # build types map
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
82 $this->{$_TypesMap} = { map { $_->type, $_ } $this->selectNodes(sub { $_[0]->nodeName eq 'ComplexType' || $_[0]->nodeName eq 'SimpleType' } ) };
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
83 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
84
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
85 sub Include {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
86 my ($this,$file) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
87
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
88 my $schema = $this->LoadSchema(File::Spec->catfile($this->baseDir, $file));
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
89
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
90 $this->appendRange( $schema->childNodes );
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
91 }
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
92
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
93 sub LoadSchema {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
94 my ($this,$file) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
95
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
96 $file = File::Spec->rel2abs($file);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
97
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
98 my $class = ref $this || $this;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
99
232
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
100 my $reader = XMLReader->new(
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
101 Navigator => Builder->new(
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
102 $class,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
103 $class->MetaSchema
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
104 ),
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
105 SkipWhitespace => 1
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
106 );
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
107
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
108 $reader->ParseFile($file);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
109
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
110 my $schema = $reader->Navigator->Document;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
111
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
112 my ($vol,$dir) = File::Spec->splitpath($file);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
113
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
114 $schema->baseDir($dir);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
115
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
116 my @errors = $class->MetaSchema->Validate($schema);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
117
245
7c517134c42f Added Unsupported media type Web exception
sergey
parents: 232
diff changeset
118 die new IMPL::Exception("Schema is invalid",$file,map( $_->message, @errors ) ) if @errors;
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
119
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
120 $schema->Process;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
121
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
122 return $schema;
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
123 }
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
124
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
125 sub Validate {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
126 my ($this,$node) = @_;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
127
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
128 if ( my ($schemaNode) = $this->selectNodes(sub { $_->isa(Node) and $_[0]->name eq $node->nodeName })) {
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
129 $schemaNode->Validate($node);
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
130 } else {
126
c8dfbbdd8005 Several bug fixes
wizard
parents: 104
diff changeset
131 return new IMPL::DOM::Schema::ValidationError(Node => $node, Message=> "A specified document (%Node.nodeName%) doesn't match the schema");
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
132 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
133 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
134
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
135 my $schema;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
136
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
137 sub MetaSchema {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
138
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
139 return $schema if $schema;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
140
232
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
141 $schema = __PACKAGE__->new();
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
142
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
143 $schema->appendRange(
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
144 ComplexNode->new(name => 'schema')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
145 NodeSet->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
146 Node->new(name => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
147 Node->new(name => 'ComplexType', type => 'ComplexType', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
148 Node->new(name => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
149 Node->new(name => 'SimpleType', type => 'SimpleType', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
150 Node->new(name => 'Node', type => 'Node', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
151 SimpleNode->new(name => 'Include', minOccur => 0, maxOccur=>'unbounded')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
152 Property->new(name => 'source')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
153 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
154 ),
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
155 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
156 ComplexType->new(type => 'NodeSet', nativeType => 'IMPL::DOM::Schema::NodeSet')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
157 NodeSet->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
158 Node->new(name => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
159 Node->new(name => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
160 Node->new(name => 'Node', type=>'Node', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
161 SwitchNode->new(minOccur => 0, maxOccur => 1)->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
162 Node->new(name => 'AnyNode', type => 'AnyNode'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
163 Node->new(name => 'SwitchNode',type => 'SwitchNode')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
164 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
165 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
166 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
167 ComplexType->new(type => 'SwitchNode', nativeType => 'IMPL::DOM::Schema::SwitchNode')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
168 NodeSet->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
169 Node->new(name => 'ComplexNode', type=>'ComplexNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
170 Node->new(name => 'SimpleNode', type=>'SimpleNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
171 Node->new(name => 'Node', type=>'Node', minOccur => 0, maxOccur=>'unbounded'),
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
172 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
173 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
174 ComplexType->new(type => 'NodeList', nativeType => 'IMPL::DOM::Schema::NodeList')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
175 NodeSet->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
176 Node->new(name => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
177 Node->new(name => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
178 Node->new(name => 'SwitchNode',type => 'SwitchNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
179 Node->new(name => 'Node', type => 'Node', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
180 Node->new(name => 'AnyNode', type => 'AnyNode', minOccur => 0, maxOccur=>'unbounded'),
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
181 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
182 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
183 ComplexType->new(type => 'ComplexType', nativeType => 'IMPL::DOM::Schema::ComplexType')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
184 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
185 SwitchNode->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
186 Node->new(name => 'NodeSet', type => 'NodeSet'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
187 Node->new(name => 'NodeList',type => 'NodeList'),
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
188 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
189 Node->new(name => 'Property', type=>'Property', maxOccur=>'unbounded', minOccur=>0),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
190 AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
191 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
192 Property->new(name => 'type')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
193 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
194 ComplexType->new(type => 'ComplexNode', nativeType => 'IMPL::DOM::Schema::ComplexNode')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
195 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
196 SwitchNode->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
197 Node->new(name => 'NodeSet', type => 'NodeSet'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
198 Node->new(name => 'NodeList',type => 'NodeList'),
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
199 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
200 Node->new(name => 'Property', type=>'Property', maxOccur=>'unbounded', minOccur=>0),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
201 AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
202 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
203 Property->new(name => 'name')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
204 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
205 ComplexType->new(type => 'SimpleType', nativeType => 'IMPL::DOM::Schema::SimpleType')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
206 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
207 Node->new(name => 'Property', type=>'Property', maxOccur=>'unbounded', minOccur=>0),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
208 AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
209 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
210 Property->new(name => 'type'),
232
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
211 Property->new(name => 'inflator', optional => 1, inflator => 'IMPL::DOM::Schema::InflateFactory')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
212 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
213 ComplexType->new(type => 'SimpleNode', nativeType => 'IMPL::DOM::Schema::SimpleNode')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
214 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
215 Node->new(name => 'Property', type=>'Property', maxOccur=>'unbounded', minOccur=>0),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
216 AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
217 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
218 Property->new(name => 'name'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
219 Property->new(name => 'inflator', optional => 1, inflator => 'IMPL::DOM::Schema::InflateFactory')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
220 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
221 ComplexType->new(type => 'Validator', nativeType => 'IMPL::DOM::Schema::Validator')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
222 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
223 AnyNode->new(maxOccur => 'unbounded', minOccur => 0)
100
df6b4f054957 Schema in progress
wizard
parents: 98
diff changeset
224 )
102
cf3b6ef2be22 Schema beta version
wizard
parents: 101
diff changeset
225 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
226 ComplexType->new(type => 'Property', nativeType => 'IMPL::DOM::Schema::Property' )->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
227 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
228 AnyNode->new(maxOccur => 'unbounded', minOccur => 0)
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
229 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
230 Property->new(name => 'name'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
231 Property->new(name => 'inflator', optional => 1, inflator => 'IMPL::DOM::Schema::InflateFactory')
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents: 103
diff changeset
232 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
233 SimpleType->new(type => 'Node', nativeType => 'IMPL::DOM::Schema::Node')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
234 Property->new(name => 'name'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
235 Property->new(name => 'type')
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents: 103
diff changeset
236 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
237 SimpleType->new(type => 'AnyNode', nativeType => 'IMPL::DOM::Schema::AnyNode')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
238 );
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
239
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
240 $schema->Process;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
241
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
242 return $schema;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
243 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
244
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
245 1;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
246
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
247 __END__
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
248
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
249 =pod
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
250
98
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
251 =head1 NAME
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
252
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
253 C<IMPL::DOM::Schema> - Схема документа.
98
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
254
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
255 =head1 DESCRIPTION
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
256
166
4267a2ac3d46 Added Class::Template,
wizard
parents: 152
diff changeset
257 C<use parent qw(IMPL::DOM::Document)>
98
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
258
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
259 DOM схема - это документ, состоящий из определенных узлов, описывающая структуру
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
260 других документов.
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
261
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
262 =head1 METHODS
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
263
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
264 =over
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
265
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
266 =item C<< $obj->Process() >>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
267
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
268 Обновляет таблицу типов из содержимого.
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
269
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
270 =item C<< $obj->ResolveType($typeName) >>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
271
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
272 Возвращает схему типа c именем C<$typeName>.
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
273
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
274 =back
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
275
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
276 =head1 META SCHEMA
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
277
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
278 Схема для описания схемы, эта схема используется для постороения других схем, выглядит приблизительно так
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
279
98
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
280 =begin code xml
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
281
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
282 <schema>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
283 <ComplexNode name="schema">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
284 <NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
285 <Node minOcuur="0" maxOccur="unbounded" name="ComplexNode" type="ComplexNode"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
286 <Node minOcuur="0" maxOccur="unbounded" name="SimpleNode" type="SimpleNode"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
287 <Node minOcuur="0" maxOccur="unbounded" name="ComplexType" type="ComplexType"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
288 <Node minOcuur="0" maxOccur="unbounded" name="SimpleType" type="SimpleType"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
289 <SimpleNode minOcuur="0" maxOccur="unbounded" name="Node"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
290 <SimpleNode minOcuur="0" maxOccur="unbounded" name="Include"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
291 </NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
292 </ComplexNode>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
293
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
294 <ComplexType type="NodeContainer">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
295 <NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
296 <Node minOcuur="0" maxOccur="unbounded" name="ComplexNode" type="ComplexNode"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
297 <Node minOcuur="0" maxOccur="unbounded" name="SimpleNode" type="SimpleNode"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
298 <SimpleNode minOcuur="0" maxOccur="unbounded" name="Node"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
299 </NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
300 </ComplexType>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
301
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
302 <ComplexType type="ComplexType">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
303 <NodeList>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
304 <Node name="NodeSet" type="NodeContainer" minOcuur=0/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
305 <Node name="NodeList" type="NodeContainer" minOccur=0/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
306 <AnyNode minOccur="0" maxOccur="unbounded" type="Validator"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
307 </NodeList>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
308 </ComplexType>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
309
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
310 <ComplexType type="ComplexNode">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
311 <NodeList>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
312 <Node name="NodeSet" type="NodeContainer" minOcuur=0/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
313 <Node name="NodeList" type="NodeContainer" minOccur=0/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
314 <AnyNode minOccur="0" maxOccur="unbounded" type="Validator"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
315 </NodeList>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
316 </ComplexType>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
317
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
318 <ComplexType type="SimpleNode">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
319 <NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
320 <AnyNode minOccur=0 maxOccur="unbounded" type="Validator"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
321 </NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
322 </ComplexType>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
323
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
324 <ComplexType type="SimpleType">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
325 <NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
326 <AnyNode minOccur=0 maxOccur="unbounded" type="Validator"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
327 </NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
328 </ComplexType>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
329
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
330 <ComplexType type="Validator">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
331 <NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
332 <AnyNode minOccur=0 maxOccur="unbounded"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
333 </NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
334 </ComplexType>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
335
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
336 </schema>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
337
98
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
338 =end code xml
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
339
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
340 =cut