<?xml version="1.0"?>
<?xml-stylesheet href='/static/xsl/vosi.xsl' type='text/xsl'?>
<cap:capabilities xmlns:cap="http://www.ivoa.net/xml/VOSICapabilities/v1.0" xmlns:tr="http://www.ivoa.net/xml/TAPRegExt/v1.0" xmlns:vg="http://www.ivoa.net/xml/VORegistry/v1.0" xmlns:vr="http://www.ivoa.net/xml/VOResource/v1.0" xmlns:vs="http://www.ivoa.net/xml/VODataService/v1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ivoa.net/xml/VOSICapabilities/v1.0 http://vo.ari.uni-heidelberg.de/docs/schemata/VOSICapabilities-v1.0.xsd http://www.ivoa.net/xml/TAPRegExt/v1.0 http://vo.ari.uni-heidelberg.de/docs/schemata/TAPRegExt-v1.0.xsd http://www.ivoa.net/xml/VORegistry/v1.0 http://vo.ari.uni-heidelberg.de/docs/schemata/VORegistry-v1.0.xsd http://www.ivoa.net/xml/VOResource/v1.0 http://vo.ari.uni-heidelberg.de/docs/schemata/VOResource-v1.1.xsd http://www.ivoa.net/xml/VODataService/v1.1 http://vo.ari.uni-heidelberg.de/docs/schemata/VODataService-v1.1.xsd">
  <capability standardID="ivo://ivoa.net/std/VOSI#availability">
    <interface role="std" xsi:type="vs:ParamHTTP">
      <accessURL use="full">http://dc.zah.uni-heidelberg.de/__system__/tap/run/availability</accessURL>
    </interface>
  </capability>
  <capability standardID="ivo://ivoa.net/std/VOSI#capabilities">
    <interface role="std" xsi:type="vs:ParamHTTP">
      <accessURL use="full">http://dc.zah.uni-heidelberg.de/__system__/tap/run/capabilities</accessURL>
    </interface>
  </capability>
  <capability standardID="ivo://ivoa.net/std/VOSI#tables">
    <interface role="std" xsi:type="vs:ParamHTTP">
      <accessURL use="full">http://dc.zah.uni-heidelberg.de/__system__/tap/run/tableMetadata</accessURL>
      <securityMethod standardID="http://www.w3.org/Protocols/HTTP/1.0/spec.html#BasicAA"/>
    </interface>
  </capability>
  <capability standardID="ivo://ivoa.net/std/TAP" xsi:type="tr:TableAccess">
    <interface role="std" xsi:type="vs:ParamHTTP">
      <accessURL use="base">http://dc.zah.uni-heidelberg.de/tap</accessURL>
    </interface>
    <dataModel ivo-id="ivo://ivoa.net/std/RegTAP#1.1">Registry 1.1</dataModel>
    <dataModel ivo-id="ivo://ivoa.net/std/RegTAP#1.0">Registry 1.0</dataModel>
    <dataModel ivo-id="ivo://ivoa.net/std/ObsCore#table-1.1">Obscore-1.1</dataModel>
    <dataModel ivo-id="ivo://org.gavo.dc/std/glots#tables-1.0">GloTS 1.0</dataModel>
    <language>
      <name>ADQL</name>
      <version ivo-id="ivo://ivoa.net/std/ADQL#v2.0">2.0</version>
      <description>ADQL 2.0</description>
      <languageFeatures type="ivo://ivoa.net/std/TAPRegExt#features-udf">
        <feature>
          <form>gavo_simbadpoint(identifier TEXT) -&gt; POINT</form>
          <description>gavo_simbadpoint queries simbad for an identifier and returns the 
corresponding point.  Note that identifier can only be a literal,
i.e., as simple string rather than a column name. This is because
our database cannot query simbad, and we probably wouldn't want
to fire off millions of simbad queries anyway; use simbad's own
TAP service for this kind of applications.</description>
        </feature>
        <feature>
          <form>gavo_match(pattern TEXT, string TEXT) -&gt; INTEGER</form>
          <description>gavo_match returns 1 if the POSIX regular expression pattern
matches anything in string, 0 otherwise.</description>
        </feature>
        <feature>
          <form>ivo_healpix_center(hpxOrder INTEGER, hpxIndex BIGINT) -&gt; POINT</form>
          <description>returns a POINT corresponding to the center of the healpix with
