[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nm-wg] XML response schema cleanup
Hi all,
I wasn't able to quite finish "cleaning up" the response schema, but I
got far enough that I figured I should send out something for others to
look at, and explain myself a bit.
I had 3 goals when looking at that schema again (1) break it into
"modules" that would allow re-use with the request schema, (2) to
simplify anything that was too tricky for its own good, and (3) to allow
generic results and multiple characteristics.
In short, I started along the road to (1), am still only part-way into
(2), and think I managed to get (3) finished. More detail follows.
(1) XML-Schema has an "include" directive that is intended for doing
exactly what we want here: taking a bunch of stuff that belongs in the
same namespace and splitting it into different physical files.
Therefore, I created "nm_root.xsd" to house the root schema, and had it
include sections for subject (NetworkEntity types), results (included
statistics here), tools, and parameters. I have finished subject and
started on results. These are the three attached files.
(2) I made one important change: I took a section called "tool" out of
the "NodeType" definition and instead placed an element called
"endpoint" (of type NetworkAddress) under the "methodology" section. The
purpose of "tool" was to allow different tool settings to be reported at
each endpoint. However, I think it is easier to understand if we allow
the entire "methodology" section to be repeated up to two times, and
then provide a way of associating the methodology with a given endpoint,
thus my new "endpoint" element. This is all in the "nm_root.xsd" file,
in case you're still reading this.
(3) To allow generic results, I simply removed the attribute
"abstract=true" from the base "ResultType". This should allow any
content in there. For multiple characteristics, I added an envelope
"networkMeasurementSet" as the root element, containing within it one or
more of the original "networkMeasurement" elements.
Whew! I'm tired. In these schemas I apologize for some unnecessary
close-tags, but XEmacs in SGML mode wouldn't indent properly without
them. We should be able to trivially remove these later if it really
bothers anyone.
- Dan
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"
xmlns="http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"
elementFormDefault="qualified">
<!--
This is the "main" file of a multi-file schema.
The other files in the schema are included below.
-->
<!-- Subject -->
<xs:include schemaLocation="nm_subject.xsd"></xs:include>
<!-- Result -->
<xs:include schemaLocation="nm_result.xsd"></xs:include>
<!-- Tool -->
<xs:include schemaLocation="nm_tool.xsd"></xs:include>
<!-- Parameters -->
<xs:include schemaLocation="nm_parameters.xsd"></xs:include>
<!--
End of includes
-->
<xs:annotation>
<xs:documentation>
This document provides a schema for publishing network
measurement data. It is based on the GGF NM-WG document: "A Hierarchy of Network
Performance Characteristics for Grid Applications and Services". Naming of
characteristics should follow the conventions of the GGF DAMED-WG document,
"An Analysis of 'Top N' Event Event Descriptions".
</xs:documentation>
</xs:annotation>
<xs:element name="networkMeasurementSet">
<xs:annotation>
<xs:documentation>
One or more network measurements.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="NetworkMeasurement" minOccurs="1" maxOccurs="unbounded"></xs:element>
</xs:sequence>
</xs:element>
<xs:element name="networkMeasurement">
<xs:annotation>
<xs:documentation>
Report of a network measurement.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="characteristic" type="xs:token">
<xs:annotation>
<xs:documentation>
Network characteristic name
</xs:documentation>
</xs:annotation>
</xs:element>
<!-- NEW: "Inlined" the result set -->
<xs:element name="results">
<xs:complexType>
<xs:sequence>
<xs:element name="resultSet" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="timestamp" type="TimestampType">
<xs:annotation>
<xs:documentation>
Timestamp for all results and statistics. May be
overridden by timestamps on individual
results or statistics.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="result" type="ResultType" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Some result values.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="statistic" type="StatisticType" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Some statistics "about" the result values.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="subject" type="NetworkEntityType">
<xs:annotation>
<xs:documentation>
The hosts and networks that are being tested.
</xs:documentation>
</xs:annotation>
</xs:element>
<!-- May occur up to twice: once for source, once for destination -->
<xs:element name="methodology" minOccurs="0" maxOccurs="2">
<xs:annotation>
<xs:documentation>
What test was run, and how it was run, in order to collect the measurement.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<!-- NEW: Replaces <tool> sub-section of NodeType -->
<xs:element name="endpoint" type="NetworkAddressType" minOccurs="0">
<xs:annotation>
<xs:documentation>
To which endpoint in a network path this information applies.
If omitted, it means that it applies to any and all endpoints.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="tool" type="ToolType">
<xs:annotation>
<xs:documentation>
The tool used to perform the measurement
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="parameters" type="ParameterType"
minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Tool/test parameters used for this measurement.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"
xmlns="http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"
elementFormDefault="qualified">
<!-- Abstract base for all network entity types -->
<xs:complexType name="NetworkEntityType" abstract="true"></xs:complexType>
<!-- Path -->
<xs:complexType name="NetworkPathType">
<xs:annotation>
<xs:documentation>
Path between a network source and destination node
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="NetworkEntityType">
<xs:sequence>
<xs:element name="source" type="NodeType" minOccurs="0"></xs:element>
<xs:element name="destination" type="NodeType" minOccurs="0"></xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Node -->
<xs:complexType name="NodeType" abstract="true">
<xs:annotation>
<xs:documentation>
A network node
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="NetworkEntityType">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>
Optional node name, in addition to network address.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="address" type="NetworkAddressType"></xs:element>
<!--
NEW: Removed! See 'endpoint' under root <methodology> element
<xs:element name="tool" type="SoftwareDescriptionType" minOccurs="0">
<xs:annotation>
<xs:documentation>
If the tool used at this node is in any way
different from the one described in the
methodology section, the differences are shown
here.
</xs:documentation>
</xs:annotation>
</xs:element>
-->
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Internal node, abstract supertype of Router -->
<xs:complexType name="InternalNodeType" abstract="true">
<xs:complexContent>
<xs:extension base="NodeType"></xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Router -->
<xs:complexType name="RouterType">
<xs:complexContent>
<xs:extension base="InternalNodeType"></xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Hop -->
<xs:complexType name="HopType">
<xs:complexContent>
<xs:extension base="NetworkPathType"></xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Network address, supertype of IP address -->
<xs:complexType name="NetworkAddressType" abstract="true">
<xs:annotation>
<xs:documentation>Abstract network address</xs:documentation>
</xs:annotation>
</xs:complexType>
<!-- IP (v4 or v6) address -->
<xs:complexType name="IPAddressType">
<xs:annotation>
<xs:documentation>
Internet Protocol address
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="NetworkAddressType">
<xs:sequence>
<xs:element name="IP" type="xs:string"></xs:element>
<xs:element name="port" type="xs:int" minOccurs="0"></xs:element>
</xs:sequence>
<xs:attribute name="version" type="xs:token" default="4">
<xs:annotation>
<xs:documentation>
Internet Protocol version (4 or 6)
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"
xmlns="http://www.ggf.org/namespaces/2004/01/gridNetworkMonitoring"
elementFormDefault="qualified">
<!-- Result elements. These use types defined below. -->
<xs:element name="path.delay.roundTrip" type="DelayType">
</xs:element>
<xs:element name="path.delay.oneWay" type="DelayType">
</xs:element>
<xs:element name="path.loss.roundTrip" type="PathLossType">
</xs:element>
<xs:element name="path.loss.oneWay" type="PathLossType" >
</xs:element>
<xs:element name="path.delay.jitter.roundTrip" type="PathDelayJitterType" >
</xs:element>
<xs:element name="path.delay.jitter.oneWay" type="PathDelayJitterType" >
</xs:element>
<xs:element name="path.reordering.oneWay" type="PathReorderingType">
</xs:element>
<xs:element name="path.bandwidth.utilization" type="BandwidthType">
</xs:element>
<xs:element name="path.bandwidth.capacity" type="BandwidthType">
</xs:element>
<!--
************
Result types
************
-->
<!-- Abstract base type for a result. Use this for generic types. -->
<xs:complexType name="ResultType">
<xs:annotation>
<xs:documentation>
Result of performing a network test
</xs:documentation>
</xs:annotation>
<xs:sequence>
<!-- timestamp -->
<xs:element name="timestamp" type="TimestampType" minOccurs="0">
<xs:annotation>
<xs:documentation>
Timestamp for the result. It is optional so that multiple
results can share the same timestamp (avoiding redundancy).
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- Delay -->
<xs:complexType name="DelayType">
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:element name="delay">
<xs:annotation>
<xs:documentation>
From IETF. One way Delay
(http://www.ietf.org/rfc/rfc2679.txt), Round Trip Delay
(http://www.ietf.org/rfc/rfc2681.txt).
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="units" type="xs:token" default="ms"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- (Path) Loss -->
<xs:complexType name="PathLossType">
<xs:annotation>
<xs:documentation>
From IETF. One way Delay
(http://www.ietf.org/rfc/rfc2679.txt), Round Trip Delay
(http://www.ietf.org/rfc/rfc2681.txt).
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:element name="lossDistance">
<xs:annotation>
<xs:documentation>
Number of packets since the previous loss (See RFC3357)
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:int">
<xs:attribute name="units" type="xs:token" fixed="packets"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="lossPeriod">
<xs:annotation>
<xs:documentation>
Number of groups of lost packets (See RFC3357)
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:int">
<xs:attribute name="units" type="xs:token" fixed="packet-groups"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="noticeableRate">
<xs:annotation>
<xs:documentation>
Percent of packets lost where if the distance between
the lost packet and the previously lost packet is no
greater than the "loss constraint" (See RFC3357)
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:int">
<xs:attribute name="units" type="xs:token" fixed="percent"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="periodTotal">
<xs:annotation>
<xs:documentation>
Total number of loss periods (See RFC3357)
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:int">
<xs:attribute name="units" type="xs:token" fixed="loss-periods"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="periodLengths">
<xs:annotation>
<xs:documentation>
Number of packets in a burst of loss (See RFC3357)
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:int">
<xs:attribute name="units" type="xs:token" fixed="packets"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="interLossperiodLengths">
<xs:annotation>
<xs:documentation>
Number of packets between bursts of loss (See RFC3357)
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:int">
<xs:attribute name="units" type="xs:token" fixed="packets"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="numPacketsLost">
<xs:annotation>
<xs:documentation>
Number of packets lost during the test (See RFC3357)
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:int">
<xs:attribute name="units" type="xs:token" fixed="packets"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="percentLoss">
<xs:annotation>
<xs:documentation>
Average packet loss (in percent) (See RFC2680)
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:int">
<xs:attribute name="units" type="xs:token" fixed="percent"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- (Path) Delay jitter -->
<xs:complexType name="PathDelayJitterType">
<xs:annotation>
<xs:documentation>
See the following IETF documents: Delay Variation (Jitter): http://www.ietf.org/rfc/rfc3393.txt
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ResultSetType">
<xs:sequence>
<xs:element name="jitterPeakToPeakIpdvResult">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="units" type="xs:token"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="jitterResult">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="units" type="xs:token"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="PathReorderingType">
<xs:annotation>
<xs:documentation>
See the following IETF documents:
http://www.ietf.org/internet-drafts/draft-ietf-ippm-reordering-02.txt
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:element name="lateTimeResult">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="units" type="xs:token" default="ms"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="gapResult">
<xs:annotation>
<xs:documentation>
Number of positions out of order
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:decimal">
<xs:attribute name="units" type="xs:token" fixed="positions"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="percentReorderedResult">
<xs:annotation>
<xs:documentation>
Percent of packets reordered
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:int">
<xs:attribute name="units" type="xs:token" fixed="percent"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- =============== stopped here =========================== -->
<xs:complexType name="BandwidthType">
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:element ref="bandwidthBottleneckResult" minOccurs="0"/>
<xs:element ref="bandwidthResult"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="bandwidthBottleneckResult">
<xs:annotation>
<xs:documentation>which hop is the bottleneck ("tight link")</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:group ref="HopValueGroup"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="bandwidthResult">
<xs:annotation>
<xs:documentation>bandwidth of path</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:group ref="DoubleValueGroup"/>
</xs:sequence>
<xs:attribute name="units" type="xs:token" default="Mb/s"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="path.bandwidth.achievable.TCP" type="BandwidthAchievableType" substitutionGroup="resultSet">
<xs:annotation>
<xs:documentation>Result set for indicated characteristic</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="path.bandwidth.achievable.TCP.multiStream" type="BandwidthAchievableType" substitutionGroup="resultSet">
<xs:annotation>
<xs:documentation>Result set for indicated characteristic</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="path.bandwidth.achievable.UDP" type="BandwidthAchievableType" substitutionGroup="resultSet">
<xs:annotation>
<xs:documentation>Result set for indicated characteristic</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="BandwidthAchievableType">
<xs:complexContent>
<xs:extension base="ResultSetType">
<xs:sequence>
<xs:element ref="achievableBottleneckResult" minOccurs="0"/>
<xs:element ref="achievableThroughputResult"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="achievableBottleneckResult">
<xs:annotation>
<xs:documentation>indication of what is the bottleneck (network, CPU, NIC, memory, disk, etc.)</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:group ref="StringValueGroup"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="achievableThroughputResult">
<xs:complexType>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:group ref="DoubleValueGroup"/>
</xs:sequence>
<xs:attribute name="units" type="xs:token" default="Mb/s"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="path.bandwidth.available" type="BandwidthAvailableType" substitutionGroup="resultSet">
<xs:annotation>
<xs:documentation>Result set for indicated characteristic</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="BandwidthAvailableType">
<xs:complexContent>
<xs:extension base="ResultSetType">
<xs:sequence>
<xs:element ref="mtbfResult"/>
<xs:element ref="downsResult"/>
<xs:element ref="medianOutageLengthResult"/>
<xs:element ref="percentUpResult"/>
<xs:element ref="bandwidthBottleneckResult" minOccurs="0"/>
<xs:element ref="bandwidthResult"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="mtbfResult">
<xs:annotation>
<xs:documentation>Mean Time Between Failures</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:group ref="IntValueGroup"/>
</xs:sequence>
<xs:attribute name="units" type="xs:token" default="s"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="downsResult">
<xs:annotation>
<xs:documentation>Number of periods when path was not available</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:group ref="IntValueGroup"/>
</xs:sequence>
<xs:attribute name="units" type="xs:token" fixed="periods"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="medianOutageLengthResult">
<xs:annotation>
<xs:documentation>Outage length</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:group ref="IntValueGroup"/>
</xs:sequence>
<xs:attribute name="units" type="xs:token" default="s"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="percentUpResult">
<xs:annotation>
<xs:documentation>percent Availability = 100*(#unavailable cycles/total cycles)%</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:group ref="IntValueGroup"/>
</xs:sequence>
<xs:attribute name="units" type="xs:token" fixed="percent"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="path.hoplist" type="HoplistType" substitutionGroup="resultSet">
<xs:annotation>
<xs:documentation>Result set for indicated characteristic</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="HoplistType">
<xs:complexContent>
<xs:extension base="ResultSetType">
<xs:sequence>
<xs:element ref="hopcountResult"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="hopcountResult">
<xs:annotation>
<xs:documentation>Number of hops</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="ResultType">
<xs:sequence>
<xs:group ref="IntValueGroup"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<!--
**********
Statistics
**********
-->
<!-- Base statistic group -->
<xs:element name="statistic">
</xs:element>
<!-- Single-valued statistics -->
<xs:element name="count" substitutionGroup="statistic">
<xs:annotation>
<xs:documentation>
Count of measured values.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:extension base="xs:nonNegativeInteger"></xs:extension>
</xs:simpleType>
</xs:element>
<xs:element name="min" substitutionGroup="statistic">
<xs:annotation>
<xs:documentation>
Minimum measured value
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:double"></xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="max" substitutionGroup="statistic">
<xs:annotation>
<xs:documentation>
Maximum measured value
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:double"></xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="mean" substitutionGroup="statistic">
<xs:annotation>
<xs:documentation>
Mean measured value
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:double"></xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="median" substitutionGroup="statistic">
<xs:annotation>
<xs:documentation>
Median measured value
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:double"></xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="stddev" substitutionGroup="statistic">
<xs:annotation>
<xs:documentation>
Standard deviation of measured values
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:double"></xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="percentile" substitutionGroup="statistic">
<xs:annotation>
<xs:documentation>
Some percentile of the measured values (median is a
special case of this, really)
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:double">
<xs:attribute name="pct" type="xs:nonNegativeInteger">
<xs:annotation>
<xs:documentation>
The percentile to which the value applies
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="confidence" substitutionGroup="statistic">
<xs:annotation>
<xs:documentation>
The +/- n% confidence interval (default n=95%) . For example,
a value of "1.5" means +/- 1.5
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:double">
<xs:attribute name="confidence" type="xs:nonNegativeInteger">
<xs:annotation>
<xs:documentation>
Percent confidence for which the given value provides an interval.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>