/[volute]/trunk/projects/registry/VODataService/VODataService.tex
ViewVC logotype

Diff of /trunk/projects/registry/VODataService/VODataService.tex

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 5050 by msdemlei, Wed Jun 20 15:26:44 2018 UTC revision 5051 by msdemlei, Fri Jun 22 13:42:22 2018 UTC
# Line 1  Line 1 
1  <html><head><title>VODataService (Recommendation)</title>  \documentclass[11pt,a4paper]{ivoa}
2    \input tthdefs
3    
4  <style type="text/css">  \title{VODataService: A VOResource Schema Extension for Describing
5      .issue {background-color: yellow}  Collections and Services}
     .postponedissue {background-color: yellow}  
     .def code  
     .future {background-color: pink}  
     .draftedit {background-color: white}  
     .draftdelete {background-color: white}  
     .note { margin-left: 4em }  
     code { font-weight: bold;  
            font-family: monospace }  
   
 div.exampleInner pre { margin-left: 1em;  
                        margin-top: 0em; margin-bottom: 0em}  
 div.exampleOuter {border: 4px double gray;  
                   margin: 0em; padding: 0em}  
 div.exampleInner { border-top-width: 4px;  
                    border-top-style: double;  
                    border-top-color: white;  
                    border-bottom-width: 4px;  
                    border-bottom-style: double;  
                    border-bottom-color: white;  
                    padding: 0px; margin: 0em }  
 div.exampleWrapper { margin: 4px }  
 div.exampleHeader { font-weight: bold;  
                     margin: 4px}  
   
 div.schemaInner pre { margin-left: 1em;  
                       margin-top: 0em; margin-bottom: 0em;  
                        }  
 div.schemaOuter {border: 4px double gray; padding: 0em}  
 div.schemaInner { background-color: #eeeeee;  
                    border-top-width: 4px;  
                    border-top-style: double;  
                    border-top-color: #d3d3d3;  
                    border-bottom-width: 4px;  
                    border-bottom-style: double;  
                    border-bottom-color: #d3d3d3;  
                    padding: 4px; margin: 0em }  
 div.schemaHeader { font-weight: bold;  
                     margin: 4px}  
 </style>  
 <link href="http://www.ivoa.net/misc/ivoa_a.html" rel="stylesheet" type="text/css">  
 <link rel="stylesheet" href="http://www.ivoa.net/misc/ivoa_pr.css" type="text/css">  
 <!--<link href="http://www.ivoa.net/misc/ivoa_wd.css" rel="stylesheet" type="text/css">  
 <link rel="stylesheet" href="IVOA-WD.css" type="text/css" /> -->  
 </head>  
 <body bgcolor="white">  
   
 <div class="head">  
 <a href="http://www.ivoa.net/"><img alt="IVOA" src="http://www.ivoa.net/pub/images/IVOA_wb_300.jpg" height="169" width="300"></a>  
   
 <h1>VODataService: a VOResource Schema Extension for Describing  
 Collections and Services<br>  
 Version 1.1</h1>  
