Mercurial > pub > Impl
changeset 215:77a9934a44af
sync, migrating to XML::Compile
author | cin |
---|---|
date | Sun, 19 Aug 2012 22:27:43 +0400 |
parents | 4683002758aa |
children | bfce101e0a5a |
files | Lib/IMPL/Web/RestContract.pm _test/Resources/person.xsd _test/Resources/person_info.xml _test/temp.pl |
diffstat | 4 files changed, 59 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- 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<ResourceContract>, C<OperationContract> +которые описываю отображение самих ресурсов и операций над ресурсами в предметную +область. + +C<ResourceContract> представляет собой описание того, какой ресурс и с какими +параметрами должен быть создан. Например, может быть создан ресурс публикующий +методы родительского ресурса, или же ресурс может слжить контроллером для +работы с объектами предметной области. + +C<OperationContract> описывает связь между методом объекта предметной области и +операцией возможной над ресурсом. Операция сводится к преобразованию запроса в +аргументы метода, затем вызову метода и преобразованию результата в ответ на запрос. + +Ответ на запрос может быть как сформирован полностью в виде C<HTTP> ответа, так и +в виде объекта, который будет в дальнейшем обработан нижележащими обработчиками +приложения. + + + =cut \ No newline at end of file
--- /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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema + targetNamespace="http://implab.org/person/" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + xmlns:tns="http://implab.org/person/" + elementFormDefault="qualified" +> + <xs:complexType name="personInfo"> + <xs:sequence> + <xs:element name="firstName" type="xs:string" /> + <xs:element name="lastName" type="xs:string" /> + <xs:element name="address" type="tns:addressType" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + <xs:attribute name="code" use="optional" type="xs:string"/> + </xs:complexType> + + <xs:element name="personInfo" type="tns:personInfo"/> + + <xs:complexType name="addressType"> + <xs:sequence> + <xs:element name="street" type="xs:string" /> + <xs:element name="line" type="xs:string" /> + </xs:sequence> + </xs:complexType> +</xs:schema> \ No newline at end of file
--- 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 @@ -<?xml version="1.0" encoding="UTF-8"?> -<personInfo> +<?xml version="1.0" encoding="UTF-8" ?> +<personInfo code="1552-34af" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://implab.org/person/" xsi:schemaLocation="http://implab.org/person/ person.xsd"> <firstName>Norman</firstName> <lastName>Freeman</lastName> <address>
--- 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 ); + +