comparison Lib/IMPL/DOM/Navigator/SchemaNavigator.pm @ 18:818c74b038ae

DOM Schema + tests
author Sergey
date Thu, 10 Sep 2009 17:42:47 +0400
parents
children 7f00786f8210
comparison
equal deleted inserted replaced
17:7f88e01b58f8 18:818c74b038ae
1 package IMPL::DOM::Navigator::SchemaNavigator;
2 use strict;
3 use warnings;
4
5 use base qw(IMPL::DOM::Navigator);
6 use IMPL::Class::Property;
7 use IMPL::Class::Property::Direct;
8
9 __PACKAGE__->PassThroughArgs;
10
11 BEGIN {
12 public _direct property Schema => prop_get;
13 }
14
15 sub CTOR {
16 my ($this,$schema) = @_;
17
18 $this->{$Schema} = $schema;
19
20 die new IMPL::InvalidArgumentException("A schema object is required") unless $schema->isa('IMPL::DOM::Schema');
21 }
22
23 sub Navigate {
24 my ($this,$query) = @_;
25
26 if (my ($newNode) = $this->Current->selectNodes($query)) {
27 if (ref $newNode eq 'IMPL::DOM::Schema::Node') {
28 $newNode = $this->{$Schema}->ResolveType($newNode->type) || $newNode;
29 }
30 return $this->_NavigateNode($newNode);
31 } else {
32 return undef;
33 }
34 }
35
36 1;
37 __END__
38
39 =pod
40
41 =head1 DESCRIPTION
42
43 Навигатор для схемы, отличается от стандартного тем, что переходит по ссылкам вида <Node nodeName="SomeName" type="ReferencedType"/>.
44 При этом имя узла в который перешли будет отличаться от указанного в поисковом критерии.
45
46 =cut