Mercurial > pub > Impl
annotate Lib/IMPL/DOM/Schema.pm @ 18:818c74b038ae
DOM Schema + tests
author | Sergey |
---|---|
date | Thu, 10 Sep 2009 17:42:47 +0400 |
parents | 7f88e01b58f8 |
children | 1ca530e5c9c5 |
rev | line source |
---|---|
15 | 1 package IMPL::DOM::Schema; |
2 use strict; | |
3 use warnings; | |
4 | |
5 use base qw(IMPL::DOM::Document); | |
6 use IMPL::Class::Property; | |
7 use IMPL::Class::Property::Direct; | |
8 | |
9 __PACKAGE__->PassThroughArgs; | |
10 | |
11 BEGIN { | |
12 private _direct property _TypesMap => prop_all; | |
13 } | |
14 | |
16
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
15 sub ResoveType { |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
16 $_[0]->{$_TypesMap}->{$_[1]}; |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
17 } |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
18 |
18 | 19 sub Process { |
20 my ($this) = @_; | |
21 | |
22 $this->{$_TypesMap} = { map { $_->type, $_ } grep {$_->isa('IMPL::DOM::Schema::Type')} @{$this->childNodes} }; | |
23 } | |
24 | |
16
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
25 sub MetaSchema { |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
26 my $schema = new IMPL::DOM::Schema(nodeName => 'schema'); |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
27 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
28 $schema->appendRange( |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
29 IMPL::DOM::Schema::ComplexNode->new(nodeName => 'schema')->appendRange( |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
30 IMPL::DOM::Schema::NodeSet->new()->appendRange( |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
31 IMPL::DOM::Schema::Node->new(nodeName => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'), |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
32 IMPL::DOM::Schema::Node->new(nodeName => 'ComplexType', type => 'ComplexType', minOccur => 0, maxOccur=>'unbounded'), |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
33 IMPL::DOM::Schema::Node->new(nodeName => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'), |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
34 IMPL::DOM::Schema::Node->new(nodeName => 'SimpleType', type => 'SimpleType', minOccur => 0, maxOccur=>'unbounded'), |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
35 IMPL::DOM::Schema::SimpleNode->new(nodeName => 'Node', minOccur => 0, maxOccur=>'unbounded'), |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
36 IMPL::DOM::Schema::SimpleNode->new(nodeName => 'Include', minOccur => 0, maxOccur=>'unbounded') |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
37 ) |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
38 ), |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
39 IMPL::DOM::Schema::ComplexType->new(type => 'NodeSet', native => 'IMPL::DOM::Schema::NodeSet')->appendRange( |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
40 IMPL::DOM::Schema::NodeSet->new()->appendRange( |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
41 IMPL::DOM::Schema::Node->new(nodeName => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'), |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
42 IMPL::DOM::Schema::Node->new(nodeName => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'), |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
43 IMPL::DOM::Schema::SimpleNode->new(nodeName => 'Node', minOccur => 0, maxOccur=>'unbounded'), |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
44 ) |
17 | 45 ), |
46 IMPL::DOM::Schema::ComplexType->new(type => 'NodeList', native => 'IMPL::DOM::Schema::NodeList')->appendRange( | |
47 IMPL::DOM::Schema::NodeSet->new()->appendRange( | |
48 IMPL::DOM::Schema::Node->new(nodeName => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'), | |
49 IMPL::DOM::Schema::Node->new(nodeName => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'), | |
50 IMPL::DOM::Schema::SimpleNode->new(nodeName => 'Node', minOccur => 0, maxOccur=>'unbounded'), | |
51 ) | |
52 ), | |
53 IMPL::DOM::Schema::ComplexType->new(type => 'ComplexType', native => 'IMPL::DOM::Schema::ComplexType')->appendRange( | |
54 IMPL::DOM::Schema::NodeList->new()->appendRange( | |
55 IMPL::DOM::Schema::Node->new(nodeName => 'NodeSet', minOccur => 0, type => 'NodeSet'), | |
56 IMPL::DOM::Schema::Node->new(nodeName => 'NodeList', minOccur => 0, type => 'NodeSet'), | |
57 IMPL::DOM::Schema::SimpleNode->new(nodeName => 'Node', minOccur => 0, maxOccur => 'unbounded') | |
58 ) | |
59 ), | |
60 IMPL::DOM::Schema::ComplexType->new(type => 'ComplexNode', native => 'IMPL::DOM::Schema::ComplexNode')->appendRange( | |
61 IMPL::DOM::Schema::NodeList->new()->appendRange( | |
62 IMPL::DOM::Schema::Node->new(nodeName => 'NodeSet', minOccur => 0, type => 'NodeSet'), | |
63 IMPL::DOM::Schema::Node->new(nodeName => 'NodeList', minOccur => 0, type => 'NodeSet'), | |
64 IMPL::DOM::Schema::SimpleNode->new(nodeName => 'Node', minOccur => 0, maxOccur => 'unbounded') | |
65 ) | |
66 ), | |
67 IMPL::DOM::Schema::ComplexType->new(type => 'SimpleType', native => 'IMPL::DOM::Schema::SimpleType')->appendRange( | |
68 IMPL::DOM::Schema::NodeSet->new()->appendRange( | |
69 IMPL::DOM::Schema::AnyNode(maxOccur => 'unbounded', minOccur => 0) | |
70 ) | |
71 ), | |
72 IMPL::DOM::Schema::ComplexType->new(type => 'SimpleNode', native => 'IMPL::DOM::Schema::SimpleNode')->appendRange( | |
73 IMPL::DOM::Schema::NodeSet->new()->appendRange( | |
74 IMPL::DOM::Schema::AnyNode(maxOccur => 'unbounded', minOccur => 0) | |
75 ) | |
16
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
76 ) |
17 | 77 ); |
78 | |
18 | 79 $schema->Process; |
80 | |
17 | 81 return $schema; |
16
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
82 } |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
83 |
15 | 84 1; |
16
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
85 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
86 __END__ |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
87 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
88 =pod |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
89 |
18 | 90 =head1 DESCRIPTION |
91 | |
92 . C<IMPL::DOM::Document> | |
93 | |
94 =head1 METHODS | |
95 | |
96 =over | |
97 | |
98 =item C<< $obj->Process() >> | |
99 | |
100 . | |
101 | |
102 =item C<< $obj->ResolveType($typeName) >> | |
103 | |
104 c C<$typeName>. | |
105 | |
106 =back | |
107 | |
16
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
108 =head1 META SCHEMA |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
109 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
110 , |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
111 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
112 <schema> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
113 <ComplexNode nodeName="schema"> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
114 <NodeSet> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
115 <Node minOcuur="0" maxOccur="unbounded" nodeName="ComplexNode" type="ComplexNode"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
116 <Node minOcuur="0" maxOccur="unbounded" nodeName="SimpleNode" type="SimpleNode"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
117 <Node minOcuur="0" maxOccur="unbounded" nodeName="ComplexType" type="ComplexType"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
118 <Node minOcuur="0" maxOccur="unbounded" nodeName="SimpleType" type="SimpleType"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
119 <SimpleNode minOcuur="0" maxOccur="unbounded" nodeName="Node"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
120 <SimpleNode minOcuur="0" maxOccur="unbounded" nodeName="Include"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
121 </NodeSet> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
122 </ComplexNode> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
123 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
124 <ComplexType type="NodeContainer"> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
125 <NodeSet> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
126 <Node minOcuur="0" maxOccur="unbounded" nodeName="ComplexNode" type="ComplexNode"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
127 <Node minOcuur="0" maxOccur="unbounded" nodeName="SimpleNode" type="SimpleNode"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
128 <SimpleNode minOcuur="0" maxOccur="unbounded" nodeName="Node"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
129 </NodeSet> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
130 </ComplexType> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
131 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
132 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
133 <ComplexType type="ComplexType"> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
134 <NodeList> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
135 <Node nodeName="NodeSet" type="NodeContainer" minOcuur=0/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
136 <Node nodeName="NodeList" type="NodeContainer" minOccur=0/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
137 <AnyNode minOccur="0" maxOccur="unbounded"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
138 </NodeList> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
139 </ComplexType> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
140 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
141 <ComplexType type="ComplexNode"> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
142 <NodeList> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
143 <Node nodeName="NodeSet" type="NodeContainer" minOcuur=0/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
144 <Node nodeName="NodeList" type="NodeContainer" minOccur=0/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
145 <AnyNode minOccur="0" maxOccur="unbounded"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
146 </NodeList> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
147 </ComplexType> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
148 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
149 <ComplexType type="SimpleNode"> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
150 <NodeSet> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
151 <AnyNode minOccur=0 maxOccur="unbounded"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
152 </NodeSet> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
153 </ComplexType> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
154 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
155 <ComplexType type="SimpleType"> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
156 <NodeSet> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
157 <AnyNode minOccur=0 maxOccur="unbounded"/> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
158 </NodeSet> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
159 </ComplexType> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
160 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
161 </schema> |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
162 |
75d55f4ee263
Окончательная концепция описания схем и построения DOM документов
Sergey
parents:
15
diff
changeset
|
163 =cut |