<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoPlainText">Just a further note on this topic, to continue in my role as little black raincloud:<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">It seems we've dropped on-list discussion of database back-end issues with RegTAP example queries in TOPCAT, which began with my frustration with MS SQL Server and NATURAL JOINs. Unfortunately, there is another instance where TOPCAT
 is using the same joins, which is even more problematic for us at STScI: the basic RegTAP keyword queries under &quot;By Service Properties&quot; use these joins under the hood, where a user can&#8217;t rewrite them. Can this be altered as well? Can we go over this in some
 hack time at the interop?<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">I know Menelaus was also having issues with some stock queries, so I&#8217;m posting on list again in case anyone else discovers cross-compatibility issues with the keyword searches.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Thanks for the continued patience and support,<o:p></o:p></p>
<p class="MsoPlainText">--Theresa<o:p></o:p></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-left:.5in"><b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">From:</span></b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> Theresa Dower
<br>
<b>Sent:</b> Wednesday, February 24, 2016 2:12 PM<br>
<b>To:</b> registry@ivoa.net<br>
<b>Subject:</b> Problems with RegTAP, ADQL, natural joins, and MS SQL Server<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">Hello,<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">As some of you know from prior discussions and database work of your own, there is an issue with the ADQL standard and the capabilities of MS SQL Server, namely that by design it does not support the NATURAL JOIN
 syntax. The design decision was based on the ambiguity in how the natural join finds keys in generic schemas. Even with known schemas such as RegTAP&#8217;s, parsing and rewriting generic queries with natural joins is far from trivial.<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">At this time, TAP services at NAVO institutions and the Royal Observatory Edinburgh are using Microsoft SQL Server as a back end to TAP services. STScI and ROE are extending Gregory Mantele&#8217;s Java ADQL parser for
 this work and will share it back to his project. STScI have put together a RegTAP service which will be operational before the Spring 2016 interop. (An ObsTAP service with basic spatial query support comes next.) The problem is that with our available resources
 we cannot support natural joins, yet they are used extensively by the example RegTAP queries in TOPCAT, the most commonly used TAP client.<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">For our testing, Sarah Weissman at ST created translations of example TOPCAT queries avoiding the natural join syntax. They are a longer and uglier, which is the general argument for the elegance of natural joins
 in the first place, but they do work. I&#8217;ve proposed to Mark Taylor that we could provide these in TOPCAT and I agreed with his suggestion that while we can certainly use them, we should bring this to the mailing list so you are all aware of the issue.
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">How do we want to balance using the more elegant query syntax in our specs &nbsp;yet support major architectures that don&#8217;t allow them? Should we avoid using them in documentation examples and/or provide sample translations?
 What do we add in terms of notes about the issue in future specs? Should we help out clients with an agreed-upon error note for unsupported functionality, given some TAP providers have a similar issue with unsupported geometry already? I think we should do
 all of this and I welcome thoughts on the issue.<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">For the morbidly curious, all of the example queries requiring translation for SQL Server and our substitutions follow. They are quite simple, just numerous.
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">--Theresa Dower<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">----------------------------------------------<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><b>TAP Access URLS:<o:p></o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT ivoid, access_url<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.capability<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">NATURAL JOIN rr.interface<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">WHERE standard_id like 'ivo://ivoa.net/std/tap%'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT ivoid, access_url<br>
FROM rr.capability, rr.interface<br>
WHERE rr.capability.ivoid = rr.interface.ivoid<br>
AND standard_id like 'ivo://ivoa.net/std/tap%'<br>
AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><b>SIA with spirals:<o:p></o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT ivoid, access_url<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.capability<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.resource<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.interface<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.res_subject<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">WHERE standard_id='ivo://ivoa.net/std/sia'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND (<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp;&nbsp;&nbsp; 1=ivo_nocasematch(res_subject, '%spiral%')<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp;&nbsp;&nbsp; OR 1=ivo_hasword(res_description, 'spiral')<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp;&nbsp;&nbsp; OR 1=ivo_hasword(res_title, 'spiral'))<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT rr.capability.ivoid, access_url<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.capability, rr.resource, rr.interface, rr.res_subject<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">where rr.capability.ivoid = rr.resource.ivoid<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">AND rr.resource.ivoid = rr.interface.ivoid<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">AND rr.interface.ivoid = rr.res_subject.ivoid<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">AND standard_id='ivo://ivoa.net/std/sia'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">AND (<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">1=ivo_nocasematch(res_subject, '%spiral%')<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">OR 1=ivo_hasword(res_description, 'spiral')<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">OR 1=ivo_hasword(res_title, 'spiral'))<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><b><o:p>&nbsp;</o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><b>Infrared SIA:<o:p></o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT ivoid, access_url<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.capability<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.resource<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.interface<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">WHERE standard_id='ivo://ivoa.net/std/sia'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND 1=ivo_hashlist_has('infrared', waveband)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT rr.capability.ivoid, access_url<br>
FROM rr.capability, rr.resource, rr.interface<br>
AND rr.capability.ivoid = rr.resource.ivoid<br>
AND rr.resource.ivoid = rr.interface.ivoid<br>
AND standard_id='ivo://ivoa.net/std/sia'<br>
AND intf_type='vs:paramhttp'<br>
AND 1=ivo_hashlist_has('infrared', waveband)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><b>ConeSearch with redshift:<o:p></o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT ivoid, access_url<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.capability<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.table_column<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.interface <o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">WHERE standard_id='ivo://ivoa.net/std/conesearch'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND ucd='src.redshift'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT rr.capability.ivoid, access_url<br>
FROM rr.capability, rr.table_column, rr.interface<br>
where rr.capability.ivoid = rr.table_column.ivoid<br>
AND rr.table_column.ivoid = rr.interface.ivoid<br>
AND standard_id='ivo://ivoa.net/std/conesearch'<br>
AND intf_type='vs:paramhttp'<br>
AND ucd='src.redshift'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><b>Records from registry:<o:p></o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT access_url<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.interface<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">NATURAL JOIN rr.capability<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">NATURAL JOIN rr.res_detail<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">WHERE standard_id='ivo://ivoa.net/std/tap'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND detail_xpath='/capability/dataModel/@ivo-id'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND 1=ivo_nocasematch(detail_value,
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp;&nbsp;&nbsp;&nbsp;'ivo://ivoa.net/std/regtap#1.%')<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT ivoid FROM rr.resource<br>
RIGHT OUTER JOIN (<br>
SELECT 'ivo://' || detail_value || '%' AS pat<br>
FROM rr.res_detail<br>
WHERE detail_xpath='/managedAuthority'<br>
AND ivoid='ivo://cds.vizier/registry')<br>
AS authpatterns<br>
ON (resource.ivoid LIKE authpatterns.pat)<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><b>Locate RegTAP services:<o:p></o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT access_url<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.interface<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">NATURAL JOIN rr.capability<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">NATURAL JOIN rr.res_detail<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">WHERE standard_id='ivo://ivoa.net/std/tap'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND detail_xpath='/capability/dataModel/@ivo-id'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND 1=ivo_nocasematch(detail_value,
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp;&nbsp;&nbsp;&nbsp;'ivo://ivoa.net/std/regtap#1.%')<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT access_url<br>
FROM rr.interface, rr.capability, rr.res_detail<br>
where rr.interface.ivoid = rr.capability.ivoid<br>
AND rr.capability.ivoid = rr.res_detail.ivoid<br>
AND standard_id='ivo://ivoa.net/std/tap'<br>
AND intf_type='vs:paramhttp'<br>
AND detail_xpath='/capability/dataModel/@ivo-id'<br>
AND 1=ivo_nocasematch(detail_value, <br>
'ivo://ivoa.net/std/regtap#1.%')<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><b>TAP with Physics:<o:p></o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT ivoid, access_url, name, ucd, column_description<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.capability<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.interface<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.table_column<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.res_table<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">WHERE standard_id='ivo://ivoa.net/std/tap'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND 1=ivo_hasword(table_description, 'quasar')<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND ucd='phot.mag;em.opt.v'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT rr.capability.ivoid, access_url, name, ucd, column_description<br>
FROM rr.capability, rr.interface, rr.table_column, rr.res_table<br>
where rr.capability.ivoid = rr.interface.ivoid<br>
and rr.interface.ivoid = rr.table_column.ivoid<br>
and rr.table_column.ivoid = rr.res_table.ivoid<br>
and standard_id='ivo://ivoa.net/std/tap'<br>
AND intf_type='vs:paramhttp'<br>
AND 1=ivo_hasword(table_description, 'quasar')<br>
AND ucd='phot.mag;em.opt.v'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><b>Theoretical SSA:<o:p></o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT access_url<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.res_detail<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.capability<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.interface <o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">WHERE detail_xpath='/capability/dataSource'
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp;&nbsp;AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND standard_id='ivo://ivoa.net/std/ssa'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; AND detail_value='theory'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT access_url<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.res_detail, rr.capability, rr.interface<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">where rr.res_detail.ivoid = rr.capability.ivoid<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">and rr.capability.ivoid = rr.interface.ivoid<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">and detail_xpath='/capability/dataSource'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">AND intf_type='vs:paramhttp'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">AND standard_id='ivo://ivoa.net/std/ssa'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">AND detail_value='theory'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><b><o:p>&nbsp;</o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><b>Find Contact Persons:<o:p></o:p></b></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT DISTINCT base_role, role_name, email<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">FROM rr.res_role<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">&nbsp; NATURAL JOIN rr.interface<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">WHERE access_url='http://dc.zah.uni-heidelberg.de/tap'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in">SELECT DISTINCT access_url, base_role, role_name, email<br>
FROM rr.res_role, rr.interface<br>
where rr.res_role.ivoid = rr.interface.ivoid<br>
and access_url='http://dc.zah.uni-heidelberg.de/tap'<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p>&nbsp;</o:p></p>
</div>
</body>
</html>