Mercurial > pub > Impl
comparison lib/IMPL/DOM/Schema/ValidationError.pm @ 407:c6e90e02dd17 ref20150831
renamed Lib->lib
author | cin |
---|---|
date | Fri, 04 Sep 2015 19:40:23 +0300 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
406:f23fcb19d3c1 | 407:c6e90e02dd17 |
---|---|
1 package IMPL::DOM::Schema::ValidationError; | |
2 use strict; | |
3 use warnings; | |
4 | |
5 use overload | |
6 '""' => \&toString, | |
7 'fallback' => 1; | |
8 | |
9 use IMPL::lang qw(is); | |
10 use IMPL::Const qw(:prop); | |
11 use IMPL::declare { | |
12 require => { | |
13 Label => '-IMPL::DOM::Schema::Label' | |
14 }, | |
15 base => [ | |
16 'IMPL::Object' => undef | |
17 ], | |
18 props => [ | |
19 node => PROP_RO | PROP_DIRECT, | |
20 schemaNode => PROP_RO | PROP_DIRECT, | |
21 schemaType => PROP_RO | PROP_DIRECT, | |
22 parent => PROP_RO | PROP_DIRECT, | |
23 message => PROP_RO | PROP_DIRECT | |
24 ] | |
25 }; | |
26 use IMPL::Resources::Format qw(FormatMessage); | |
27 | |
28 sub CTOR { | |
29 my ($this,%args) = @_; | |
30 | |
31 $this->{$node} = $args{node}; | |
32 $this->{$schemaNode} = $args{schemaNode} if $args{schemaNode}; | |
33 $this->{$schemaType} = $args{schemaType} if $args{schemaType}; | |
34 | |
35 if ($args{parent}) { | |
36 $this->{$parent} = $args{parent}; | |
37 } elsif ($args{node}) { | |
38 $this->{$parent} = $args{node}->parentNode; | |
39 } else { | |
40 die new IMPL::InvalidArgumentException("A 'parent' or a 'node' parameter is required"); | |
41 } | |
42 | |
43 if ($args{message}) { | |
44 $this->{$message} = is($args{message},Label) ? $args{message}->Format(\%args) : FormatMessage($args{message}, \%args) ; | |
45 } | |
46 | |
47 } | |
48 | |
49 sub toString { | |
50 (my $this) = @_; | |
51 return $this->message; | |
52 } | |
53 | |
54 1; | |
55 | |
56 __END__ | |
57 | |
58 =pod | |
59 | |
60 =head1 NAME | |
61 | |
62 C<IMPL::DOM::Schema::ValidationError> - Описывает ошибку в документе. | |
63 | |
64 =head1 DESCRIPTION | |
65 | |
66 При проверке документа на ошибки формирования возвращается массив с объектами | |
67 C<IMPL::DOM::Schema::ValidationError>, каждая из которых описывает одну ошибку | |
68 в документе. | |
69 | |
70 С помощью данного объекта осущетсвляется привязка элемента схемы, элемента документа | |
71 и сообщения о причине возникновения ошибки. | |
72 | |
73 Часть ошибок, таких как проверка содержимого на регулярные выражения, привязаны | |
74 непосредственно к элементу. Но есть ошибки которые привязываются к родительскому | |
75 контейнеру, например отсутсвие обязательного элемента. В таком случае ошибка | |
76 содержит свойство C<parent> и по свойству C<source> можно определить элемент | |
77 (например его имя), к которому относится ошибка. | |
78 | |
79 =head1 MEMBERS | |
80 | |
81 =over | |
82 | |
83 =item C<[get] node> | |
84 | |
85 Узел в документе который привел к ошибке. Как правило это либо простые узлы, либо | |
86 узлы, которые не могут присутствоать в данном месте по схеме. | |
87 | |
88 Данное свойство может быть C<undef>. | |
89 | |
90 =item C<[get] parent> | |
91 | |
92 Родительский узел в котором произошла ошибка. Используется в случаях, когда C<node> | |
93 не указан, например, если по схеме должен существовать дочерний узел с определенным | |
94 именем, а в реальном документе его нет. | |
95 | |
96 Также это свойство может использоваться при формировании сообщения. | |
97 | |
98 =item C<[get] schema> | |
99 | |
100 Схема для C<Node> или узла который должен присутсвовать если C<Node> не задан. | |
101 | |
102 =item C<[get] source> | |
103 | |
104 Схема, проверка которой привела к возникновению ошибки. Поскольку схемы могут | |
105 использовать ссылки, то данное свойство нужно для получения схемы узла, а не | |
106 схемы его типа. | |
107 | |
108 Тоесть проверка схемы узла C<IMPL::DOM::Schema::Node> приводит к проверке схемы | |
109 типа, например, C<IMPL::DOM::Schema::ComplexType>, а свойство C<Source> будет | |
110 указывать именно на C<IMPL::DOM::Schema::Node>. | |
111 | |
112 =item C<[get] message> | |
113 | |
114 Возвращает форматированное сообщение об ошибке. | |
115 | |
116 =item C<toString()> | |
117 | |
118 Преобразует ошибку к строке, возвращает значение свойства C<Message> | |
119 | |
120 =back | |
121 | |
122 =head1 REMARKS | |
123 | |
124 =begin code | |
125 | |
126 my $doc = IMPL::DOM::XMLReader->LoadDocument('data.xml'); | |
127 my $schema = IMPL::DOM::Schema->LoadSchema('schema.xml'); | |
128 | |
129 my @errors = $schema->Validate($doc); | |
130 | |
131 my $node = $doc->selectSingleNode('user','name'); | |
132 | |
133 # Получаем все ошибки относящиеся к данному узлу | |
134 my @nodeErrors = grep { ($_->node || $_->parent) == $node } @errors; | |
135 | |
136 =end code | |
137 | |
138 =cut |