IVOA

VOEventService: an XML Encoding Schema for Resource Metadata for Collections of Events
Version 0.2

IVOA Working Draft

Status of This Document: This is a Working Draft produced by the IVOA VOEvent Working Group.
Latest version of this document:
http://www.ivoa.net/Documents/latest/VOEvent.html
Authors:
Alasdair Allan, University of Exeter, UK
Matthew Graham, California Institute of Technology, USA
Ray Plante, University of Illinois, USA
Rob Seaman, National Optical Astronomy Observatory, USA
Roy Williams, California Institute of Technology, USA

Editor:
Matthew Graham, mjg@caltech.edu

Abstract

The VOEvent format has been a recommendation of the IVOA since 2006, and is gaining wide acceptance. The purpose is to announce celestial transient events that may need rapid follow-up observation, and it is designed so that automated systems, as well as humans, can make decisions about VOEvent packets. This document defines a way in which the Registry infrastructure of the Virtual Observatory can be used to allow publication, discovery, and utilization of VOEvent resources. We define a new registry extension schema - VOEventService - that specifies two new types resource: VOEventStream and a VOEventServer. The stream resource describes a scientifically coherent collection of events; that come from the same motivation, team, project, or experiment; each event of a stream uses the same vocabulary (parameters) to describe events; while the primary thrust of the VOEvent work is responding to future events, a stream can also describe events that have already happened. The server resource describes which computers and interfaces can be used to send out future events (subscription capability) and/or can run queries on past events (query capability); it is described by the streams that it knows, and then by the capabilites it offers for each of those streams.

Acknowledgements

This document has been developed with support from the National Science Foundation's Information Technology Research Program under Cooperative Agreement AST0122449 with The Johns Hopkins University, from the UK Particle Physics and Astronomy Research Council (PPARC), and from the Eurpean Commission's Sixth Framework Program via the Optical Infrared Coordination Network (OPTICON).

Conformance-related definitions

The words "MUST", "SHALL", "SHOULD", "MAY", "RECOMMENDED", and "OPTIONAL" (in upper or lower case) used in this document are to be interpreted as described in IETF standard, RFC 2119 [RFC 2119].

The Virtual Observatory (VO) is general term for a collection of federated resources that can be used to conduct astronomical research, education, and outreach. The International Virtual Observatory Alliance (IVOA) is a global collaboration of separately funded projects to develop standards and infrastructure that enable VO applications.

XML document validation is a software process that checks that an XML document is not only well-formed XML but also conforms to the syntax rules defined by the applicable schema. Typically, when the schema is defined by one or more XML Schema [Schema] documents (see next section), validation refers to checking for conformance to the syntax described in those Schema documents. This document describes additional syntax constraints that cannot be enforced solely by the rules of XML Schema; thus, in this document, use of the term validation includes the extra checks that goes beyond common Schema-aware parsers which ensure conformance with this document.

UTC refers to Universal Coordinated Time as defined by....

Syntax Notation Using XML Schema

The eXtensible Markup Language, or XML, is document syntax for marking textual information with named tags and is defined by the World Wide Web Consortium (W3C) Recommendation, XML 1.0 [XML]. The set of XML tag names and the syntax rules for their use is referred to as the document schema. One way to formally define a schema for XML documents is using the W3C standard known as XML Schema [Schema].

This document defines the VOEventService schema using XML Schema. The full Schema document is listed in Appendix A. Parts of the schema appear within the main sections of this document; however, documentation nodes have been left out for the sake of brevity.

Reference to specific elements and types defined in the VOEventService schema include the namespaces prefix, voe, as in voe:VOEventStream (a type defined in the VOEventService schema). Use of the voe prefix in compliant instance documents is not required (see section 3); its use in this document is simply to indicate that it is an entity defined in the VOEventService schema.

Contents


1. Introduction

"Real-time astronomy" is an increasingly important component of modern astronomy, the study of rapid phenomena in the sky such as supernovae, cataclysmic variables, blazars, gamma-ray bursts, microlensing, etc. Traditional event reporting systems include the Central Bureau for Astronomical Telegrams and the Astronomers Telegram, written in natural language, and inform astronomers so that they can personally run follow-up observations. However, real-time astronomy can discover more science by automation: for rapid decisions in seconds without the need to wait for humans to wake up. Automation is also necessary to deal with large numbers of events, such as from LSST in years to come, and automation also allows machines to fetch and collate other relevant data that may elucidate the reason for an event, and also improve the ability to decide and prioritize follow-up observation.

The primary conceptual idea of this document is the VOEventStream. It is analogous to an astronomical catalog, in the sense that all the entries of the stream are uniformly observed, with each entry having the same parameters. A stream is also like a catalog in that it has authors who take scientific responsibility for the data. The most obvious difference, however, is that the catalog entries come from observations in the past, whereas an event stream may have both past and future events. An example of a stream is the set of events published by the Catalina Real-Time Sky Survey: by repeatedly scanning the sky, this project finds and announces each night a handful of sky positions where the source is much brighter than previous observations. Another example could be the stream of events from the NASA Swift orbiting observatory.

Now that the structure of the VOEvent packet is converging, interoperation is enabled. Now we should turn attention to the infrastructure that carries the events: network protocols, standard services, and how a user can discover, find, and utilize VOEvent resources. We will achieve this with the Registry infrastructure of the virtual observatory, a distributed, international metadata repository. In this document we will define how VOEventStreams are recorded in the registry, and also the VOEventServers, that allow actual data to be received from streams.

In forming these collections of events as streams, the question of granularity arises: should we, for example, make all the high-energy burst events into a single stream (Swift + Integral + Fermi etc)? Or should each satellite have its own event stream? Or should each instrument of each satellite have its own stream? This is of course a matter of judgement; but there are some guidelines. First, a stream should have single point of leadership and scientific responsibility, so the idea of combining NASA and ESA resources into a single stream seems inappropriate. Second, a stream should have a single set of parameters for the event vocabulary, and the greater granularity implies a much larger number of Params, most of which would not be used in any given event. However, splitting in many small event streams is also inappropriate, since there would be much more metadata to define for the Author (once of each stream), and much more work for the Subscriber (once for each stream).

1.1 Using the Registry for VOEvents

The registry enhancements proposed here will make it easier to work with VOEvents. Some use cases are:

