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