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