Mercurial > pub > Impl
view Lib/IMPL/DOM/Schema/ValidationError.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 | 2904da230022 |
children | 6b6d4b2275a1 |
line wrap: on
line source
package IMPL::DOM::Schema::ValidationError; use strict; use warnings; use overload '""' => \&toString, 'fallback' => 1; use parent qw(IMPL::Object); use IMPL::Class::Property; use IMPL::Class::Property::Direct; use IMPL::Resources::Format qw(FormatMessage); BEGIN { public _direct property node => prop_get; # target document node (if exists) public _direct property schema => prop_get; # a schema for the target node (if exists) public _direct property source => prop_get; # a schema which triggered this error (can be equal to the Schema) public _direct property parent => prop_get; public _direct property message => prop_get; # displayable message } sub CTOR { my ($this,%args) = @_; $this->{$node} = $args{node}; $this->{$schema} = $args{schema} if $args{schema}; $this->{$source} = $args{source} if $args{source}; 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}; } sub toString { (my $this) = @_; return $this->message; } 1; __END__ =pod =head1 NAME C<IMPL::DOM::Schema::ValidationError> - Описывает ошибку в документе. =head1 DESCRIPTION При проверке документа на ошибки формирования возвращается массив с объектами C<IMPL::DOM::Schema::ValidationError>, каждая из которых описывает одну ошибку в документе. С помощью данного объекта осущетсвляется привязка элемента схемы, элемента документа и сообщения о причине возникновения ошибки. Часть ошибок, таких как проверка содержимого на регулярные выражения, привязаны непосредственно к элементу. Но есть ошибки которые привязываются к родительскому контейнеру, например отсутсвие обязательного элемента. В таком случае ошибка содержит свойство C<parent> и по свойству C<source> можно определить элемент (например его имя), к которому относится ошибка. =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