annotate Lib/IMPL/DOM/Schema.pm @ 245:7c517134c42f

Added Unsupported media type Web exception corrected resourceLocation setting in the resource Implemented localizable resources for text messages fixed TT view scopings, INIT block in controls now sets globals correctly.
author sergey
date Mon, 29 Oct 2012 03:15:22 +0400
parents 5c82eec23bb6
children 2746a8e5a6c4
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
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
40 sub resolveType {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
41 $_[0]->{$_TypesMap}->{$_[1]};
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
42 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
43
102
cf3b6ef2be22 Schema beta version
wizard
parents: 101
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->{$baseDir} = ($args{baseDir} || '.');
102
cf3b6ef2be22 Schema beta version
wizard
parents: 101
diff changeset
48 }
cf3b6ef2be22 Schema beta version
wizard
parents: 101
diff changeset
49
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
50 sub Create {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
51 my ($this,$nodeName,$class,$refArgs) = @_;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
52
100
df6b4f054957 Schema in progress
wizard
parents: 98
diff changeset
53 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
54
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
55 if ($class->isa('IMPL::DOM::Schema::Validator')) {
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
56 $class = $validatorLoader->GetFullName($nodeName);
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
57 unless (eval {$class->can('new')}) {
232
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
58 eval {
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
59 $validatorLoader->Require($nodeName);
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
60 };
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
61 my $e = $@;
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
62 die new IMPL::Exception("Invalid validator",$class,$e) if $e;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
63 }
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
64 }
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
65
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
66 return $this->SUPER::Create($nodeName,$class,$refArgs);
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
67 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
68
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
69 sub Process {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
70 my ($this) = @_;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
71
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
72 # process instructions
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
73 $this->Include($_) foreach map $_->nodeProperty('source'), $this->selectNodes('Include');
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
74
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
75 # build types map
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
76 $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
77 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
78
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
79 sub Include {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
80 my ($this,$file) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
81
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
82 my $schema = $this->LoadSchema(File::Spec->catfile($this->baseDir, $file));
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
83
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
84 $this->appendRange( $schema->childNodes );
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
85 }
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
86
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
87 sub LoadSchema {
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
88 my ($this,$file) = @_;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
89
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
90 $file = File::Spec->rel2abs($file);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
91
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
92 my $class = ref $this || $this;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
93
232
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
94 my $reader = XMLReader->new(
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
95 Navigator => Builder->new(
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
96 $class,
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
97 $class->MetaSchema
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
98 ),
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
99 SkipWhitespace => 1
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
100 );
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
101
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
102 $reader->ParseFile($file);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
103
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
104 my $schema = $reader->Navigator->Document;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
105
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
106 my ($vol,$dir) = File::Spec->splitpath($file);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
107
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
108 $schema->baseDir($dir);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
109
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
110 my @errors = $class->MetaSchema->Validate($schema);
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
111
245
7c517134c42f Added Unsupported media type Web exception
sergey
parents: 232
diff changeset
112 die new IMPL::Exception("Schema is invalid",$file,map( $_->message, @errors ) ) if @errors;
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
113
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
114 $schema->Process;
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
115
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
116 return $schema;
101
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
117 }
d8dc6cad3f55 Schema in progress
wizard
parents: 100
diff changeset
118
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
119 sub Validate {
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
120 my ($this,$node) = @_;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
121
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
122 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
123 $schemaNode->Validate($node);
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
124 } else {
126
c8dfbbdd8005 Several bug fixes
wizard
parents: 104
diff changeset
125 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
126 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
127 }
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
128
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
129 my $schema;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
130
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
131 sub MetaSchema {
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 return $schema if $schema;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
134
232
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
135 $schema = __PACKAGE__->new();
49
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 $schema->appendRange(
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
138 ComplexNode->new(name => 'schema')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
139 NodeSet->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
140 Node->new(name => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
141 Node->new(name => 'ComplexType', type => 'ComplexType', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
142 Node->new(name => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
143 Node->new(name => 'SimpleType', type => 'SimpleType', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
144 Node->new(name => 'Node', type => 'Node', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
145 SimpleNode->new(name => 'Include', minOccur => 0, maxOccur=>'unbounded')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
146 Property->new(name => 'source')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
147 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
148 ),
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
149 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
150 ComplexType->new(type => 'NodeSet', nativeType => 'IMPL::DOM::Schema::NodeSet')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
151 NodeSet->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
152 Node->new(name => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
153 Node->new(name => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
154 Node->new(name => 'Node', type=>'Node', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
155 SwitchNode->new(minOccur => 0, maxOccur => 1)->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
156 Node->new(name => 'AnyNode', type => 'AnyNode'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
157 Node->new(name => 'SwitchNode',type => 'SwitchNode')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
158 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
159 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
160 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
161 ComplexType->new(type => 'SwitchNode', nativeType => 'IMPL::DOM::Schema::SwitchNode')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
162 NodeSet->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
163 Node->new(name => 'ComplexNode', type=>'ComplexNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
164 Node->new(name => 'SimpleNode', type=>'SimpleNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
165 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
166 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
167 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
168 ComplexType->new(type => 'NodeList', nativeType => 'IMPL::DOM::Schema::NodeList')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
169 NodeSet->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
170 Node->new(name => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
171 Node->new(name => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
172 Node->new(name => 'SwitchNode',type => 'SwitchNode', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
173 Node->new(name => 'Node', type => 'Node', minOccur => 0, maxOccur=>'unbounded'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
174 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
175 )
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
176 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
177 ComplexType->new(type => 'ComplexType', nativeType => 'IMPL::DOM::Schema::ComplexType')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
178 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
179 SwitchNode->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
180 Node->new(name => 'NodeSet', type => 'NodeSet'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
181 Node->new(name => 'NodeList',type => 'NodeList'),
49
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 Node->new(name => 'Property', type=>'Property', maxOccur=>'unbounded', minOccur=>0),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
184 AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
185 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
186 Property->new(name => 'type')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
187 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
188 ComplexType->new(type => 'ComplexNode', nativeType => 'IMPL::DOM::Schema::ComplexNode')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
189 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
190 SwitchNode->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
191 Node->new(name => 'NodeSet', type => 'NodeSet'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
192 Node->new(name => 'NodeList',type => 'NodeList'),
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 Node->new(name => 'Property', type=>'Property', maxOccur=>'unbounded', minOccur=>0),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
195 AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
196 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
197 Property->new(name => 'name')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
198 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
199 ComplexType->new(type => 'SimpleType', nativeType => 'IMPL::DOM::Schema::SimpleType')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
200 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
201 Node->new(name => 'Property', type=>'Property', maxOccur=>'unbounded', minOccur=>0),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
202 AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
203 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
204 Property->new(name => 'type'),
232
5c82eec23bb6 Fixed degradations due refactoring
sergey
parents: 230
diff changeset
205 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
206 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
207 ComplexType->new(type => 'SimpleNode', nativeType => 'IMPL::DOM::Schema::SimpleNode')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
208 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
209 Node->new(name => 'Property', type=>'Property', maxOccur=>'unbounded', minOccur=>0),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
210 AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
211 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
212 Property->new(name => 'name'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
213 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
214 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
215 ComplexType->new(type => 'Validator', nativeType => 'IMPL::DOM::Schema::Validator')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
216 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
217 AnyNode->new(maxOccur => 'unbounded', minOccur => 0)
100
df6b4f054957 Schema in progress
wizard
parents: 98
diff changeset
218 )
102
cf3b6ef2be22 Schema beta version
wizard
parents: 101
diff changeset
219 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
220 ComplexType->new(type => 'Property', nativeType => 'IMPL::DOM::Schema::Property' )->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
221 NodeList->new()->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
222 AnyNode->new(maxOccur => 'unbounded', minOccur => 0)
194
4d0e1962161c Replaced tabs with spaces
cin
parents: 180
diff changeset
223 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
224 Property->new(name => 'name'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
225 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
226 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
227 SimpleType->new(type => 'Node', nativeType => 'IMPL::DOM::Schema::Node')->appendRange(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
228 Property->new(name => 'name'),
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
229 Property->new(name => 'type')
104
196bf443b5e1 DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents: 103
diff changeset
230 ),
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 194
diff changeset
231 SimpleType->new(type => 'AnyNode', nativeType => 'IMPL::DOM::Schema::AnyNode')
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
232 );
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
233
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
234 $schema->Process;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
235
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
236 return $schema;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
237 }
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 1;
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
240
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
241 __END__
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
242
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
243 =pod
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
244
98
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
245 =head1 NAME
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
246
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
247 C<IMPL::DOM::Schema> - Схема документа.
98
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
248
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
249 =head1 DESCRIPTION
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
250
166
4267a2ac3d46 Added Class::Template,
wizard
parents: 152
diff changeset
251 C<use parent qw(IMPL::DOM::Document)>
98
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
252
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
253 DOM схема - это документ, состоящий из определенных узлов, описывающая структуру
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
254 других документов.
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
255
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
256 =head1 METHODS
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
257
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
258 =over
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
259
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
260 =item C<< $obj->Process() >>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
261
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
262 Обновляет таблицу типов из содержимого.
49
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 =item C<< $obj->ResolveType($typeName) >>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
265
180
d1676be8afcc Перекодировка в utf-8
sourcer
parents: 166
diff changeset
266 Возвращает схему типа c именем C<$typeName>.
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
267
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
268 =back
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 =head1 META SCHEMA
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 Схема для описания схемы, эта схема используется для постороения других схем, выглядит приблизительно так
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
273
98
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
274 =begin code xml
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
275
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
276 <schema>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
277 <ComplexNode name="schema">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
278 <NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
279 <Node minOcuur="0" maxOccur="unbounded" name="ComplexNode" type="ComplexNode"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
280 <Node minOcuur="0" maxOccur="unbounded" name="SimpleNode" type="SimpleNode"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
281 <Node minOcuur="0" maxOccur="unbounded" name="ComplexType" type="ComplexType"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
282 <Node minOcuur="0" maxOccur="unbounded" name="SimpleType" type="SimpleType"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
283 <SimpleNode minOcuur="0" maxOccur="unbounded" name="Node"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
284 <SimpleNode minOcuur="0" maxOccur="unbounded" name="Include"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
285 </NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
286 </ComplexNode>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
287
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
288 <ComplexType type="NodeContainer">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
289 <NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
290 <Node minOcuur="0" maxOccur="unbounded" name="ComplexNode" type="ComplexNode"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
291 <Node minOcuur="0" maxOccur="unbounded" name="SimpleNode" type="SimpleNode"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
292 <SimpleNode minOcuur="0" maxOccur="unbounded" name="Node"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
293 </NodeSet>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
294 </ComplexType>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
295
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
296 <ComplexType type="ComplexType">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
297 <NodeList>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
298 <Node name="NodeSet" type="NodeContainer" minOcuur=0/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
299 <Node name="NodeList" type="NodeContainer" minOccur=0/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
300 <AnyNode minOccur="0" maxOccur="unbounded" type="Validator"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
301 </NodeList>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
302 </ComplexType>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
303
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
304 <ComplexType type="ComplexNode">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
305 <NodeList>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
306 <Node name="NodeSet" type="NodeContainer" minOcuur=0/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
307 <Node name="NodeList" type="NodeContainer" minOccur=0/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
308 <AnyNode minOccur="0" maxOccur="unbounded" type="Validator"/>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
309 </NodeList>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
310 </ComplexType>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
311
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
312 <ComplexType type="SimpleNode">
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
313 <NodeSet>
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 </NodeSet>
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="SimpleType">
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="Validator">
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"/>
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 </schema>
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
331
98
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
332 =end code xml
00d88c5e8203 minor changes
wizard
parents: 49
diff changeset
333
49
16ada169ca75 migrating to the Eclipse IDE
wizard@linux-odin.local
parents: 37
diff changeset
334 =cut