# HG changeset patch # User cin # Date 1345400863 -14400 # Node ID 77a9934a44afa27cd5fc6510606ec7a20ef7a8ac # Parent 4683002758aa46d5b7293a9992b7417e5199fd6c sync, migrating to XML::Compile diff -r 4683002758aa -r 77a9934a44af Lib/IMPL/Web/RestContract.pm --- a/Lib/IMPL/Web/RestContract.pm Mon Aug 06 17:27:47 2012 +0400 +++ b/Lib/IMPL/Web/RestContract.pm Sun Aug 19 22:27:43 2012 +0400 @@ -63,4 +63,23 @@ ресурсов. Контракт описывает дерево ресурсов начиная с корневого ресурса, и далее. +Ресурсы состоят из нескольких описаний: C, C +которые описываю отображение самих ресурсов и операций над ресурсами в предметную +область. + +C представляет собой описание того, какой ресурс и с какими +параметрами должен быть создан. Например, может быть создан ресурс публикующий +методы родительского ресурса, или же ресурс может слжить контроллером для +работы с объектами предметной области. + +C описывает связь между методом объекта предметной области и +операцией возможной над ресурсом. Операция сводится к преобразованию запроса в +аргументы метода, затем вызову метода и преобразованию результата в ответ на запрос. + +Ответ на запрос может быть как сформирован полностью в виде C ответа, так и +в виде объекта, который будет в дальнейшем обработан нижележащими обработчиками +приложения. + + + =cut \ No newline at end of file diff -r 4683002758aa -r 77a9934a44af _test/Resources/person.xsd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/_test/Resources/person.xsd Sun Aug 19 22:27:43 2012 +0400 @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -r 4683002758aa -r 77a9934a44af _test/Resources/person_info.xml --- a/_test/Resources/person_info.xml Mon Aug 06 17:27:47 2012 +0400 +++ b/_test/Resources/person_info.xml Sun Aug 19 22:27:43 2012 +0400 @@ -1,5 +1,5 @@ - - + + Norman Freeman
diff -r 4683002758aa -r 77a9934a44af _test/temp.pl --- a/_test/temp.pl Mon Aug 06 17:27:47 2012 +0400 +++ b/_test/temp.pl Sun Aug 19 22:27:43 2012 +0400 @@ -1,46 +1,24 @@ #!/usr/bin/perl use strict; +use XML::Compile::Schema; +use XML::Compile::Util qw(pack_type); +use Data::Dumper; use Time::HiRes qw(gettimeofday tv_interval); - -my $obj = {}; -my @vals = qw(a b c d e f g h i j k); -my @names = qw(one two three four five six); - -sub CreateMethod { - my ($dt) = @_; - $obj->{one} = $vals[1]; - $obj->{two} = $vals[2]; - $obj->{three} = $vals[3]; - $obj->{four} = $vals[4]; - $obj->{five} = $vals[5]; - $obj->{six} = $vals[6]; -} +my $schema = XML::Compile::Schema->new('Resources/person.xsd'); + +$schema->printIndex(); -my @pairs = map { [$names[$_],$_] } (1 .. $#names); +my $type = pack_type 'http://implab.org/person/', 'personInfo'; +my $reader = $schema->compile(READER => $type); -sub CreateMethodEval { - my ($dt) = @_; - my $i = 0; - map $obj->{$_} = $vals[$i++], @names; -} - my $t = [gettimeofday]; - - -CreateMethod($_) foreach (1..1000000); +my $obj = $reader->('Resources/person_info.xml'); -print "Build: ",tv_interval($t,[gettimeofday]),"\n"; - -$t = [gettimeofday]; +print "Parsing small Xml file: ",tv_interval($t,[gettimeofday]),"\n"; -CreateMethodEval($_) foreach (1..1000000); - -print "Eval: ",tv_interval($t,[gettimeofday]),"\n"; - -use URI::Escape; - -print uri_escape("/child///&?"), "\n"; - +print Dumper( $obj ); + +