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 ); 
+   
+