Mercurial > pub > Impl
diff Lib/IMPL/DOM/Schema/ValidationError.pm @ 125:a4b0a819bbda
Small fixes in IMPL::DOM::Schema
author | wizard |
---|---|
date | Thu, 10 Jun 2010 17:43:51 +0400 |
parents | 196bf443b5e1 |
children | 76515373dac0 |
line wrap: on
line diff
--- a/Lib/IMPL/DOM/Schema/ValidationError.pm Thu Jun 10 02:45:59 2010 +0400 +++ b/Lib/IMPL/DOM/Schema/ValidationError.pm Thu Jun 10 17:43:51 2010 +0400 @@ -25,7 +25,13 @@ $this->{$Node} = $args{Node}; $this->{$Schema} = $args{Schema} if $args{Schema}; $this->{$Source} = $args{Source} if $args{Source}; - $this->{$Parent} = $args{Parent} if $args{Parent}; + if ($args{Parent}) { + $this->{$Parent} = $args{Parent}; + } elsif ($args{Node}) { + $this->{$Parent} = $args{Node}->parentNode; + } else { + die new IMPL::InvalidArgumentException("A 'Parent' or a 'Node' parameter is required"); + } $this->{$Message} = FormatMessage(delete $args{Message}, \%args) if $args{Message}; } @@ -35,3 +41,81 @@ } 1; + +__END__ + +=pod + +=head1 NAME + +C<IMPL::DOM::Schema::ValidationError> - Описывает ошибку в документе. + +=head1 DESCRIPTION + +При проверке документа на ошибки формирования возвращается массив с объектами +C<IMPL::DOM::Schema::ValidationError>, каждая из которых описывает одну ошибку +в документе. + +С помощью данного объекта осущетсвляется привязка элемента схемы, элемента документа +и сообщения о причине возникновения ошибки. + +=head1 MEMBERS + +=over +=item C<[get] Node> + + +Узел в документе который привел к ошибке. Как правило это либо простые узлы, либо +узлы, которые не могут присутствоать в данном месте по схеме. + +Данное свойство может быть C<undef>. + +=item C<[get] Parent> + +Родительский узел в котором произошла ошибка. Используется в случаях, когда C<Node> +не указан, например, если по схеме должен существовать дочерний узел с определенным +именем, а в реальном документе его нет. + +Также это свойство может использоваться при формировании сообщения. + +=item C<[get] Schema> + +Схема для C<Node> или узла который должен присутсвовать если C<Node> не задан. + +=item C<[get] Source> + +Схема, проверка которой привела к возникновению ошибки. Поскольку схемы могут +использовать ссылки, то данное свойство нужно для получения схемы узла, а не +схемы его типа. + +Тоесть проверка схемы узла C<IMPL::DOM::Schema::Node> приводит к проверке схемы +типа, например, C<IMPL::DOM::Schema::ComplexType>, а свойство C<Source> будет +указывать именно на C<IMPL::DOM::Schema::Node>. + +=item C<[get] Message> + +Возвращает форматированное сообщение об ошибке. + +=item C<toString()> + +Преобразует ошибку к строке, возвращает значение свойства C<Message> + +=back + +=head1 REMARKS + +=begin code + +my $doc = IMPL::DOM::XMLReader->LoadDocument('data.xml'); +my $schema = IMPL::DOM::Schema->LoadSchema('schema.xml'); + +my @errors = $schema->Validate($doc); + +my $node = $doc->selectSingleNode('user','name'); + +# Получаем все ошибки относящиеся к данному узлу +my @nodeErrors = grep { ($_->Node || $_->Parent) == $node } @errors; + +=end code + +=cut