6    
7  <h2>IVOA Recommendation 02 December 2010</h2>  \ivoagroup{registry}
8    
9  <dl>  \author[http://www.ivoa.net/twiki/bin/view/IVOA/RayPlante]{Raymond Plante}
10    <dt>This version:</dt>  \author[http://www.ivoa.net/twiki/bin/view/IVOA/MarkusDemleitner]{Markus Demleitner}
11    <dd><a href="http://www.ivoa.net/Documents/VODataService/20101202">  \author[http://www.ivoa.net/twiki/bin/view/IVOA/AurelienStebe]{Aurélien Stébé}
12        http://www.ivoa.net/Documents/VODataService/20101202</a></dd>  \author[http://www.ivoa.net/twiki/bin/view/IVOA/KevinBenson]{Kevin Benson}
13    <dt>Latest version:</dt>  \author[http://www.ivoa.net/twiki/bin/view/IVOA/PatrickDowler]{Patrick Dowler}
14    <dd><a href="http://www.ivoa.net/Documents/VODataService">  \author[http://www.ivoa.net/twiki/bin/view/IVOA/MatthewGraham]{Matthew Graham}
15        http://www.ivoa.net/Documents/VODataService</a></dd>  \author[http://www.ivoa.net/twiki/bin/view/IVOA/GretchenGreene]{Gretchen Greene}
16    \author[http://www.ivoa.net/twiki/bin/view/IVOA/PaulHarrison]{Paul Harrison}
17    <dt>Previous versions:</dt>  \author[http://www.ivoa.net/twiki/bin/view/IVOA/GerardLemson]{Gerard Lemson}
18    <dd>PR: <a href="http://www.ivoa.net/Documents/VODataService/20100916">  \author[http://www.ivoa.net/twiki/bin/view/IVOA/TonyLinde]{Tony Linde}
19        http://www.ivoa.net/Documents/VODataService/20100916</a></dd>  \author[http://www.ivoa.net/twiki/bin/view/IVOA/GuyRixon]{Guy Rixon}
20    <dd>PR: <a href="http://www.ivoa.net/Documents/VODataService/20100914">  
21        http://www.ivoa.net/Documents/VODataService/20100914</a></dd>  \editor{Ray Plante}
22    <dd>PR: <a href="http://www.ivoa.net/Documents/VODataService/20100412">  \editor{Markus Demleitner}
23        http://www.ivoa.net/Documents/VODataService/20100412</a></dd>  
24    <dd>PR: <a href="http://www.ivoa.net/Documents/VODataService/20090903">  \previousversion[http://www.ivoa.net/Documents/VODataService/20101202]{REC
25        http://www.ivoa.net/Documents/VODataService/20090903</a></dd>  1.1}
26    <dd>WD: <a href="http://www.ivoa.net/Documents/WD/ReR/VODataService-20090508.html">  \previousversion[http://www.ivoa.net/Documents/VODataService/20100916]{PR-20100916}
27        http://www.ivoa.net/Documents/WD/ReR/VODataService-20090508.html</a></dd>  \previousversion[http://www.ivoa.net/Documents/VODataService/20100914]{PR-20100914}
28          \previousversion[http://www.ivoa.net/Documents/VODataService/20100412]{PR-20100412}
29    <dt>Authors:</dt>  \previousversion[http://www.ivoa.net/Documents/VODataService/20090903]{PR-20090903}
30    <dd><a href="http://www.ivoa.net/twiki/bin/view/IVOA/RayPlante">  \previousversion[http://www.ivoa.net/Documents/WD/ReR/VODataService-20090508.html]{WD-20090508}
31        Raymond Plante</a>, Editor<br>      
       <a href="http://www.ivoa.net/twiki/bin/view/IVOA/AurelienStebe">  
       Aur&eacute;lien St&eacute;b&eacute;</a><br>  
       <a href="http://www.ivoa.net/twiki/bin/view/IVOA/KevinBenson">  
       Kevin Benson</a><br>  
       <a href="http://www.ivoa.net/twiki/bin/view/IVOA/PatrickDowler">  
       Patrick Dowler</a><br>  
       <a href="http://www.ivoa.net/twiki/bin/view/IVOA/MatthewGraham">  
       Matthew Graham</a><br>  
       <a href="http://www.ivoa.net/twiki/bin/view/IVOA/GretchenGreene">  
       Gretchen Greene</a><br>  
       <a href="http://www.ivoa.net/twiki/bin/view/IVOA/PaulHarrison">  
       Paul Harrison</a><br>  
       <a href="http://www.ivoa.net/twiki/bin/view/IVOA/GerardLemson">  
       Gerard Lemson</a><br>  
       <a href="http://www.ivoa.net/twiki/bin/view/IVOA/TonyLinde">  
       Tony Linde</a><br>  
       <a href="http://www.ivoa.net/twiki/bin/view/IVOA/GuyRixon">  
       Guy Rixon</a><br>  
       and the IVOA Registry Working Group.  
 </dd></dl>  
   
 <hr>  
 </div>  
   
 <h2><a name="abstract" id="abstract">Abstract</a></h2>  
32    
33    \begin{document}
34    \begin{abstract}
35  VODataService refers to an XML encoding standard for a specialized  VODataService refers to an XML encoding standard for a specialized
36  extension of the IVOA Resource Metadata that is useful for describing  extension of the IVOA Resource Metadata that is useful for describing
37  data collections and the services that access them.  It is defined as  data collections and the services that access them.  It is defined as
38  an extension of the core resource metadata encoding standard known as  an extension of the core resource metadata encoding standard known as
39  VOResource [<a href="#VOR">Plante et al. 2008</a>] using XML Schema.  VOResource \citep{2008ivoa.spec.0222P} using XML Schema.
40  The specialized resource types defined by the VODataService schema  The specialized resource types defined by the VODataService schema
41  allow one to describe how the data underlying the resource cover the  allow one to describe how the data underlying the resource cover the
42  sky as well as cover frequency and time.  This coverage description  sky as well as cover frequency and time.  This coverage description
43  leverages heavily the Space-Time Coordinates (STC) standard schema  leverages heavily the Space-Time Coordinates (STC) standard
44  [<a href="#STC">Rots 2007</a>].  VODataService also enables detailed  schema\todo{Fix this}.  VODataService also enables detailed
45  descriptions of tables that includes information useful to the  descriptions of tables that includes information useful to the
46  discovery of tabular data.  It is intended that the VODataService data  discovery of tabular data.  It is intended that the VODataService data
47  types will be particularly useful in describing services that support  types will be particularly useful in describing services that support
48  standard IVOA service protocols.    standard IVOA service protocols.  
49    \end{abstract}
50    
51  <div class="status">  \section*{Acknowledgments}
 <h2><a name="status" id="status">Status of this document</a></h2>  
52    
53  <p>  Versions 1.0 and 1.1 of this document have been developed with support from the
54  This document has been produced by the IVOA Registry Working Group. <br />  National Science Foundation's
 It has been reviewed by IVOA Members and other interested parties, and  
 has been endorsed by the IVOA Executive Committee as an IVOA  
 Recommendation as 01 Oct 2010.  It is a stable document and may be  
 used as reference material or cited as a normative reference from  
 another document. IVOA's role in making the Recommendation is to draw  
 attention to the specification and to promote its widespread  
 deployment.  This enhances the functionality and interoperability  
 inside the Astronomical Community.  
 </p>  
   
 <p>  
 A list of <a href="http://www.ivoa.net/Documents/">current IVOA  
 Recommendations and other technical documents</a> can be found at  
 http://www.ivoa.net/Documents/. </p>  
   
 <h2><a id="acknowledge" name="acknowledge">Acknowledgements</a></h2>  
   
 <p>This document has been developed with support from the  
 <a href="http://www.nsf.gov/">National Science Foundation's</a>  
55  Information Technology Research Program under Cooperative Agreement  Information Technology Research Program under Cooperative Agreement
56  AST0122449 with The Johns Hopkins University, from the  AST0122449 with The Johns Hopkins University, from the
57  <a href="http://www.pparc.ac.uk/">UK Particle Physics and Astronomy  UK Particle Physics and Astronomy
58  Research Council (PPARC)</a>, from the European Commission's (EC)  Research Council (PPARC), from the European Commission's (EC)
59  <a href="http://cordis.europa.eu/fp6/">Sixth  Sixth
60  Framework Programme</a> via the <a href="http://www.astro-opticon.org/">  Framework Programme via the
61  Optical Infrared Coordination Network (OPTICON)</a>, and from EC's  Optical Infrared Coordination Network (OPTICON), and from EC's
62  <a href="http://cordis.europa.eu/fp7/">Seventh Framework Programme</a>  Seventh Framework Programme
63  via its  via its
64  <a href="http://cordis.europa.eu/fp7/ict/e-infrastructure/home_en.html">  eInfrastructure Science Repositories initiative.
65  eInfrastructure Science Repositories initiative</a>.  </p>  
66    Version 1.2 of this document was developed in part with support from the
67    German federal ministry for research and education's e-inf-astro (BMBF
68    FKZ 05A17VH2)
69    
 <a name="conf">  
 <h3>Conformance-related definitions</h3></a>  
70    
71  The words "MUST", "SHALL", "SHOULD", "MAY", "RECOMMENDED", and  \section*{Conformance-related definitions}
 "OPTIONAL" (in upper or lower case) used in this document are to be  
 interpreted as described in IETF standard, RFC 2119  
 <a href="#should">[RFC 2119]</a>.  <p>  
72    
73  The <a name="d:vo"><strong>Virtual Observatory (VO)</strong></a> is  The words ``MUST'', ``SHALL'', ``SHOULD'', ``MAY'', ``RECOMMENDED'', and
74    ``OPTIONAL'' (in upper or lower case) used in this document are to be
75    interpreted as described in IETF standard RFC2119 \citep{std:RFC2119}.
76    
77    The \emph{Virtual Observatory (VO)} is a
78  general term for a collection of federated resources that can be used  general term for a collection of federated resources that can be used
79  to conduct astronomical research, education, and outreach.  to conduct astronomical research, education, and outreach.
80  <a name="d:ivoa">The</a> <a href="http://www.ivoa.net/"><strong>International  The \href{http://www.ivoa.net}{International
81  Virtual Observatory Alliance (IVOA)</strong></a> is a global  Virtual Observatory Alliance (IVOA)} is a global
82  collaboration of separately funded projects to develop standards and  collaboration of separately funded projects to develop standards and
83  infrastructure that enable VO applications.  infrastructure that enable VO applications.
84    
85  </p><p>  
86  XML document <a name="d:valid"><strong>validation</strong></a> is a  \section*{Syntax Notation Using XML Schema}
87  software process that checks that an XML document is not only  
88  well-formed XML but also conforms to the syntax rules defined by the  The eXtensible Markup Language, or XML, is document syntax for marking
89  applicable schema.  Typically, when the schema is defined by one or more  textual information with named tags and is defined by \citet{std:XML}.
90  XML Schema [<a href="#schema">schema</a>] documents (see  The set of XML tag names and the syntax
 <a href="#synnot">next section</a>), 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 go beyond  
 common Schema-aware parsers which ensure conformance with this  
 document.    
 </p>  
   
 <a name="synnot">  
 <h3>Syntax Notation Using XML Schema</h3></a>  
   
 <p>The eXtensible Markup Language, or XML, is a document syntax for  
 marking textual information with named tags and is defined by the  
 World Wide Web Consortium (W3C) Recommendation,  
 <a href="http://www.w3.org/TR/REC-xml">XML 1.0</a>  
 [<a href="#xml">XML</a>].  The set of XML tag names and the syntax  
91  rules for their use is referred to as the document schema.  One way to  rules for their use is referred to as the document schema.  One way to
92  formally define a schema for XML documents is using the W3C standard  formally define a schema for XML documents is using the W3C standard
93  known as XML Schema [<a href="#schema">schema</a>].</p>  known as XML Schema \citep{std:XSD}.
94    
95  <p>  The XML Schemas of VODataService as well as VOResource and its other
96  This document defines the VOResource schema using XML Schema.  The  extensions are
97  full Schema document is listed in <a href="#appA">Appendix A</a>.  available from the IVOA document
98    repository\footnote{\url{http://www.ivoa.net/xml}} at any time.
99  Parts of the schema appear within the main sections of this document;  Parts of the schema appear within the main sections of this document;
100  however, documentation nodes have been left out for the sake of brevity.    however, documentation nodes have been left out for the sake of brevity.
101  </p>  Where the content of the pieces of schema embedded in this text
102    diverges from the schema document in the IVOA document
103    repository, the version in the schema repository is authoritative.
104    
 <p>  
105  References to specific elements and types defined in the VOResource  References to specific elements and types defined in the VOResource
106  schema include the namespaces prefix, <code>vr</code>, as in  schema include the namespaces prefix \xmlel{vr} as in
107  <code>vr:Resource</code> (a type defined in the VOResource schema).  \xmlel{vr:Resource} (a type defined in the VOResource schema; the
108  References to specific elements and types defined in the VODataService  recommended namespace prefix for VODataService as per Registry
109  extension schema include the namespaces prefix, <code>vs</code>, as in  Interfaces 1.1 \citep{registry interfaces 1.1}, sect.~2.2, is \xmlel{vs}.
110  <code>vs:DataCollection</code> (a type defined in the VODataService schema).  
111  Use of the <code>vs</code> prefix in compliant instance documents is  \section{Introduction}
112  strongly recommended, particularly in the applications that involve  
113  IVOA Registries (see [RI], section 3.1.2).  Elsewhere, the use is not  The VOResource standard \citep{2008ivoa.spec.0222P} provides a means of
114  required.    encoding IVOA Resource Metadata\todo{decouple from RM} in XML.
115  </p>  VOResource uses XML Schema \citep{std:XSD} to define
   
 <h2><a id="contents" name="contents">Contents</a></h2>  
 <ul class="toc">  
   <li><a href="#abstract">Abstract</a></li>  
   <li><a href="#status">Status of this document</a></li>  
   <li><a href="#acknowledge">Acknowledgments</a></li>  
   <li><a href="#conf">Conformance-related definitions</a></li>  
   <li><a href="#synnot">Syntax Notation Using XML Schema</a></li>  
   <li><a href="#Intro">1. Introduction</a></li>  
        <ul class="toc">  
          <li> <a href="#arch">1.1. The Role in the IVOA Architecture</a></li>  
          <li> <a href="#model">1.2. Purpose</a></li>  
        </ul>  
   <li><a href="#model">2. The VOResource Data Model</a>  
        <ul class="toc">  
          <li> <a href="#ns">2.1. The Schema Namespace and Location</a></li>  
          <li> <a href="#summ">2.2. Summary of Metadata Concepts</a></li>  
        </ul>  
   </li><li><a href="#metadata">3. The VODataService Metadata</a>  
        <ul class="toc">  
          <li> <a href="#resext">3.1.  Resource Type Extensions</a> </li>  
          <li> <a href="#cover"> 3.2.  Coverage</a> </li>  
          <li> <a href="#table">3.3.  Tabular Data</a> </li>  
          <li> <a href="#paramif">3.4.  Interface Type Extension: ParamHTTP</a> </li>  
          <li> <a href="#param">3.5.  Data Parameters</a> </li>  
        </ul></li>  
   <li><a href="#appA">Appendix A: the VODataService XML Schema</a></li>  
   <li><a href="#appB">Appendix B: Compatibility Issues with  
                       VODataService 1.0</a></li>  
   <li><a href="#appC">Appendix C: Change History</a></li>  
   <li><a href="#References">References</a></li>  
 </ul>  
 <hr>  
   
 <h2><a name="Intro">1. Introduction</a></h2>  
   
 <p>  
 The VOResource standard [<a href="#VOR">VOR</a>] provides a means of  
 encoding IVOA Resource Metadata [<a href="#RM">RM</a>] in XML.  
 VOResource uses XML Schema [<a href="#schema">schema</a>] to define  
116  most of the XML syntax rules (while a few of the syntax rules are  most of the XML syntax rules (while a few of the syntax rules are
117  outside the scope of Schema).  VOResource also describes mechanisms  outside the scope of Schema).  VOResource also describes mechanisms
118  for creating extensions to the core VOResource metadata.  This allows  for creating extensions to the core VOResource metadata.  This allows
119  for the standardization of new metadata for describing specialized  for the standardization of new metadata for describing specialized
120  kinds of resources in a modular way without deprecating the core  kinds of resources in a modular way without deprecating the core
121  schema or other extensions.  This document defines one such extension  schema or other extensions.  This document defines one such extension
122  referred to as <strong>VODataService</strong>.    referred to as \strong{VODataService}.
 </p>  
123    
124  <h3><a name="arch">1.1. The Role in the IVOA Architecture</a></h3>  \subsection{The Role in the IVOA Architecture}
125    
126  The IVOA Architecture [<a href="#Arch">Arch</a>] provides a high-level  The IVOA Architecture \citep{note:VOARCH} provides a high-level
127  view of how IVOA standards work together to connect users and  view of how IVOA standards work together to connect users and
128  applications with providers of data and services, as depicted in the  applications with providers of data and services, as depicted in the
129  diagram in Fig. 1.      diagram in Fig. 1.\todo{Fix}
   
 <p>  
 <center>  
 <font size="-1">  
 <img src="vodataservice-in-arch.png" width="756"/> <br />  
 <blockquote>  
 <strong>Figure 1.  VODataService in the IVOA Architecture.</strong>  
 The Registry enables applications in the User Layer to discover  
 archives and services in the Resource Layer.  The metadata and data  
 model standards (in blue text and boxes) gives structure to the  
 information that enables that discovery.    
 </blockquote>  
 </font>  
 </center>  
 </p>  
   
130    
131  In this architecture, users can leverage a variety of tools (from the  In this architecture, users can leverage a variety of tools (from the
132  User Layer) to discover archives and services of interest (represented  User Layer) to discover archives and services of interest (represented
133  in the Resource Layer); registries provide the means for this  in the Resource Layer); registries provide the means for this
134  discovery.  A registry is a repository of descriptions of resources  discovery.  A registry is a repository of descriptions of resources
135  that can be searched based on the metadata in those descriptions.  The  that can be searched based on the metadata in those descriptions.  The
136  Resource Metadata standard [<a href="#RM">RM</a>] defines the core  Resource Metadata standard \citep{RM} defines the core
137  concepts used in the resource descriptions, and the VOResource  concepts used in the resource descriptions, and the VOResource
138  standard [<a href="#VOR">VOR</a>] defines the XML format.  As an  standard defines the XML format.  As an
139  extension of VOResource, the VODataService standard, defined in this  extension of VOResource, the VODataService standard, defined in this
140  document, specifically supports descriptions of data collections and  document, specifically supports descriptions of data collections and
141  services.    services.  
142    
143  <h3><a name="purpose">1.2. Purpose</a></h3>  \subsection{Purpose}
144    
145    
 <p>  
146  The purpose of this extension is to define common XML Schema  The purpose of this extension is to define common XML Schema
147  types--particularly new resource types--that are useful for describing  types -- particularly new resource types -- that are useful for describing
148  data collections and services that access data.  In particular, it  data collections and services that access data.  In particular, it
149  allows one to describe the data's <em>coverage</em>:  the parts of the  allows one to describe the data's \emph{coverage}:  the parts of the
150  sky with which the data are associated and the time and frequency ranges that  sky with which the data are associated and the time and frequency ranges that
151  were observed or modeled to create the data.  It also allows one to  were observed or modeled to create the data.  It also allows one to
152  describe tables in detail.  In particular, one can describe each of  describe tables in detail.  In particular, one can describe each of
153  the columns of a table--providing, for example, its name, type, UCD  the columns of a table--providing, for example, its name, type, UCD
154  [<a href="#UCD">UCD</a>],  \citep{UCD},
155  and textual description.  When this metadata is part of a resource  and textual description.  When this metadata is part of a resource
156  description in a registry [<a href="#VOR">VOR</a>], it becomes possible  description in a registry \citep{VOR}, it becomes possible
157  to discover tables that contain particular kinds of data.    to discover tables that contain particular kinds of data.  
 </p>  
158    
159  <p>  
160    
161  It is intended that VODataService will be central to describing  It is intended that VODataService will be central to describing
162  services that support standard IVOA data access layer protocols such  services that support standard IVOA data access layer protocols such
163  as Simple Image Access [<a href="#SIA">SIA</a>] and Simple Cone Search  as Simple Image Access \citep{SIA} and Simple Cone Search
164  [<a href="#SCS">SCS</a>].  While other VOResource extensions would  \citep{SCS}.  While other VOResource extensions would
165  define the protocol-specific metadata (encapsulated as a standard  define the protocol-specific metadata (encapsulated as a standard
166  <em>capability</em> [<a href="#VOR">VOR</a>]), the general service  \emph{capability} \citep{VOR}), the general service
167  resource description would share the common data concepts such as  resource description would share the common data concepts such as
168  coverage and tabular data.  Note, however, that a service described  coverage and tabular data.  Note, however, that a service described
169  using the VODataService schema need not support any standard  using the VODataService schema need not support any standard
170  protocols.  With the VODataService extension schema plus the core  protocols.  With the VODataService extension schema plus the core
171  VOResource schema, it is possible to describe a custom service  VOResource schema, it is possible to describe a custom service
172  interface that accesses data.    interface that accesses data.  
 </p>  
173    
174  <p>  
175  As a legal extension of VOResource [<a href="#VOR">VOR</a>], the use  
176    As a legal extension of VOResource \citep{VOR}, the use
177  of VODataService is subject to the rules and recommendations for XML  of VODataService is subject to the rules and recommendations for XML
178  [<a href="#xml">xml</a>], XML Schema [<a href="#schema">schema</a>],  \citep{xml}, XML Schema \citep{schema},
179  and VOResource itself.    and VOResource itself.  
 </p>  
180    
 <a name="model">  
 <h2>2. The VODataService Data Model</h2></a>  
181    
182  <p>  \section{The VODataService Data Model}
183    
184    
185  The VODataService extension in general enables the description of two  The VODataService extension in general enables the description of two
186  types of resources:  data collections and services that access data.  types of resources:  data collections and services that access data.
187  Here's an example of a VOResource document (abbreviated for the  Here's an example of a VOResource document (abbreviated for the
188  purposes of illustration) that describes a service from the NASA  purposes of illustration) that describes a service from the NASA
189  Extragalactic Database (NED) that provides measured redshifts for a  Extragalactic Database (NED) that provides measured redshifts for a
190  given object.  given object.
 </p>  
191    
192    
193  <div class="exampleOuter">  
194  <a name="organisation.xml">  \begin{lstlisting}[language=XML]
195  </a><div class="exampleHeader">Example</div>  <ri:Resource xmlns=""
196  <div class="exampleWrapper">A description               xsi:type="vs:CatalogService" status="active"
 of a service returning tabular data,  
 <a href="http://www.ivoa.net/Documents/VODataService/20100412/catalogservice.xml">catalogservice.xml</a></div>  
 <div class="exampleInner">  
 <table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td>  
 <pre>  
   
   
 <font color="red">2</font>  
   
   
   
 <font color="purple">1</font>  
 <font color="purple">1</font>  
 <font color="purple">1</font>  
   
 <font color="blue">3  
 3  
 3  
 3  
 3  
 3</font>  
   
 <font color="brown">4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
 4  
   
 4</font>  
 <font color="green">5  
 5  
 5  
 5  
 5  
 5  
 5  
 5  
 5  
 5  
 5  
 5  
 5  
 5  
 5  
 5  
 5</font>  
 <font color="brown">4</font>  
   
 <font color="#000090">6  
 6  
 6  
 6  
 6  
 6  
 6  
 6  
 6  
   
 6  
 6  
 6</font>  
   
 <font color="#d00000">7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7  
 7</font>  
   
 </pre></td><td bgcolor="#d5dee3" width="100%">  
 <pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;  
 &lt;ri:Resource xmlns=""  
              <font color="red">xsi:type="vs:CatalogService"</font> status="active"  
197               updated="2008-04-29T14:51:54" created="2005-10-14T01:46:00"               updated="2008-04-29T14:51:54" created="2005-10-14T01:46:00"
198               xmlns:ri="http://www.ivoa.net/xml/RegistryInterface/v1.0"               xmlns:ri="http://www.ivoa.net/xml/RegistryInterface/v1.0"
199               xmlns:vr="http://www.ivoa.net/xml/VOResource/v1.0"               xmlns:vr="http://www.ivoa.net/xml/VOResource/v1.0"
200               <font color="purple">xmlns:vs="http://www.ivoa.net/xml/VODataService/v1.1"               xmlns:vs="http://www.ivoa.net/xml/VODataService/v1.1"
201               xmlns:stc="http://www.ivoa.net/xml/STC/stc-v1.30.xsd"               xmlns:stc="http://www.ivoa.net/xml/STC/stc-v1.30.xsd"
202               xmlns:xlink="http://www.w3.org/1999/xlink" </font>               xmlns:xlink="http://www.w3.org/1999/xlink"
203               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
204               <font color="blue">xsi:schemaLocation="http://www.ivoa.net/xml/VOResource/v1.0               xsi:schemaLocation="http://www.ivoa.net/xml/VOResource/v1.0
205                                   http://www.ivoa.net/xml/VOResource/v1.0                                   http://www.ivoa.net/xml/VOResource/v1.0
206                                   http://www.ivoa.net/xml/VODataService/v1.1                                   http://www.ivoa.net/xml/VODataService/v1.1
207                                   http://www.ivoa.net/xml/VODataService/v1.1                                   http://www.ivoa.net/xml/VODataService/v1.1
208                                   http://www.ivoa.net/xml/STC/stc-v1.30.xsd                                   http://www.ivoa.net/xml/STC/stc-v1.30.xsd
209                                   http://www.ivoa.net/xml/STC/stc-v1.30.xsd"&gt;</font>                                   http://www.ivoa.net/xml/STC/stc-v1.30.xsd">
210    
211    <font color="brown">&lt;title&gt;The NASA/IPAC Extragalactic Database&lt;/title&gt;    <title>The NASA/IPAC Extragalactic Database</title>
212    &lt;shortName&gt;NED_redshift&lt;/shortName&gt;    <shortName>NED_redshift</shortName>
213    &lt;identifier&gt;ivo://ned.ipac/Redshift_By_Object_Name&lt;/identifier&gt;    <identifier>ivo://ned.ipac/Redshift_By_Object_Name</identifier>
214    &lt;curation&gt;    <curation>
215      &lt;publisher&gt;The NASA/IPAC Extragalactic Database&lt;/publisher&gt;      <publisher>The NASA/IPAC Extragalactic Database</publisher>
216      &lt;contact&gt;      <contact>
217        &lt;name&gt;Olga Pevunova&lt;/name&gt;        <name>Olga Pevunova</name>
218        &lt;email&gt;contact@datacenter.edu&lt;/email&gt;        <email>contact@datacenter.edu</email>
219      &lt;/contact&gt;      </contact>
220    &lt;/curation&gt;    </curation>
221    &lt;content&gt;    <content>
222      &lt;subject&gt;redshift&lt;/subject&gt;      <subject>redshift</subject>
223      &lt;subject&gt;galaxies&lt;/subject&gt;      <subject>galaxies</subject>
224      &lt;description&gt;      <description>
225        NED is built around a master list of extragalactic objects for        NED is built around a master list of extragalactic objects for
226        which cross-identifications of names have been established,        which cross-identifications of names have been established,
227        accurate positions and redshifts entered to the extent possible,        accurate positions and redshifts entered to the extent possible,
228        and some basic data collected. This service will return recorded        and some basic data collected. This service will return recorded
229        redshifts for a given object.        redshifts for a given object.
230      &lt;/description&gt;      </description>
231      &lt;referenceURL&gt;http://nedwww.ipac.caltech.edu/help/data_help.html#zdat&lt;/referenceURL&gt;      <referenceURL>http://nedwww.ipac.caltech.edu/help/data_help.html#zdat</referenceURL>
232      &lt;type&gt;BasicData&lt;/type&gt;      <type>BasicData</type>
233      &lt;contentLevel&gt;Research&lt;/contentLevel&gt;      <contentLevel>Research</contentLevel>
234    &lt;/content&gt;    </content>
235    
236    &lt;capability&gt;    <capability>
237      <font color="green">&lt;interface xsi:type="vs:ParamHTTP"&gt;      <interface xsi:type="vs:ParamHTTP">
238        &lt;accessURL use="base"&gt;        <accessURL use="base">
239           http://nedwww.ipac.caltech.edu/cgi-bin/nph-datasearch?search_type=Redshifts&amp;amp;           http://nedwww.ipac.caltech.edu/cgi-bin/nph-datasearch?search_type=Redshifts&amp;amp;
240        &lt;/accessURL&gt;        </accessURL>
241        &lt;queryType&gt;GET&lt;/queryType&gt;        <queryType>GET</queryType>
242        &lt;resultType&gt;application/xml+votable&lt;/resultType&gt;        <resultType>application/xml+votable</resultType>
243        &lt;param use="required"&gt;        <param use="required">
244          &lt;name&gt;objname&lt;/name&gt;          <name>objname</name>
245          &lt;description&gt;Name of object&lt;/description&gt;          <description>Name of object</description>
246          &lt;dataType&gt;string&lt;/dataType&gt;          <dataType>string</dataType>
247        &lt;/param&gt;        </param>
248        &lt;param use="required"&gt;        <param use="required">
249          &lt;name&gt;of&lt;/name&gt;          <name>of</name>
250          &lt;description&gt;Output format parameter, must be "xml_main" for VOTable output.&lt;/description&gt;          <description>Output format parameter, must be "xml_main" for VOTable output.</description>
251          &lt;dataType&gt;string&lt;/dataType&gt;          <dataType>string</dataType>
252        &lt;/param&gt;        </param>
253      &lt;/interface&gt;</font>      </interface>
254    &lt;/capability&gt;</font>    </capability>
255    
256    <font color="#000090">&lt;coverage&gt;    <coverage>
257      &lt;stc:STCResourceProfile&gt;      <stc:STCResourceProfile>
258         &lt;stc:AstroCoordSystem xlink:type="simple"         <stc:AstroCoordSystem xlink:type="simple"
259                               xlink:href="ivo://STClib/CoordSys#UTC-FK5-TOPO"                               xlink:href="ivo://STClib/CoordSys#UTC-FK5-TOPO"
260                               id="UTC-FK5-TOPO"/&gt;                               id="UTC-FK5-TOPO"/>
261         &lt;stc:AstroCoordArea coord_system_id="UTC-FK5-TOPO"&gt;         <stc:AstroCoordArea coord_system_id="UTC-FK5-TOPO">
262            &lt;stc:AllSky/&gt;            <stc:AllSky/>
263         &lt;/stc:AstroCoordArea&gt;         </stc:AstroCoordArea>
264      &lt;/stc:STCResourceProfile&gt;      </stc:STCResourceProfile>
265            
266      &lt;waveband&gt;Radio&lt;/waveband&gt;      <waveband>Radio</waveband>
267      &lt;waveband&gt;Optical&lt;/waveband&gt;      <waveband>Optical</waveband>
268    &lt;/coverage&gt;</font>    </coverage>
269    
270    <font color="#d00000">&lt;tableset&gt;    <tableset>
271      &lt;schema&gt;      <schema>
272        &lt;name&gt;default&lt;/name&gt;        <name>default</name>
273        &lt;table type="output"&gt;        <table type="output">
274          &lt;name&gt;default&lt;/name&gt;          <name>default</name>
275          &lt;column&gt;          <column>
276            &lt;name&gt;No.&lt;/name&gt;            <name>No.</name>
277            &lt;description&gt;            <description>
278               A sequential data-point number applicable to this list only.               A sequential data-point number applicable to this list only.
279            &lt;/description&gt;            </description>
280            &lt;ucd&gt;meta.number&lt;/ucd&gt;            <ucd>meta.number</ucd>
281            &lt;dataType xsi:type="vs:VOTableType"&gt;int&lt;/dataType&gt;            <dataType xsi:type="vs:VOTableType">int</dataType>
282          &lt;/column&gt;          </column>
283          &lt;column&gt;          <column>
284            &lt;name&gt;Name in Publication&lt;/name&gt;            <name>Name in Publication</name>
285            &lt;description&gt;            <description>
286               The object's name in NED's standard format, of the object to which the data apply.               The object's name in NED's standard format, of the object to which the data apply.
287            &lt;/description&gt;            </description>
288            &lt;ucd&gt;meta.id;name&lt;/ucd&gt;            <ucd>meta.id;name</ucd>
289            &lt;dataType xsi:type="vs:VOTableType"&gt;string&lt;/dataType&gt;            <dataType xsi:type="vs:VOTableType">string</dataType>
290          &lt;/column&gt;          </column>
291          &lt;column&gt;          <column>
292            &lt;name&gt;Published Velocity&lt;/name&gt;            <name>Published Velocity</name>
293            &lt;description&gt;            <description>
294              The radial velocity , derived from derived from the shift of some spectral feature, in km/sec              The radial velocity , derived from derived from the shift of some spectral feature, in km/sec
295            &lt;/description&gt;            </description>
296            &lt;unit&gt;km/sec&lt;/unit&gt;            <unit>km/sec</unit>
297            &lt;ucd&gt;src.spect.dopplerVeloc&lt;/ucd&gt;            <ucd>src.spect.dopplerVeloc</ucd>
298            &lt;dataType xsi:type="vs:VOTableType"&gt;int&lt;/dataType&gt;            <dataType xsi:type="vs:VOTableType">int</dataType>
299          &lt;/column&gt;          </column>
300        &lt;/table&gt;        </table>
301      &lt;/schema&gt;      </schema>
302    &lt;/tableset&gt;</font>    </tableset>
303  &lt;/ri:Resource&gt;  </ri:Resource>
304  </pre></td></tr></tbody></table>  \end{lstlisting}
 </div></div>  
305    
306  This example illustrates some of the features of the VODataService  This example illustrates some of the features of the VODataService
307  extension:  extension:
308  <ol>  
309    <li> <font color="purple">the extra namespaces associated with  \begin{enumeration}
310    \item the extra namespaces associated with
311         VODataService metadata; if STC coverage information         VODataService metadata; if STC coverage information
312         [<a href="#STC">STC</a>] is not         \citep{STC} is not
313         included, then only the VODataService namespaced is needed. </font> </li>         included, then only the VODataService namespaced is needed.
314    <li> <font color="red">the specific type of resource indicated by  \item the specific type of resource indicated by
315         the value of the <code>xsi:type</code> attribute; in this case         the value of the \xmlel{xsi:type} attribute; in this case
316         <code>vs:CatalogService</code> indicates that this is         \xmlel{vs:CatalogService} indicates that this is
317         describing a service that accesses tabular data.</font></li>         describing a service that accesses tabular data.
318    <li> <font color="blue">the location of the VOResource-related schema  \item the location of the VOResource-related schema
319         documents used by this description, </font> </li>         documents used by this description,
320    <li> <font color="brown">the core VOResource metadata, </font></li>  \item the core VOResource metadata,
321    <li> <font color="green">an interface described by the  \item an interface described by the
322         VODataService interface type, <code>vs:ParamHTTP</code>; this         VODataService interface type, \xmlel{vs:ParamHTTP}; this
323         type can indicate input arguments it supports. </font></li>         type can indicate input arguments it supports.
324    <li> <font color="#000090">a description of the  \item a description of the
325         <a href="#d:coverage">coverage</a>, including an STC         coverage, including an STC
326         description plus waveband keywords.</font></li>         description plus waveband keywords.
327    <li> <font color="#d00000">a description of the table that is returned  \item a description of the table that is returned
328         by the service.</font> </li>         by the service.
329  </ol>  \end{enumeration}
330    
331    \subsection{The Schema Namespace and Location}
332    
 <h3><a name="ns">2.1. The Schema Namespace and Location</a></h3>  
333    
 <p>  
334  The namespace associated with VODataService extensions is  The namespace associated with VODataService extensions is
335  "http://www.ivoa.net/xml/VODataService/v1.1".    $$\mbox{\texttt{http://www.ivoa.net/xml/VODataService/v1.1}}.$$
336  Just like the namespace URI for the VOResource schema, the  Just like the namespace URI for the VOResource schema, the
337  VODataService namespace URI can be interpreted as a URL.  Resolving it  VODataService namespace URI can be interpreted as a URL.  Resolving it
338  will return the XML Schema document (given in <a href="#appA">Appendix A</a>)  will return the XML Schema document
339  that defines the VODataService schema.    that defines the VODataService schema.\todo{explain constant ns vs.
340  </p>  v1.1}
341    
342    
343    
 <p>  
344  Authors of VOResource instance documents may choose to  Authors of VOResource instance documents may choose to
345  provide a location for the VOResource XML Schema document and its  provide a location for the VOResource XML Schema document and its
346  extensions using the  extensions using the
347  <a href="http://www.w3.org/TR/xmlschema-0/#schemaLocation">  \xmlel{xsi:schemaLocation}</a> attribute.  While the choice of
 <code>xsi:schemaLocation</code></a> attribute.  While the choice of  
348  the location value is the choice of the author, this specification  the location value is the choice of the author, this specification
349  recommends using the VODataService namespace URI as its location URL  recommends using the VODataService namespace URI as its location URL
350  (as illustrated in the example above), as in,  (as illustrated in the example above), as in,
 </p>  
351    
352  <blockquote>  \begin{lstlisting}[language=XML]
353  <pre>xsi:schemaLocation="http://www.ivoa.net/xml/VODataService/v1.1  xsi:schemaLocation="http://www.ivoa.net/xml/VODataService/v1.1
354                      http://www.ivoa.net/xml/VODataService/v1.1"</pre>                      http://www.ivoa.net/xml/VODataService/v1.1"
355  </blockquote>  \end{lstlisting}
356    
357  <p>  
358  </p><blockquote>  \begin{admonition}
359  <table bgcolor="#dddddd" border="2" cellpadding="5"><tbody><tr><td>  The IVOA Registry Interface standard \citep{RI}
360  <dl>         actually \emph{requires} that the VOResource records it
   <dt> <strong>Note:</strong> </dt>  
   <dd> The IVOA Registry Interface standard [<a href="#RI">RI</a>]  
        actually <em>requires</em> that the VOResource records it  
361         shares with other registries provide location URLs via         shares with other registries provide location URLs via
362         <code>xsi:schemaLocation</code> for the VOResource schema and         \xmlel{xsi:schemaLocation} for the VOResource schema and
363         all legal extension schemas that are used in the records.  This         all legal extension schemas that are used in the records.  This
364         rule would apply to the VODataService schema.  </dd>         rule would apply to the VODataService schema.
365  </dl>  \end{admonition}
366  </td></tr></tbody></table>  
 </blockquote>  
 <p></p>  
367    
368  <p>  The prefix, \xmlel{vs}, is used by convention as the prefix
 The prefix, <code>vs</code>, is used by convention as the prefix  
369  defined for the VODataService schema; however, instance documents may  defined for the VODataService schema; however, instance documents may
370  use any prefix.  In applications where common use of prefixes is  use any prefix.  In applications where common use of prefixes is
371  recommended (such as with the Registry Interface specification [<a  recommended (such as with the Registry Interface specification [<a
372  href="#RI">RI</a>]), use of the <code>vs</code> prefix is recommended.  href="#RI">RI</a>]), use of the \xmlel{vs} prefix is recommended.
373  Note also that in this document, the <code>vr</code> prefix is used to  Note also that in this document, the \xmlel{vr} prefix is used to
374  label, as shorthand, a type or element name that is defined in the  label, as shorthand, a type or element name that is defined in the
375  VOResource schema, as in <code>vr:Resource</code>.  VOResource schema, as in \xmlel{vr:Resource}.
 </p>  
376    
377  <p>  
378  </p><blockquote>  
379  <table bgcolor="#dddddd" border="2" cellpadding="5"><tbody><tr><td>  \begin{admonition}
380  <dl>  (todo: remove this; doesn't really apply any more; and there *really*
381    <dt> <strong>Note:</strong> </dt>  shouldn't be any VODS 1.0 around any more)
382    <dd> One reason one may <em>not</em> be able to use <code>vs</code>  
383    One reason one may \emph{not} be able to use \xmlel{vs}
384         to represent the VODataService schema, version 1.1, is because         to represent the VODataService schema, version 1.1, is because
385         it is already in defined to represent VODataService v1.0 and         it is already in defined to represent VODataService v1.0 and
386         cannot be overridden.  At this writing, there are no IVOA         cannot be overridden.  At this writing, there are no IVOA
387         applications in which this is the case.  Consult         applications in which this is the case.  Consult
388         <a href="#appB">Appendix B</a> for more details on         <a href="#appB">Appendix B</a> for more details on
389         compatibility issues.</dd>         compatibility issues.</dd>
390  </dl>  \end{admonition}
391  </td></tr></tbody></table>  
392  </blockquote>  
393  <p></p>  As recommend by the VOResource standard \citep{VOR}, the
394    VODataService schema sets \xmlel{elementFormDefault="unqualified"}.
 <p>  
 As recommend by the VOResource standard [<a href="#VOR">VOR</a>], the  
 VODataService schema sets <code>elementFormDefault="unqualified"</code>.  
395  This means that it is not necessary to qualify element names defined  This means that it is not necessary to qualify element names defined
396  in this schema with a namespace prefix (as there are no global  in this schema with a namespace prefix (as there are no global
397  elements defined).  The only place it is usually needed is as a  elements defined).  The only place it is usually needed is as a
398  qualifier to a VODataService type name given as the value of an  qualifier to a VODataService type name given as the value of an
399  <code>xsi:type</code> attribute.    \xmlel{xsi:type} attribute.  
400  </p>  
401    
402    \subsection{Summary of Metadata Concepts}
403    \label{sect:summ}
404    
 <a name="summ">  
 <h3>2.2. Summary of Metadata Concepts</h3></a>  
405    
 <p>  
406  The VODataService extension defines four new types of resources.  Two inherit  The VODataService extension defines four new types of resources.  Two inherit
407  directly from <code>vr:Resource</code>:  directly from \xmlel{vr:Resource}:
 </p>  
408    
409  <blockquote>  
410  <dl>  \begin{bigdescription}
411    <dt> <code>vs:DataCollection</code> </dt>  \item[\xmlel{vs:DataCollection}]
412    <dd> This resource declares the existence of a collection of data, what  This resource declares the existence of a collection of data, what
413         it represents, and how to get it.  The access to the data may be         it represents, and how to get it.  The access to the data may be
414         limited to a human-readable web page (given by         limited to a human-readable web page (given by
415         <code>content/referenceURL</code>); however, if the         \xmlel{content/referenceURL}); however, if the
416         contents of the collection are available statically via a         contents of the collection are available statically via a
417         URL (e.g. an FTP URL to a directory containing all the files),         URL (e.g. an FTP URL to a directory containing all the files),
418         that URL can be provided.  It can also provide pointers to         that URL can be provided.  It can also provide pointers to
419         other IVOA registered services that can be used to access the data.         other IVOA registered services that can be used to access the data.
420         </dd>         \todo{deprecate}
421    
422    <dt> <code>vs:StandardSTC</code>  \item[\xmlel{vs:StandardSTC}]
423    <dd> This resource type declares one or more coordinate systems described  This resource type declares one or more coordinate systems described
424         using STC [<a href="#STC">STC</a>] such that each can be         using STC \citep{STC} such that each can be
425         assigned a globally unique identifier (based on the IVOA         assigned a globally unique identifier (based on the IVOA
426         identifier for the resource record itself).  This identifier         identifier for the resource record itself).  This identifier
427         can then be referenced in any other STC description in lieu of         can then be referenced in any other STC description in lieu of
428         a fully described coordinate system.  Coordinate systems         a fully described coordinate system.  Coordinate systems
429         described in this way become reusable standards once they are         described in this way become reusable standards once they are
430         registered in an IVOA registry.         registered in an IVOA registry.\todo{deprecate/remove}
431  </dl>  \end{bigdescription}
 </blockquote>  
432    
 <p>  
433  The other two resource types represent specialized services:  The other two resource types represent specialized services:
 </p>  
434    
435  <blockquote>  
436  <dl>  \begin{bigdescription}
437    <dt> <code>vs:DataService</code> </dt>  \item[\xmlel{vs:DataService}]
438    <dd> Inheriting from <code>vr:Service</code>, this type is for  Inheriting from \xmlel{vr:Service}, this type is for
439         services that access astronomical data.  It adds the ability to         services that access astronomical data.  It adds the ability to
440         describe the data's <a href="#d:coverage">coverage</a> of the         describe the data's coverage of the
441         sky, frequency, and time. </dt>         sky, frequency, and time.
442    
443    <dt> <code>vs:CatalogService</code> </dt>  \item[\xmlel{vs:CatalogService}]
444    <dd> Inheriting from <code>vs:DataService</code>, this type  Inheriting from \xmlel{vs:DataService}, this type
445         specifically refers to a service that accesses tabular data.         specifically refers to a service that accesses tabular data.
446         In addition to the coverage information, this type adds the         In addition to the coverage information, this type adds the
447         ability to describe the tables and their columns.  This is         ability to describe the tables and their columns.  This is
448         intended for describing services that support the "simple" IVOA         intended for describing services that support the ``simple'' IVOA
449         data access layer protocols such as Simple Image Access         data access layer protocols such as Simple Image Access
450         [<a href="#SIA">SIA</a>] and Simple Cone Search         \citep{SIA} and Simple Cone Search
451         [<a href="#SCS">SCS</a>].  </dd>         \citep{SCS}.
452  </dl>  
 </blockquote>  
453    
454  <p>  In general, \xmlel{coverage} refers to
 In general, <a name="d:coverage"><code>coverage</code></a> refers to  
455  the extent that data samples the measurement range of the sky (space),  the extent that data samples the measurement range of the sky (space),
456  frequency, and time.  The coverage metadata (encoded via the  frequency, and time.  The coverage metadata (encoded via the
457  <code>vs:Coverage</code> type) has two parts.  The first part  \xmlel{vs:Coverage} type) has two parts.  The first part
458  allows a full STC profile description (via the imported STC element,  allows a full STC profile description (via the imported STC element,
459  <code>&lt;stc:STCResourceProfile&gt;</code>).  The second part  \xmlel{stc:STCResourceProfile})\todo{deprecate}.  The second part
460  captures key coverage metadata defined in the IVOA Resource Metadata  captures key coverage metadata defined in the IVOA Resource Metadata
461  standard [<a href="#RM">RM</a>].  The RM-derived coverage elements can  standard \citep{RM}.  The RM-derived coverage elements can
462  be considered summarizing metadata for many of the details that  be considered summarizing metadata for many of the details that
463  <em>may</em> appear within the STC description, and enables simpler  \emph{may} appear within the STC description, and enables simpler
464  searching of high-level coverage information.  searching of high-level coverage information.
 </p>  
465    
466  <p>  
467    
468  The detailed STC profile contained within the  The detailed STC profile contained within the
469  <code>&lt;stc:STCResourceProfile&gt;</code> element is capable of  \xmlel{stc:STCResourceProfile} element is capable of
470  describing coverage not only in space, time, and frequency but also  describing coverage not only in space, time, and frequency but also
471  velocity and redshift.  The profile contains up to three types of  velocity and redshift.  The profile contains up to three types of
472  component descriptions ([<a href="#STC">STC</a>], section 4.1):  component descriptions (\citep{STC}, section 4.1):
473  coordinate systems, coordinate values, and coordinate areas or ranges.  coordinate systems, coordinate values, and coordinate areas or ranges.
474  The first component describes the coordinate systems to which coordinate  The first component describes the coordinate systems to which coordinate
475  values, areas, and regions are referenced.  While any arbitrary  values, areas, and regions are referenced.  While any arbitrary
476  system can be described in this first part, it is expected that most  system can be described in this first part, it is expected that most
477  VODataService instances will provide a simple pointer to a predefined  VODataService instances will provide a simple pointer to a predefined
478  system in a registered <code>vs:StandardSTC</code> record (using the  system in a registered \xmlel{vs:StandardSTC} record (using the
479  mechanism summarized in section 3.1.2 below).  The coordinate values  mechanism summarized in section~\ref{todo} below).  The coordinate values
480  part will usually be used to describe the coordinate resolution,  part will usually be used to describe the coordinate resolution,
481  errors, or typical sizes.  The coordinate areas part describes actual  errors, or typical sizes.  The coordinate areas part describes actual
482  regions or ranges covered by the resource in any of the given  regions or ranges covered by the resource in any of the given
483  coordinate systems.    coordinate systems.  
 </p>  
484    
485  <p><a name="table_set"></a>  
486  Table descriptions appear within a single <code>&lt;tableset&gt;</code>  Table descriptions appear within a single \xmlel{tableset}
487  element.  This element can in turn can contain one or more  element.  This element can in turn can contain one or more
488  <code>&lt;schema&gt;</code> element in which each <strong>schema</strong>  \xmlel{schema} element in which each schema
489  represents a set of logically related tables.  It is not required that  represents a set of logically related tables.  It is not required that
490  that the schema grouping match the underlying database's  that the schema grouping match the underlying database's
491  <em>catalogs</em> or <em>schemas</em> (as defined in  \emph{catalogs} or \emph{schemas} (as defined in
492  [<a href="#SQLGuide">SQLGuide</a>]), though it may.  In some cases,  \citep{SQLGuide}), though it may.  In some cases,
493  such as when describing the table that is returned from an SIA  such as when describing the table that is returned from an SIA
494  service, the terms <em>catalog</em> and <em>schema</em> may have  service, the terms \emph{catalog} and \emph{schema} may have
495  little relevance; in this case, the table can be considered part of a  little relevance; in this case, the table can be considered part of a
496  sole "default" schema.    sole ``default'' schema.  
497  </p>  
498    
499    
 <p>  
500  For each table in a schema, one can describe each of the columns,  For each table in a schema, one can describe each of the columns,
501  providing such information as its name, type, UCD [<a href="#UCD">UCD</a>],  providing such information as its name, type, UCD \citep{UCD},
502  units, and a textual description.  Providing this information makes it  units, and a textual description.  Providing this information makes it
503  possible to select a resource based on the kind data contained in its  possible to select a resource based on the kind data contained in its
504  tables.    tables.  
 </p>  
505    
506  <p>  
507    
508  Finally, the VODataService defines specialized interface type  Finally, the VODataService defines specialized interface type
509  (inheriting from <code>vr:Interface</code>) called  (inheriting from \xmlel{vr:Interface}) called
510  <code>vs:ParamHTTP</code>.  This type is used to describe the commonly  \xmlel{vs:ParamHTTP}.  This type is used to describe the commonly
511  used interface that is invoked over HTTP as either a GET or a POST  used interface that is invoked over HTTP as either a GET or a POST
512  [<a href="#HTTP">HTTP</a>] in which the arguments are encoded as  \citep{HTTP} in which the arguments are encoded as
513  <em>name=value</em> pairs.  In addition to the access URL, it can  \emph{name=value} pairs.  In addition to the access URL, it can
514  include not only the mime-type of the returned response, it can also  include not only the mime-type of the returned response, it can also
515  enumerate the input arguments that are supported by the service  enumerate the input arguments that are supported by the service
516  implementation.  Much like table columns, one can indicate for each  implementation.  Much like table columns, one can indicate for each
# Line 820  Line 519 
519  not capture any interdependencies between arguments.  For example, it  not capture any interdependencies between arguments.  For example, it
520  cannot indicate if one argument only makes sense in the presence of  cannot indicate if one argument only makes sense in the presence of
521  another argument.    another argument.  
 </p>  
522    
 <a name="metadata">  
 <h2>3. The VODataService Metadata</h2></a>  
523    
524  <p>  \section{The VODataService Metadata}
525    \label{sect:metadata}
526    
527    
528  This section enumerates the types and elements defined in the  This section enumerates the types and elements defined in the
529  VODataService extension schema and describes their meaning.  Where a  VODataService extension schema and describes their meaning.  Where a
530  term matches a term in the <a href="#RM">RM</a>, its meaning is given  term matches a term in the RM, its meaning is given
531  in terms of the RM definition.    in terms of the RM definition.  
 </p>  
532    
 <a name="resext">  
 <h3>3.1.  Resource Type Extensions</h3></a>  
533    
534  <a name="DataCollection">  \subsection{Resource Type Extensions}
535  <h4>3.1.1.  DataCollection</h4></a>  \label{sect:resext}
536    
537    \subsubsection{DataCollection}
538    \label{sect:datacollection}
539    
540    
541  <p>  A \emph{data collection}, which is describable with the
542  A <strong>data collection</strong>, which is describable with the  \xmlel{vs:DataCollection} resource type, is a logical
 <code>vs:DataCollection</code> resource type, is a logical  
543  group of data comprising one or more accessible  group of data comprising one or more accessible
544  datasets.  A collection can contain any combination of images,  datasets.  A collection can contain any combination of images,
545  spectra, catalogs, time-series, or other data.  (In contrast, we talk  spectra, catalogs, time-series, or other data.  (In contrast, we talk
546  about a <em>dataset</em> as being a set of digitally-encoded  about a \emph{dataset} as being a set of digitally-encoded
547  data that is normally accessible as a single unit--e.g., a file.)  data that is normally accessible as a single unit -- e.g., a file.)
 </p>  
   
 <p>  
 The <code>vs:DataCollection</code> type adds seven additional metadata  
 elements beyond the core VOResource metadata [<a href="#VOR">VOR</a>].    
 </p>  
   
 <div class="schemaOuter">  
 <a name="s:DataCollection">  
 </a><div class="schemaHeader">vs:DataCollection Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="DataCollection"&gt;  
    &lt;xs:complexContent&gt;  
       &lt;xs:extension base="vr:Resource"&gt;  
          &lt;xs:sequence&gt;  
   
            &lt;xs:element name="facility" type="vr:ResourceName"  
                        minOccurs="0" maxOccurs="unbounded"/&gt;  
            &lt;xs:element name="instrument" type="vr:ResourceName"  
                        minOccurs="0" maxOccurs="unbounded"/&gt;  
            &lt;xs:element name="rights" type="vr:Rights"  
                        minOccurs="0" maxOccurs="unbounded"/&gt;  
            &lt;xs:element name="format" type="vs:Format"  
                        minOccurs="0" maxOccurs="unbounded"/&gt;  
            &lt;xs:element name="coverage" type="vs:Coverage" minOccurs="0"/&gt;  
            &lt;xs:element name="tableset" type="vs:TableSet" minOccurs="0"&gt;  
              &lt;xs:unique name="DataCollection-schemaName"&gt;  
                 &lt;xs:selector xpath="schema" /&gt;  
                 &lt;xs:field xpath="name" /&gt;  
              &lt;/xs:unique&gt;  
              &lt;xs:unique name="DataCollection-tableName"&gt;  
                 &lt;xs:selector xpath="schema/table" /&gt;  
                 &lt;xs:field xpath="name" /&gt;  
              &lt;/xs:unique&gt;  
            &lt;xs:element&gt;  
            &lt;xs:element name="accessURL" type="vr:AccessURL" minOccurs="0"/&gt;  
   
          &lt;/xs:sequence&gt;  
       &lt;/xs:extension&gt;  
    &lt;/xs:complexContent&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
548    
549  <p>  
550  The definition of <code>&lt;tableset&gt;</code> element places forces certain  
551    The \xmlel{vs:DataCollection} type adds seven additional metadata
552    elements beyond the core VOResource metadata \citep{VOR}.  
553    
554    % GENERATED: !schemadoc VODataService-v1.2.xsd DataCollection
555    % /GENERATED
556    
557    The definition of the \xmlel{tableset} element forces certain
558  names within its description to be unique; these constraints are explained  names within its description to be unique; these constraints are explained
559  further in <a href="#s:unique">3.3.1</a>.  further in section~\ref{sect:unique}.
560  </p>  
561    
562    
563  <p>  All of the child elements except \xmlel{tableset} derive
564  All of the child elements except <code>&lt;tableset&gt;</code> derive  from RM terms.  Four of the elements -- \xmlel{facility},
565  from RM terms.  Four of the elements--<code>&lt;facility&gt;</code>,  \xmlel{instrument}, \xmlel{rights}\todo{no, that's no longer RM in
566  <code>&lt;instrument&gt;</code>, <code>&lt;rights&gt;</code>,  VOResource},
567  and <code>&lt;accessURL&gt;</code>--are reuses of elements defined in  and \xmlel{accessURL}--are reuses of elements defined in
568  the core VOResource schema, sharing the same syntax and similar  the core VOResource schema, sharing the same syntax and similar
569  semantics.  In particular, the meanings of <code>&lt;facility&gt;</code>  semantics.  In particular, the meanings of \xmlel{facility}
570  and <code>&lt;instrument&gt;</code> in the context of  and \xmlel{instrument} in the context of
571  <code>vs:DataCollection</code> are different from that in  \xmlel{vs:DataCollection} are different from that in
572  <code>vr:Organisation</code> only in that in the former type, they refer  \xmlel{vr:Organisation} only in that in the former type, they refer
573  to the origin of the data.    to the origin of the data.  
 </p>  
574    
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:DataCollection Extension Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">facility</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Facility</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string with optional ID attribute: <a href="http://www.ivoa.net/Documents/REC/ReR/VOResource-20080222.html#d:ResourceName"><code>vr:ResourceName</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">the observatory or facility  
                   used to collect the data contained or managed by  
                   this resource.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences allowed</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">instrument</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Instrument</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string with optional ID attribute: <a href="http://www.ivoa.net/Documents/REC/ReR/VOResource-20080222.html#d:ResourceName"><code>vr:ResourceName</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">the instrument used to  
                   collect the data contained or managed by this resource.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences allowed</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">rights</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Rights</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string, controlled vocabulary:  
                                <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">Information about rights  
 held in and over the resource.</td>    
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences allowed</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Allowed Values:</em></td>  
               <td valign="top"><table border="0" width="100%">  
                  <tbody><tr><td valign="top"><code>public</code></td>  
                      <td valign="top">unrestricted, public access is  
                          allowed without authentication.</td></tr>  
                  <tr><td valign="top"><code>secure</code></td>  
                      <td>authenticated, public access is allowed.</td></tr>  
                  <tr><td valign="top"><code>proprietary</code></td>  
                      <td>only proprietary access is allowed with  
                          authentication.</td></tr>    
               </tbody></table>  
               </td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">format</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Format</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string with <a href="#a:isMIMEType">optional  
   isMIMEType attribute</a>, <a href="#s:Format"><code>vs:Format</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">The physical or digital  
                 manifestation of the information supported by a resource.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences allowed</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">MIME types should be used for  
                       network-retrievable, digital data, and the  
                       <code>isMIMEType</code> attribute should be set  
                       to explicitly to "true".  Non-MIME  
                       type values are used for media that cannot be  
                       retrieved over the network--e.g. CDROM, poster,  
                       slides, video cassette, etc.</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">coverage</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Coverage</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> composite; <a href="#cover"><code>vs:Coverage</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">Extent of the content of  
                      the resource over space, time, and frequency.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">tableset</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> composite; <a href="#table"><code>vs:TableSet</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">A description of tables  
 that are part of this collection.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional.</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">accessURL</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Service.AccessURL</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">URL with optional <code>use</code> attribute</a>: <a href="http://www.ivoa.net/Documents/REC/ReR/VOResource-20080222.html#d:AccessURL"><code>vr:AccessURL</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">The URL can be used to  
 download the data contained in this data collection.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">required; multiple occurrences allowed.</td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
   
 <p>  
 The <a name="d:Format"></a><code>vs:Format</code> type is used for  
 providing a value to the <code>&lt;format&gt;</code> element:  
 </p>  
   
 <div class="schemaOuter">  
 <a name="s:Format">  
 </a><div class="schemaHeader">vs:Format Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="Format"&gt;  
       &lt;xs:simpleContent&gt;  
          &lt;xs:extension base="xs:token"&gt;  
            &lt;xs:attribute name="isMIMEType" type="xs:boolean" default="false"/&gt;  
          &lt;/xs:extension&gt;  
       &lt;/xs:simpleContent&gt;  
    &lt;/xs:complexType&gt;</pre>  
 </div></div>  
575    
576  <p>  
577  The <a name="a:isMIMEType"></a> <code>isMIMEType</code> attribute  The \xmlel{vs:Format} type is used for
578    providing a value to the \xmlel{format} element:
579    
580    
581    % GENERATED: !schemadoc VODataService-v1.2.xsd Format
582    % /GENERATED
583    
584    
585    The \xmlel{isMIMEType} attribute
586  provides a flag to indicate if the value represents an actual  provides a flag to indicate if the value represents an actual
587  MIME-type: if it is, this attribute should be explicitly set to  MIME-type: if it is, this attribute should be explicitly set to
588  "true".    \texttt{true}.
589  </p>  
590    
591    
 <p>  
 See <a href="#table">section 3.3</a> for a specification of  
 the <code>vs:TableSet</code> type for describing tables.    
 </p>  
592    
593  <a name="StandardSTC">  See section~\ref{sect:table} for a specification of
594  <h4>3.1.2.  StandardSTC</h4></a>  the \xmlel{vs:TableSet} type for describing tables.  
595    
596  <p>  
597  The <code>vs:StandardSTC</code> resource type is used to register standard  \subsubsection{StandardSTC}
598    \label{sect:standardstc}
599    
600    
601    The \xmlel{vs:StandardSTC} resource type is used to register standard
602  coordinate systems, positions, or regions using the Space-Time  coordinate systems, positions, or regions using the Space-Time
603  Coordinate (STC, [<a href="#STC">STC</a>]) standard schema so that  Coordinate (STC, \citep{STC}) standard schema so that
604  they can by uniquely referenced by name by other resource descriptions  they can by uniquely referenced by name by other resource descriptions
605  or applications.  This resource type extends the core metadata with a  or applications.  This resource type extends the core metadata with a
606  single element, <code>&lt;stcDefinitions&gt;</code>, which contains  single element, \xmlel{stcDefinitions}, which contains
607  the STC definitions.    the STC definitions.  
 </p>  
608    
 <div class="schemaOuter">  
 <a name="s:StandardSTC">  
 </a><div class="schemaHeader">vs:StandardSTC Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="StandardSTC"&gt;  
    &lt;xs:complexContent&gt;  
       &lt;xs:extension base="vr:Resource"&gt;  
          &lt;xs:sequence&gt;  
             &lt;xs:element name="stcDefinitions"  
                         type="stc:STCResourceProfile"  
                         minOccurs="0" maxOccurs="unbounded"/&gt;  
          &lt;/xs:sequence&gt;  
       &lt;/xs:extension&gt;  
    &lt;/xs:complexContent&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
609    
610  <p>  % GENERATED: !schemadoc VODataService-v1.2.xsd StandardSTC
611    
612    % /GENERATED
613    
614    
615  The curation metadata that is part of the core VODataService should  The curation metadata that is part of the core VODataService should
616  generally refer to the publishing organization and persons that are  generally refer to the publishing organization and persons that are
617  responsible for defining the systems, updating the definitions as  responsible for defining the systems, updating the definitions as
618  needed, and responding to user questions about the definitions.  The  needed, and responding to user questions about the definitions.  The
619  content metadata, in particular the textual contents of the  content metadata, in particular the textual contents of the
620  <code>&lt;description&gt;</code> element, should describe the purpose  \xmlel{description} element, should describe the purpose
621  of the definition and where references to the defined systems,  of the definition and where references to the defined systems,
622  positions, or regions may be used.    positions, or regions may be used.  
 </p>  
623    
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:StandardSTC Extension Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">stcDefintions</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">composite;  
 <code>stc:stcDescriptionType</code> </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">the definitions of systems,  
 positions, and regions that are available for referencing.  </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">required; multiple occurrences allowed</td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
624    
625  <p>  The content of the \xmlel{stcDefinitions} element is
 The content of the <code>&lt;stcDefinitions&gt;</code> element is  
626  controlled by the STC schema.  Because that schema uses the  controlled by the STC schema.  Because that schema uses the
627  <code>elementFormDefault="true"</code> and most of the STC elements  \verb|elementFormDefault="true"| and most of the STC elements
628  are defined to be global [<a href="#schema">schema</a>],  are defined to be global,
629  <code>&lt;stcDefinitions&gt;</code> child elements must be qualified  \xmlel{stcDefinitions} child elements must be qualified
630  as being in the STC namespace  as being in the STC namespace
631  (http://www.ivoa.net/xml/STC/stc-v1.30.xsd), by either setting the  (http://www.ivoa.net/xml/STC/stc-v1.30.xsd), by either setting the
632  default namespace (via the <code>xmlns</code> attribute) or via  default namespace (via the \xmlel{xmlns} attribute) or via
633  explicit qualification via a prefix (see example).    explicit qualification via a prefix (see example).  
 </p>  
634    
 <!--  
 <div class="exampleOuter">  
 <a name="stdstc.xml">  
 </a><div class="exampleHeader">Example</div>  
 <div class="exampleWrapper">A description  
 of standard STC coordinate systems,  
 <a href="http://www.ivoa.net/Documents/WD/ReR/stdstc.xml">stdstc.xml</a></div>  
 <div class="exampleInner">  
635    
636  </div></div>  \subsubsection{DataService}
637  -->  DataService">
638    
 <a name="DataService">  
 <h4>3.1.3.  DataService</h4></a>  
639    
640  <p>  The \xmlel{vs:DataService} resource type is for describing a
 The <code>vs:DataService</code> resource type is for describing a  
641  service that provides access to astronomical data.  This service adds  service that provides access to astronomical data.  This service adds
642  to the core VOResource service metadata the ability to associate an  to the core VOResource service metadata the ability to associate an
643  observing facility and/or instrument with the data as well as describe  observing facility and/or instrument with the data as well as describe
644  the coordinate coverage of data via its child <code>&lt;coverage&gt</code>  the coordinate coverage of data via its child \xmlel{coverage}
645  element.  Note that while these elements are all optional, a resource  element.  Note that while these elements are all optional, a resource
646  of this type still implies access to astronomical data.  of this type still implies access to astronomical data.
 </p>  
647    
 <div class="schemaOuter">  
 <a name="s:DataService">  
 </a><div class="schemaHeader">vs:DataService Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="DataService"&gt;  
    &lt;xs:complexContent&gt;  
       &lt;xs:extension base="vr:Service"&gt;  
          &lt;xs:sequence&gt;  
            &lt;xs:element name="facility" type="vr:ResourceName"  
                        minOccurs="0" maxOccurs="unbounded"/&gt;  
            &lt;xs:element name="instrument" type="vr:ResourceName"  
                        minOccurs="0" maxOccurs="unbounded"/&gt;  
            &lt;xs:element name="coverage" type="vs:Coverage" minOccurs="0"/&gt;  
          &lt;/xs:sequence&gt;  
       &lt;/xs:extension&gt;  
    &lt;/xs:complexContent&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
   
 <p>  
 The use and meaning of the <code>&lt;facility&gt;</code> and  
 <code>&lt;instrument&gt;</code> elements are the same as for  
 <code><a href="#s:DataCollection">vs:DataCollection</a></code>.  
 </p>  
   
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:DataService Extension Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">facility</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Facility</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string with optional ID attribute: <a href="http://www.ivoa.net/Documents/REC/ReR/VOResource-20080222.html#d:ResourceName"><code>vr:ResourceName</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">the observatory or facility  
                   used to collect the data contained or managed by  
                   this resource.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences allowed</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">instrument</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Instrument</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string with optional ID attribute: <a href="http://www.ivoa.net/Documents/REC/ReR/VOResource-20080222.html#d:ResourceName"><code>vr:ResourceName</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">the instrument used to  
                   collect the data contained or managed by this resource.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences allowed</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">coverage</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Coverage</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">composite; <code>vs:Coverage</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">Extent of the content of the resource over space, time, and frequency.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
   
 <p>  
 The contents of the <code>&lt;coverage&gt;</code> element are detailed  
 in <a href="#cover">section 3.2</a>.  
 </p>  
648    
649  <a name="CatalogService">  % GENERATED: !schemadoc VODataService-v1.2.xsd DataService
650  <h4>3.1.4.  CatalogService</h4></a>  % /GENERATED
651    
652  <p>  The use and meaning of the \xmlel{facility} and
653  The <code>vs:CatalogService</code> resource type is for describing a  \xmlel{instrument} elements are the same as for
654    \xmlel{vs:DataCollection}.
655    
656    
657    
658    \subsubsection{CatalogService}
659    \label{sect:catalogservice}
660    
661    
662    The \xmlel{vs:CatalogService} resource type is for describing a
663  service that interacts with astronomical data through one or more  service that interacts with astronomical data through one or more
664  specified tables.  Because it extends the <code>vs:DataService</code>  specified tables.  Because it extends the \xmlel{vs:DataService}
665  type, a catalog service can have a coverage description as well.  The  type, a catalog service can have a coverage description as well.  The
666  tabular data may optionally be described via a  tabular data may optionally be described via a
667  <code>&lt;tableset&gt;</code> element.  \xmlel{tableset} element.
668  </p>  
669    
670    
671  <div class="schemaOuter">  % GENERATED: !schemadoc VODataService-v1.2.xsd CatalogService
672  <a name="s:CatalogService">  % /GENERATED
 </a><div class="schemaHeader">vs:CatalogService Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="CatalogService"&gt;  
       &lt;xs:complexContent&gt;  
          &lt;xs:extension base="vs:DataService"&gt;  
             &lt;xs:sequence&gt;  
   
                &lt;xs:element name="tableset" type="vs:TableSet" minOccurs="0"&gt;  
                   &lt;xs:unique name="CatalogService-schemaName"&gt;  
                      &lt;xs:selector xpath="schema" /&gt;  
                      &lt;xs:field xpath="name" /&gt;  
                   &lt;/xs:unique&gt;  
                   &lt;xs:unique name="CatalogService-tableName"&gt;  
                      &lt;xs:selector xpath="schema/table" /&gt;  
                      &lt;xs:field xpath="name" /&gt;  
                   &lt;/xs:unique&gt;  
                 &lt;xs:element&gt;  
   
             &lt;/xs:sequence&gt;  
          &lt;/xs:extension&gt;  
       &lt;/xs:complexContent&gt;  
    &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
673    
674  <p>  The definition of \xmlel{tableset} element forces certain
 The definition of <code>&lt;tableset&gt;</code> element forces certain  
675  names within its description to be unique; these constraints are explained  names within its description to be unique; these constraints are explained
676  further in <a href="#s:unique">3.3.1</a>.  further in section~\ref{sect:unique}.
 </p>  
677    
678  <p>  \subsection{Coverage}
679  <table border="2" width="100%">  \label{sect:cover}
 <thead>  
   <tr><th colspan="2" align="left">vs:CatalogService Extension Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">tableset</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> composite; <a href="#s:TableSet"><code>vs:TableSet</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">A description of the tables that are accessible  
                        through this service.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
680    
 <a name="cover">  
 <h3>3.2.  Coverage</h3></a>  
681    
682  <p>  The \xmlel{vs:Coverage} type describes how the data samples the
 The <code>vs:Coverage</code> type describes how the data samples the  
683  sky, frequency, and time.    sky, frequency, and time.  
 </p>  
684    
 <div class="schemaOuter">  
 <a name="s:Coverage">  
 </a><div class="schemaHeader">vs:Coverage Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="Coverage"&gt;  
       &lt;xs:sequence&gt;  
   
          &lt;xs:element ref="stc:STCResourceProfile" minOccurs="0"/&gt;  
          &lt;xs:element name="footprint" type="vs:ServiceReference"  
                      minOccurs="0"/&gt;  
          &lt;xs:element name="waveband" type="vs:Waveband"  
                      minOccurs="0" maxOccurs="unbounded"/&gt;  
          &lt;xs:element name="regionOfRegard" type="xs:float"  
                      minOccurs="0" maxOccurs="unbounded"/&gt;  
   
       &lt;/xs:sequence&gt;              
    &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
685    
686  <p>  
687    % GENERATED: !schemadoc VODataService-v1.2.xsd Coverage
688    % /GENERATED
689    
690  A detailed, systematic description of coverage is provided via the  A detailed, systematic description of coverage is provided via the
691  child <code>&lt;stc:STCResourceProfile&gt;</code> element, taken from  child \xmlel{stc:STCResourceProfile} element, taken from
692  the <a href="#STC">STC</a> schema, version 1.3, with the namespace,  the STC schema, version 1.3, with the namespace,
693  <code>http://www.ivoa.net/xml/STC/stc-v1.30.xsd</code> (hereafter  \xmlel{http://www.ivoa.net/xml/STC/stc-v1.30.xsd} (hereafter
694  referred using the <code>stc:</code> prefix).  This element is defined  referred using the \xmlel{stc:} prefix).  This element is defined
695  in the STC schema as a global element; furthermore, the STC schema  in the STC schema as a global element; furthermore, the STC schema
696  sets its global <code>elementFormDefault="qualified"</code>.  sets its global \verb|elementFormDefault="qualified"|.
697  Consequently, the <code>&lt;stc:STCResourceProfile&gt;</code> element  Consequently, the \xmlel{stc:STCResourceProfile} element
698  and all its child elements must be qualified as part of the STC  and all its child elements must be qualified as part of the STC
699  namespace as required by XML Schema [<a href="#schema">schema</a>].  namespace as required by XML Schema.
700  In applications where common use of XML prefixes is required or  In applications where common use of XML prefixes is required or
701  encouraged (e.g. the IVOA Registry Interfaces [<a href="#RI">RI</a>]),  encouraged (e.g. the IVOA Registry Interfaces \citep{RI}),
702  use of the <code>stc:</code> prefix to represent the STC namespace is  use of the \xmlel{stc:} prefix to represent the STC namespace is
703  encouraged.    encouraged.  
 </p>  
704    
705  <p>  
706  </p><blockquote>  \begin{admonition}
707  <table bgcolor="#dddddd" border="2" cellpadding="5"><tbody><tr><td>  The STC scheme provides rich mark-up for expressing the
 <dl>  
   <dt> <strong>Note:</strong> </dt>  
   <dd> The STC scheme provides rich mark-up for expressing the  
708         details of the coverage.  In particular, the mark-up is quite         details of the coverage.  In particular, the mark-up is quite
709         flexible in the units that can be used.  For example, spectral         flexible in the units that can be used.  For example, spectral
710         coverage can be given in terms of frequency, wavelength, or         coverage can be given in terms of frequency, wavelength, or
711         energy.  While it is recommended that the overall description         energy.  While it is recommended that the overall description
712         given in the <code>&lt;stc:STCResourceProfile&gt;</code> be         given in the \xmlel{stc:STCResourceProfile} be
713         fairly general and approximate, leveraging the richness for a         fairly general and approximate, leveraging the richness for a
714         detailed description is allowed.  </dd>         detailed description is allowed.
715  </dl>  \end{admonition}
716  </td></tr></tbody></table>  
717  </blockquote>  
 <p></p>  
718    
 <p>  
719  The remaining elements provide some summary information about the  The remaining elements provide some summary information about the
720  coverage.  coverage.
 </p>  
721    
722  <p>  
723  <table border="2" width="100%">  
724  <thead>  \begin{admonition}{Note on Footprint Service}
725    <tr><th colspan="2" align="left">vs:Coverage Metadata Elements</th>  The \xmlel{footprint} element has been defined in
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">STCResourceProfile</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">composite: an  
 <code>stc:STCResourceProfile</code> element from the  
 <a href="#STC">STC</a> schema.</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">The STC description of the location of the resource's  
                  data (or behavior on data) on the sky, in time, and in  
                  frequency space, including resolution.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">In general, this description should be  
                  approximate; a more precise description can be provided  
                  by the service referred to by the  
                  <code>&lt;footprint&gt;</code> element.</td>  
           </tr></tbody></table>  
       </td></tr>  
    <tr><td valign="top">footprint</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">a URL with an optional IVOA identifier attribute: <code><a href="#s:ServiceReference"></a></code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">a reference to a footprint service for retrieving  
                   precise and up-to-date description of coverage.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">the <code>ivo-id</code> attribute  
                   refers to a Service record having a footprint  
                   service capability.  That is, the record will have a  
                   capability element describing the footprint service  
                   (see <a href="#n:fpserv">"Note on Footprint  
                   Service"</a> below for further discussion).  
                   The resource referred to may be the current one. </td>  
           </tr></tbody></table>  
       </td></tr>  
    <tr><td valign="top">waveband</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Coverage.Spectral</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
 <td valign="top">string with controlled vocabulary: <code>vs:Waveband</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">a named spectral region of  
                   the electro-magnetic spectrum that the resource's  
                   spectral coverage overlaps with.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences allowed</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Allowed Values:</em></td>  
   
 <td valign="top"><table border="0" width="100%">  
                  <tbody><tr><td valign="top"><code>Radio</code></td>  
                      <td valign="top">  
                        any wavelength &gt; 10 mm (or frequency &lt; 30 GHz)  
                      </td></tr>  
                  <tr><td valign="top"><code>Millimeter</code></td>  
                      <td valign="top">  
                        0.1 mm &lt;= wavelength &lt;= 10 mm; <br />  
                        3000 GHz &gt;= frequency &gt;= 30 GHz.  
                      </td></tr>  
                  <tr><td valign="top"><code>Infrared</code></td>  
                      <td valign="top">  
                        1 micron &lt;= wavelength &lt;= 100 microns  
                      </td></tr>  
                  <tr><td valign="top"><code>Optical</code></td>  
                      <td valign="top">  
                        0.3 microns &lt;= wavelength &lt;= 1 micron; <br />  
                        300 nm &lt;= wavelength &lt;= 1000 nm; <br />  
                        3000 Angstroms &lt;= wavelength &lt;= 10000 Angstroms  
                      </td></tr>  
                  <tr><td valign="top"><code>UV</code></td>  
                      <td valign="top">  
                        0.1 micron &lt;= wavelength &lt;= 0.3 microns; <br />  
                        100 nm &lt;= wavelength &lt;= 300 nm; <br />  
                        1000 Angstroms &lt;= wavelength &lt;= 3000 Angstroms  
                      </td></tr>  
                  <tr><td valign="top"><code>EUV</code></td>  
                      <td valign="top">  
                        100 Angstroms &lt;= wavelength &lt;= 1000 Angstroms; <br />  
                        12 eV &lt;= energy &lt;= 120 eV  
                      </td></tr>  
                  <tr><td valign="top"><code>X-ray</code></td>  
                      <td valign="top">  
                        0.1 Angstroms &lt;= wavelength &lt;= 100 Angstroms; <br />  
                        0.12 keV &lt;= energy &lt;= 120 keV  
                      </td></tr>  
                  <tr><td valign="top"><code>Gamma-ray</code></td>  
                      <td valign="top">  
                        energy &gt;= 120 keV  
                      </td></tr>  
               </tbody></table>  
  </td>  
           </tr></tbody></table>  
       </td></tr>  
    <tr><td valign="top">regionOfRegard</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>RM Name:</em></td>  
               <td valign="top">Coverage.RegionOfRegard</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">a floating point number: <code>xs:float</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">a single numeric value representing the angle, given  
                   in decimal degrees, by which a positional query  
                   against this resource should be "blurred" in order  
                   to get an appropriate match.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top"><!-- The idea behind this item is that if a  
                   search for data within this resource is constrained by  
                   a spatial region that is smaller than this value  
                   would return the same number of items as when the  
                   region is comparable to this value.  Search agents  
                   wanting data items with high level of detail may  
                   search resources only with a region of regard  
                   <em>smaller</em> than some value, while those  
                   wanting only low-detailed items (e.g. course surveys  
                   or nearby galaxies) might want resource with a  
                   region of region <em>larger</em> than some value  
                   <p /> -->  
                   In the case of image repositories, this value might  
                   refer to a typical field-of-view size, or the  
                   primary beam size for radio aperture synthesis data.  
                   In the case of object catalogs, region of regard  
                   should normally be the largest of the typical size  
                   of the objects, the astrometric errors in the  
                   positions, or the resolution of the data.  </td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
   
 <p>  
 </p><blockquote><a name="n:fpserv"></a>  
 <table bgcolor="#dddddd" border="2" cellpadding="5"><tbody><tr><td>  
 <dl>  
   <dt> <strong>Note on Footprint Service:</strong> </dt>  
   <dd> The <code>&lt;footprint&gt;</code> element has been defined in  
726         anticipation of a future standard IVOA footprint service         anticipation of a future standard IVOA footprint service
727         protocol that can be used to respond to detailed spatial         protocol that can be used to respond to detailed spatial
728         overlap queries.  Consequently, in the future, applications may         overlap queries.  Consequently, in the future, applications may
# Line 1586  Line 731 
731         assumptions, the IVOA Identifier given by the attribute should         assumptions, the IVOA Identifier given by the attribute should
732         be resolved and the returned resource description should be         be resolved and the returned resource description should be
733         searched for a recognized footprint service capability.</dd>         searched for a recognized footprint service capability.</dd>
734  </dl>  \end{admonition}
735  </td></tr></tbody></table>  
736  </blockquote>  \subsection{Tabular Data}
737  <p></p>  \label{sect:table}
738    
 <a name="table">  
 <h3>3.3.  Tabular Data</h3></a>  
739    
740  <p>  The \xmlel{vs:TableSet} type can be used
 The <a name="d:TableSet"></a><code>vs:TableSet</code> type can be used  
741  to describe a set of tables that are part of a single resource and can  to describe a set of tables that are part of a single resource and can
742  be consider functionally all located at a single site.  be consider functionally all located at a single site.
 </p>  
743    
 <div class="schemaOuter">  
 <a name="s:TableSet">  
 </a><div class="schemaHeader">vs:TableSet Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="TableSet"&gt;  
    &lt;xs:sequence&gt;  
       &lt;xs:element name="schema" type="vs:TableSchema"  
                   minOccurs="1" maxOccurs="unbounded"/&gt;  
    &lt;/xs:sequence&gt;  
   
    &lt;xs:anyAttribute namespace="##other" /&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
   
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:TableSet Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">schema</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> composite; <a href="#s:TableSchema"><code>vs:TableSchema</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">A named description of a set of logically related tables.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">required; multiple occurrences are allowed.</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">See <a href="#s:unique">section 3.3.1</a>  
               regarding unique names for schemas.</td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
744    
745  <p>  
746  The <a name="d:TableSchema"></a><code>vs:TableSchema</code> type collects  % GENERATED: !schemadoc VODataService-v1.2.xsd TableSet
747    % /GENERATED
748    
749    
750    The \xmlel{vs:TableSchema} type collects
751  tables together that are logically related.  For example, a single  tables together that are logically related.  For example, a single
752  resource may provide access several major astronomical catalogs  resource may provide access several major astronomical catalogs
753  (e.g. SDSS, 2MASS, and FIRST) from one site, enabling high-performance  (e.g. SDSS, 2MASS, and FIRST) from one site, enabling high-performance
754  cross-correlations between them.  Each catalog can be described in a  cross-correlations between them.  Each catalog can be described in a
755  separate <code>&lt;schema&gt;</code> element, using the elements from  separate \xmlel{schema} element, using the elements from
756  the <code>vs:TableSchema</code> type.  the \xmlel{vs:TableSchema} type.
757  </p>  
758    
759  <div class="schemaOuter">  
760  <a name="s:TableSchema">  % GENERATED: !schemadoc VODataService-v1.2.xsd TableSchema
761  </a><div class="schemaHeader">vs:TableSchema Type Schema Definition</a></div>  % /GENERATED
762  <div class="schemaInner">  
 <pre>&lt;xs:complexType name="TableSchema"&gt;  
    &lt;xs:sequence&gt;  
   
       &lt;xs:element name="name" type="xs:token" minOccurs="1" maxOccurs="1"/&gt;  
       &lt;xs:element name="title" type="xs:token" minOccurs="0"/&gt;  
       &lt;xs:element name="description" type="xs:token"  
                   minOccurs="0" maxOccurs="1"/&gt;  
       &lt;xs:element name="utype" type="xs:token" minOccurs="0"/&gt;  
       &lt;xs:element name="table" type="vs:Table"  
                   minOccurs="0" maxOccurs="unbounded"/&gt;  
   
    &lt;/xs:sequence&gt;  
   
    &lt;xs:anyAttribute namespace="##other" /&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
   
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:TableSchema Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">name</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">A name for the set of tables.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">required</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                If there is no appropriate logical name associated with  
                this set, the name should be explicitly set to  
                "default".  See <a href="#s:unique">section 3.3.1</a>  
                regarding the uniqueness of this name.  </td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">title</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">a descriptive, human-interpretable name for the table set.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                This is used for display purposes and is useful when there are  
                   multiple schemas in the context (e.g. within a  
                   tableset; otherwise, the resource title could be  
                   used instead).  Note, however, that there is no requirement  
                   regarding uniqueness.  If a title is not provided,  
                   the schema name can be used for display purposes.</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">description</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">A free text description of  
                  the tableset that should explain in general how all  
                  of the tables are related.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">utype</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">an identifier for a concept in a data model that  
                   the data in this schema as a whole represent.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                The format defined in the VOTable standard, section 4.1  
                [<a href="#VOTable">VOTable</a>] is strongly  
                recommended; see <a href="#n:utypefmt">"Note on UType  
                Format</a> below. </td>    
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">table</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> composite: <code><a href="#s:Table"></a>vs:Table</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">A marked description of one of the tables that makes up the set.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences are allowed.</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">See <a href="#s:unique">section 3.3.1</a>  
               regarding unique names for schemas. </td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
   
 <p>  
 </p><blockquote><a name="n:utypefmt"></a>  
 <table bgcolor="#dddddd" border="2" cellpadding="5"><tbody><tr><td>  
 <dl>  
   <dt> <strong>Note on UType Format:</strong> </dt>  
   <dd> As of this writing, an IVOA standard for the format of utypes  
        is still under development.  As a result, the most definitive  
        documentation of the format is in section 4.1 of the VOTable  
        specification [<a href="#VOTable">VOTable</a>], which is  
        expected to be a more general form to be spelled out in the  
        eventual utype standard.  Use of that latter standard is  
        recommended once it becomes available.  </dd>  
 </dl>  
 </td></tr></tbody></table>  
 </blockquote>  
 <p></p>  
763    
 <p>  
764  Each table in a schema is described in detail using the  Each table in a schema is described in detail using the
765  <code>vs:Table</code> type.  \xmlel{vs:Table} type.
766  </p>  
767    
768    
769    % GENERATED: !schemadoc VODataService-v1.2.xsd Table
770    % /GENERATED
771    
772    
773    
 <div class="schemaOuter">  
 <a name="s:TableSchema">  
 </a><div class="schemaHeader">vs:TableSchema Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="Table"&gt;  
    &lt;xs:sequence&gt;  
   
       &lt;xs:element name="name" type="xs:token"  
                   minOccurs="1" maxOccurs="1"/&gt;  
       &lt;xs:element name="title" type="xs:token" minOccurs="0"/&gt;  
       &lt;xs:element name="description" type="xs:token" minOccurs="0"/&gt;  
       &lt;xs:element name="utype" type="xs:token" minOccurs="0"/&gt;  
       &lt;xs:element name="column" type="vs:TableParam"  
                   minOccurs="0" maxOccurs="unbounded"/&gt;  
   
    &lt;/xs:sequence&gt;  
   
    &lt;xs:attribute name="type" type="xs:string"/&gt;  
    &lt;xs:anyAttribute namespace="##other" /&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
   
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:Table Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">name</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">A fully qualified name for  
               the table.  This name should include all catalog or schema  
               prefixes needed to sufficiently uniquely distinguish it in a  
               query to the table.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">required</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                In general, the format of the qualified name may  
                   depend on the on the context; however, when the  
                   table is intended to be queryable via ADQL  
                   [<a href="#ADQL">ADQL</a>], then the  
                   catalog and schema qualifiers are delimited from the  
                   table name with dots (.).  
                <p />  
                If this table is part of the schema named "default",  
                the schema name does not need to appear in this table  
                name, unless it is required by an associated access  
                service.  
                <p />  
                If there is no appropriate logical name associated with  
                this table, the name should be explicitly set to  
                "default".  See <a href="#s:unique">section 3.3.1</a>  
                regarding the uniqueness of this name.  </td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">title</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">a descriptive, human-interpretable name for the table set.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                This is used for display purposes.  There is no requirement  
                   regarding uniqueness.  If a title is not provided,  
                   the table name can be used for display purposes.</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">description</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">A free-text description of  
                  the table's contents.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">utype</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">an identifier for a concept in a data model that  
                   the data in this table as a whole represent.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                The format defined in the VOTable standard, section 4.1  
                [<a href="#VOTable">VOTable</a>] is strongly  
                recommended; see <a href="#n:utypefmt">"Note on UType  
                Format</a> above. </td>    
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">column</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> composite: <code><a href="#s:TableParam">vs:TableParam</a></code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">A marked description of one of the table's columns.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences are allowed.</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">See <a href="#param">section 3.5</a> for the  
               description of this element's contents. </td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">foreignKey</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> composite: <code><a href="#s:ForeignKey">vs:ForeignKey</a></code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">A description of a foreign  
                   keys, one or more columns from the current table that  
                   can be used to join with another table.  </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences are allowed.</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">See <a href="#fkey">section 3.5.2</a> for the  
               description of this element's contents. </td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
774    
 <p>  
775  Each column in a table can be described using the  Each column in a table can be described using the
776  <code>vs:TableParam</code> type which is described in  \xmlel{vs:TableParam} type which is described in
777  <a href="#param">section 3.5</a>.  The foreign keys in the table that  section~\ref{sect:param}.  The foreign keys in the table that
778  can be used to join it with another table can be described with the  can be used to join it with another table can be described with the
779  <code>vs:ForeignKey</code> type (<a href="#fkey">section 3.3.2</a>).  \xmlel{vs:ForeignKey} type (section~\ref{sect:fkey}).
780  A foreign key description should only refer to tables described within  A foreign key description should only refer to tables described within
781  the current table set.    the current table set.  
 </p>  
782    
 <p>  
 The <code>vs:Table</code> also provides an attribute for indicating  
 the role a table plays in the schema:  
 </p>  
   
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:Table Attributes </th>  
   </tr><tr><th>Attribute</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top"><code>type</code></td>  
       <td valign="top"><table border="0" width="100%">  
   
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">  
                 a name indicating the role this table plays.    
               </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Recommeded Values:</em></td>  
               <td valign="top"><table border="0" width="100%">  
                  <tbody><tr><td valign="top"><code>output</code></td><td />  
                      <td valign="top">  
                        this table structure is used to format the  
                        output from a query  
                      </td></tr>  
                  <tr><td valign="top"><code>base_table</code></td><td />  
   
                      <td valign="top">  
                        this table contains records that represent the  
                        main subjects of the parent schema; other  
                        tables contain ancillary data.  
                      </td></tr>  
                  <tr><td valign="top"><code>view</code></td><td />  
                      <td>the table represents a useful combination or  
                        subset of other tables.</td></tr>  
               </tbody></table>  
               Other values are allowed.  
               </td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
783    
784    
785    The \xmlel{vs:Table} also provides an attribute for indicating
786    the role a table plays in the schema.
787    
788    
789    
790    
791    
792    \subsubsection{Unique Names for Tables}
793    \label{sect:unique}
794    
795    
796  <a name="s:unique">  The definitions of the \xmlel{tableset} elements used in
797  <h4>3.3.1.  Unique Names for Tables</h4></a>  the \xmlel{vs:DataCollection} and
798    \xmlel{vs:CatalogService} types
 <p>  
 The definitions of the <code>&lt;tableset&gt;</code> elements used in  
 the <code><a href="#DataCollection">vs:DataCollection</a></code> and  
 <code><a href="#CatalogService">vs:CatalogService</a></code> types  
799  constrain certain names to be unique.  In particular, all schema names  constrain certain names to be unique.  In particular, all schema names
800  within a <code>&lt;tableset&gt;</code> element must be unique, and all  within a \xmlel{tableset} element must be unique, and all
801  table names within a <code>&lt;tableset&gt;</code> element must be  table names within a \xmlel{tableset} element must be
802  unique.  (A schema and table may share a common name, such as  unique.  (A schema and table may share a common name, such as
803  "default".)  These constraints makes it possible to uniquely locate  ``default''.)  These constraints makes it possible to uniquely locate
804  the description of a schema or table within a VOResource description.    the description of a schema or table within a VOResource description.  
 </p>  
805    
 <div class="exampleOuter">  
806    
807  <a name="capability-xsi:type">  \begin{admonition}{Remark}
808  </a><div class="exampleHeader"><a name="e:unique">Example</a></div>  The uniqueness constraints for names
 <div class="exampleWrapper">The uniqueness constraints for names  
809  within table sets guarantee that when the following XPath queries are  within table sets guarantee that when the following XPath queries are
810  applied to a <code>&lt;tableset&gt;</code> element, zero or one node  applied to a \xmlel{tableset} element, zero or one node
811  only will be returned:  only will be returned:
 </div>  
 <div class="exampleInner" style="background-color: rgb(213, 222, 227);">  
 <pre>   schema[@name="default"]  
    schema/table[@name="default"]  
 </pre>  
 </div></div>  
812    
813  <p>  \begin{itemize}
814    \item\verb|schema[@name="default"]|
815    \item\verb|schema/table[@name="default"]|
816    \end{itemize}
817    
818  Name uniqueness is only required when the table set description is  Name uniqueness is only required when the table set description is
819  part of a VOResource description.  The name uniqueness rules  part of a VOResource description.  The name uniqueness rules
820  <em>should</em> also be applied to other uses of the  \emph{should} also be applied to other uses of the
821  <code>vs:TableSet</code> element outside of a VOResource  \xmlel{vs:TableSet} element outside of a VOResource
822  description.    description.  
 </p>  
823    
 <a name="fkey"><a name="d:ForeignKey"></a>  
 <h4>3.3.2.  Foreign Keys</h4></a>  
824    
825  <p>  \subsubsection{Foreign Keys}
826  The <code>vs:ForeignKey</code> type allows one to describe foreign  \label{sect:fkey}
827    
828    
829    The \xmlel{vs:ForeignKey} type allows one to describe foreign
830  keys in a table that allow it to be joined effectively with another  keys in a table that allow it to be joined effectively with another
831  table.  A foreign key is a set of columns that map to a corresponding  table.  A foreign key is a set of columns that map to a corresponding
832  set of columns in another table.    set of columns in another table.  
 </p>  
833    
 <div class="schemaOuter">  
 <a name="s:ForeignKey">  
 </a><div class="schemaHeader">vs:ForeignKey Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>  
 &lt;xs:complexType name="ForeignKey"&gt;  
    &lt;xs:sequence&gt;  
       &lt;xs:element name="targetTable" type="xs:token"/&gt;  
       &lt;xs:element name="fkColumn" type="vs:FKColumn"  
                   minOccurs="1" maxOccurs="unbounded"/&gt;  
       &lt;xs:element name="description" type="xs:token" minOccurs="0"/&gt;  
       &lt;xs:element name="utype" type="xs:token" minOccurs="0"/&gt;  
    &lt;/xs:sequence&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
834    
835  <p>  % GENERATED: !schemadoc VODataService-v1.2.xsd ForeignKey
836    % /GENERATED
837    
838    
839  In this model, the source of the foreign  In this model, the source of the foreign
840  key is the current table being described (i.e. represented by the  key is the current table being described (i.e. represented by the
841  <code>&lt;table&gt</code> element that contains the  \xmlel{table} element that contains the
842  <code>vs:ForeignKey</code> description, and thus doesn't need to be  \xmlel{vs:ForeignKey} description, and thus does not need to be
843  named explicitly).  The key that is described points to the table  named explicitly).  The key that is described points to the table
844  given by the <code>&lt;targetTable&gt</code> child element.  Each child  given by the \xmlel{targetTable} child element.  Each child
845  <code>&lt;fkColumn&gt</code> element then gives a pair of columns, one  \xmlel{fkColumn} element then gives a pair of columns, one
846  from the source table and one from the target table, that can be  from the source table and one from the target table, that can be
847  constrained to be equal in a query that joins the two tables.    constrained to be equal in a query that joins the two tables.  
 </p>  
848    
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:ForeignKey Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">targetTable</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">the fully-qualified name  
                (including catalog and schema, as  
                applicable) of the table that can be joined with the  
                table containing this foreign key.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">required</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">fkColumn</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> composite:  
                   <a href="#s:FKColumn"><code>vs:FKColumn</code></a></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">a pair of column names, one  
                from this table and one  
                from the target table that should be used to join the  
                tables in a query.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">required; multiple occurrences are allowed.</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">There should be one  
                  <code>&lt;fkColumn&gt;</code> element for each column  
                  that makes up the foreign key.</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">description</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">a free-text description of what this key points to  
                   and what the relationship means</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">utype</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">an identifier for a concept  
                   in a data model that the association enabled by this  
                   key represents.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                The format defined in the VOTable standard, section 4.1  
                [<a href="#VOTable">VOTable</a>] is strongly  
                recommended; see <a href="#n:utypefmt">"Note on UType  
                Format"</a> above. </td>    
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
   
 <div class="schemaOuter">  
 <a name="s:FKColumn">  
 </a><div class="schemaHeader">vs:FKColumn Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>  
 &lt;xs:complexType name="FKColumn"&gt;  
    &lt;xs:sequence&gt;  
       &lt;xs:element name="fromColumn" type="xs:token"/&gt;  
       &lt;xs:element name="targetColumn" type="xs:token"/&gt;  
    &lt;/xs:sequence&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
   
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:FKColumn Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">fromColumn</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">The unqualified name of the column from the current table.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">required</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">targetColumn</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">The unqualified name of the column from the target table.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">required</td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
   
 <p>  
 <div class="exampleOuter"><a name="ex:ForeignKey"></a>  
 <a name="post-request">  
 </a><div class="exampleHeader">Example</div>  
 <div class="exampleWrapper">a description of a foreign key in an  
 observation table pointing into a filter table.  
 </div>  
 <div class="exampleInner" style="background-color: rgb(213, 222, 227);">  
 <pre>  
 &lt;tableset&gt;  
   &lt;schema&gt;  
     &lt;name&gt; LSST &lt;/name&gt;  
     &lt;table&gt;  
        &lt;name&gt; LSST.Filters &lt;/name&gt;  
        &lt;description&gt; a description of the filters used in observations &lt;/description&gt;  
        &lt;column&gt;  
           &lt;name&gt;ID&lt;/name&gt;  
           ...  
        &lt;/column&gt;  
        ...  
     &lt;/table&gt;  
     &lt;table&gt;  
        &lt;name&gt; LSST.Observations &lt;/name&gt;  
        &lt;description&gt; a listing of the observations made &lt;/description&gt;  
        &lt;column&gt;  
           &lt;name&gt;filterID&lt;/name&gt;  
           &lt;description&gt;  
             the key into the Filter table pointing to the filter used  
             in the observation.  
           &lt;/description&gt;  
           ...  
        &lt;/column&gt;  
        ...  
        &lt;foreignKey&gt;  
           &lt;targetTable&gt; LSST.Filters &lt;/targetTable&gt;  
           &lt;fkColumn&gt;  
              &lt;fromColumn&gt; filterID &lt;/fromColumn&gt;  
              &lt;targetColumn&gt; ID &lt;/targetColumn&gt;  
           &lt;/fkColumn&gt;  
        &lt;/foreignKey&gt;  
     &lt;/table&gt;  
   &lt;/schema&gt;  
 &lt;/tableset&gt;  
 </pre>  
 </div></div>  
 </p>  
849    
850    
851  <a name="s:tblext">  
852  <h4>3.3.3.  Extending Table Metadata</h4></a>  
853    
854    \subsubsection{Extending Table Metadata}
855    \label{sect:tblext}
856    
857  It is envisioned that it may be useful in the future to provide richer  It is envisioned that it may be useful in the future to provide richer
858  metadata for describing tables within a VOResource description than  metadata for describing tables within a VOResource description than
# Line 2276  Line 860 
860  use of the following extension mechanisms when richer descriptions are  use of the following extension mechanisms when richer descriptions are
861  desired:  desired:
862    
863  <ol>  \begin{enumeration}
864    <li> Use extended types by applying the <code>xsi:type</code>  \item Use extended types by applying the \xmlel{xsi:type}
865         attribute to the <code>&lt;tableset&gt;</code>,         attribute to the \xmlel{tableset},
866         <code>&lt;schema&gt;</code>, <code>&lt;table&gt;</code>,         \xmlel{schema}, \xmlel{table},
867         <code>&lt;column&gt;</code> and/or         \xmlel{column} and/or
868         <code>&lt;dataType&gt;</code> elements.  The values provided in the         \xmlel{dataType} elements.  The values provided in the
869         attributes must refer to an XML type legally extended from the types         attributes must refer to an XML type legally extended from the types
870         associated with these elements according to the rules of XML Schema         associated with these elements according to the rules of XML Schema
871         [<a href="#schema">schema</a>] and the VOResource specification         \citep{schema} and the VOResource specification
872         [<a href="#VOR">VOR</a>].  </li> <p />         \citep{VOR}.
873    
874    <li> Apply a globally-defined attribute from a schema other than  \item Apply a globally-defined attribute from a schema other than
875         VODataService (i.e. from a namespace other than         VODataService (i.e. from a namespace other than
876         "http://www.ivoa.net/xml/VODataService/v1.1") to any of the         \url{http://www.ivoa.net/xml/VODataService/v1.1} to any of the
877         <code>&lt;tableset&gt;</code>, <code>&lt;schema&gt;</code>,         \xmlel{tableset}, \xmlel{schema},
878         <code>&lt;table&gt;</code>, and/or <code>&lt;column&gt;</code>         \xmlel{table}, and/or \xmlel{column}
879         elements.  </li> <p />         elements.
880    
881    <li> When the extended metadata is specific to how the table data is  \item When the extended metadata is specific to how the table data is
882         accessed via a particular service protocol, then the new         accessed via a particular service protocol, then the new
883         metadata can be incorporated into a specific <em>capability         metadata can be incorporated into a specific capability
884         extension</em> (as described in the VOResource specification         extension (as described in the VOResource specification
885         [<a href="#VOR">VOR</a>]).  This extension may make use of the         \citep{VOR}).  This extension may make use of the
886         various names within the <code>&lt;tableset&gt;</code> to         various names within the \xmlel{tableset} to
887         indicate where the extension metadata apply.  </li> <p />         indicate where the extension metadata apply.
888    
889    <li> Use the <code>extendedType</code> attribute of the  \item Use the \xmlel{extendedType} attribute of the
890         <code>&lt;dataType&gt;</code> element (see         \xmlel{dataType} element (see
891         <a href="#tbldatatypes">section 3.5.3</a>)         section~\ref{sect:tbldatatypes}).
892         to indicate a more specific data type then those defined by the         to indicate a more specific data type then those defined by the
893         <code>vs:TableParam</code> type.  </li>         \xmlel{vs:TableParam} type.
894  </ol>  \end{enumeration}
895    
896    \subsection{Interface Type Extension: ParamHTTP}
897    \label{sect:paramif}
898    
 <a name="paramif">  
 <h3>3.4.  Interface Type Extension: ParamHTTP</h3></a>  
899    
900  <p>  The \xmlel{vs:ParamHTTP} type is a specialized service interface
901  The <code>vs:ParamHTTP</code> type is a specialized service interface  description that extends the VOResource \xmlel{vr:Interface} type
902  description that extends the VOResource <code>vr:Interface</code> type  (as recommended by \citep{VOR}, section 2.3.2\todo{check}).  It
 (as recommended by [<a href="#VOR">VOR</a>], section 2.3.2).  It  
903  describes a service interface that is invoke over HTTP via a GET or a  describes a service interface that is invoke over HTTP via a GET or a
904  POST [<a href="#HTTP">HTTP</a>] in which the inputs are parameters  POST \citep{HTTP} in which the inputs are parameters
905  encoded as <em>name=value</em> pairs, delimited by ampersands  encoded as \emph{name=value} pairs, delimited by ampersands
906  (<code>&amp;</code>) and URL-encoded [<a href="#URI">URI</a>].  When  (\verb|&|) and URL-encoded \citep{URI}.  When
907  the service is invoked as a GET service, this input list is appended  the service is invoked as a GET service, this input list is appended
908  to a base URL (where the result must form a legal URL.  Usually, the  to a base URL (where the result must form a legal URL.  Usually, the
909  URL contains a question mark (<code>?</code>) setting off a list of  URL contains a question mark (\verb|?|) setting off a list of
910  URL arguments to the URL:  URL arguments to the URL.
911  </p>  
912    
 <div class="exampleOuter">  
 <a name="get-request">  
 </a><div class="exampleHeader">Example</div>  
 <div class="exampleWrapper">A service that takes 3 parameters:  
 <code>ra</code>, <code>dec</code>, <code>radius</code></div>  
 <div class="exampleInner" style="background-color: rgb(213, 222, 227);">  
 <pre>   http://data.archive.edu/cgi-bin/search?ra=12.32&dec=-10.3&radius=0.1</pre>  
 </div></div>  
913    
 <p>  
914  When the service is invoked as a POST, the encoded list of parameters  When the service is invoked as a POST, the encoded list of parameters
915  are uploaded to the service as the HTTP Message Body.    are uploaded to the service as the HTTP Message Body.  
 </p>  
916    
 <div class="exampleOuter">  
 <a name="post-request">  
 </a><div class="exampleHeader">Example</div>  
 <div class="exampleWrapper">The <a href="#get-request">above GET  
 request example</a> shown as an HTTP POST message.  
 </div>  
 <div class="exampleInner" style="background-color: rgb(213, 222, 227);">  
 <pre>POST /cgi-bin/search  
 User-Agent: Python script  
 Content-Type: application/x-www-form-urlencoded  
 Content-Lenth: 29  
   
 ra=12.32&dec=-10.3&radius=0.1  
 </pre>  
 </div></div>  
917    
918  <p>  The \xmlel{vs:ParamHTTP} type is intended for (but not limited
 The <code>vs:ParamHTTP</code> type is intended for (but not limited  
919  to) use in describing an interface within a VOResource description of  to) use in describing an interface within a VOResource description of
920  a service capability (as described in [<a href="#VOR">VOR</a>],  a service capability (as described in \citep{VOR},
921  section 2.2.2); that is, it can be invoked via the  section 2.2.2\todo{check}); that is, it can be invoked via the
922  <code>xsi:type</code> attribute on an <code>&lt;interface&gt;</code>  \xmlel{xsi:type} attribute on an \xmlel{interface}
923  element.  element.
 </p>  
924    
 <div class="schemaOuter">  
 <a name="s:ParamHTTP">  
 </a><div class="schemaHeader">vs:ParamHTTP Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="ParamHTTP"&gt;  
    &lt;xs:complexContent&gt;  
       &lt;xs:extension base="vr:Interface"&gt;  
          &lt;xs:sequence&gt;  
   
             &lt;xs:element name="queryType" type="vs:HTTPQueryType"  
                         minOccurs="0" maxOccurs="2"/&gt;  
             &lt;xs:element name="resultType" type="xs:token"  
                         minOccurs="0" maxOccurs="1"/&gt;  
             &lt;xs:element name="param" type="vs:InputParam" minOccurs="0"  
                          maxOccurs="unbounded"/&gt;  
             &lt;xs:element name="testQuery" type="xs:string" minOccurs="0"  
                         maxOccurs="unbounded"/&gt;  
   
          &lt;/xs:sequence&gt;  
       &lt;/xs:extension&gt;  
    &lt;/xs:complexContent&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
925    
926  <p>  % GENERATED: !schemadoc VODataService-v1.2.xsd ParamHTTP
927    % /GENERATED
928    
929  The extension metadata defined in the schema definition above are all  The extension metadata defined in the schema definition above are all
930  optional.  Nevertheless, even when an <code>&lt;interface&gt;</code>  optional.  Nevertheless, even when an \xmlel{interface}
931  instance does not include any of these extended child elements, the  instance does not include any of these extended child elements, the
932  use of <code>xsi:type="vs:ParamHTTP"</code> indicates that the interface  use of \verb|xsi:type="vs:ParamHTTP"| indicates that the interface
933  accessed via the URL given by the <code>&lt;accessURL&gt;</code>  accessed via the URL given by the \xmlel{accessURL}
934  element complies with the general parameter-based protocol described  element complies with the general parameter-based protocol described
935  in this section.    in this section.  
 </p>  
936    
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:ParamHTTP Extension Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">queryType</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string with controlled values:  
 <code>vs:HTTPQueryType</code> </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">The type of HTTP request  
 supported by the interface, either <code>GET</code> or <code>POST</code>. </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; 2 occurrences are allowed to  
 indicate that both GET and POST are supported </td>  
           </tr>  
           </tr><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Allowed Values:</em></td>  
               <td valign="top"><code>GET</code> or <code>POST</code></td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">resultType</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">a string in MIME type format:    
 <code>xs:token</code> </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">The MIME type of a document returned in the HTTP response. </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">param</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">composite:  
                   <code><a href="#inputparam">vs:InputParam</a></code>  
               </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">a description of an input parameter  
                   that can be provided as a <em>name=value</em> argument to  
                   the service. </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences allowed</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">See <a href="#param">section 3.5</a> for the  
               description of this element's contents. </td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">testQuery</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">a string in MIME type format:    
 <code>xs:token</code> </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">an ampersand-delimited list of  
                        arguments that can be used to test this service  
                        interface; when provided as the input to this interface,  
                        it will produce a legal, non-null response. </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences allowed</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">When the interface supports GET, then the full  
                        query URL is formed by the concatonation of the  
                        base URL (given by the accessURL) and the value  
                        given by this testQuery element.   </td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
937    
938  <p>  
939  A important intended use of the <code>vs:ParamHTTP</code> type is  
940    
941    
942    A important intended use of the \xmlel{vs:ParamHTTP} type is
943  describing the interface of an IVOA standard service protocol  describing the interface of an IVOA standard service protocol
944  of the "simple" variety, such as the Simple Image Access Protocol  of the ``simple'' variety, such as the Simple Image Access Protocol
945  [<a href="#SIA">SIA</a>].  In particular, it is recommended that  \citep{SIA}.  In particular, it is recommended that
946  specifications that define how a standard service is registered in a  specifications that define how a standard service is registered in a
947  registry <em>require</em> the use of the <code>vs:ParamHTTP</code>  registry \emph{require} the use of the \xmlel{vs:ParamHTTP}
948  interface type when it is applicable.  interface type when it is applicable.
 </p>  
949    
950  <p>  
951    
952  Normally, a VOResource  Normally, a VOResource
953  description indicates its support for a standard protocol with  description indicates its support for a standard protocol with
954  <code>&lt;capability&gt;</code> element having a  \xmlel{capability} element having a
955  <code>standardID</code> attribute set to specific URI representing the  \xmlel{standardID} attribute set to specific URI representing the
956  standard.  The standard will usually spell out the HTTP query type,  standard.  The standard will usually spell out the HTTP query type,
957  the returned MIME type, and input parameters required for compliance;  the returned media type, and input parameters required for compliance;
958  therefore, it is not necessary that the <code>vs:ParamHTTP</code>  therefore, it is not necessary that the \xmlel{vs:ParamHTTP}
959  description provide any of the optional extended metadata, as they are  description provide any of the optional extended metadata, as they are
960  already implied by the <code>standardID</code>.  The description need  already implied by the \xmlel{standardID}.  The description need
961  only reflect the optional or locally unique features of the  only reflect the optional or locally unique features of the
962  interface.  In particular, description may include  interface.  In particular, description may include
 </p>  
963    
964  <ul>  
965    <li> a <code>&lt;queryType&gt;</code> element for a type that is not  \begin{itemize}
966    \item a \xmlel{queryType} element for a type that is not
967    required by the standard (as long as the required query type is    required by the standard (as long as the required query type is
968    supported as well), </li>  <p />    supported as well),
969    
970    \item \xmlel{param} elements for any optional parameters
971           or local extended parameters (when allowed by the standard).
972    \end{itemize}
973    
   <li> <code>&lt;param&gt;</code> elements for any optional parameters  
        or local extended parameters (when allowed by the standard).  </li>  
 </ul>  
974    
 <p>  
975  Of course, listing required parameters is always allowed, even when  Of course, listing required parameters is always allowed, even when
976  describing a standard interface as long as these are consistent with  describing a standard interface as long as these are consistent with
977  the service specification and the corresponding <code>&lt;param&gt;</code>  the service specification and the corresponding \xmlel{param}
978  elements include the attribute <code>use="required"</code> (see  elements include the attribute \verb|use="required"| (see
979  <a href="#inputparam">3.5.1</a>).  The <code>&lt;param&gt;</code>  section~\ref{sect:inputparam).  The \xmlel{param}
980  elements for custom parameters that are not part of the standard (but  elements for custom parameters that are not part of the standard (but
981  are rather local customizations) should include the attribute  are rather local customizations) should include the attribute
982  <code>std="false"</code>.    \verb|std="false"|.
983  </p>  
984    
985    
986    
987    
988    \subsection{Data Parameters}
989    \label{sect:param}
990    
 <a name="param">  
 <h3>3.5.  Data Parameters</h3></a>  
991    
 <p>  
992  The VODataService schema provides several element types for describing  The VODataService schema provides several element types for describing
993  different kinds of data parameters used in datasets and services,  different kinds of data parameters used in datasets and services,
994  including service input parameters and table columns.  The parameter  including service input parameters and table columns.  The parameter
995  types allow one to fully describe a parameter in terms of metadata  types allow one to fully describe a parameter in terms of metadata
996  that includes name, data type, and meaning.    that includes name, data type, and meaning.  
 </p>  
997    
998  <p><a name="d:BaseParam"></a>  
999  All the VODataService parameter types derive from a base type called  All the VODataService parameter types derive from a base type called
1000  <code>vs:BaseParam</code> which defines all the common parameter  \xmlel{vs:BaseParam} which defines all the common parameter
1001  metadata except the data type.    metadata except the data type.  
 </p>  
1002    
 <div class="schemaOuter">  
 <a name="s:BaseParam">  
 </a><div class="schemaHeader">vs:BaseParam Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="BaseParam"&gt;  
    &lt;xs:sequence&gt;  
   
       &lt;xs:element name="name" type="xs:token" minOccurs="0"/&gt;  
       &lt;xs:element name="description" type="xs:token" minOccurs="0"/&gt;  
       &lt;xs:element name="unit" type="xs:token" minOccurs="0"/&gt;  
       &lt;xs:element name="ucd" type="xs:token" minOccurs="0"/&gt;  
       &lt;xs:element name="utype" type="xs:token" minOccurs="0"/&gt;  
   
    &lt;/xs:sequence&gt;  
    &lt;xs:anyAttribute namespace="##other" /&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
   
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:BaseParam Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">name</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">The name of the column.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">description</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">a free-text description of the column's contents</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">unit</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">the unit associated with  
 all values associated with this parameter or table column.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">ucd</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">the name of a unified content descriptor that  
                   describes the scientific content of the parameter.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                There are no requirements for compliance with any  
                particular UCD standard.  The format of the UCD can  
                be used to distinguish between UCD1, UCD1+, and  
                SIA-UCD.  See [<a href="#UCD">UCD</a>] for the  
                latest IVOA standard set. </td>    
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">utype</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"> string: <code>xs:token</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">an identifier for a concept in a data model that  
                   the data in this schema as a whole represent.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                The format defined in the VOTable standard, section 4.1  
                [<a href="#VOTable">VOTable</a>] is strongly  
                recommended; see <a href="#n:utypefmt">"Note on UType  
                Format"</a> above. </td>    
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
1003    
1004  <p><a name="d:DataType"></a>  % GENERATED: !schemadoc VODataService-v1.2.xsd BaseParam
1005  Leaving the data type metadatum out of <code>vs:BaseParam</code>  % /GENERATED
1006    
1007    Leaving the data type metadatum out of \xmlel{vs:BaseParam}
1008  allows the different kinds of parameters derived from  allows the different kinds of parameters derived from
1009  <code>vs:BaseParam</code> to restrict the allowed data types to  \xmlel{vs:BaseParam} to restrict the allowed data types to
1010  specific sets.  The subsections below describe the different data  specific sets.  The subsections below describe the different data
1011  types associated with input parameters  types associated with input parameters
1012  (<a href="#d:InputParam"><code>vs:InputParam</code></a>) and table  (\xmlel{vs:InputParam}) and table
1013  columns (<a href="#d:InputParam"><code>vs:TableParam</code></a>).  The  columns (\xmlel{vs:TableParam}).  The
1014  XML types associated with their <code>&lt;dataType&gt;</code> elements  XML types associated with their \xmlel{dataType} elements
1015  derive from a common parent, <code>vs:DataType</code>.  derive from a common parent, \xmlel{vs:DataType}.
1016    
 <div class="schemaOuter">  
 <a name="s:DataType">  
 </a><div class="schemaHeader">vs:DataType Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="DataType"&gt;  
    &lt;xs:simpleContent&gt;  
      &lt;xs:extension base="xs:token"&gt;  
          &lt;xs:attribute name="arraysize" type="vs:ArrayShape" default="1"/&gt;  
          &lt;xs:attribute name="delim" type="xs:string" default=" "/&gt;  
          &lt;xs:attribute name="extendedType" type="xs:string"/&gt;  
          &lt;xs:attribute name="extendedSchema" type="xs:anyURI"/&gt;  
          &lt;xs:anyAttribute namespace="##other" /&gt;  
      &lt;/xs:extension&gt;  
    &lt;/xs:simpleContent&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
1017    
1018  <p>  % GENERATED: !schemadoc VODataService-v1.2.xsd DataType
1019  The content of an element of type <code>vs:DataType</code> is the name  % /GENERATED
1020    
1021    The content of an element of type \xmlel{vs:DataType} is the name
1022  of the data type for the current parameter.  When the element is explicitly  of the data type for the current parameter.  When the element is explicitly
1023  a <code>vs:DataType</code> (as opposed to one of its derived types),  a \xmlel{vs:DataType} (as opposed to one of its derived types),
1024  there are no restrictions on the names that may be included.    there are no restrictions on the names that may be included.  
 </p>  
1025    
1026  <p>  
1027    
1028  A data type description can be augmented via a common set of  A data type description can be augmented via a common set of
1029  <code>vs:DataType</code> attributes, defined below.  The  \xmlel{vs:DataType} attributes, defined below.  The
1030  <code>arraysize</code> attribute indicates the parameter is an array  \xmlel{arraysize} attribute indicates the parameter is an array
1031  of values of the named type.  Its value describes the shape of the  of values of the named type.  Its value describes the shape of the
1032  array, and the <code>delim</code> attribute may be used to indicate  array, and the \xmlel{delim} attribute may be used to indicate
1033  the delimiter that should appear between elements of an array value.  the delimiter that should appear between elements of an array value.
1034  Depending on the application context, these attribute may not be  Depending on the application context, these attribute may not be
1035  enough to effectively parse the array values, in which case more  enough to effectively parse the array values, in which case more
1036  information must be brought to bear either through assumptions about  information must be brought to bear either through assumptions about
1037  a particular derived <code>vs:DataType</code> or through additional  a particular derived \xmlel{vs:DataType} or through additional
1038  attributes.    attributes.  
 </p>  
1039    
1040  <p>  
1041    
1042  More descriptive information about the type can be provided via  More descriptive information about the type can be provided via
1043  <code>extendedType</code> and <code>extendedSchema</code>, which  \xmlel{extendedType} and \xmlel{extendedSchema}, which
1044  provide an alternate data type name.  It's expected that this name  provide an alternate data type name.  It is expected that this name
1045  will only be understood by a special subset of applications.  The name  will only be understood by a special subset of applications.  The name
1046  given in the element content, then, represents a more commonly  given in the element content, then, represents a more commonly
1047  understood "fall-back" type.   Arbitrary information can also be  understood "fall-back" type.   Arbitrary information can also be
1048  provided via any prefix-qualified, globally defined attribute drawn  provided via any prefix-qualified, globally defined attribute drawn
1049  from an XML Schema other than VODataService (by virtue of the  from an XML Schema other than VODataService (by virtue of the
1050  <code>xs:anyAttribute</code> specification shown  \xmlel{xs:anyAttribute} specification present
1051  <a href="#s:DataType">above</a>).    on \xmlel{vs:DataType}).
1052  </p>  
1053    
1054  <p>  
1055  <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:DataType Attributes</th>  
   </tr><tr><th>Attribute</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top"><code>arraysize</code></td>  
       <td valign="top"><table border="0" width="100%">  
   
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">the <a href="#VOTable">VOTable</a> arraysize  
                 format (<code>vs:ArrayShape)</code>:  
                 <i>L</i><code>x</code><i>M</i><code>x</code><i>N...</i>,  
                 where each <code>x</code>-delimited positive integer  
                 is a length along a dimension of a multi-dimensional array.  A  
                 single integer indicates a one dimensional array.  
                 Instead of an integer, the last length can be set to  
                 "<code>*</code>" which indicates a variable length.    
               </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">The attribute's presence  
               indicates that parameter holds an array values; the  
               attribute's value indicates the length of the array along  
               each dimension of the multi-dimensional array.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap"  
               valign="top"><em>Default Value:</em></td>  
               <td valign="top" width="90%">1 (i.e. the parameter value  
               is scalar)</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top"><code>delim</code></td>  
       <td valign="top"><table border="0" width="100%">  
   
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string: <code>xs:string</code></td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">the string that is used to delimit  
               element of an array value when <code>arraysize</code> is  
               not "1".</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional.</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap"  
               valign="top"><em>Comments:</em></td>  
               <td valign="top" width="90%">Unless specifically  
               disallowed by the context, applications should allow  
               optional spaces to appear in an actual data value  
               before and after the delimiter (e.g. "1, 5" when delim=",").</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top"><code>extendedType</code></td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string: <code>xs:string</code>.</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
   
               <td valign="top" width="90%">The data value represented by this type can be  
                      interpreted as of a custom type identified by  
                      the value of this attribute. </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                   The name implies a particular expected format for  
                   the data value that can be parsed into a value in  
                   memory. <p />  
                   If an application does not recognize this  
                      extendedType, it should attempt to handle value  
                      assuming the type given by the element's value.  
                      "string" (or its equivalent) is a recommended  
                      default type. <p />  
                   This element may make use of the extendedSchema  
                      attribute and/or any arbitrary (qualified)  
                      attribute to refine the identification of the  
                      type.  
               </td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top"><code>extendedSchema</code></td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">URI: <code>xs:anyURI</code>.</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
   
               <td valign="top" width="90%">An identifier for the  
                      schema that the value given by the extended  
                      attribute is drawn from. </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                  This attribute is normally ignored if the  
                      extended element is not present.  
               </td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
1056    
 <p>  
1057  Note that in the derived parameter description types described below,  Note that in the derived parameter description types described below,
1058  the <code>&lt;dataType&gt;</code> element is optional.  Its absence  the \xmlel{dataType} element is optional.  Its absence
1059  from the parameter description does <em>not</em> mean that the  from the parameter description does \emph{not} mean that the
1060  parameter can support any data type; rather, it means that the data  parameter can support any data type; rather, it means that the data
1061  type simply has not been provided (which may limit what an application  type simply has not been provided (which may limit what an application
1062  can do with the parameter).  If a parameter can truly support any data  can do with the parameter).  If a parameter can truly support any data
1063  type, the <code>vs:BaseParam</code> type can be used directly when the  type, the \xmlel{vs:BaseParam} type can be used directly when the
1064  context permits.    context permits.  
 </p>  
1065    
 <a name="inputparam">  
 <h4>3.5.1.  Input Parameters</h4></a>  
1066    
1067  <p>  \subsubsection{Input Parameters}
1068    \label{sect:inputparam}
1069    
1070    
1071  Actual parameters are normally described with types derived from  Actual parameters are normally described with types derived from
1072  <code>vs:BaseParam</code>.  The <code>vs:InputParam</code> is intended  \xmlel{vs:BaseParam}.  The \xmlel{vs:InputParam} is intended
1073  for describing an input parameter to a service or function.  The  for describing an input parameter to a service or function.  The
1074  allowed data type names (given in the metadata table below) do not  allowed data type names (given in the metadata table below) do not
1075  imply a size or precise format; rather, they are intended to be  imply a size or precise format; rather, they are intended to be
1076  sufficient for describing an input paramter to a simple REST-like  sufficient for describing an input paramter to a simple REST-like
1077  service or a function in a weakly-typed (e.g. scripting) language.    service or a function in a weakly-typed (e.g. scripting) language.  
 </p>  
1078    
 <div class="schemaOuter">  
 <a name="s:TableParam">  
 </a><div class="schemaHeader">vs:InputParam Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="InputParam"&gt;  
    &lt;xs:complexContent&gt;  
       &lt;xs:extension base="vs:BaseParam"&gt;  
          &lt;xs:sequence&gt;  
             &lt;xs:element name="dataType" type="vs:SimpleDataType"  
                         minOccurs="0"/&gt;  
          &lt;/xs:sequence&gt;  
   
          &lt;xs:attribute name="use" type="vs:ParamUse" default="optional"/&gt;  
          &lt;xs:attribute name="std" type="xs:boolean" default="true"/&gt;  
       &lt;/xs:extension&gt;  
    &lt;/xs:complexContent&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
   
 <p>  
 By fixing the <code>&lt;dataType&gt;</code> child element to that of the  
 <code>vs:SimpleDataType</code>, the possible types are restricted to  
 predefined set appropriate for input parameters.  
 </p>  
1079    
1080  <p>  % GENERATED: !schemadoc VODataService-v1.2.xsd InputParam
1081  <table border="2" width="100%">  % /GENERATED
 <thead>  
   <tr><th colspan="2" align="left">vs:InputParam Extension Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">dataType</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string with optional attributes:  
 <code>vs:SimpleDataType</code> </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</em></td>  
               <td valign="top" width="90%">a type of data contained in the column. </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           </tr><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Allowed Values:</em></td>  
               <td valign="top">The following type names correspond to  
                 the same data types defined in the VOTable standard  
                 [<a href="#VOTable">VOTable</a>]:  
                 <code>boolean</code>,  
                 <code>char</code>,  
                 <code>integer</code>,  
                 <code>real</code>, and  
                 <code>complex</code>.  
                 The additional type, <code>string</code>, is  
                 equivalent to <code>char</code> when the attribute  
                 <code>arrayshape="*"</code>.  </td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
1082    
 <p>  
 The <code>vs:InputParam</code> type accepts two attributes that  
 indicate the role that the parameter plays as input to the service or  
 function:  
 </p>  
1083    
1084  <table border="2" width="100%">  By fixing the \xmlel{dataType} child element to that of the
1085  <thead>  \xmlel{vs:SimpleDataType}, the possible types are restricted to
1086    <tr><th colspan="2" align="left">vs:InputParam Attributes </th>  predefined set appropriate for input parameters.
1087    </tr><tr><th>Attribute</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top"><code>use</code></td>  
       <td valign="top"><table border="0" width="100%">  
   
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string with controlled values: <code>vs:ParamUse</code>  
               </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">An indication of whether this parameter is  
                      required to be provided for the application  
                      or service to work properly.</td>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           </tr><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Allowed Values:</em></td>  
               <td valign="top"><table border="0" width="100%">  
                  <tbody><tr><td valign="top"><code>required</code></td><td />  
                      <td valign="top">the parameter must be provided.</td></tr>  
                  <tr><td valign="top"><code>optional</code></td> <td />  
                      <td>the parameter need not be provided (default).</td></tr>  
               </tbody></table>  
               </td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top"><code>std</code></td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top"><code>true</code> or <code>false</code> (<code>xs:boolean</code>)</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
   
               <td valign="top" width="90%">  
                  If true, the meaning and behavior of this parameter is  
                  reserved and defined by a standard interface.  If  
                  false, it represents an implementation-specific  
                  parameter that effectively extends the behavior of the  
                  service or application.  The default is true.  
               </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
1088    
1089    
1090    The \xmlel{vs:InputParam} type accepts two attributes that
1091    indicate the role that the parameter plays as input to the service or
1092    function.
1093    
1094  <p />  
1095    Here is an example for a description
 <div class="exampleOuter">  
 <a name="e:param">  
 </a><div class="exampleHeader">Example</div>  
 <div class="exampleWrapper">A description  
1096  of an input parameter that might appear inside an  of an input parameter that might appear inside an
1097  <code>vs:ParamHTTP</code> interface description.  As noted in  \xmlel{vs:ParamHTTP} interface description.  As noted in
1098  <a href="#paramif">section 3.4</a>, a <code>&lt;param&gt;</code>  section~\ref{sect:paramif}, a \xmlel{param}
1099  element uses the <code>vs:InputParam</code> type to describe itself. </div>  element uses the \xmlel{vs:InputParam} type to describe itself:
1100  <div class="exampleInner" style="background-color: rgb(213, 222, 227);">  
1101  <pre>&lt;param use="required"&gt;  \begin{lstlisting}[language=XML]
1102    &lt;name&gt; radius &lt;/name&gt;  <param use="required">
1103    &lt;description&gt;    <name> radius </name>
1104      <description>
1105      search radius; returned objects are restricted to fall      search radius; returned objects are restricted to fall
1106      within this angular distance of the search position.      within this angular distance of the search position.
1107    &lt;/description&gt;    </description>
1108    &lt;ucd&gt; phys.angSize &lt;/ucd&gt;    <ucd> phys.angSize </ucd>
1109    &lt;dataType&gt; real &lt;/dataType&gt;    <dataType> real </dataType>
1110  &lt;/param&gt;  </param>
1111  </pre>  \end{lstlisting}
1112  </div></div>  
1113    \subsubsection{Table Columns}
1114  <a name="columns">  \label{sect:columns}
1115  <h4>3.5.2.  Table Columns</h4></a>  
1116    
1117  <p>  The \xmlel{vs:TableParam} is also derived from
1118  The <code>vs:TableParam</code> is also derived from  \xmlel{vs:BaseParam}, and is designed for describing a column of
 <code>vs:BaseParam</code>, and is designed for describing a column of  
1119  a table.  a table.
 </p>  
1120    
 <div class="schemaOuter">  
 <a name="s:TableParam">  
 </a><div class="schemaHeader">vs:TableParam Type Schema Definition</a></div>  
 <div class="schemaInner">  
 <pre>&lt;xs:complexType name="TableParam"&gt;  
    &lt;xs:complexContent&gt;  
       &lt;xs:extension base="vs:BaseParam"&gt;  
          &lt;xs:sequence&gt;  
   
             &lt;xs:element name="dataType" type="vs:TableDataType"  
                         minOccurs="0"/&gt;  
             &lt;xs:element name="flag" type="xs:token"  
                         minOccurs="0" maxOccurs="unbounded"/&gt;  
   
          &lt;/xs:sequence&gt;  
   
          &lt;xs:attribute name="std" type="xs:boolean"/&gt;  
       &lt;/xs:extension&gt;  
    &lt;/xs:complexContent&gt;  
 &lt;/xs:complexType&gt;  
   
 &lt;xs:complexType name="TableDataType" abstract="true"&gt;  
    &lt;xs:simpleContent&gt;  
      &lt;xs:extension base="vs:DataType"/&gt;  
    &lt;/xs:simpleContent&gt;  
 &lt;/xs:complexType&gt;  
 </pre>  
 </div></div>  
1121    
1122  <p>  % GENERATED: !schemadoc VODataService-v1.2.xsd TableParam
1123  A table column's data type is indicated with the <code>&lt;dataType&gt;</code>  % /GENERATED
1124    
1125    
1126    A table column's data type is indicated with the \xmlel{dataType}
1127  element with a name drawn from a standard set of names.  The  element with a name drawn from a standard set of names.  The
1128  <code>vs:TableParam</code> type is not restricted to a single standard  \xmlel{vs:TableParam} type is not restricted to a single standard
1129  set, and the VODataService schema defines two standard sets: one  set, and the VODataService schema defines two standard sets: one
1130  corresponding to VOTable data types [<a href="#VOTable">VOTable</a>]  corresponding to VOTable data types \citep{VOTable}
1131  and one for Table Access Protocol types.  Because  and one for Table Access Protocol types.  Because
1132  its XML type, <code>vs:TableDataType</code> is abstract, the  its XML type, \xmlel{vs:TableDataType} is abstract, the
1133  <code>&lt;dataType&gt;</code> element MUST include an  \xmlel{dataType} element MUST include an
1134  <code>xsi:type</code> attribute to indicate which standard set of type  \xmlel{xsi:type} attribute to indicate which standard set of type
1135  names is being used.    names is being used.  
 </p>  
1136    
 <div class="exampleOuter"><a name="ex:TableParam-1"></a>  
 <a name="post-request">  
 </a><div class="exampleHeader">Example</div>  
 <div class="exampleWrapper">A declination column called "Dec" is  
 defined to have the VOTable-defined type, double  
 </div>  
 <div class="exampleInner" style="background-color: rgb(213, 222, 227);">  
 <pre>&lt;column&gt;  
    &lt;name&gt; Dec &lt;/name&gt;  
    &lt;description&gt; the J2000 declination of the object &lt;/description&gt;  
    &lt;ucd&gt; pos.eq.dec &lt;/ucd&gt;  
    &lt;dataType xsi:type="vs:VOTableType"&gt; double &lt;/dataType&gt;  
 &lt;/column&gt;  
 </pre>  
 </div></div>  
   
 <p>  
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">vs:TableParam Extension Metadata Elements</th>  
   </tr><tr><th>Element</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top">dataType</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string with a required <code>xsi:type</code>  
                  attribute and additional optional attributes:  
                  <code>vs:TableDataType</code> </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</em></td>  
               <td valign="top" width="90%">a type of data contained in the column. </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           </tr><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Allowed Values:</em></td>  
               <td valign="top">The allowed type names are determined  
                 by value of the <code>xsi:type</code>; see  
                 <a href="#tbldatatypes">section 3.5.3</a> below.</td>  
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">flag</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">string with optional attributes:  
 <code>vs:TableDataType</code> </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">a keyword representing  
                    traits of the column.  </td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional; multiple occurrences allowed</td>  
           </tr><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Recommended Values:</em></td>  
               <td valign="top"><table border="0" width="100%">  
                  <tbody><tr><td valign="top"><code>indexed</code></td><td />  
                      <td valign="top">The column has an index on it  
 for faster search against its values.</td></tr>  
                  <tr><td valign="top"><code>primary</code></td><td />  
   
                      <td valign="top">The values column in the column  
                          represents in total or in part a primary key  
                          for its table.</td></tr>  
                  <tr><td valign="top"><code>nullable</code></td><td />  
                      <td>the column may contain null or empty values.</td></tr>  
               </tbody></table>  
               Other values are allowed.  
               </td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
   
 <!--  
                 the same data types defined in the VOTable standard  
                 [<a href="#VOTable">VOTable</a>]:  
                   
                 The additional types, <code>string</code> and  
                 <code>unicodeString</code>, are equivalent  
                 the VOTable data types <code>char</code> and  
                 <code>unicodeChar</code> when  
                 <code>arrayshape="*"</code>.    
   -->  
1137    
1138  <a name="tbldatatypes">  As an example, here is a declination column called ``Dec'' and is
1139  <h4>3.5.3.  Table Column Data Types</h4></a>  defined to have the VOTable-defined type double:
1140    
1141    \begin{lstlisting}[language=XML]
1142    <column>
1143       <name> Dec </name>
1144       <description> the J2000 declination of the object </description>
1145       <ucd> pos.eq.dec </ucd>
1146       <dataType xsi:type="vs:VOTableType"> double </dataType>
1147    </column>
1148    \end{lstlisting}
1149    
1150    
1151    \subsubsection{Table Column Data Types}
1152    \label{tbldatatypes}
1153    
1154    
 <p>  
1155  The VODataService schema defines two XML types that derive from  The VODataService schema defines two XML types that derive from
1156  <code>vs:TableDataType</code>:  <code>vs:VOTableType</code> and  \xmlel{vs:TableDataType}:  \xmlel{vs:VOTableType} and
1157  <code>vs:TAPType</code>.    \xmlel{vs:TAPType}.  
1158  </p>  
1159    
1160  <p>  % GENERATED: !schemadoc VODataService-v1.2.xsd VOTableType
1161  <table border="2" width="100%">  % /GENERATED
1162  <thead>  
1163    <tr><th colspan="2" align="left">Data Types derived from vs:TableDataType</th>  % GENERATED: !schemadoc VODataService-v1.2.xsd TAPType
1164    </tr><tr><th>Value for <br>  % /GENERATED
1165                 xsi:type</th><th>Definition</th>  
1166  </tr></thead>  
1167  <tbody>  
1168    <tr><td valign="top">vs:VOTableType</td>  
1169        <td valign="top"><table border="0" width="100%">  The \xmlel{vs:TAPType} XML type provides an additional attribute,
1170            <tbody>  \xmlel{size}, corresponding to the \verb|"size"| column from the
1171            <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  TAP_SCHEMA.columns defined by the TAP standard
1172                <td valign="top" width="90%">data types that correspond  \citep{TAP}.\todo{deprecate}
1173                   to the parameter and column types defined in the  
1174                   VOTable schema [<a href="#VOTable">VOTable</a>]. </td>  
1175            </tr>  
1176            </tr><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Allowed Values:</em></td>  
1177                <td valign="top"><code>boolean</code>,  Examples for column definitions:
1178                  <code>bit</code>,  A representation of a string type using the
1179                  <code>unsignedByte</code>,  \xmlel{vs:VOTableType} set of types:
                 <code>short</code>,  
                 <code>int</code>,  
                 <code>long</code>,  
                 <code>char</code>,  
                 <code>unicodeChar</code>,  
                 <code>float</code>,  
                 <code>double</code>,  
                 <code>floatComplex</code>, and  
                 <code>doubleComplex</code>.  String values of  
                   arbitrary length are represent by a value of  
                   <code>char</code> with <code>arraysize="*"</code></td>    
           </tr></tbody></table>  
       </td></tr>  
   <tr><td valign="top">vs:TAPType</td>  
       <td valign="top"><table border="0" width="100%">  
           <tbody>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">data types that correspond  
                  column types defined in the Table Access Protocol (v1.0)  
                  [<a href="#TAP">TAP</a>]. </td>  
           </tr>  
           </tr><tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Allowed Values:</em></td>  
               <td valign="top"><code>BOOLEAN</code>,  
                 <code>SMALLINT</code>,  
                 <code>INTEGER</code>,  
                 <code>BIGINT</code>,  
                 <code>REAL</code>,  
                 <code>DOUBLE</code>,  
                 <code>TIMESTAMP</code>,  
                 <code>CHAR</code>,  
                 <code>VARCHAR</code>,  
                 <code>BINARY</code>,  
                 <code>VARBINARY</code>,  
                 <code>POINT</code>,  
                 <code>REGION</code>,  
                 <code>CLOB</code>, and  
                 <code>BLOB</code>.  String values are represented via  
                 <code>VARCHAR</code>.  
               </td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
 </p>  
   
 <p>  
 The <code>vs:TAPType</code> XML type provides an additional attribute,  
 <code>size</code>, corresponding to the "size" column from the  
 TAP_SCHEMA.columns defined by <a href="#TAP">TAP</a>:  
 </p>  
   
 <table border="2" width="100%">  
 <thead>  
   <tr><th colspan="2" align="left">Additional Attribute for the vs:TAPType  
 set of column data types</th>  
   </tr><tr><th>Attribute</th><th>Definition</th>  
 </tr></thead>  
 <tbody>  
   <tr><td valign="top"><code>size</code></td>  
       <td valign="top"><table border="0" width="100%">  
   
           <tbody><tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Value type:</em></td>  
               <td valign="top">a positive integer:  
                                <code>xs:positiveInteger</code>  
               </td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Semantic Meaning:</em></td>  
               <td valign="top" width="90%">The length of the variable-length  
                  data type.</td>  
           </tr>  
           <tr bgcolor="#f5f5f5"><td nowrap="nowrap" valign="top"><em>Occurrences:</em></td>  
               <td valign="top">optional</td>  
           </tr>  
           <tr bgcolor="#dddddd"><td nowrap="nowrap" valign="top"><em>Comments:</em></td>  
               <td valign="top">  
                   In the context of TAP, this attribute is only meaning when  
                   the data type is <code>CHAR</code> or <code>BINARY</code>; see  
                   discussion below.  
               </td>  
           </tr></tbody></table>  
       </td></tr>  
 </tbody>  
 </table>  
   
 <p>  
 <div class="exampleOuter"><a name="ex:TableParam-2"></a>  
 <a name="post-request">  
 </a><div class="exampleHeader">Example</div>  
 <div class="exampleWrapper">a representation of a string type using the  
 <code>vs:VOTableType</code> set of types:  
 </div>  
 <div class="exampleInner" style="background-color: rgb(213, 222, 227);">  
 <pre>&lt;column&gt;  
    &lt;name&gt; id &lt;/name&gt;  
    &lt;description&gt; the object identifier &lt;/description&gt;  
    &lt;ucd&gt; meta.id &lt;/ucd&gt;  
    &lt;dataType xsi:type="vs:VOTableType" arraysize="*"&gt; char &lt;/dataType&gt;  
 &lt;/column&gt;  
 </pre>  
 </div>  
 <div class="exampleWrapper">the same column described using the  
 <code>vs:TAPType</code> set of types:  
 </div>  
 <div class="exampleInner" style="background-color: rgb(213, 222, 227);">  
 <pre>&lt;column&gt;  
    &lt;name&gt; id &lt;/name&gt;  
    &lt;description&gt; the object identifier &lt;/description&gt;  
    &lt;ucd&gt; meta.id &lt;/ucd&gt;  
    &lt;dataType xsi:type="vs:TAPType"&gt; VARCHAR &lt;/dataType&gt;  
 &lt;/column&gt;  
 </pre>  
 </div>  
 <div class="exampleWrapper">the same column again described using the  
 <code>vs:TAPType</code> set of types, assuming a fixed-length string:  
 </div>  
 <div class="exampleInner" style="background-color: rgb(213, 222, 227);">  
 <pre>&lt;column&gt;  
    &lt;name&gt; id &lt;/name&gt;  
    &lt;description&gt; the object identifier &lt;/description&gt;  
    &lt;ucd&gt; meta.id &lt;/ucd&gt;  
    &lt;dataType xsi:type="vs:TAPType" size="8" &gt; CHAR &lt;/dataType&gt;  
 &lt;/column&gt;  
 </pre>  
 </div></div>  
 </p>  
1180    
1181  <p>  \begin{lstlisting}
1182  In general, the <code>vs:TableParam</code>'s <code>&lt;dataType&gt;</code>  <column>
1183       <name> id </name>
1184       <description> the object identifier </description>
1185       <ucd> meta.id </ucd>
1186       <dataType xsi:type="vs:VOTableType" arraysize="*"> char </dataType>
1187    </column>
1188    \end{lstlisting}
1189    
1190    The same column described using the
1191    \xmlel{vs:TAPType} set of types:\todo{deprecate this}
1192    
1193    \begin{lstlisting}
1194    <column>
1195       <name> id </name>
1196       <description> the object identifier </description>
1197       <ucd> meta.id </ucd>
1198       <dataType xsi:type="vs:TAPType"> VARCHAR </dataType>
1199    </column>
1200    \end{lstlisting}
1201    
1202    The same column again described using the
1203    \xmlel{vs:TAPType} set of types, assuming a fixed-length
1204    string:\todo{deprecate this}
1205    
1206    \begin{lstlisting}
1207    <column>
1208       <name> id </name>
1209       <description> the object identifier </description>
1210       <ucd> meta.id </ucd>
1211       <dataType xsi:type="vs:TAPType" size="8" > CHAR </dataType>
1212    </column>
1213    \end{lstlisting}
1214    
1215    
1216    
1217    In general, the \xmlel{vs:TableParam}'s \xmlel{dataType}
1218  can support any non-abstract type legally derived from  can support any non-abstract type legally derived from
1219  <code>vs:TableDataType</code>.  However, in the context of a  \xmlel{vs:TableDataType}.  However, in the context of a
1220  <code>vs:DataCollection</code> or <code>vs:CatalogService</code>  \xmlel{vs:DataCollection} or \xmlel{vs:CatalogService}
1221  resource description, it is strongly recommended that either  resource description, it is strongly recommended that either
1222  <code>vs:VOTableType</code> or <code>vs:TAPType</code> (or some other IVOA  \xmlel{vs:VOTableType} or \xmlel{vs:TAPType} (or some other IVOA
1223  standard type derived from <code>vs:TableDataType</code>) be used to  standard type derived from \xmlel{vs:TableDataType}) be used to
1224  ensure maximum interoperability.  When the actual column type is not  ensure maximum interoperability.  When the actual column type is not
1225  well matched to a type from one of these standard sets, authors are  well matched to a type from one of these standard sets, authors are
1226  encouraged to use the <code>extendedType</code> attribute to refer to  encouraged to use the \xmlel{extendedType} attribute to refer to
1227  a more specific type.  Note that the TAP standard  a more specific type.  Note that the TAP standard
1228  [<a href="#TAP">TAP</a>] defines an explicit mapping between  \citep{TAP} defines an explicit mapping between
1229  TAP_SCHEMA types and VOTable types.  Thus, in the context of a  TAP_SCHEMA types and VOTable types.  Thus, in the context of a
1230  <code>vs:CatalogService</code> resource description that supports a  \xmlel{vs:CatalogService} resource description that supports a
1231  TAP capability (perhaps in addition to other catalog services like  TAP capability (perhaps in addition to other catalog services like
1232  Simple Cone Search [<a href="#TAP">SCS</a>]), use of the  Simple Cone Search \citep{SCS}), use of the
1233  <code>vs:TAPType</code> data type is preferred.  \xmlel{vs:TAPType} data type is preferred.
1234  </p>  
1235    
1236  <p>  
1237  </p><blockquote>  \begin{admonition}{Note}
1238  <table bgcolor="#dddddd" border="2" cellpadding="5"><tbody><tr><td>  The motivation for providing two standard data type sets,
1239  <dl>         \xmlel{vs:VOTableType} and \xmlel{vs:TAPType}, is to maximize
   <dt> <strong>Note:</strong> </dt>  
   <dd> The motivation for providing two standard data type sets,  
        <code>vs:VOTableType</code> and <code>vs:TAPType</code>, is to maximize  
1240         the ease of generating the table description, particular as         the ease of generating the table description, particular as
1241         part of the VO Standard Interface [<a href="#VOSI">VOSI</a>]         part of the VO Standard Interface \citep{VOSI}
1242         and for legacy services.  The table description for         and for legacy services.  The table description for
1243         "stand-alone" SIA, SCS, and SSA services can be readily         ``stand-alone'' SIA, SCS, and SSA services can be readily
1244         generated using the <code>vs:VOTableType</code> data types from         generated using the \xmlel{vs:VOTableType} data types from
1245         these interface's respective metadata queries.  Newer services         these interface's respective metadata queries.  Newer services
1246         supporting TAP could generate its description using its         supporting TAP could generate its description using its
1247         TAP_SCHEMA queries.         TAP_SCHEMA queries.
1248    
1249         <p>        
1250         The motivation for specifying a column's data type using the         The motivation for specifying a column's data type using the
1251         <code>xsi:type</code> mechanism is mainly to allow for the         \xmlel{xsi:type} mechanism is mainly to allow for the
1252         possibility that the official TAP data types will evolve.  This         possibility that the official TAP data types will evolve.  This
1253         allows the IVOA to define new data type sets without updating         allows the IVOA to define new data type sets without updating
1254         the VODataService standard.  Using non-IVOA-standardized data         the VODataService standard.  Using non-IVOA-standardized data
1255         type names is expected to undermine interoperability and so is         type names is expected to undermine interoperability and so is
1256         therefore discouraged.           therefore discouraged.  
1257         </p>  \end{admonition}
        </dd>  
         
 </dl>  
 </td></tr></tbody></table>  
 </blockquote>  
   
   
   
 <a name="appA">  
 <h2>Appendix A:  The VODataService XML Schema</h2></a>  
   
 <div class="schemaOuter">  
 <a name="s:VOResource">  
 </a><div class="schemaHeader"><a name="s:VOResource">The Complete VOResource Schema</a></div>  
 <div class="schemaInner">  
 <pre><a name="s:VODataService">&lt;?xml version="1.0" encoding="UTF-8"?&gt;  
 &lt;xs:schema targetNamespace="http://www.ivoa.net/xml/VODataService/v1.1"  
            xmlns:xs="http://www.w3.org/2001/XMLSchema"  
            xmlns:vr="http://www.ivoa.net/xml/VOResource/v1.0"  
            xmlns:vs="http://www.ivoa.net/xml/VODataService/v1.1"  
            xmlns:stc="http://www.ivoa.net/xml/STC/stc-v1.30.xsd"  
            xmlns:vm="http://www.ivoa.net/xml/VOMetadata/v0.1"  
            elementFormDefault="unqualified" attributeFormDefault="unqualified"  
            version="1.1pr2"&gt;  
   
    &lt;xs:annotation&gt;  
       &lt;xs:appinfo&gt;  
         &lt;vm:schemaName&gt;VODataService&lt;/vm:schemaName&gt;  
         &lt;vm:schemaPrefix&gt;xs&lt;/vm:schemaPrefix&gt;  
         &lt;vm:targetPrefix&gt;vs&lt;/vm:targetPrefix&gt;  
       &lt;/xs:appinfo&gt;  
       &lt;xs:documentation&gt;  
         An extension to the core resource metadata (VOResource) for  
         describing data collections and services.  
       &lt;/xs:documentation&gt;  
    &lt;/xs:annotation&gt;  
   
    &lt;xs:import namespace="http://www.ivoa.net/xml/VOResource/v1.0"  
               schemaLocation="http://www.ivoa.net/xml/VOResource/v1.0"/&gt;  
    &lt;xs:import namespace="http://www.ivoa.net/xml/STC/stc-v1.30.xsd"  
               schemaLocation="http://www.ivoa.net/xml/STC/stc-v1.30.xsd"/&gt;  
   
    &lt;xs:complexType name="DataCollection"&gt;  
       &lt;xs:annotation&gt;  
          &lt;xs:documentation&gt;  
            A logical grouping of data which, in general, is composed of one  
            or more accessible datasets.  A collection can contain any  
            combination of images, spectra, catalogs, or other data.    
          &lt;/xs:documentation&gt;  
          &lt;xs:documentation&gt;  
            (A dataset is a collection of digitally-encoded data that  
            is normally accessible as a single unit, e.g. a file.)  
          &lt;/xs:documentation&gt;  
       &lt;/xs:annotation&gt;  
   
       &lt;xs:complexContent&gt;  
          &lt;xs:extension base="vr:Resource"&gt;  
             &lt;xs:sequence&gt;  
   
               &lt;xs:element name="facility" type="vr:ResourceName"  
                           minOccurs="0" maxOccurs="unbounded"&gt;  
                 &lt;xs:annotation&gt;  
                    &lt;xs:appinfo&gt;  
                      &lt;vm:dcterm&gt;Subject&lt;/vm:dcterm&gt;  
                    &lt;/xs:appinfo&gt;  
                    &lt;xs:documentation&gt;  
                      the observatory or facility used to collect the data  
                      contained or managed by this resource.    
                    &lt;/xs:documentation&gt;  
                 &lt;/xs:annotation&gt;  
               &lt;/xs:element&gt;  
   
               &lt;xs:element name="instrument" type="vr:ResourceName"  
                           minOccurs="0" maxOccurs="unbounded"&gt;  
                 &lt;xs:annotation&gt;  
                    &lt;xs:appinfo&gt;  
                      &lt;vm:dcterm&gt;Subject&lt;/vm:dcterm&gt;  
                      &lt;vm:dcterm&gt;Subject.Instrument&lt;/vm:dcterm&gt;  
                    &lt;/xs:appinfo&gt;  
                    &lt;xs:documentation&gt;  
                      the Instrument used to collect the data contain or  
                      managed by a resource.    
                    &lt;/xs:documentation&gt;  
                 &lt;/xs:annotation&gt;  
               &lt;/xs:element&gt;  
   
               &lt;xs:element name="rights" type="vr:Rights"  
                           minOccurs="0" maxOccurs="unbounded"&gt;  
                  &lt;xs:annotation&gt;  
                     &lt;xs:appinfo&gt;  
                       &lt;vm:dcterm&gt;Rights&lt;/vm:dcterm&gt;  
                     &lt;/xs:appinfo&gt;            
                     &lt;xs:documentation&gt;  
                       Information about rights held in and over the resource.  
                     &lt;/xs:documentation&gt;  
                     &lt;xs:documentation&gt;  
                       This should be repeated for all Rights values that apply.  
                     &lt;/xs:documentation&gt;  
                  &lt;/xs:annotation&gt;  
               &lt;/xs:element&gt;  
   
               &lt;xs:element name="format" type="vs:Format"  
                           minOccurs="0" maxOccurs="unbounded"&gt;  
                  &lt;xs:annotation&gt;  
                     &lt;xs:documentation&gt;  
                       The physical or digital manifestation of the information  
                       supported by a resource.  
                     &lt;/xs:documentation&gt;  
                     &lt;xs:documentation&gt;  
                       MIME types should be used for network-retrievable, digital  
                       data.  Non-MIME type values are used for media that cannot  
                       be retrieved over the network--e.g. CDROM, poster, slides,  
                       video cassette, etc.    
                     &lt;/xs:documentation&gt;  
                  &lt;/xs:annotation&gt;  
               &lt;/xs:element&gt;  
   
               &lt;xs:element name="coverage" type="vs:Coverage" minOccurs="0"&gt;  
                 &lt;xs:annotation&gt;  
                    &lt;xs:documentation&gt;  
                      Extent of the content of the resource over space, time,  
                      and frequency.  
                    &lt;/xs:documentation&gt;  
                 &lt;/xs:annotation&gt;  
               &lt;/xs:element&gt;  
   
               &lt;xs:element name="tableset" type="vs:TableSet" minOccurs="0"&gt;  
                  &lt;xs:annotation&gt;  
                    &lt;xs:documentation&gt;  
                      A description of the tables that are part of this  
                      collection.  
                    &lt;/xs:documentation&gt;  
                    &lt;xs:documentation&gt;  
                      Each schema name and each table name must be  
                      unique within this tableset.  
                    &lt;/xs:documentation&gt;  
                  &lt;/xs:annotation&gt;  
   
                  &lt;xs:unique name="DataCollection-schemaName"&gt;  
                     &lt;xs:selector xpath="schema" /&gt;  
                     &lt;xs:field xpath="name" /&gt;  
                  &lt;/xs:unique&gt;  
   
                  &lt;xs:unique name="DataCollection-tableName"&gt;  
                     &lt;xs:selector xpath="schema/table" /&gt;  
                     &lt;xs:field xpath="name" /&gt;  
                  &lt;/xs:unique&gt;  
               &lt;/xs:element&gt;  
   
               &lt;xs:element name="accessURL" type="vr:AccessURL" minOccurs="0"&gt;  
                  &lt;xs:annotation&gt;  
                    &lt;xs:documentation&gt;  
                      The URL that can be used to download the data contained in  
                      this data collection.  
                    &lt;/xs:documentation&gt;  
                  &lt;/xs:annotation&gt;  
               &lt;/xs:element&gt;  
   
             &lt;/xs:sequence&gt;  
          &lt;/xs:extension&gt;  
       &lt;/xs:complexContent&gt;  
    &lt;/xs:complexType&gt;  
   
    &lt;xs:complexType name="Coverage"&gt;  
       &lt;xs:annotation&gt;  
          &lt;xs:documentation&gt;  
            A description of how a resource's contents or behavior maps  
            to the sky, to time, and to frequency space, including  
            coverage and resolution.  
          &lt;/xs:documentation&gt;  
       &lt;/xs:annotation&gt;  
   
       &lt;xs:sequence&gt;  
   
          &lt;xs:element ref="stc:STCResourceProfile" minOccurs="0"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                  The STC description of the location of the resource's  
                  data (or behavior on data) on the sky, in time, and in  
                  frequency space, including resolution.  
                &lt;/xs:documentation&gt;  
                &lt;xs:documentation&gt;  
                  In general, this description should be approximate; a  
                  more precise description can be provided by the  
                  footprint service.    
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="footprint" type="vs:ServiceReference"  
                      minOccurs="0"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                   a reference to a footprint service for retrieving  
                   precise and up-to-date description of coverage.    
                &lt;/xs:documentation&gt;  
                &lt;xs:documentation&gt;  
                   the ivo-id attribute refers to a Service record  
                   that describes the Footprint capability.  That is,  
                   the record will have a capability element describing  
                   the service.  The resource refered to may be the  
                   current one.    
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="waveband" type="vs:Waveband"  
                      minOccurs="0" maxOccurs="unbounded"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:appinfo&gt;  
                  &lt;vm:dcterm&gt;Coverage.Spectral&lt;/vm:dcterm&gt;  
                &lt;/xs:appinfo&gt;            
                &lt;xs:documentation&gt;  
                   a named spectral region of the electro-magnetic spectrum  
                   that the resource's spectral coverage overlaps with.  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="regionOfRegard" type="xs:float" minOccurs="0"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:appinfo&gt;  
                  &lt;vm:dcterm&gt;Coverage.RegionOfRegard&lt;/vm:dcterm&gt;  
                &lt;/xs:appinfo&gt;            
                &lt;xs:documentation&gt;  
                   a single numeric value representing the angle, given  
                   in decimal degrees, by which a positional query  
                   against this resource should be "blurred" in order  
                   to get an appropriate match.  
                &lt;/xs:documentation&gt;  
                &lt;xs:documentation&gt;  
                   In the case of image repositories, it might refer to  
                   a typical field-of-view size, or the primary beam  
                   size for radio aperture synthesis data.  In the case  
                   of object catalogs RoR should normally be the  
                   largest of the typical size of the objects, the  
                   astrometric errors in the positions, or the  
                   resolution of the data.    
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
       &lt;/xs:sequence&gt;              
    &lt;/xs:complexType&gt;  
   
    &lt;xs:complexType name="ServiceReference"&gt;  
       &lt;xs:annotation&gt;  
          &lt;xs:documentation&gt;  
            the service URL for a potentially registerd service.  That is,  
            if an IVOA identifier is also provided, then the service is  
            described in a registry.  
          &lt;/xs:documentation&gt;  
       &lt;/xs:annotation&gt;  
   
       &lt;xs:simpleContent&gt;  
          &lt;xs:extension base="xs:anyURI"&gt;  
   
             &lt;xs:attribute name="ivo-id" type="vr:IdentifierURI"&gt;  
                &lt;xs:annotation&gt;  
                  &lt;xs:documentation&gt;  
                    The URI form of the IVOA identifier for the service  
                    describing the capability refered to by this element.  
                  &lt;/xs:documentation&gt;  
                &lt;/xs:annotation&gt;  
             &lt;/xs:attribute&gt;  
   
          &lt;/xs:extension&gt;        
       &lt;/xs:simpleContent&gt;  
    &lt;/xs:complexType&gt;    
   
    &lt;xs:simpleType name="Waveband"&gt;  
       &lt;xs:restriction base="xs:token"&gt;  
          &lt;xs:enumeration value="Radio"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                  wavelength &gt;= 10 mm; frequency &lt;= 30 GHz.  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:enumeration&gt;  
          &lt;xs:enumeration value="Millimeter"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                  0.1 mm &lt;= wavelength &lt;= 10 mm;  
                  3000 GHz &gt;= frequency &gt;= 30 GHz.  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:enumeration&gt;  
          &lt;xs:enumeration value="Infrared"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                  1 micron &lt;= wavelength &lt;= 100 micons  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:enumeration&gt;  
          &lt;xs:enumeration value="Optical"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                  0.3 microns &lt;= wavelength &lt;= 1 micon;  
                  300 nm &lt;= wavelength &lt;= 1000 nm;  
                  3000 Angstroms &lt;= wavelength &lt;= 10000 Angstroms  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:enumeration&gt;  
          &lt;xs:enumeration value="UV"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                  0.1 microns &lt;= wavelength &lt;= 0.3 micon;  
                  1000 nm &lt;= wavelength &lt;= 3000 nm;  
                  1000 Angstroms &lt;= wavelength &lt;= 30000 Angstroms  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:enumeration&gt;  
          &lt;xs:enumeration value="EUV"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                  100 Angstroms &lt;= wavelength &lt;= 1000 Angstroms;  
                  12 eV &lt;= energy &lt;= 120 eV  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:enumeration&gt;  
          &lt;xs:enumeration value="X-ray"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                  0.1 Angstroms &lt;= wavelength &lt;= 100 Angstroms;  
                  0.12 keV &lt;= energy &lt;= 120 keV  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:enumeration&gt;  
          &lt;xs:enumeration value="Gamma-ray"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                  energy &gt;= 120 keV  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:enumeration&gt;  
       &lt;/xs:restriction&gt;  
    &lt;/xs:simpleType&gt;  
   
    &lt;xs:complexType name="TableSet"&gt;  
       &lt;xs:annotation&gt;  
          &lt;xs:documentation&gt;  
            The set of tables hosted by a resource.  
          &lt;/xs:documentation&gt;  
       &lt;/xs:annotation&gt;  
   
       &lt;xs:sequence&gt;  
   
          &lt;xs:element name="schema" type="vs:TableSchema"  
                      minOccurs="1" maxOccurs="unbounded"&gt;  
             &lt;xs:annotation&gt;  
               &lt;xs:documentation&gt;  
                 A named description of a set of logically related tables.  
               &lt;/xs:documentation&gt;  
               &lt;xs:documentation&gt;  
                 The name given by the "name" child element must  
                 be unique within this TableSet instance.  If there is  
                 only one schema in this set and/or there's no locally  
                 appropriate name to provide, the name can be set to  
                 "default".    
               &lt;/xs:documentation&gt;  
               &lt;xs:documentation&gt;  
                 This aggregation does not need to map to an  
                 actual database, catalog, or schema, though the  
                 publisher may choose to aggregate along such  
                 designations, or particular service protocol may  
                 recommend it.    
               &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
1258    
1259        &lt;/xs:sequence&gt;  \appendix
1260    
1261        &lt;xs:anyAttribute namespace="##other" /&gt;  \section{Compatibility Issues with VODataService 1.0}
    &lt;/xs:complexType&gt;  
     
    &lt;xs:complexType name="TableSchema"&gt;  
       &lt;xs:annotation&gt;  
          &lt;xs:documentation&gt;  
            A detailed description of a logically-related set of tables  
          &lt;/xs:documentation&gt;  
       &lt;/xs:annotation&gt;  
   
       &lt;xs:sequence&gt;  
          &lt;xs:element name="name" type="xs:token" minOccurs="1" maxOccurs="1"&gt;  
            &lt;xs:annotation&gt;  
              &lt;xs:documentation&gt;  
                A name for the set of tables.    
              &lt;/xs:documentation&gt;  
              &lt;xs:documentation&gt;  
                This is used to uniquely identify the table set among  
                several table sets.  If a title is not present, this  
                name can be used for display purposes.  
              &lt;/xs:documentation&gt;  
              &lt;xs:documentation&gt;  
                If there is no appropriate logical name associated with  
                this set, the name should be explicitly set to  
                "default".    
              &lt;/xs:documentation&gt;  
            &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
             
          &lt;xs:element name="title" type="xs:token" minOccurs="0"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                   a descriptive, human-interpretable name for the table set.  
                &lt;/xs:documentation&gt;  
                &lt;xs:documentation&gt;  
                   This is used for display purposes.  There is no requirement  
                   regarding uniqueness.  It is useful when there are  
                   multiple schemas in the context (e.g. within a  
                   tableset; otherwise, the resource title could be  
                   used instead).  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="description" type="xs:token"  
                      minOccurs="0" maxOccurs="1"&gt;  
            &lt;xs:annotation&gt;  
              &lt;xs:documentation&gt;  
                A free text description of the tableset that should  
                explain in general how all of the tables are related.  
              &lt;/xs:documentation&gt;  
            &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="utype" type="xs:token" minOccurs="0"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                   an identifier for a concept in a data model that  
                   the data in this schema as a whole represent.    
                &lt;/xs:documentation&gt;  
                &lt;xs:documentation&gt;  
                   The format defined in the VOTable standard is strongly  
                   recommended.  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="table" type="vs:Table"  
                      minOccurs="0" maxOccurs="unbounded"&gt;  
            &lt;xs:annotation&gt;  
              &lt;xs:documentation&gt;  
                A description of one of the tables that makes up the set.  
              &lt;/xs:documentation&gt;  
              &lt;xs:documentation&gt;  
                The table names for the table should be unique.  
              &lt;/xs:documentation&gt;  
            &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
       &lt;/xs:sequence&gt;  
   
       &lt;xs:anyAttribute namespace="##other" /&gt;  
    &lt;/xs:complexType&gt;  
     
    &lt;xs:complexType name="Format"&gt;  
       &lt;xs:simpleContent&gt;  
          &lt;xs:extension base="xs:token"&gt;  
            &lt;xs:attribute name="isMIMEType" type="xs:boolean" default="false"&gt;  
              &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                  if true, then the content is a MIME Type  
                &lt;/xs:documentation&gt;  
              &lt;/xs:annotation&gt;  
            &lt;/xs:attribute&gt;  
          &lt;/xs:extension&gt;  
       &lt;/xs:simpleContent&gt;  
    &lt;/xs:complexType&gt;  
   
    &lt;xs:complexType name="DataService"&gt;  
       &lt;xs:annotation&gt;  
          &lt;xs:documentation&gt;  
            A service for accessing astronomical data  
          &lt;/xs:documentation&gt;  
       &lt;/xs:annotation&gt;  
   
       &lt;xs:complexContent&gt;  
          &lt;xs:extension base="vr:Service"&gt;  
             &lt;xs:sequence&gt;  
               &lt;xs:element name="facility" type="vr:ResourceName"  
                           minOccurs="0" maxOccurs="unbounded"&gt;  
                 &lt;xs:annotation&gt;  
                    &lt;xs:appinfo&gt;  
                      &lt;vm:dcterm&gt;Subject&lt;/vm:dcterm&gt;  
                    &lt;/xs:appinfo&gt;  
                    &lt;xs:documentation&gt;  
                      the observatory or facility used to collect the data  
                      contained or managed by this resource.    
                    &lt;/xs:documentation&gt;  
                 &lt;/xs:annotation&gt;  
               &lt;/xs:element&gt;  
   
               &lt;xs:element name="instrument" type="vr:ResourceName"  
                           minOccurs="0" maxOccurs="unbounded"&gt;  
                 &lt;xs:annotation&gt;  
                    &lt;xs:appinfo&gt;  
                      &lt;vm:dcterm&gt;Subject&lt;/vm:dcterm&gt;  
                      &lt;vm:dcterm&gt;Subject.Instrument&lt;/vm:dcterm&gt;  
                    &lt;/xs:appinfo&gt;  
                    &lt;xs:documentation&gt;  
                      the Instrument used to collect the data contain or  
                      managed by a resource.    
                    &lt;/xs:documentation&gt;  
                 &lt;/xs:annotation&gt;  
               &lt;/xs:element&gt;  
   
               &lt;xs:element name="coverage" type="vs:Coverage" minOccurs="0"&gt;  
                 &lt;xs:annotation&gt;  
                    &lt;xs:documentation&gt;  
                      Extent of the content of the resource over space, time,  
                      and frequency.  
                    &lt;/xs:documentation&gt;  
                 &lt;/xs:annotation&gt;  
               &lt;/xs:element&gt;  
   
             &lt;/xs:sequence&gt;  
          &lt;/xs:extension&gt;  
       &lt;/xs:complexContent&gt;  
    &lt;/xs:complexType&gt;  
   
    &lt;xs:complexType name="ParamHTTP"&gt;  
       &lt;xs:annotation&gt;  
         &lt;xs:documentation&gt;  
            A service invoked via an HTTP Query (either Get or Post)  
            with a set of arguments consisting of keyword name-value pairs.  
         &lt;/xs:documentation&gt;  
         &lt;xs:documentation&gt;  
            Note that the URL for help with this service can be put into  
            the Service/ReferenceURL element.  
         &lt;/xs:documentation&gt;  
       &lt;/xs:annotation&gt;  
   
       &lt;xs:complexContent&gt;  
          &lt;xs:extension base="vr:Interface"&gt;  
             &lt;xs:sequence&gt;  
                &lt;xs:element name="queryType" type="vs:HTTPQueryType"  
                            minOccurs="0" maxOccurs="2"&gt;  
                   &lt;xs:annotation&gt;  
                      &lt;xs:documentation&gt;  
                        The type of HTTP request, either GET or POST.  
                      &lt;/xs:documentation&gt;  
                      &lt;xs:documentation&gt;  
                        The service may indicate support for both GET  
                        and POST by providing 2 queryType elements, one  
                        with GET and one with POST.  
                      &lt;/xs:documentation&gt;  
                   &lt;/xs:annotation&gt;  
                &lt;/xs:element&gt;  
   
                &lt;xs:element name="resultType" type="xs:token"  
                            minOccurs="0" maxOccurs="1"&gt;  
                   &lt;xs:annotation&gt;  
                      &lt;xs:documentation&gt;  
                        The MIME type of a document returned in the HTTP response.  
                      &lt;/xs:documentation&gt;  
                   &lt;/xs:annotation&gt;  
                &lt;/xs:element&gt;  
   
                &lt;xs:element name="param" type="vs:InputParam" minOccurs="0"  
                             maxOccurs="unbounded"&gt;  
                   &lt;xs:annotation&gt;  
                     &lt;xs:documentation&gt;  
                        a description of a input parameter that can be  
                        provided as a name=value argument to the service.    
                     &lt;/xs:documentation&gt;  
                   &lt;/xs:annotation&gt;  
                &lt;/xs:element&gt;  
   
                &lt;xs:element name="testQuery" type="xs:string" minOccurs="0"  
                            maxOccurs="unbounded"&gt;  
                   &lt;xs:annotation&gt;  
                     &lt;xs:documentation&gt;  
                        a ampersand-delimited list of arguments that  
                        can be used to test this service interface;  
                        when provided as the input to this interface,  
                        it will produce a legal, non-null response.  
                     &lt;/xs:documentation&gt;  
                     &lt;xs:documentation&gt;  
                        When then interface supports GET, then the full  
                        query URL is formed by the concatonation of the  
                        base URL (given by the accessURL) and the value  
                        given by this testQuery element.    
                     &lt;/xs:documentation&gt;  
                   &lt;/xs:annotation&gt;  
                &lt;/xs:element&gt;  
   
             &lt;/xs:sequence&gt;  
          &lt;/xs:extension&gt;  
       &lt;/xs:complexContent&gt;  
    &lt;/xs:complexType&gt;  
   
    &lt;xs:simpleType name="HTTPQueryType"&gt;  
       &lt;xs:annotation&gt;  
          &lt;xs:documentation&gt;  
            The type of HTTP request, either GET or POST.  
          &lt;/xs:documentation&gt;  
       &lt;/xs:annotation&gt;  
       &lt;xs:restriction base="xs:token"&gt;  
          &lt;xs:enumeration value="GET"/&gt;  
          &lt;xs:enumeration value="POST"/&gt;  
       &lt;/xs:restriction&gt;  
    &lt;/xs:simpleType&gt;  
   
    &lt;xs:complexType name="CatalogService"&gt;  
       &lt;xs:annotation&gt;  
          &lt;xs:documentation&gt;  
             A service that interacts with with astronomical data  
             through one or more specified tables.  
          &lt;/xs:documentation&gt;  
          &lt;xs:documentation&gt;  
             A table with sky coverage typically have columns that give  
             longitude-latitude positions in some coordinate system.    
          &lt;/xs:documentation&gt;  
       &lt;/xs:annotation&gt;  
   
       &lt;xs:complexContent&gt;  
          &lt;xs:extension base="vs:DataService"&gt;  
             &lt;xs:sequence&gt;  
                &lt;xs:element name="tableset" type="vs:TableSet" minOccurs="0"&gt;  
                   &lt;xs:annotation&gt;  
                      &lt;xs:documentation&gt;  
                        A description of the tables that are accessible  
                        through this service.  
                      &lt;/xs:documentation&gt;  
                      &lt;xs:documentation&gt;  
                        Each schema name and each table name must be  
                        unique within this tableset.  
                      &lt;/xs:documentation&gt;  
                   &lt;/xs:annotation&gt;  
   
                  &lt;xs:unique name="CatalogService-schemaName"&gt;  
                     &lt;xs:selector xpath="schema" /&gt;  
                     &lt;xs:field xpath="name" /&gt;  
                  &lt;/xs:unique&gt;  
   
                  &lt;xs:unique name="CatalogService-tableName"&gt;  
                     &lt;xs:selector xpath="schema/table" /&gt;  
                     &lt;xs:field xpath="name" /&gt;  
                  &lt;/xs:unique&gt;  
                &lt;/xs:element&gt;  
             &lt;/xs:sequence&gt;  
          &lt;/xs:extension&gt;  
       &lt;/xs:complexContent&gt;  
    &lt;/xs:complexType&gt;  
   
    &lt;xs:complexType name="Table"&gt;  
       &lt;xs:sequence&gt;  
          &lt;xs:element name="name" type="xs:token"  
                      minOccurs="1" maxOccurs="1"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                   the fully qualified name of the table.  This name  
                   should include all catalog or schema prefixes  
                   needed to sufficiently uniquely distinguish it in a  
                   query.    
                &lt;/xs:documentation&gt;  
                &lt;xs:documentation&gt;  
                   In general, the format of the qualified name may  
                   depend on the context; however, when the  
                   table is intended to be queryable via ADQL, then the  
                   catalog and schema qualifiers are delimited from the  
                   table name with dots (.).    
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="title" type="xs:token" minOccurs="0"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                   a descriptive, human-interpretable name for the table.  
                &lt;/xs:documentation&gt;  
                &lt;xs:documentation&gt;  
                   This is used for display purposes.  There is no requirement  
                   regarding uniqueness.    
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="description" type="xs:token" minOccurs="0"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                   a free-text description of the table's contents  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="utype" type="xs:token" minOccurs="0"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                   an identifier for a concept in a data model that  
                   the data in this table represent.    
                &lt;/xs:documentation&gt;  
                &lt;xs:documentation&gt;  
                   The format defined in the VOTable standard is highly  
                   recommended.  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="column" type="vs:TableParam"  
                      minOccurs="0" maxOccurs="unbounded"&gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                   a description of a table column.  
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
          &lt;xs:element name="foreignKey" type="vs:ForeignKey"  
                      minOccurs="0" maxOccurs="unbounded" &gt;  
             &lt;xs:annotation&gt;  
                &lt;xs:documentation&gt;  
                   a description of a foreign keys, one or more columns  
                   from the current table that can be used to join with  
                   another table.    
                &lt;/xs:documentation&gt;  
             &lt;/xs:annotation&gt;  
          &lt;/xs:element&gt;  
   
       &lt;/xs:sequence&gt;  
   
       &lt;xs:attribute name="type" type="xs:string"&gt;  
          &lt;xs:annotation&gt;  
             &lt;xs:documentation&gt;  
                a name for the role this table plays.  Recognized  
                values include "output", indicating this table is output  
                from a query; "base_table", indicating a table  
                whose records represent the main subjects of its  
                schema; and "view", indicating that the table represents  
                a useful combination or subset of other tables.  Other  
                values are allowed.    
             &lt;/xs:documentation&gt;  
          &lt;/xs:annotation&gt;  
       &lt;/xs:attribute&gt;  
   
       &lt;xs:anyAttribute namespace="##other" /&gt;  
    &lt;/xs:complexType&gt;  
   
&nbs