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