2. Identifiers and VOEvents

The IVOA has established a system of identifiers for resources, meaning a way in which a metadata record can be retrieved about that resource; in other words, a global digital library for astronomy resources. The client may be in any country of the world, contacting a local registry node, which replicates all resources -- every node knows what every other node knows. Resource identifiers for the VO begin with ivo:// and are also called "IVORN" for International Virtual Observatory Resource Name. The identifier syntax is set up in a precise way to give control to both supplier and registry maintainer:
ivo://my.datacenter.here/resourceName#localName
By splitting this into pieces, we can find other IVORNs buried inside. The IVORN rules say there can only be one pound (#) sign (or none) in the IVORN. If so, the localName (after the #) is something not interpreted to the registry system. The part before the #, or the whole IVORN if there is no #, is like a call-number in the library, it is a reference to something known to the IVOA registry system: a dataset, a cone-search service, a workflow component, an organization. In order to create your own IVORNs, you will need an Authority ID, (for example ivo://my.datacenter.here), which most astronomy data centers already have.

We propose in this document to add two new kinds of resource (also known as extension schema) to those that the registry handles already. We do not register VOEvents themselves, but rather a coherent collection of events that we call VOEventStream. Each VOEvent is thus a representative of a class of events (the VOEventStream). The other extension scheme is VOEventServer, which lists one or more streams, and how to either pull event data from the past, or have event data pushed as soon as events occur.

The proposed syntax for the IVORN for a VOEvent is:

ivo://my.datacenter.here/streamName#eventName
An event is resolved at the registry as follows: By splitting on the # sign, we can look up the stream in the registry and find the meaning of the quoted parameters. We can query the registry for services which handle that stream, in order to probe the event repositories for the event primary data and annotations that may have arisen about that event. Different repositories can add new data as they wish.

3. The VOEventService Data Model

The VOEventService schema namespace is "http://www.ivoa.xml/VOEventService/v0.1". The VOEventService schema only defines global types and no global elements. VOEventService broadly follows the naming conventions of the VOResource schema regarding capitalisation but differs for <Param> and >Group> in the VOEventStream resource type to ensure consistency with the VOEvent schema and data model.

3.1. VOEventStream

3.1.1. Identifier

As noted above, each VOEventStream will get an IVORN upon registration, that can be used as the root for the IVORNs for events that are members of that stream.

3.1.2. Curation, Content, Coverage

Since the VOEventStream is defined as an extension of the current registry schema, much of this information is inherited from there. Therefore we describe only briefly, and refer readers to the registry documents and the examples below.

3.1.3. Parameters in VOEvent

A key feature of the concept of VOEventStream is that each stream has a defined set of named "parameters", and each event that is a member of the stream should use only parameters that are selected from the list in the stream definition. The parameter set of an event is analogous to a FITS header: keyword-value pairs that convey specific information about the event; however in the case of events (unlike most FITS files), the set of possible paramteters and their meanings is defined in the stream record.

In VOEvent, the parameter definition follows, to a great extent, the VOTable standard. Each Param element has:

Here is an example of a parameter element from the VOTable specification, which is also valid in the <What>; section of the VOEvent:
<Param name="max" ucd="meta.number" datatype="int" value="50">
    <Description>Maximal number of records to retrieve</Description>
</Param>
In the next section, we split the defintion of the parameter from its value. The defintion resides in the regsitry with the VOEventStream, and the value resides in the VOEvent itself.

3.1.4. Parameter Templates in VOEventStream

Now we come to the new version, where the definition of a parameter's meaning is separate from its value. In the VOEventStream, we define a ParamTemplate to be like the Param shown above but without the value of the parameter.

<Param name="max" ucd="meta.number" datatype="int">
    <Description>Maximal number of records to retrieve</Description>
</Param>
and therefore all that is needed in the event itself is the name-value association:
<Param name="max" value="50">
All of the other information can be added if the author desires, so that the VOEvent can stand by itself. But when the stream from which the event comes has been properly registered, only the name and value are strictly necessary.

Parameters can be collected into groups in VOEvent, for example a measurement and its error estimate can be combined:

<Group name="Rmag">
    <Param name="value" ucd="phot.mag;em.opt.R" datatype="float" value="17.3">
    <Param name="error" ucd="phot.mag;em.opt.R;stat.err" datatype="float" value="0.1">
</Group>
phot.mag;em.opt.R
To build a ParamTemplate for a VOEventStream, the same structure can be used, but without the "value" attibutes. Note also that VOEvents and VOEventStreams may not have Groups within Groups: a Group can only contain Param elements, not other Groups.

The same rules of uniqueness are in force for ParamTemplate and Groups in VOEventStream, as for Params and Groups in VOEvent:

3.2. VOEventServer

Once the stream is defined in the registry, the question is how to find it, with the kinds of services that might be wanted. These are known as Capabilities in the VO registry model. Three kinds of capability that we can mention are subscription, formal query, and informal query. If a server supports a subscription capability, it means that a client can submit a criterion (for example "R magnitude brighter than 17"), and events will be sent by the server in the future which satisfy that criterion. A formal query capability implies the existence of a formal request-response protocol by which queries can be made and results returned; this will be the "Simple Event Access Protocol" when it becomes an IVOA recommendation. An informal query capability means a web page with forms by which a collection of events can be browsed in some way.

The capability of a server is split further into Interfaces, which express precisely how the capability can be accessed by a client. For example, subscription capability could be achieved by having email, instant messaging, or text message sent; these are three different interfaces to the subscription capability, and there is different metadata associated with each (email address vs phone number for example). Having mentioned these basic concepts of the VO registry, we cna now define the parts of the VOEventServer definition:

3.2.1. Curation, Content

This is about who is running the service, description and links about the service, and other information. It is precisely the same kind of XML as all registry resopuirces have, as alluded to in the section above.

3.2.2. VOEventStreams

Here the server record lists the streams to which it can provide access, with a set of <VOEventStream> elements, each of which has the IVORN of a stream. Further into the VOEventServer document is where ways of accessing those streams are defined.

3.2.3. Capabilities

Capabilities are expressed in the VOEventServer as one of either "Subscription", "SimpleEventAccess" or "Query". Each of these capabilities can be available for each stream, perhaps a subscription capability for stream X and a SimpleEventAccess capability for stream Y.

3.2.4. Interfaces

A capability is a somewhat abstract notion, for example the general idea of subscribing to event streams. To make this concrete, each capability lists the "interfaces" that it supports. For example a subscription may be implemented through email, or through text messages, or through a robot-voice calling a cell phone: each of these is an interface.

4. The VOEventService Metadata

This section enumerates the types and elements defined in the VOEventService schema and describes their meaning.

4.1 Resource Type Extensions

The VOEventService schema defines three extensions of the base vr:Resource type for describing three specific types of resources:voe:DataStream, voe:VOEventStream and VOEventServer.

4.1.1 The DataStream Resource Type

The DataStream resource type is used to describe a dynamic source of data rather than a static one such as a catalog. It extends the Resource type by adding four additional elements to the core set of metadata, <facility>, <instrument>, <rights> and <coverage>. This is very similar to the DataCollection resource type defined in the VODataService extension schema but this uses local type definitions and so cannot be restricted or extended.

voe:DataStream Type Schema Definition
<xs:complexType name="DataStream">
   <xs:complexContent>
      <xs:extension base="vr:Resource">
         <xs:sequence>
            <xs:element name="facility" type="vr:ResourceName"
                        minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="instrument" type="vr:ResourceName"
                        minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="rights" type="vr:Rights"
                        minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="coverage" type="vs:Coverage"
                        minOccurs="0"/>
         </xs:sequence>
      </xs:extension>
   </xs:complexContent>
</xs:complexType>

voe:DataStream Extension Metadata Elements
ElementDefinition
facility
RM Name: Facility
Value type: string with optional ID attribute: vr:ResourceName
Semantic Meaning: the observatory or facility used to collect the data contained or managed by this resource.
Occurrences: optional; multiple occurrences allowed
instrument
RM Name: Instrument
Value type: string with optional ID attribute: vr:ResourceName
Semantic Meaning: the instrument used to collect the data contained or managed by this resource.
Occurrences: optional; multiple occurrences allowed
rights
RM Name: Rights
Value type: string, controlled vocabulary: xs:token
Semantic Meaning: Information about rights held in and over the resource.
Occurrences: optional; multiple occurrences allowed
Allowed Values:
public unrestricted, public access is allowed without authentication.
secure authenticated, public access is allowed.
proprietary only proprietary access is allowed with authentication.
coverage
RM Name: Coverage
Value type: composite: vs:Coverage
Semantic Meaning: a description of the spatial, temporal and frequency/wavelength extent of the data provided by the resource.
Occurrences: optional
Comments: A specific sub-type must be used (via xsi:type) to specify coverage.

4.1.2 The VOEventStream Resource Type

The VOEventStream resource type is used to describe a data stream consisting of VOEvent packets. The VOEventStream type extends the DataStream type by adding one additional element: dictionary.

voe:VOEventStream Type Schema Definition
<xs:complexType name="VOEventStream">
  <xs:complexContent>
    <xs:extension base="voe:DataStream">
      <xs:sequence>
        <xs:element name="dictionary" type="voe:DataDictionary"
                    minOccurs="0"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

voe:VOEventStream Extension Metadata Elements
ElementDefinition
dictionary
Value type: composite: voe:DataDictionary
Semantic Meaning: a description of the parameters used in the <What> section of the VOEvent packets in the stream.
Occurrences: optional

The <dictionary> element is of the complex type voe:DataDictionary which provides the defining metadata for the <Param> and <Group> elements employed in the <What> section of a VOEvent packet:

voe:DataDictionary Type Schema Definition
<xs:complexType name="DataDictionary">
  <xs:sequence>
    <xs:element name="description" type="xs:string"
                minOccurs="0" maxOccurs="unbounded"/>
    <xs:element name="Group" type="voe:WhatGroup"
                minOccurs="0" maxOccurs="unbounded"/>
    <xs:element name="Param" type="voe:WhatParam"
                minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="name" type="xs:string"/>
  <xs:attribute name="version" type="xs:string" default="1.0"/>
</xs:complexType>

Note the initial capitalisation of the <Group> and <Param> elements for consistency with the corresponding elements used in the <What> section of a VOEvent packet.

voe:DataDictionary Metadata Elements
ElementDefinition
description
Value type: string: xs:string
Semantic Meaning: a human-readable description of the dictionary
Occurrences: optional
Group
Value type: composite: voe:WhatGroup
Semantic Meaning: a group of parameters corresponding to a <Group> element in the <What> section of a VOEvent packet
Occurrences: optional
Param
Value type: composite: voe:WhatParam
Semantic Meaning: a parameter corresponding to a <Param> element in the <What> section of a VOEvent packet
Occurrences: optional; multiple occurrences allowed

Multiple dictionaries are possible within the same <VOEventStream> element with different versions. This allows for new parameters to be added to a stream's dictionary but validation of stored events is still possible with the existing resource record containing both the old and new dictionaries with different versions. The attributes help distinguish between multiple dictionaries within the same element:

voe:DataDescription Attributes
AttributeDefinition
name
Value type: string: xs:string
Semantic Meaning: the name of the dictionary
version
Value type: string: xs:string
Semantic Meaning: The version of the data dictionary described here.
Default value: 1.0

Parameters with a common semantic basis can be grouped together as a named <Group> element in the <What> section of a VOEvent packet. This is defined by a <WhatGroup> complex type in the <dictionary> element:

voe:WhatGroup Type Schema Definition
<xs:complexType name="WhatGroup">
  <xs:sequence>
    <xs:element name="description" type="xs:string"
                minOccurs="0"/>
    <xs:element name="Param" type="voe:WhatParam"
                minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="name" type="xs:string"/>
</xs:complexType>

voe:WhatGroup Metadata Elements
ElementDefinition
description
Value type: string: xs:string
Semantic Meaning: a human-readable description of this group giving, for example, the rationale for grouping these particular parameters together
Occurrences: optional
Param
Value type: composite: voe:WhatParam
Semantic Meaning: the individual parameters that comprise this grouping
Occurrences: optional; multiple occurrences allowed

voe:WhatGroup Attribute
AttributeDefinition
name
Value type: string: xs:string
Semantic Meaning: the name of the group

Similarly <Param> elements, appearing both individually and collectively (in <Group> elements) in the <What> section of a VOEvent, correspond to <WhatParam> complex types in the <dictionary> element:

voe:WhatParam Type Schema Definition
<xs:complexType name="WhatParam">
  <xs:sequence>
    <xs:element name="description" type="xs:string"
                minOccurs="0"/>
  </xs:sequence>
  <xs:attribute name="name" type="xs:string" use="required"/>
  <xs:attribute name="unit" type="xs:string"/>
  <xs:attribute name="ucd" type="xs:string"/>
  <xs:attribute name="dataType" type="vs:VOTScalarDataType"/>
  <xs:attribute name="use" type="vs:ParamUse" default="optional"/>
  <xs:attribute name="std" type="xs:boolean"/>
  <xs:attribute name="primary" type="xs:boolean"/>
</xs:complexType>

voe:WhatParam Metadata Elements
ElementDefinition
description
Value type: string: xs:string
Semantic Meaning: a human-readable description of the parameter
Occurrences: optional

The purpose of the primary attribute is to capture the VOEvent author's opinion regarding the importance of a particular parameter, especially in the context of displaying an abbreviated list of parameters in a UI.

voe:WhatParam Attributes
AttributeDefinition
name
Value type: string: xs:string
Semantic Meaning: the name of the parameter
Use: required
unit
Value type: string: xs:string
Semantic Meaning: the unit associated with all values of the parameter
ucd
Value type: string: xs:string
Semantic Meaning: the Unified Content Descriptor associated with the parameter
dataType
Value type: composite: vs:VOTScalarDataType
Semantic Meaning: the type of data contained in the parameter
Allowed values:
boolean
bit
unsignedByte
short
int
long
char
unicodeChar
float
double
floatComplex
doubleComplex
string
use
Value type: string: xs:string
Semantic Meaning: This specifies whether the use of the parameter is mandatory in the <What> section of a VOEvent packet.
Default value: optional
std
Value type: boolean
Semantic Meaning: If true, the meaning and use of this parameter is reserved and defined by a standard model. If false, it represents a data-specific parameter that extends beyond the standard. If not provided, then the value is unknown.
primary
Value type: boolean: xs:boolean
Semantic Meaning: This specifies whether the parameter is a primary one for UI display purposes.

4.1.3 The VOEventServer Resource Extension

The VOEventServer resource type is used to describe a server that provides VOEvent streams. It extends the <vs:Service> type by adding an additional element to the core set of metadata, <voeventStream>.

voe:VOEventServer Type Schema Definition
<xs:complexType name="VOEventServer">
  <xs:complexContent>
    <xs:extension base="vr:Service">
      <xs:sequence>
        <xs:element name="voeventStream" type="vr:IdentifierURI"
                   minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

The <voeventStream> elements list the VOEvent streams that are served by the VOEventServer. Each should be resolvable to a resource record of type <VOEventStream>.

voe:VOEventServer Extension Metadata Elements
ElementDefinition
voeventStream
Value type: composite: vr:IdentifierURI
Semantic Meaning: a VOEvent stream served by this resource
Occurrences: optional; multiple occurrences allowed

A VOEventServer can have a number of <capability> elements; in particular, capabilities of type <voe:SimpleEventAccess> and <voe:Subscription>. Abstract complex types are defined for both so that the value of the standardID attribute can be set to appropriate fixed URIs represeting the service standards. For the <voe:SimpleEventAccess> capability, this is the SEAPCapRestriction complex type:

voe:SEAPCapRestriction Type Schema Definition
<xs:complexType name="SEAPCapRestriction" abstract="true">
  <xs:complexContent>
    <xs:restriction base="vr:Capability">
      <xs:sequence>
        <xs:element name="validationLevel" type="vr:Validation"
                    minOccurs="0" maxOccurs="unbounded" />
        <xs:element name="description" type="xs:token"
                    minOccurs="0" />
        <xs:element name="interface" type="vr:Interface"
                    minOccurs="0" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:attribute name="standardID" type="vr:IdentifierURI" fixed="ivo://ivoa.net/std/VOEventSEAP"
                    use="required"/>
    </xs:restriction>
  </xs:complexContent>
</xs:complexType>

voe:SEAPCapRestriction Metadata Elements
ElementDefinition
validationLevel
RM Name: ResourceValidationLevel
Value type: integer with required validatedBy attribute taking an ID: vr:Validation (see definition for listing of allowed values.)
Semantic Meaning: An evaluation via a numeric grade that indicates the quality of the capability description and whether its implementation is functionally with applicable standards.
Occurrences: optional; multiple occurrences allowed
description
Value type: string: xs:token
Semantic Meaning: A human-readable description of what this capability provides as part of the overall service
Occurrences: optional
interface
Value type: composite: vr:Interface
Semantic Meaning: a description of how to call the service to access this capability
Occurrences: optional

The fixed URI representing the Simple Event Access Protocol (SEAP) standard is defined by the standardID attribute:

voe:SEAPCapRestriction Attribute
AttributeDefinition
standardID
RM Name: Service.StandardURI
Value type: URI: ivo://ivoa.net/std/VOEventSEAP
Semantic Meaning: the IVOA ID for the VOEvent SEAP standard.
Use: Required

The SimpleEventAccess capability is then defined as an extension of the abstract <SEAPCapRestriction>:

voe:SimpleEventAccess Type Schema Definition
<xs:complexType name="SimpleEventAccess">
  <xs:complexContent>
    <xs:extension base="voe:SEAPCapRestriction">
      <xs:sequence>
        <xs:element name="maxQueryRegionSize" type="voe:RegionSize"
                    minOccurs="0">
        <xs:element name="maxRecords" type="xs:int"
                    minOccurs="0">
	<xs:element name="testQuery" type="voe:Query"
                    minOccurs="0">
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

The capability defines three elements relating to characteristics of the SEAP: <maxQueryRegionSize>, <maxRecords> and <testQuery>:

voe:SimpleEventAccess Extension Metadata Elements
ElementDefinition
maxQueryRegionSize
Value type: composite: voe:RegionSize
Semantic Meaning: The maximum query region size in spatial and temporal extent.
Occurrences: optional
maxRecords
Value type: integer: xs:int
Semantic Meaning: The largest number of records that a query will return. A value of zero or less indicates that there is no explicit limit.
Occurrences: optional
testQuery
Value type: composite: voe:Query
Semantic Meaning: A query that will result in at least one matched record that can be used to test the service.
Occurrences: optional

The <maxQueryRegionSize> is of the complex type <voe:RegionSize>:

voe:RegionSize Type Schema Definition
<xs:complexType name="RegionSize">
  <xs:sequence>
    <xs:element name="long" type="xs:float">
    <xs:element name="lat" type="xs:float">
    <xs:element name="time" type="xs:float">
  </xs:sequence>
</xs:complexType>

The elements of this specify the maximum extent along the longitudinal (R.A.), latitudinal (Dec) and temporal axes that the service can handle:

voe:RegionSize Metadata Elements
ElementDefinition
long
Value type: float: xs:float
Semantic Meaning: The maximum size in the longitudinal (R.A) direction
Occurrences: mandatory
lat
Value type: float: xs:float
Semantic Meaning: The maximum size in the latitudinal (Dec) direction
Occurrences: mandatory
time
Value type: float: xs:float
Semantic Meaning: The maximum range along the temporal axis
Occurrences: mandatory

The <testQuery> child of the <SimpleImageAccess> capability is of the complex type <voe:Query>:

voe:Query Type Schema Definition
<xs:complexType name="Query">
    <xs:annotation>
      <xs:documentation>A query to be sent to the service</xs:documentation>
      <xs:documentation>Details to be filled in once the SEAP has been fully defined.</xs:documentation>
    </xs:annotation>
  </xs:complexType>

This awaits the definition of SEAP before it can be fully specified.

The abstract complex type for the <voe:Subscription> capability is EventSubCapRestriction:

voe:EventSubCapRestriction Type Schema Definition
<xs:complexType name="EventSubCapRestriction" abstract="true">
  <xs:complexContent>
    <xs:restriction base="vr:Capability">
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="validationLevel" type="vr:Validation"/>
        <xs:element minOccurs="0" name="description" type="xs:token"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="interface" type="vr:Interface"/>
      </xs:sequence>
      <xs:attribute fixed="ivo://ivoa.net/std/VOEventSubscribe"
    name="standardID" type="vr:IdentifierURI" use="required"/>
    </xs:restriction>
  </xs:complexContent>
</xs:complexType>

voe:EventSubCapRestriction Metadata Elements
ElementDefinition
validationLevel
RM Name: ResourceValidationLevel
Value type: integer with required validatedBy attribute taking an ID: vr:Validation (see definition for listing of allowed values.)
Semantic Meaning: An evaluation via a numeric grade that indicates the quality of the capability description and whether its implementation is functionally with applicable standards.
Occurrences: optional; multiple occurrences allowed
description
Value type: string: xs:token
Semantic Meaning: A human-readable description of what this capability provides as part of the overall service
Occurrences: optional
interface
Value type: composite: vr:Interface
Semantic Meaning: a description of how to call the service to access this capability
Occurrences: optional

The fixed URI representing the Subscription standard is defined by the standardID attribute:

voe:EventSubCapRestriction Attribute
AttributeDefinition
standardID
RM Name: Service.StandardURI
Value type: URI: ivo://ivoa.net/std/VOEventSubscribe
Semantic Meaning: the IVOA ID for the VOEvent subscription standard.
Use: Required

The Subscription capability is then defined as an extension of the abstract <EventSubCapRestriction>

voe:Subscription Type Schema Definition
<xs:complexType name="Subscription">
  <xs:complexContent>
    <xs:extension base="voe:EventSubCapRestriction">
      <xs:sequence>
	<xs:element name="supportsFilters" type="xs:boolean"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

The capability defines one element indicating whether a user can filter the events they subscribe to with this service, i.e. can they specify subsets that they are interested in or do they just receive all events emanating from the server.

voe:Subscription Extension Metadata Elements
ElementDefinition
supportsFilters
Value type: boolean: xs:boolean
Semantic Meaning: Indicates whether this subscription capability supports filtering of VOEvent packets
Occurrences: mandatory

The VOEventService schema defines three derived vr:Interface types to be used with the voe:Subscription capability: voe:Jabber, voe:TCPV and voe:RSS.

The voe:Jabber interface indicates that VOEvents are available from this server through a Jabber/XMPP interface. The <accessURL> gives the endpoint for the Jabber server.

The <feedNode> element gives the details of the Jabber subscription nodes for each of the VOEvent streams that are accessible through this interface.

voe:Jabber Extension Metadata Elements
ElementDefinition
referenceURL
Value type: URI: xs:anyURI
Semantic Meaning: A URL pointing to a human-readable document describing this Jabber interface.
Occurrences: optional
description
Value type: string: xs:string
Semantic Meaning: a human-readable description of this Jabber interface.
Occurrences: optional
feedNode
Value type: string with optional ID attribute: voe:Feed
Semantic Meaning: the name of a feed carrying VOEvent packets.
Occurrences: optional; multiple occurrences allowed

The <FeedNode> is of the complex type <voe:Feed>:

voe:Feed Attribute
AttributeDefinition
streamId
Value type: URI : vr:IdentifierURI
Semantic Meaning: The IVORN for the VOEventStream resource corresponding to the feed.

The voe:TCPV interface indicates that VOEvents are available from this server though a TCP Vanilla interface. The <accessURL> gives the endpoint from the server.

voe:TCPV Extension Metadata Elements
ElementDefinition
referenceURL
Value type: URI: xs:anyURI
Semantic Meaning: A URL pointing to a human-readable document describing this TCPV interface.
Occurrences: optional
description
Value type: string: xs:string
Semantic Meaning: a human-readable description of this TCPV interface.
Occurrences: optional

The voe:RSS interface indicates that VOEvents are available from this server through a RSS feed. The <accessURL> gives the endpoint for the RSS server.

The <feed> gives the details of the RSS subscription endpoints for each of the VOEvent streams that are accessible through this interface.

voe:RSS Extension Metadata Elements
ElementDefinition
referenceURL
Value type: URI: xs:anyURI
Semantic Meaning: A URL pointing to a human-readable document describing this RSS interface.
Occurrences: optional
description
Value type: string: xs:string
Semantic Meaning: a human-readable description of this RSS interface.
Occurrences: optional
feed
Value type: string with optional ID attribute: voe:Feed
Semantic Meaning: the name of a feed carrying VOEvent packets.
Occurrences: optional; multiple occurrences allowed

5. References

6. Examples

6.1. Example of a VOEventStream


<?xml version="1.0" encoding="UTF-8"?>

<Resource xsi:type="voe:VOEventStream" created="2008-09-23T00:00:00Z" updated="2008-09-23T00:00:00Z" status="active" xsi:schemaLocation="http://www.ivoa.net/xml/VOEventService/v0.1 VOEventService.xsd" xmlns:vr="http://www.ivoa.net/xml/VOResource/v1.0" xmlns:voe="http://www.ivoa.net/xml/VOEventService/v0.1" xmlns:stc="http://www.ivoa.net/xml/STC/stc-v1.30.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink">

  <validationLevel validatedBy="ivo://nvo.caltech/registry">1</validationLevel>
  <title>Catalina Real-time Transients Survey VOEvent Stream</title>
  <shortName>catot</shortName>
  <identifier>ivo://nvo.caltech.voeventnet/catot</identifier>
  <curation>
    <publisher ivo-id="ivo://nvo.caltech/voeventnet">VOEventNet</publisher>
    <creator>
      <name>Andrew Drake</name>
    </creator>
    <date role="creation">2007-11-01</date>
    <contact>
      <name>Andrew Drake</name>
      <email>ajd@cacr.caltech.edu</email>
    </contact>
  </curation>
  <content>
    <subject>optical</subject>
    <subject>transient</subject>
    <description>The Catalina Real-time Transient Survey (CRTS) uses data obtained by the Catalina Sky Survey (CSS) to search 
    for optical transients. CSS observations are usually taken 21 nights per lunation.</description>
    <referenceURL>http://www.voeventnet.org</referenceURL>
    <type>Other</type>
    <contentLevel>Research</contentLevel>
    <contentLevel>Amateur</contentLevel>
  </content>
  <facility>CSS Schmidt Telescope, Mt Bigelow, AZ</facility>
  <coverage>
    <stc:STCResourceProfile>
      <stc:AstroCoordSystem xlink:type="simple" xlink:href="ivo://STClib/CoordSys#UTC-ICRS-TOPO" id="VOEvent_UTC_ICRS_TOPO"/>
      <stc:AstroCoordArea coord_system_id="VOEvent_UTC_ICRS_TOPO">
        <stc:AllSky/>
      </stc:AstroCoordArea>
    </stc:STCResourceProfile>
    <waveband>Optical</waveband>
  </coverage>
  <dictionary version="1.0">
    <Group name="Asteroid params">
      <description>...</description>
      <Param unit="deg" ucd="pos.posAng" name="Opposition angle" dataType="float"/>
      <Param unit="arcsec/min" ucd="pos.pm" name="Inner motion" dataType="float"/>
      <Param unit="arcsec/min"  ucd="pos.pm" name="Outer motion" dataType="float"/>
      <Param unit="deg"  ucd="pos.ecliptic.lon" name="Ecliptic Longitude" dataType="float"/>
      <Param unit="deg"  ucd="pos.ecliptic.lat" name="Ecliptic Latitude" dataType="float"/>
      <Param unit="arcsec"  ucd="pos.pm" name="Apparent motion" dataType="float"/>
      <Param unit="min"  ucd="time.interval" name="Timespan" dataType="float"/>
      <Param unit="deg"  ucd="pos.posAng" name="Ecliptic Inclination" dataType="float"/>
      <Param unit="arcsec/min"  ucd="stat.error.sys" name="Motion uncertainty RA" dataType="float"/>
      <Param unit="arcsec/min"  ucd="stat.error.sys" name="Motion uncertainty Dec" dataType="float"/>
    </Group>
    <Group name="First Detection params">
      <Param unit="mag" ucd="phot.mag;em.opt.R4" name="magnitude"
  dataType="float" primary="true"/>
      <Param unit="mag" ucd="phot.mag;stat.error" name="mag_error" dataType="float"/>
      <Param ucd="meta.id" name="ID" dataType="long" />
      <Param unit="pixels"  ucd="instr.det.psf" name="average seeing" dataType="float"/>
      <Param unit="cts"  ucd="instr.background" name="average background" dataType="float"/>
      <Param unit="days"  ucd="time.epoch" name="JD" dataType="float"/>
      <Param unit="deg" ucd="pos.eq.ra" name="RA" dataType="float" primary="true"/>
      <Param unit="deg"  ucd="pos.eq.dec" name="Dec"
  dataType="float" primary="true"/>
    </Group>
  </dictionary>
</Resource>

6.2. Example of a VOEventServer

<?xml version="1.0" encoding="UTF-8"?>

<Resource xsi:type="voe:VOEventServer" created="2008-09-23T00:00:00Z" 
updated="2008-09-23T00:00:00Z" status="active" 
xsi:schemaLocation="http://www.ivoa.net/xml/VOEventService/v0.1 VOEventService.xsd" 
xmlns:vr="http://www.ivoa.net/xml/VOResource/v1.0" 
xmlns:voe="http://www.ivoa.net/xml/VOEventService/v0.1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <validationLevel validatedBy="ivo://nvo.caltech/registry">1</validationLevel>
  <title>VOEventNet VOEvent Server</title>
  <shortName>voeventnet</shortName>
  <identifier>ivo://nvo.caltech/voeventnet</identifier>
  <curation>
    <publisher ivo-id="ivo://nvo.caltech/CACR">Center for Advanced Computing Research</publisher>
    <creator>
      <name>Roy Williams</name>
    </creator>
    <date role="creation">2006-04-01</date>
    <contact>
      <name>Andrew Drake</name>
      <email>ajd@cacr.caltech.edu</email>
    </contact>
  </curation>
  <content>
    <subject>VOEvent</subject>
    <subject>transient astronomy</subject>
    <description>VOEventNet gathers streams of astronomical alerts and reports in a common format, and acts as a 
    clearinghouse, so that both people and robotic systems can get the alerts quickly enough to respond with 
    follow-up observations.</description>
    <referenceURL>http://www.voeventnet.org</referenceURL>
    <type>Other</type>
    <contentLevel>University</contentLevel>
    <contentLevel>Amateur</contentLevel>
    <contentLevel>Research</contentLevel>
  </content>
  <voeventStream>ivo://nvo.caltech.voeventnet/catot</voeventStream>
  <capability xsi:type="voe:SimpleEventAccess" standardID="ivo://ivoa.net/std/VOEventSEAP"/>
  <capability xsi:type="voe:Subscription" standardID="ivo://ivoa.net/std/VOEventSubscribe">
    <validationLevel validatedBy="ivo://nvo.caltech/registry">1</validationLevel>
    <interface xsi:type="voe:Jabber">
      <accessURL>http://moriori.cacr.caltech.edu</accessURL>
      <securityMethod standardID="ivo://ivoa.net/std/UserPass"/>
      <feedNode streamId="ivo://nvo.caltech.voeventnet/catot">home/moriori.cacr.caltech.edu/catalina</feedNode>
    </interface>
    <interface xsi:type="voe:RSS">
      <accessURL>http://www.voeventnet.org</accessURL>
      <feed streamId="ivo://nvo.caltech.voeventnet/catot">http://www.voeventnet.org/feeds/Catfeed.xml</feed>
    </interface>
    <supportsFilters>true</supportsFilters>
  </capability>
</Resource>

Appendix A: the VOEventService XML Schema


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.ivoa.net/xml/VOEventService/v0.1"
            xmlns="http://www.w3.org/2001/XMLSchema"
            xmlns:vm="http://www.ivoa.net/xml/VOMetadata/v0.1"
            xmlns:vr="http://www.ivoa.net/xml/VOResource/v1.0"
            xmlns:voe="http://www.ivoa.net/xml/VOEventService/v0.1"
            xmlns:vs="http://www.ivoa.net/xml/VODataService/v1.0"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="unqualified" 
            attributeFormDefault="unqualified"
            version="1.0">

  <xs:annotation>
    <xs:appinfo>
      <vm:schemaName>VOEvent</vm:schemaName>
      <vm:schemaPrefix>xs</vm:schemaPrefix>
      <vm:targetPrefix>voe</vm:targetPrefix>
    </xs:appinfo>
    <xs:documentation>Created with EditiX (http://www.editix.com) at Wed Sep 17 16:36:41 PDT 2008</xs:documentation>
    <xs:documentation>An extension to the core resource metadata (VOResource) for describing VOEvent resources</xs:documentation>
  </xs:annotation>
  <xs:import namespace="http://www.ivoa.net/xml/VOResource/v1.0" schemaLocation="http://www.ivoa.net/xml/VOResource/v1.0"/>  
  <xs:import namespace="http://www.ivoa.net/xml/VODataService/v1.0" schemaLocation="http://www.ivoa.net/xml/VODataService/v1.0"/>
  <xs:complexType name="DataStream">
    <xs:annotation>
      <xs:documentation>A stream of data.</xs:documentation>
      <xs:documentation>Ideally this would be a restriction of vs:DataCollection but that has inline element declarations.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="vr:Resource">
        <xs:sequence>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="facility" type="vr:ResourceName"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="instrument" type="vr:ResourceName"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="rights" type="vr:Rights"/>
          <xs:element minOccurs="0" name="coverage" type="vs:Coverage"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="VOEventStream">
    <xs:annotation>
      <xs:documentation>A source of events which are homogeneous, have unified scientific
	purpose, meaning and leadership and use the same <Param> vocabulary.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="voe:DataStream">
        <xs:sequence>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="dictionary" type="voe:DataDictionary">
            <xs:annotation>
              <xs:documentation>a description of the parameters used in the <What> section of the VOEvent packets in the stream.</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="DataDictionary">
    <xs:sequence>
      <xs:element name="description" type="xs:string" minOccurs="0">
        <xs:annotation>
          <xs:documentation>a description of the dictionary's contents</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Group" type="voe:WhatGroup" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>a description of a Group element</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Param" type="voe:WhatParam" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>a description of a Param element</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="name" type="xs:string">
      <xs:annotation>
        <xs:documentation>the name of the dictionary</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="version" type="xs:string">
      <xs:annotation>
        <xs:documentation>the version of the dictionary</xs:documentation>
      </xs:annotation>
    </xs:attribute>

  </xs:complexType>
  <xs:complexType name="WhatGroup">
    <xs:annotation>
      <xs:documentation>a description of a group used in the <What> section in a VOEvent packet.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="description" type="xs:string" minOccurs="0">
        <xs:annotation>
          <xs:documentation>a description of the group</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Param" type="voe:WhatParam" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>a description of a Param element</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="name" type="xs:string">
      <xs:annotation>
        <xs:documentation>the name of the group</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>
  <xs:complexType name="WhatParam">
    <xs:annotation>
      <xs:documentation>a description of a parameter used in the <What> section in a VOEvent packet.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="description" type="xs:string" minOccurs="0">
        <xs:annotation>
          <xs:documentation>a description of the parameter</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="name" type="xs:string" use="required">
      <xs:annotation>
        <xs:documentation>the name of the parameter</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="unit" type="xs:string">
      <xs:annotation>
        <xs:documentation>the unit associated with all values of the parameter
        </xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="ucd" type="xs:string">
      <xs:annotation>
        <xs:documentation>the name of a unified content descriptor associated with the parameter</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="dataType" type="vs:VOTScalarDataType">
      <xs:annotation>
        <xs:documentation>a type of data contained in the param</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="use" type="vs:ParamUse" default="optional">
      <xs:annotation>
        <xs:documentation>This specifies whether the use of the param is mandatory in the <What> section of a VOEvent packet.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="std" type="xs:boolean">
      <xs:annotation>
        <xs:documentation>If true, the meaning and use of this parameter is reserved and defined by a standard model. If false, it represents a data-specific parameter that extends
beyond the standard. If not provided, then the value is unknown.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="primary" type="xs:int">
      <xs:annotation>
        <xs:documentation>This specifies whether the parameter
  is a primary one for UI display purposes.</xs:documentation>
      </xs:annotation>
    </xs:attribute>


  </xs:complexType>
  <xs:complexType name="VOEventServer">
    <xs:annotation>
      <xs:documentation>a service that provides access to VOEvents</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="vr:Service">
        <xs:sequence>
          <xs:element name="voeventStream" type="vr:IdentifierURI" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
              <xs:documentation>a VOEvent stream served by this resource.</xs:documentation>
            </xs:annotation>    
          </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="SEAPCapRestriction" abstract="true">
    <xs:annotation>
      <xs:documentation>an abstract capability
that fixes the standardID to the IVOA ID for the VOEvent SEAP standard.</xs:documentation>
      <xs:documentation>See vr:Capability for documentation on 
inherited children.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:restriction base="vr:Capability">
        <xs:sequence>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="validationLevel" type="vr:Validation"/>
          <xs:element  minOccurs="0" name="description" type="xs:token"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="interface" type="vr:Interface"/>
        </xs:sequence>
        <xs:attribute fixed="ivo://ivoa.net/std/VOEventSEAP" name="standardID" type="vr:IdentifierURI" use="required"/>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="EventSubCapRestriction" abstract="true">
    <xs:annotation>
      <xs:documentation>an abstract capability
that fixes the standardID to the IVOA ID for the VOEvent subscription standard.</xs:documentation>
      <xs:documentation>See vr:Capability for documentation on 
inherited children.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:restriction base="vr:Capability">
        <xs:sequence>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="validationLevel" type="vr:Validation"/>
          <xs:element minOccurs="0" name="description" type="xs:token"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="interface" type="vr:Interface"/>
        </xs:sequence>
        <xs:attribute fixed="ivo://ivoa.net/std/VOEventSubscribe"
    name="standardID" type="vr:IdentifierURI" use="required"/>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="Subscription">
    <xs:annotation>
      <xs:documentation>The capabilities of a VOEvent subscription</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="voe:EventSubCapRestriction">
	<xs:sequence>
  	  <xs:element name="supportsFilters" type="xs:boolean">
	    <xs:annotation>
	      <xs:documentation>Indicates whether this subscription capability supports filtering of VOEvent packets</xs:documentation>
            </xs:annotation>
	  </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="SimpleEventAccess">
    <xs:annotation>
      <xs:documentation>The capabilities of a VOEvent SEAP implementation</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="voe:SEAPCapRestriction">
        <xs:sequence>
          <xs:element name="maxQueryRegionSize" type="voe:RegionSize" minOccurs="0">
	    <xs:annotation>
	      <xs:documentation>The maximum query region size in spatial and temporal extent.</xs:documentation>
	    </xs:annotation>
	  </xs:element>
	  <xs:element name="maxRecords" type="xs:int" minOccurs="0">
	    <xs:annotation>
	      <xs:documentation>The largest number of records that a query will return. A value
	of zero or less indicates that there is no explicit limit.</xs:documentation>
	    </xs:annotation>
	  </xs:element>
	  <xs:element name="testQuery" type="voe:Query" minOccurs="0">
	    <xs:annotation>
	      <xs:documentation>A query that will result in at least one matched record that can be used to test the service.</xs:documentation>
	    </xs:annotation>
	  </xs:element>
	</xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="RegionSize">
    <xs:sequence>
      <xs:element name="long" type="xs:float">
        <xs:annotation>
	  <xs:documentation>THe maximum size in the longitude (R.A) direction</xs:documentation>
	</xs:annotation>
      </xs:element>
      <xs:element name="lat" type="xs:float">
        <xs:annotation>
	  <xs:documentation>The maximum size in the latitude (Dec.) direction</xs:documentation>
	</xs:annotation>
      </xs:element>
      <xs:element name="time" type="xs:float">
        <xs:annotation>
	  <xs:documentation>
The maximum range along the temporal axis.</xs:documentation>
	</xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Query">
    <xs:annotation>
      <xs:documentation>A query to be sent to the service</xs:documentation>
      <xs:documentation>Details to be filled in once the SEAP has been fully defined.</xs:documentation>
    </xs:annotation>
  </xs:complexType>
  <xs:complexType name="Jabber">
    <xs:annotation>
      <xs:documentation>A Jabber/XMPP interface</xs:documentation>
        <xs:documentation>The accessURL element gives the Jabber
    server endpoint</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="vr:Interface">
        <xs:sequence>
	  <xs:element name="referenceURL" type="xs:anyURI" minOccurs="0">
	  <xs:annotation>
	    <xs:documentation>A URL pointing to a human-readable
    document describing this Jabber
    interface.</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="description" type="xs:string" minOccurs="0">
            <xs:annotation>
              <xs:documentation>A description of the Jabber feed.</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element name="feedNode" type="voe:Feed" minOccurs="1" maxOccurs="unbounded">
	    <xs:annotation>
	      <xs:documentation>The name of the feed carrying VOEvent packets.</xs:documentation>
            </xs:annotation>
      	  </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="Feed">
    <xs:annotation>
      <xs:documentation>This represents an individual VOEvent feed</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="streamId" type="vr:IdentifierURI"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="TCPV">
    <xs:annotation>
      <xs:documentation>A TCP Vanilla (TCPV) interface</xs:documentation>
      <xs:documentation>The accessURL element gives the server endpoint including port number</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="vr:Interface">
        <xs:sequence>
	  <xs:element name="referenceURL" type="xs:anyURI" minOccurs="0">
	    <xs:annotation>
		<xs:documentation>A URL pointing to a human-readable document describing this TCPV interface.</xs:documentation>
	    </xs:annotation>
	  </xs:element>
	  <xs:element name="description" type="xs:string" minOccurs="0">
	    <xs:annotation>
	      <xs:documentation>A description of the Jabber feed.</xs:documentation>
	    </xs:annotation>
	  </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:complexType name="RSS">
    <xs:annotation>
      <xs:documentation>A RSS interface</xs:documentation>
      <xs:documentation>The accessURL gives the endpoint for the RSS feed.</xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="vr:Interface">
        <xs:sequence>
	  <xs:element name="referenceURL" type="xs:anyURI" minOccurs="0">
	    <xs:annotation>
	      <xs:documentation>A URL pointing to a human-readable document describing this RSS interface.</xs:documentation>
	    </xs:annotation>
	  </xs:element>
	  <xs:element name="description" type="xs:string" minOccurs="0">
	    <xs:annotation>
	      <xs:documentation>A description of the Jabber feed.</xs:documentation>
	    </xs:annotation>
	  </xs:element>
	  <xs:element name="feed" type="voe:Feed" minOccurs="1" maxOccurs="unbounded">
	    <xs:annotation>
	      <xs:documentation>The name of the feed carrying VOEvent packets.</xs:documentation>
	    </xs:annotation>
	  </xs:element>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>