Index: wsdl/topdl.xsd
===================================================================
--- wsdl/topdl.xsd	(revision eec716b04d02fc83402be818a98dda0175afb080)
+++ wsdl/topdl.xsd	(revision eec716b04d02fc83402be818a98dda0175afb080)
@@ -0,0 +1,234 @@
+<?xml version="1.0"?>
+<xsd:schema targetNamespace="http://www.isi.edu/faber/topdl"
+  xmlns:tns="http://www.isi.edu/faber/topdl"
+  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xmlns="http://www.w3.org/2000/10/XMLSchema">
+
+  <xsd:complexType name="attributeType">
+    <xsd:annotation>
+      <xsd:documentation>
+	A simple extension mechanism.  Most entities can have locally
+	understood attributes attached.
+      </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:simpleType name="kindType">
+    <xsd:annotation>
+      <xsd:documentation>
+	An indication of how requested networking capacity is measured.
+	This will undoubtably expand.
+      </xsd:documentation>
+    </xsd:annotation>
+    <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>
+	A strawman network capacity description for access negotiation.
+	This will come to include more and more interesting parameters.
+      </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="latencyType">
+    <xsd:annotation>
+      <xsd:documentation>
+	A strawman network latency description for access negotiation.
+	This will come to include more and more interesting parameters.  Time
+	is in msec.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="time" type="xsd:double"/>
+      <xsd:element name="kind" type="tns:kindType"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="substrateType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Description of media through which elements can communicate
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="name" type="xsd:string"/>
+      <xsd:element name="capacity" type="tns:capacityType" 
+	minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="latency" type="tns:latencyType" 
+	minOccurs="0" maxOccurs="1"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  
+  <xsd:complexType name="cpuType">
+    <xsd:annotation>
+      <xsd:documentation>
+	The CPU requirements of a computer or other entity.  The type is a
+	string for simplicity.  We may make this more complex later.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="type" type="xsd:string"/>
+      <xsd:element name="attribute" type="tns:attributeType" 
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+    <xsd:attribute name="count" type="xsd:int" use="optional"/>
+  </xsd:complexType>
+
+  <xsd:simpleType name="persistenceType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Description of how long storage is available
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:restriction base="xsd:string">
+      <xsd:enumeration value="temporary"/>
+      <xsd:enumeration value="persistent"/>
+    </xsd:restriction>
+  </xsd:simpleType>
+
+  <xsd:complexType name="storageType">
+    <xsd:annotation>
+      <xsd:documentation>
+	The storage requirements of a computer or other entity.  The amount and
+	its persistance.  Amounts are in megabytes.  Should media be requires,
+	an attribute can be used.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="amount" type="xsd:double"/>
+      <xsd:element name="persistence" type="tns:persistenceType"/>
+      <xsd:element name="attribute" type="tns:attributeType" 
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="operatingsystemType">
+    <xsd:annotation>
+      <xsd:documentation>
+	The OS requirements of a computer or other element with an OS.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="name" type="xsd:string"/>
+      <xsd:element name="version" type="xsd:string"
+	minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="distribution" type="xsd:string"
+	minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="distributionversion" type="xsd:string"
+	minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="attribute" type="tns:attributeType" 
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="softwareType">
+    <xsd:annotation>
+      <xsd:documentation>
+	An piece of software  and where to install it on an element.  Some
+	distribution types have the install location embedded in the format,
+	and for them the installation location is empty.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="location" type="xsd:string"/>
+      <xsd:element name="install" type="xsd:string"
+	minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="attribute" type="tns:attributeType" 
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="interfaceType">
+    <xsd:annotation>
+      <xsd:documentation>
+	An interface to at least one communication substrate.  Details like
+	address assignement are in attributes.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="substrate" type="xsd:string" minOccurs="1" 
+	maxOccurs="unbounded"/>
+      <xsd:element name="capacity" type="tns:capacityType" 
+	minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="latency" type="tns:latencyType" 
+	minOccurs="0" maxOccurs="1"/>
+      <xsd:element name="attribute" type="tns:attributeType" 
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="computerType">
+    <xsd:annotation>
+      <xsd:documentation>
+	A general purpose computer as part of a topology.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="cpu" type="tns:cpuType"
+	minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="os" type="tns:operatingsystemType"
+	minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="software" type="tns:softwareType"
+	minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="storage" type="tns:storageType"
+	minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="interface" type="tns:interfaceType"
+	minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="attribute" type="tns:attributeType" 
+	minOccurs="0" maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="otherType">
+    <xsd:annotation>
+      <xsd:documentation>
+	An element described only by attributes.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="interface" type="tns:interfaceType"
+	minOccurs="0" maxOccurs="unbounded"/>
+      <xsd:element name="attribute" type="tns:attributeType" minOccurs="0"
+	maxOccurs="unbounded"/>
+    </xsd:sequence>
+  </xsd:complexType>
+
+  <xsd:complexType name="elementType">
+    <xsd:annotation>
+      <xsd:documentation>
+	An element in the topology to be created.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:choice>
+      <xsd:element name="computer" type="tns:computerType"/>
+      <xsd:element name="other" type="tns:otherType"/>
+    </xsd:choice>
+  </xsd:complexType>
+
+  <xsd:complexType name="topologyType">
+    <xsd:annotation>
+      <xsd:documentation>
+	Description of an experimental topology for the federant to create.
+      </xsd:documentation>
+    </xsd:annotation>
+    <xsd:sequence>
+      <xsd:element name="substrates" type="tns:substrateType" 
+	minOccurs="0" maxOccurs="unbounded" />
+      <xsd:element name="elements" type="tns:elementType" 
+	minOccurs="0" maxOccurs="unbounded" />
+    </xsd:sequence>
+  </xsd:complexType>
+</xsd:schema>