the given index at the given order.</description>
        </feature>
        <feature>
          <form>ivo_string_agg(expression TEXT, delimiter TEXT) -&gt; TEXT</form>
          <description>An aggregate function returning all values of
expression within a GROUP contcatenated with delimiter</description>
        </feature>
        <feature>
          <form>gavo_to_jd(d TIMESTAMP) -&gt; DOUBLE PRECISION</form>
          <description>The function converts a postgres timestamp to julian date.
This is naive; no corrections for timezones, let alone time
scales or the like are done; you can thus not expect this to be
good to second-precision unless you are careful in the construction
of the timestamp.</description>
        </feature>
        <feature>
          <form>ivo_interval_overlapsivo_interval_overlaps(l1 NUMERIC, h1 NUMERIC, l2 NUMERIC, h2 NUMERIC) -&gt; INTEGER</form>
          <description>The function returns 1 if the interval [l1...h1] overlaps with
the interval [l2...h2].  For the purposes of this function,
the case l1=h2 or l2=h1 is treated as overlap.  The function
returns 0 for non-overlapping intervals.</description>
        </feature>
        <feature>
          <form>ivo_healpix_index(order INTEGER, ra DOUBLE PRECISION, dec DOUBLE PRECISION) -&gt; BIGINT</form>
          <description>Returns the index of the (nest) healpix with order containing the 
spherical point (ra, dec).

An alternative, 2-argument form 

ivo_healpix_index(order INTEGER, p POINT) -&gt; BIGINT

is also available.</description>
        </feature>
        <feature>
          <form>ivo_hashlist_has(hashlist TEXT, item TEXT) -&gt; INTEGER</form>
          <description>The function takes two strings; the first is a list of words not
