changeset 221:e997e6fbac0b

sync: working on resources schema
author sergey
date Fri, 24 Aug 2012 16:24:14 +0400
parents 5c82c15b25b1
children 84a6382b49c8
files _test/Resources/resources.xsd _test/Resources/sample.xml
diffstat 2 files changed, 172 insertions(+), 114 deletions(-) [+]
line wrap: on
line diff
--- a/_test/Resources/resources.xsd	Thu Aug 23 17:44:31 2012 +0400
+++ b/_test/Resources/resources.xsd	Fri Aug 24 16:24:14 2012 +0400
@@ -1,98 +1,138 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<schema targetNamespace="http://implab.org/schemas/resources" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://implab.org/schemas/resources">
-    <element name="resources">
-    	<complexType>
-    		<sequence>
-    			<element name="root" type="tns:restResource"></element>
-    			<element name="typeMap" minOccurs="0">
-    				<complexType>
-    					<sequence>
-    						<element name="item" maxOccurs="unbounded">
-    							<complexType>
-    								<complexContent>
-    									<extension
-    										base="tns:restResource">
-    										<sequence></sequence>
-    										<attribute
-    											name="type" type="string">
-    										</attribute>
-    									</extension>
-    								</complexContent>
-    							</complexType></element>
-    					</sequence>
-    				</complexType>
-    			</element>
-    		</sequence>
-    	</complexType>
-    </element>
-    
-    <!-- abstract types  -->
-    <complexType name="abstractBinding" abstract="true"/>
-    <complexType name="abstractTransformation" abstract="true" />
-    <complexType name="abstractResult" abstract="true" />
-    
-    <complexType name="restResource">
-        <sequence>
-    		<element name="get" type="tns:restOperation" minOccurs="0"/>
-    		<element name="post" type="tns:restOperation" minOccurs="0"/>
-    		<element name="put" type="tns:restOperation" minOccurs="0"/>
-    		<element name="delete" type="tns:restOperation" minOccurs="0"/>
-    		<element name="resource" type="string" maxOccurs="unbounded" minOccurs="0"/>
-    	</sequence>
-    </complexType>
-    
-    <complexType name="restOperation">
-    	<sequence>
-    		<element name="bind" type="tns:methodBinding"/>
-    		<element name="parameters" type="tns:transformation" minOccurs="0"/>
-    		<element name="result" type="tns:abstractResult" minOccurs="0"/>
-    	</sequence>
-    </complexType>
-    
-    <complexType name="methodBinding" >
-        <sequence>
-            <element name="var" type="tns:bindingVariable" minOccurs="0" maxOccurs="unbounded"/>
-        </sequence>
-        <attribute name="text" type="string" use="required" />
-    </complexType>
-    
-    <complexType name="bindingVariable">
-        <complexContent>
-            <extension base="tns:methodBinding">
-                <attribute name="name" type="string"/>
-            </extension>
-        </complexContent>
-    </complexType>
-    
-    
-    <complexType name="transformation">
-        <attribute name="class" type="string" />
-    </complexType>
-    
-    <complexType name="resourceLocator">
-        <sequence>
-            <element name="var" type="tns:bindingVariable" minOccurs="0" maxOccurs="unbounded"/>
-            <element name="template" type="string" />
-        </sequence>
-    </complexType>
-    
-    <simpleType name="redirectCodes">
-        <restriction base="string">
-            <enumeration value="moved-permanently"/>
-            <enumeration value="temporary-redirect"/>
-            <enumeration value="see-other"/>
-        </restriction>
-    </simpleType>
-    
-    <complexType name="redirectResult">
-        <complexContent>
-            <extension base="tns:abstractResult">
-                <sequence>
-                    <element name="locator" type="tns:resourceLocator" />
-                    <element name="status" type="tns:redirectCodes" minOccurs="0"/>
-                </sequence>
-            </extension>
-        </complexContent>
-    </complexType>
+<schema targetNamespace="http://implab.org/schemas/resources"
+	elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
+	xmlns:tns="http://implab.org/schemas/resources">
+	<element name="resources">
+		<complexType>
+			<sequence>
+				<element name="root" type="tns:restResource" />
+				<element name="typeMap" minOccurs="0">
+					<complexType>
+						<sequence>
+							<element name="item" maxOccurs="unbounded">
+								<complexType>
+									<complexContent>
+										<extension base="tns:restResource">
+											<sequence></sequence>
+											<attribute name="type" type="string">
+											</attribute>
+										</extension>
+									</complexContent>
+								</complexType>
+							</element>
+						</sequence>
+					</complexType>
+				</element>
+				<element name="locators" minOccurs="0">
+					<complexType>
+						<sequence>
+							<element name="locator" maxOccurs="unbounded">
+								<complexType>
+									<complexContent>
+										<extension base="tns:resourceLocator">
+											<attribute name="name" />
+										</extension>
+									</complexContent>
+								</complexType>
+							</element>
+						</sequence>
+					</complexType>
+				</element>
+			</sequence>
+		</complexType>
+		<keyref name="locator-key-ref" refer="tns:locator-key">
+			<selector xpath=".//tns:response/tns:locatorRef" />
+			<field xpath="@ref" />
+		</keyref>
+		<key name="locator-key">
+            <selector xpath="tns:locators/tns:locator" />
+            <field xpath="@name" />
+        </key>
+	</element>
+
+	<!-- abstract types -->
+	<complexType name="abstractBinding" abstract="true" />
+	<complexType name="abstractTransformation" abstract="true" />
+	<complexType name="abstractResult" abstract="true" />
+
+	<complexType name="restResource">
+		<sequence>
+			<element name="get" type="tns:restOperation" minOccurs="0" />
+			<element name="post" type="tns:restOperation" minOccurs="0" />
+			<element name="put" type="tns:restOperation" minOccurs="0" />
+			<element name="delete" type="tns:restOperation" minOccurs="0" />
+			<element name="resource" maxOccurs="unbounded"
+				minOccurs="0" >
+				<complexType>
+				    <complexContent>
+				        <extension base="tns:restResource">
+				        </extension>
+				    </complexContent>
+				</complexType>
+				</element>
+		</sequence>
+	</complexType>
+
+	<complexType name="restOperation">
+		<sequence>
+			<element name="bind" type="tns:methodBinding" />
+			<element name="parameters" type="tns:transformation"
+				minOccurs="0" />
+			<element name="response" type="tns:abstractResult" minOccurs="0" />
+		</sequence>
+	</complexType>
+
+	<complexType name="methodBinding">
+		<sequence>
+			<element name="var" type="tns:bindingVariable" minOccurs="0"
+				maxOccurs="unbounded" />
+		</sequence>
+		<attribute name="text" type="string" use="required" />
+	</complexType>
+
+	<complexType name="bindingVariable">
+		<complexContent>
+			<extension base="tns:methodBinding">
+				<attribute name="name" type="string" />
+			</extension>
+		</complexContent>
+	</complexType>
+
+
+	<complexType name="transformation">
+		<attribute name="class" type="string" />
+	</complexType>
+
+	<complexType name="resourceLocator">
+		<sequence>
+			<element name="var" type="tns:bindingVariable" minOccurs="0"
+				maxOccurs="unbounded" />
+			<element name="template" type="string" />
+		</sequence>
+	</complexType>
+
+	<simpleType name="redirectCodes">
+		<restriction base="string">
+			<enumeration value="moved-permanently" />
+			<enumeration value="temporary-redirect" />
+			<enumeration value="see-other" />
+		</restriction>
+	</simpleType>
+
+	<complexType name="redirectResult">
+		<complexContent>
+			<extension base="tns:abstractResult">
+				<choice>
+					<element name="locator" type="tns:resourceLocator" />
+					<element name="locatorRef">
+						<complexType>
+							<attribute name="ref" type="string" />
+						</complexType>
+					</element>
+					<element name="status" type="tns:redirectCodes" minOccurs="0" />
+				</choice>
+			</extension>
+		</complexContent>
+	</complexType>
 
 </schema>
