Mercurial > pub > Impl
comparison Lib/IMPL/DOM/Navigator/Builder.pm @ 148:e6447ad85cb4
DOM objects now have a schema and schemaSource properties
RegExp now can launder data
Improved post to DOM transformation (multiple values a now supported)
Added new axes to navigation queries: ancestor and descendant
minor changes and bug fixes
author | wizard |
---|---|
date | Mon, 16 Aug 2010 08:26:44 +0400 |
parents | 7b14e0122b79 |
children | 76515373dac0 |
comparison
equal
deleted
inserted
replaced
147:c2aa10fbb396 | 148:e6447ad85cb4 |
---|---|
31 my ($this,$nodeName,%props) = @_; | 31 my ($this,$nodeName,%props) = @_; |
32 | 32 |
33 if (my $schemaNode = $this->{$_schemaNavi}->NavigateName($nodeName)) { | 33 if (my $schemaNode = $this->{$_schemaNavi}->NavigateName($nodeName)) { |
34 my $class = $schemaNode->can('nativeType') ? $schemaNode->nativeType || 'IMPL::DOM::Node' : 'IMPL::DOM::Node'; | 34 my $class = $schemaNode->can('nativeType') ? $schemaNode->nativeType || 'IMPL::DOM::Node' : 'IMPL::DOM::Node'; |
35 | 35 |
36 my $schemaSource = $this->{$_schemaNavi}->SourceSchemaNode; | |
37 | |
36 my @errors = $this->inflateProperties($schemaNode,\%props); | 38 my @errors = $this->inflateProperties($schemaNode,\%props); |
39 $props{schema} = $schemaNode; | |
40 $props{schemaSource} = $schemaSource; | |
37 | 41 |
38 my $node; | 42 my $node; |
39 if (! $this->{$Document}) { | 43 if (! $this->{$Document}) { |
40 $node = $this->{$Document} = $this->{$_docClass}->new(nodeName => $nodeName,%props); | 44 $node = $this->{$Document} = $this->{$_docClass}->new(nodeName => $nodeName,%props); |
41 $this->_initNavigator($node); | 45 $this->_initNavigator($node); |
49 if (@errors) { | 53 if (@errors) { |
50 $this->BuildErrors->Append( | 54 $this->BuildErrors->Append( |
51 map { | 55 map { |
52 IMPL::DOM::Schema::ValidationError->new( | 56 IMPL::DOM::Schema::ValidationError->new( |
53 Node => $node, | 57 Node => $node, |
54 Source => $this->{$_schemaNavi}->SourceSchemaNode, | 58 Source => $schemaSource, |
55 Schema => $schemaNode, | 59 Schema => $schemaNode, |
56 Message => $schemaNode->messageInflateError, | 60 Message => $schemaNode->messageInflateError, |
57 Error => $_ | 61 Error => $_ |
58 ) | 62 ) |
59 } @errors | 63 } @errors |
169 | 173 |
170 При этом по имени узла ищется его схема, после чего определяется класс для | 174 При этом по имени узла ищется его схема, после чего определяется класс для |
171 создания экземпляра и созданный узел доавляется в документ. При создании | 175 создания экземпляра и созданный узел доавляется в документ. При создании |
172 нового узла используется метод документа C<< IMPL::DOM::Document->Create >> | 176 нового узла используется метод документа C<< IMPL::DOM::Document->Create >> |
173 | 177 |
174 Свойства узла передаются при создании через параметр C<props>, но имя создаваемого | 178 Свойства узла передаются при создании через параметр C<%props>, но имя создаваемого |
175 узла НЕ может быть переопределено свойством C<nodeName>, оно будет проигнорировано. | 179 узла НЕ может быть переопределено свойством C<nodeName>, оно будет проигнорировано. |
176 | 180 |
177 =item C< Document > | 181 =item C< Document > |
178 | 182 |
179 Свойство, которое содержит документ по окончании процедурв построения. | 183 Свойство, которое содержит документ по окончании процедуры построения. |
180 | 184 |
181 =back | 185 =back |
182 | 186 |
183 =cut | 187 =cut |