Mercurial > pub > Impl
annotate Lib/IMPL/DOM/Schema/ValidationError.pm @ 282:68d905f8dc43
*IMPL::SQL fixed warnings
| author | cin |
|---|---|
| date | Tue, 12 Feb 2013 01:24:36 +0400 |
| parents | 4ddb27ff4a0b |
| children | 2f16f13b000c |
| rev | line source |
|---|---|
| 49 | 1 package IMPL::DOM::Schema::ValidationError; |
| 2 use strict; | |
| 3 use warnings; | |
| 4 | |
|
104
196bf443b5e1
DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
102
diff
changeset
|
5 use overload |
|
196bf443b5e1
DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
102
diff
changeset
|
6 '""' => \&toString, |
|
196bf443b5e1
DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
102
diff
changeset
|
7 'fallback' => 1; |
|
196bf443b5e1
DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
102
diff
changeset
|
8 |
| 165 | 9 use parent qw(IMPL::Object); |
| 49 | 10 use IMPL::Class::Property; |
| 11 use IMPL::Resources::Format qw(FormatMessage); | |
| 12 | |
| 13 BEGIN { | |
| 236 | 14 public _direct property node => prop_get; # target document node (if exists) |
| 15 public _direct property schema => prop_get; # a schema for the target node (if exists) | |
| 16 public _direct property source => prop_get; # a schema which triggered this error (can be equal to the Schema) | |
| 17 public _direct property parent => prop_get; | |
| 18 public _direct property message => prop_get; # displayable message | |
| 49 | 19 } |
| 20 | |
| 21 sub CTOR { | |
| 22 my ($this,%args) = @_; | |
| 23 | |
| 236 | 24 $this->{$node} = $args{node}; |
| 25 $this->{$schema} = $args{schema} if $args{schema}; | |
| 26 $this->{$source} = $args{source} if $args{source}; | |
| 27 if ($args{parent}) { | |
| 28 $this->{$parent} = $args{parent}; | |
| 29 } elsif ($args{node}) { | |
| 30 $this->{$parent} = $args{node}->parentNode; | |
| 125 | 31 } else { |
| 236 | 32 die new IMPL::InvalidArgumentException("A 'parent' or a 'node' parameter is required"); |
| 125 | 33 } |
| 236 | 34 $this->{$message} = FormatMessage(delete $args{message}, \%args) if $args{message}; |
| 49 | 35 } |
| 36 | |
|
104
196bf443b5e1
DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
102
diff
changeset
|
37 sub toString { |
| 194 | 38 (my $this) = @_; |
| 236 | 39 return $this->message; |
|
104
196bf443b5e1
DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
102
diff
changeset
|
40 } |
|
196bf443b5e1
DOM::Schema RC0 inflators support, validation and some other things,
wizard
parents:
102
diff
changeset
|
41 |
| 49 | 42 1; |
| 125 | 43 |
| 44 __END__ | |
| 45 | |
| 46 =pod | |
| 47 | |
| 48 =head1 NAME | |
| 49 | |
| 180 | 50 C<IMPL::DOM::Schema::ValidationError> - Описывает ошибку в документе. |
| 125 | 51 |
| 52 =head1 DESCRIPTION | |
| 53 | |
| 180 | 54 При проверке документа на ошибки формирования возвращается массив с объектами |
| 55 C<IMPL::DOM::Schema::ValidationError>, каждая из которых описывает одну ошибку | |
| 56 в документе. | |
| 125 | 57 |
| 180 | 58 С помощью данного объекта осущетсвляется привязка элемента схемы, элемента документа |
| 59 и сообщения о причине возникновения ошибки. | |
| 125 | 60 |
| 236 | 61 Часть ошибок, таких как проверка содержимого на регулярные выражения, привязаны |
| 62 непосредственно к элементу. Но есть ошибки которые привязываются к родительскому | |
| 63 контейнеру, например отсутсвие обязательного элемента. В таком случае ошибка | |
| 64 содержит свойство C<parent> и по свойству C<source> можно определить элемент | |
| 65 (например его имя), к которому относится ошибка. | |
| 66 | |
| 125 | 67 =head1 MEMBERS |
| 68 | |
| 69 =over | |
| 230 | 70 |
| 265 | 71 =item C<[get] node> |
| 125 | 72 |
| 180 | 73 Узел в документе который привел к ошибке. Как правило это либо простые узлы, либо |
| 74 узлы, которые не могут присутствоать в данном месте по схеме. | |
| 125 | 75 |
| 180 | 76 Данное свойство может быть C<undef>. |
| 125 | 77 |
| 265 | 78 =item C<[get] parent> |
| 125 | 79 |
| 265 | 80 Родительский узел в котором произошла ошибка. Используется в случаях, когда C<node> |
| 180 | 81 не указан, например, если по схеме должен существовать дочерний узел с определенным |
| 82 именем, а в реальном документе его нет. | |
| 125 | 83 |
| 180 | 84 Также это свойство может использоваться при формировании сообщения. |
| 125 | 85 |
| 265 | 86 =item C<[get] schema> |
| 125 | 87 |
| 180 | 88 Схема для C<Node> или узла который должен присутсвовать если C<Node> не задан. |
| 125 | 89 |
| 265 | 90 =item C<[get] source> |
| 125 | 91 |
| 180 | 92 Схема, проверка которой привела к возникновению ошибки. Поскольку схемы могут |
| 93 использовать ссылки, то данное свойство нужно для получения схемы узла, а не | |
| 94 схемы его типа. | |
| 125 | 95 |
| 180 | 96 Тоесть проверка схемы узла C<IMPL::DOM::Schema::Node> приводит к проверке схемы |
| 97 типа, например, C<IMPL::DOM::Schema::ComplexType>, а свойство C<Source> будет | |
| 98 указывать именно на C<IMPL::DOM::Schema::Node>. | |
| 125 | 99 |
| 265 | 100 =item C<[get] message> |
| 125 | 101 |
| 180 | 102 Возвращает форматированное сообщение об ошибке. |
| 125 | 103 |
| 104 =item C<toString()> | |
| 105 | |
| 180 | 106 Преобразует ошибку к строке, возвращает значение свойства C<Message> |
| 125 | 107 |
| 108 =back | |
| 109 | |
| 110 =head1 REMARKS | |
| 111 | |
| 112 =begin code | |
| 113 | |
| 114 my $doc = IMPL::DOM::XMLReader->LoadDocument('data.xml'); | |
| 115 my $schema = IMPL::DOM::Schema->LoadSchema('schema.xml'); | |
| 116 | |
| 117 my @errors = $schema->Validate($doc); | |
| 118 | |
| 119 my $node = $doc->selectSingleNode('user','name'); | |
| 120 | |
| 180 | 121 # Получаем все ошибки относящиеся к данному узлу |
| 265 | 122 my @nodeErrors = grep { ($_->node || $_->parent) == $node } @errors; |
| 125 | 123 |
| 124 =end code | |
| 125 | |
| 126 =cut |