\ No newline at end of file
--- a/_test/Resources/sample.xml	Thu Aug 23 17:44:31 2012 +0400
+++ b/_test/Resources/sample.xml	Fri Aug 24 16:24:14 2012 +0400
@@ -1,21 +1,39 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns="http://implab.org/schemas/resources" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://implab.org/schemas/resources resources.xsd ">
-    <root>
-        <get>
-            <bind text="model"/>
-            <result xsi:type="redirectResult">
-                <locator>
-                    <var name="id" text="model.id"/>
-                    <var name="parent" text="parent.location"/>
-                    <template>$parent/$id</template>
-                </locator>
-            </result>
-        </get>
-    </root>
-    <typeMap>
-        <item></item>
-        <item></item>
-    </typeMap>
-    <locators>
-    </locators>
+<resources xmlns="http://implab.org/schemas/resources"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://implab.org/schemas/resources resources.xsd ">
+	<root>
+		<get>
+			<bind text="model" />
+		</get>
+
+		<resource name="projects">
+		    <contract>
+		      <get>
+		          <bind text="parent.model.projects" />
+		      </get>
+		      <post>
+		          <bind text="parent.model.CreateProject($form)">
+		              <var name="form" text="request"/>
+		          </bind>
+		      </post>
+		    </contract>
+		</resource>
+	</root>
+	<typeMap>
+		<item></item>
+		<item></item>
+	</typeMap>
+	<locators>
+		<locator name="relative">
+			<var name="id" text="model.id" />
+			<var name="parent" text="parent.location" />
+			<template>$parent/$id</template>
+		</locator>
+		<locator name="projects">
+			<var name="id" text="model.id" />
+			<var name="projects" text="application.locate('projects')" />
+			<template>$projects/$id</template>
+		</locator>
+	</locators>
 </resources>
\ No newline at end of file