# HG changeset patch # User Sergey # Date 1252416547 -14400 # Node ID 75d55f4ee263f271e461d1e48d5ccc058dadc3a8 # Parent 16795016e70bf16a8cf59e04922e84ad4f2c7226 Окончательная концепция описания схем и построения DOM документов diff -r 16795016e70b -r 75d55f4ee263 Lib/IMPL/DOM/Navigator/Builder.pm --- a/Lib/IMPL/DOM/Navigator/Builder.pm Mon Sep 07 17:30:55 2009 +0400 +++ b/Lib/IMPL/DOM/Navigator/Builder.pm Tue Sep 08 17:29:07 2009 +0400 @@ -92,7 +92,7 @@ =back - C. + C. .. C<< >> C<< Container->new(nodeName => 'Box') >>. diff -r 16795016e70b -r 75d55f4ee263 Lib/IMPL/DOM/Node.pm --- a/Lib/IMPL/DOM/Node.pm Mon Sep 07 17:30:55 2009 +0400 +++ b/Lib/IMPL/DOM/Node.pm Tue Sep 08 17:29:07 2009 +0400 @@ -41,7 +41,7 @@ } sub appendNode { - my ($this,$node,$pos) = @_; + my ($this,$node) = @_; die new IMPL::InvalidOperationException("You can't insert the node to itselft") if $this == $node; @@ -54,6 +54,21 @@ return $node; } +sub appendRange { + my ($this,@range) = @_; + + die new IMPL::InvalidOperationException("You can't insert the node to itselft") if grep $_ == $this, @range; + + foreach my $node (@range) { + $node->{$parentNode}->removeNode($node) if ($node->{$parentNode}); + $node->_setParent( $this ); + } + + $this->childNodes->Append(@range); + + return $this; +} + sub _getChildNodes { my ($this) = @_; diff -r 16795016e70b -r 75d55f4ee263 Lib/IMPL/DOM/Schema.pm --- a/Lib/IMPL/DOM/Schema.pm Mon Sep 07 17:30:55 2009 +0400 +++ b/Lib/IMPL/DOM/Schema.pm Tue Sep 08 17:29:07 2009 +0400 @@ -12,4 +12,93 @@ private _direct property _TypesMap => prop_all; } +sub ResoveType { + $_[0]->{$_TypesMap}->{$_[1]}; +} + +sub MetaSchema { + my $schema = new IMPL::DOM::Schema(nodeName => 'schema'); + + $schema->appendRange( + IMPL::DOM::Schema::ComplexNode->new(nodeName => 'schema')->appendRange( + IMPL::DOM::Schema::NodeSet->new()->appendRange( + IMPL::DOM::Schema::Node->new(nodeName => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'), + IMPL::DOM::Schema::Node->new(nodeName => 'ComplexType', type => 'ComplexType', minOccur => 0, maxOccur=>'unbounded'), + IMPL::DOM::Schema::Node->new(nodeName => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'), + IMPL::DOM::Schema::Node->new(nodeName => 'SimpleType', type => 'SimpleType', minOccur => 0, maxOccur=>'unbounded'), + IMPL::DOM::Schema::SimpleNode->new(nodeName => 'Node', minOccur => 0, maxOccur=>'unbounded'), + IMPL::DOM::Schema::SimpleNode->new(nodeName => 'Include', minOccur => 0, maxOccur=>'unbounded') + ) + ), + IMPL::DOM::Schema::ComplexType->new(type => 'NodeSet', native => 'IMPL::DOM::Schema::NodeSet')->appendRange( + IMPL::DOM::Schema::NodeSet->new()->appendRange( + IMPL::DOM::Schema::Node->new(nodeName => 'ComplexNode', type => 'ComplexNode', minOccur => 0, maxOccur=>'unbounded'), + IMPL::DOM::Schema::Node->new(nodeName => 'SimpleNode', type => 'SimpleNode', minOccur => 0, maxOccur=>'unbounded'), + IMPL::DOM::Schema::SimpleNode->new(nodeName => 'Node', minOccur => 0, maxOccur=>'unbounded'), + ) + ) + ) +} + 1; + +__END__ + +=pod + +=head1 META SCHEMA + + , + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +=cut