containing the hash sign (#), concatenated by hash signs, the second is
a word not containing the hash sign.  It returns 1 if, compared
case-insensitively, the second argument is in the list of words coded in
the first argument.  The behaviour in case the the second
argument contains a hash sign is unspecified.</description>
        </feature>
        <feature>
          <form>gavo_to_mjd(d TIMESTAMP) -&gt; DOUBLE PRECISION</form>
          <description>The function converts a postgres timestamp to modified julian date.
This is naive; no corrections for timezones, let alone time
scales or the like are done; you can thus not expect this to be
good to second-precision unless you are careful in the construction
of the timestamp.</description>
        </feature>
        <feature>
          <form>ivo_nocasematch(value TEXT, pattern TEXT) -&gt; INTEGER</form>
          <description>ivo_nocasematch returns 1 if pattern matches value, 0 otherwise.
pattern is defined as for the SQL LIKE operator, but the
match is performed case-insensitively.  This function in effect
provides a surrogate for the ILIKE SQL operator that is missing from
ADQL.

On this site, this is actually implemented using python's and SQL's
LOWER, so for everything except ASCII, your milage will vary.</description>
        </feature>
        <feature>
          <form>ivo_hasword(haystack TEXT, needle TEXT) -&gt; INTEGER</form>
          <description>gavo_hasword returns 1 if needle shows up in haystack, 0 otherwise.  This
is for "google-like"-searches in text-like fields.  In word, you can
actually employ a fairly complex query language; see
http://www.postgresql.org/docs/8.3/static/textsearch.html
for details.</description>
        </feature>
        <feature>
          <form>ivo_apply_pm(ra DOUBLE PRECISION, dec DOUBLE PRECISION, pmra DOUBLE PRECISION, pmde DOUBLE PRECISON, epdist DOUBLE PRECISION) -&gt; POINT</form>
          <description>Returns a POINT (in the UNDEFINED reference frame) for the position
an object at ra/dec with proper motion pmra/pmde has after epdist years.

positions must be in degrees, PMs in should be in julian years (i.e., proper
motions are expected in degrees/year).  pmra is assumed to contain 
cos(delta).

NOTE: This currently is a crappy approximation that does *not* go
through the tangential plane.  If you use it, let the operators know
so we replace it with something real.</description>
        </feature>
      </languageFeatures>
      <languageFeatures type="ivo://ivoa.net/std/TAPRegExt#features-adqlgeo">
        <feature>
          <form>BOX</form>
        </feature>
        <feature>
          <form>POINT</form>
        </feature>
        <feature>
          <form>CIRCLE</form>
        </feature>
        <feature>
          <form>POLYGON</form>
        </feature>
        <feature>
          <form>REGION</form>
        </feature>
        <feature>
          <form>CENTROID</form>
        </feature>
        <feature>
          <form>COORD1</form>
        </feature>
        <feature>
          <form>COORD2</form>
        </feature>
        <feature>
          <form>DISTANCE</form>
        </feature>
        <feature>
          <form>CONTAINS</form>
        </feature>
        <feature>
          <form>INTERSECTS</form>
        </feature>
        <feature>
          <form>AREA</form>
        </feature>
      </languageFeatures>
      <languageFeatures type="ivo://ivoa.net/std/TAPRegExt#features-adql-string">
        <feature>
          <form>LOWER</form>
        </feature>
      </languageFeatures>
      <languageFeatures type="ivo://ivoa.net/std/TAPRegExt#features-adql-offset">
        <feature>
          <form>OFFSET</form>
        </feature>
      </languageFeatures>
      <languageFeatures type="ivo://ivoa.net/std/TAPRegExt#features-adql-type">
        <feature>
          <form>CAST</form>
        </feature>
      </languageFeatures>
      <languageFeatures type="ivo://ivoa.net/std/TAPRegExt#features-adql-unit">
        <feature>
          <form>IN_UNIT</form>
        </feature>
      </languageFeatures>
      <languageFeatures type="ivo://ivoa.net/std/TAPRegExt#features-adql-sets">
        <feature>
          <form>UNION</form>
        </feature>
        <feature>
          <form>EXCEPT</form>
        </feature>
        <feature>
          <form>INTERSECT</form>
        </feature>
      </languageFeatures>
    </language>
    <outputFormat ivo-id="ivo://ivoa.net/std/TAPRegExt#output-votable-binary">
      <mime>text/xml</mime>
    </outputFormat>
    <outputFormat ivo-id="http://dc.g-vo.org/output-vodml">
      <mime>application/x-votable+xml;version=1.4</mime>
      <alias>vodml</alias>
    </outputFormat>
    <outputFormat>
      <mime>text/html</mime>
      <alias>html</alias>
    </outputFormat>
    <outputFormat ivo-id="ivo://ivoa.net/std/TAPRegExt#output-votable-binary2">
      <mime>application/x-votable+xml;serialization=binary2</mime>
      <alias>votable/b2</alias>
    </outputFormat>
    <outputFormat>
      <mime>application/geo-json</mime>
      <alias>geojson</alias>
    </outputFormat>
    <outputFormat>
      <mime>application/fits</mime>
      <alias>fits</alias>
    </outputFormat>
    <outputFormat>
      <mime>text/csv</mime>
    </outputFormat>
    <outputFormat>
      <mime>text/csv;header=present</mime>
      <alias>csv</alias>
    </outputFormat>
    <outputFormat ivo-id="ivo://ivoa.net/std/TAPRegEXT#output-votable-td">
      <mime>application/x-votable+xml;serialization=tabledata</mime>
      <alias>votable/td</alias>
    </outputFormat>
    <outputFormat>
      <mime>application/json</mime>
      <alias>json</alias>
    </outputFormat>
    <outputFormat ivo-id="ivo://ivoa.net/std/TAPRegExt#output-votable-binary">
      <mime>application/x-votable+xml</mime>
      <alias>votable</alias>
    </outputFormat>
    <outputFormat>
      <mime>text/plain</mime>
    </outputFormat>
    <outputFormat>
      <mime>text/tab-separated-values</mime>
      <alias>tsv</alias>
    </outputFormat>
    <uploadMethod ivo-id="ivo://ivoa.net/std/TAPRegExt#upload-https"/>
    <uploadMethod ivo-id="ivo://ivoa.net/std/TAPRegExt#upload-ftp"/>
    <uploadMethod ivo-id="ivo://ivoa.net/std/TAPRegExt#upload-inline"/>
    <uploadMethod ivo-id="ivo://ivoa.net/std/TAPRegExt#upload-http"/>
    <retentionPeriod>
      <default>172800</default>
    </retentionPeriod>
    <executionDuration>
      <default>3600</default>
    </executionDuration>
    <outputLimit>
      <default unit="row">20000</default>
      <hard unit="row">10000000</hard>
    </outputLimit>
    <uploadLimit>
      <hard unit="byte">100000000</hard>
    </uploadLimit>
  </capability>
</cap:capabilities>
