This is a single value specifying a fixed metric. It is exactly equivalent to <derived><constant>x</constant></derived>, but much shorter to type. This data type expresses a metric that can take on one of several values, or a continuous range of values. A continuous range is given using the <min> and <max> elements to bound the (inclusive) range of values the metric may take. For a discrete set, one can either add the <by> element to a continuous specification, which specifies an increment value. This converts the continuous range into a discrete set of values formed by starting at the minimum value and repeatedly adding the increment until the value exceeds the maximum. This is analogous to a for loop. Alternatively, you can list the discrete values each in a <discrete> element. The set of valid names for metrics used when referencing one metric freom a derived metric. This is a term in an arithmetic constraint of a resource metric. It's an encoding of a simple linear forumla into a data structure. Each choice of term value is documented below. Expressions are evaluated from the inside out so: <sum> <product> <term><constant>2</constant></term> <term><constant>3</constant></term> </product> <term><constant>1</constant></term> </sum> is a verbose way to say 7. Each choice for a MetricTerm is described below. A simple constant value. Substitution for the value of another metric in this resource description. The "resource" attribute is the ID attribute of the referenced resource and the "metric" attribute identifies the specific metric (power, capacity, latency, etc.) to use. Constraints must be resolvable, though it is difficult to specify data structure constraints that allow complexity but avoid possible circular definitions. A sum of constraint terms. A product of constraint terms. The difference between constraint terms. Note that differences are pariwise. The quotient of constraint terms. Note that division is pariwise. This is the data type for resource metrics. All resources are characterized by one or more metrics with units attached to them. In the simplest form this value is just a real number that describes the amount of the resource. The type can also express ranges of available values (continuous or discrete) and arithmetic constraints. An example of two components that are arithmetically constrained is a storage resource (ID="disk") and communication resource (id=Net) that share a 300Mb/s bus. The storage resource could have a rate="1 to 300" (rateUnits="Mbs") and the communication resource a capacity of (300 - disk:rate) (units="Mbs"). This would be expressed as: <storage id="disk"> <capacity units="MB"><value>300</value></capacity> <rate> <range><min>1</min><max>300</max></range> </rate> </storage> <communication> <capacity> <derived> <difference> <term><constant>300</constant></term> <term><metric resource="disk" metric="rate"/></term> </difference> </derived> </capacity> </communication> Each resource subclasses this datatype to constrain the acceptable units for the reources, but all use the language for expressing constraints. For processing resources that do not have full programmability, this data type describes their capabilities in the terms we discussed on list. I'll document those more fully later. These are the units of processing power. These are a little vague right now and are strawmen for what will eventually characterize processing power. This is the data type for describing a processing resource. Each allocable processing resource will be described by a separate occurrance of this data type, each uniquely identified by an ID attribute. The processor's capacity is expressed in the "power" attribute in units given in the "units" attribute. "Power" is a metric data type, so it can be constrained as described in that data type's description. If the "function" element is present, it describes the processors capabilities. Several components describe their capacity in terms of data rates. This base type sets values for a few application independent rates that other types can use. These are the units a communication resource can describe its capacity in. In addition to the generic data rates in the base class, rates can be given in terms of the units addded here. I'm not sure how to actually use a sub-classing here, so the DataRates terms are copied. These are values that a communication resource can use to describe its interaction with other communication resources, or to specify that no such interaction exists. The various shared values correspond to time, space, and frequency division multiplexing while "exclusive" implies that the communication is unaffected by other communicators. Again, straw men. A data type used to characterize the underlying communication model in very broad terms. Placeholder, of course. The communication resource data type. Like processing, it describes its capacity in the "capacity" attribute expressed in the units in the "units" attribute. "Units" default to Mbs, and can be omitted. The ID must be unique. Again, "capacity" is a metric and can be constrained. If the "medium" element is present, it characterizes the interaction of the communication resource with other resources. If the "model" element is present, it charcaterizes the model. Both elements are optional, but can only occur once. Another extension of the DataRates type to specialize for measurement. Measurement devices may characterize their output in terms of events. I'm not sure how to actually use a sub-classing here, so the DataRates terms are copied. A simple attempt to characterize the sort of measurement a mesaurement resource may be up to. Obviously a straw man. A measurement resoucre description. Of a set of sketches, this is the sketchiest. The resource is characterized in terms of its measurement capacity in the "capacity" attribute (which is again a constrainable Metric datatype) in the uints in the "units" attribute. The type of measurement accomplished is given in the "type" attribute, expressed in the broad terms of the MeasurementType datatype. Storage capacity units. All of these are in bytes. Units used to describe the latency of the storage resource. Time units. Some storage can be removed from components and transported other places for post mortem analysis or other use. This datatype is used to indicate if the resource in question is removable or not. How can users of the storage resource use it. The standard choices are varients of reading and writing. Are there more? Sorage resources may characterize themselves across three axes - capacity, data rate, and atency. Each axis has a metric in an attribute of the obvous name, but only capacity is a required characterization. Each axis is a constrainable metric and has its own associated attribute for the units of that metric. In addition, optional elements specifying the type of permissable axis (the "access" element) and the persistence of the storage (the "persistence" element) may appear. Both are optional. This data type describes a components resources - or one configuration of a set of possible constained configurations. Elements with types of the "Processing," "Communication," "Measurement," and "Stroage" defines above may appear more than once , with the collection defining the component resources. As described under the "Metric" data type, these resources may constrain their capacities in terms of each other's capacities. Any ResourceGroup can be assigned an identifier using teh ID attribute to simplify references to that ResourceGroup. This is a part of the constraint system that presents choices between complete configurations. The name is somewhat confusing. This data type describes a set of possible configuration choices, each surrounded by an <and> ... </and> pair. The set of <and>s is then put in an <or> to indicate that any one of the choices contained in an <and> ... </and> pair is possible, but only one choice from the enclosing <or> ... </or> is acceptable. For example: <or> <and> <processing> <power><value>10</value></power> </processing> <storage> <capacity><value>10</value></capacity> </storage> </and> <and> <measurement> <capacity units="EventsPerSecond"><value>100</value></capacity> </measurement> </and> </or> describes a component that can either be a 10 Mhz CPU with a 10 MB disk or a 100 event/s sensor, but no other mix of configuration is possible. This allows one to specify that a node can support one of several mutually exclusive configurations (which can be internally constrained using Metric constraints). Each <and> block may have an identifier and a weight attribute that can be used in describing choices and expressing preferences. <and> groups with higher weight values are preferable to the entity describing the resources. The type of the <and> group extends the ResourceGroup type to provide this attribute. All ResourceGroups can have an identifier. N.B. A single available configuration is expressed as an <or> group with a single <and> group inside.