Index: fedd/fedd_types.xsd
===================================================================
--- fedd/fedd_types.xsd	(revision 6ff0b91afedbb5c0b726a21c0c6cb3f24c66cebc)
+++ fedd/fedd_types.xsd	(revision 6ff0b91afedbb5c0b726a21c0c6cb3f24c66cebc)
@@ -0,0 +1,185 @@
+<?xml version="1.0"?>
+<xsd:schema targetNamespace="http://www.isi.edu/faber/fedd_types"
+  xmlns:tns="http://www.isi.edu/faber/fedd_types"
+  xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
+  xmlns="http://www.w3.org/2000/10/XMLSchema">
+
+  <xsd:complexType name="IDType">
+    <xsd:annotation>
+      <xsd:documentation>
+	The types of user IDs
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice>
+      <xsd:element name="uuid" type="xsd:base64Binary"/>
+      <xsd:element name="fedid" type="xsd:base64Binary"/>
+      <xsd:element name="uri" type="xsd:string"/>
+      <xsd:element name="username" type="xsd:string"/>
+      <xsd:element name="kerberosUsername" type="xsd:string"/>
+    </xsd:choice>
+  </xsd:complexType>
+
+  <xsd:complexType name="nodeType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Nodes are described in terms of their images or hardware requirements.
+	This description may be empty
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="image" type="xsd:string" minOccurs="0"
+	maxOccurs="unbounded"/>
+      <xsd:element name="hardware" type="xsd:string" minOccurs="0"
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="count" type="xsd:int" use="optional"/>
+  </xsd:complexType>
+
+  <xsd:simpleType name="kindType">
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="max"/>
+      <xsd:enumeration value="average"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:complexType name="capacityType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Capacity value and type of cut
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="rate" type="xsd:double"/>
+      <xsd:element name="kind" type="tns:kindType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="accessType">
+    <xsd:annotation>
+      <xsd:documentation>
+	The types of credentails used for remote project access
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice>
+      <xsd:element name="X509" type="xsd:base64Binary"/>
+      <xsd:element name="sshPubkey" type="xsd:base64Binary"/>
+      <xsd:element name="pgpPubkey" type="xsd:base64Binary"/>
+    </xsd:choice>
+  </xsd:complexType>
+
+  <xsd:complexType name="userType">
+    <xsd:annotation>
+      <xsd:documentation>
+	A user consists of one or both of an identifier and an access
+	credential. 
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="userID" type="tns:IDType" minOccurs="0"
+	maxOccurs="1"/>
+      <xsd:element name="access" type="tns:accessType" minOccurs="0"
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="fedAttrType">
+    <xsd:annotation>
+      <xsd:documentation>
+	A general attribute value pair for passing federation parameters and
+	preferences
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="attribute" type="xsd:string"/>
+      <xsd:element name="value" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+
+  <xsd:complexType name="resourcesType">
+    <xsd:annotation>
+      <xsd:documentation>
+	An estimate of the resources than a federated experiment may require
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="node" type="tns:nodeType" minOccurs="0"
+	maxOccurs="unbounded" />
+      <xsd:element name="capacity" type="tns:capacityType" minOccurs="0"
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="projectType">
+    <xsd:annotation>
+      <xsd:documentation>
+	A project name and access user
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="name" type="tns:IDType"/>
+      <xsd:element name="user" type="tns:userType" minOccurs="0"
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="emulabType">
+    <xsd:annotation>
+      <xsd:documentation>
+	The information needed to swap an emulab experiment in
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="project" type="tns:projectType"/>
+      <xsd:element name="domain" type="xsd:string"/>
+      <xsd:element name="boss" type="xsd:string"/>
+      <xsd:element name="ops" type="xsd:string"/>
+      <xsd:element name="fileServer" type="xsd:string"/>
+      <xsd:element name="eventServer" type="xsd:string"/>
+      <xsd:element name="fedAttr" type="tns:fedAttrType" minOccurs="0"
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="requestType">
+    <xsd:annotation>
+      <xsd:documentation>
+	The full on request type.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="destinationTestbed" type="tns:IDType"
+	minOccurs="0" maxOccurs="1" />
+      <xsd:choice>
+	<xsd:element name="project" type="tns:projectType" minOccurs="0" 
+	  maxOccurs="1"/>
+	<xsd:element name="user" type="tns:userType" minOccurs="0"
+	  maxOccurs="unbounded"/>
+      </xsd:choice>
+      <xsd:element name="resources" type="tns:resourcesType" minOccurs="0" 
+	maxOccurs="1"/>
+      <xsd:element name="access" type="tns:accessType" minOccurs="1" 
+	maxOccurs="unbounded"/>
+      <xsd:element name="allocID" type="tns:IDType"/>
+      <xsd:element name="when" type="xsd:dateTime" minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="until" type="xsd:dateTime" minOccurs="0" 
+	maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="responseType">
+    <xsd:annotation>
+      <xsd:documentation>
+	The full on response type.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="allocID" type="tns:IDType"/>
+      <xsd:element name="emulab" type="tns:emulabType"/>
+      <xsd:element name="when" type="xsd:dateTime" minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="until" type="xsd:dateTime" minOccurs="0" 
+	maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+</xsd:schema>
