<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=iso-8859-2"><meta name=Generator content="Microsoft Word 15 (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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
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=HU link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span lang=EN-US>Hi everyone,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>I&#8217;m implementing a TAP adapter for my cross-match tool [ <a href="http://voservices.net/skyquery">http://voservices.net/skyquery</a> ] and was running into a few issues with some of the TAP endpoints so I&#8217;d like to ask a few questions about the standard and some suggestions on possible workarounds.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>1. The first question is about how schema and table names should be handled by the TAP_SCHEMA view. For instance, the gavo TAP endpoint at <a href="http://dc.zah.uni-heidelberg.de/tap">http://dc.zah.uni-heidelberg.de/tap</a> returns names in the schemaname.tablename format in the table_name column whereas vizier at <a href="http://tapvizier.u-strasbg.fr/TAPVizieR/tap/">http://tapvizier.u-strasbg.fr/TAPVizieR/tap/</a> shows the table name only in the table_name column and schema_name is separate. It is straightforward to remove the schema name from the table_name column if it is the same as schema_name but it&#8217;s not so straightforward to compose a query, which, for instance, gets the columns of a given table if I only know the schema name and the table name separately. Or should I go for compatibility across endpoints with something like:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>SELECT * FROM TAP_SCHEMA.columns<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>WHERE schema_name = &#8217;myschema&#8217; AND table_name = &#8217;mytable&#8217; OR table_name = &#8217;myschema.mytable&#8217;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>2. My other question is about how to properly quote table names in ADQL. Some endpoint, particularly vizier, requires table name quoting due to the way table names are constructed (with lots of /-s), e.g.:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>SELECT TOP 10 * FROM &quot;viz7&quot;.&quot;J/AJ/144/129/refs&quot;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>On the other hand the GAVO tap interface at throws an error for quoted table names while handles quoted columns correctly:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>SELECT  TOP 10 &quot;raj2000&quot;, &quot;dej2000&quot; FROM &quot;fk6&quot;.&quot;part1&quot; -- results in error &quot;'QuotedName' object has no attribute 'upper'&quot;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>In contrast, the endpoint of GAIA at <a href="http://gaia.ari.uni-heidelberg.de/tap/">http://gaia.ari.uni-heidelberg.de/tap/</a>, supports table name quoting properly.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>Quoting names is necessary to avoid keywords and. Would you automatically quote everything or quote only what requires quoting and hope that all endpoints understand it?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>Or is it safer to use the /tables endpoint rather than querying TAP_SCHEMA views?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>3. My third question is about how to deal with missing or wrong xml namespaces. This is often an issue with /capabilities. For example, a number of services (at least http://heasarc.gsfc.nasa.gov:80/xamin/vo/tap) returns an xml with the namespace <a href="http://www.ivoa.net/xml/TAP/v1.0">http://www.ivoa.net/xml/TAP/v1.0</a> which gives me a 404. Is it something that&#8217;s allowed by the standard or I&#8217;m supposed to come up with a workaround? A similar issue is with the VOTables returned by, for example by <a href="http://datalab.noao.edu/tap">http://datalab.noao.edu/tap</a> and <a href="https://heasarc.gsfc.nasa.gov/xamin/vo/tap/">https://heasarc.gsfc.nasa.gov/xamin/vo/tap/</a> , which lack the default namespace:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>&lt;VOTABLE xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>xsi:noNamespaceSchemaLocation=&quot;xmlns:http://www.ivoa.net/xml/VOTable-1.2.xsd&quot; version=&quot;1.2&quot;&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>The default namespace would be xmlns=&#8221;http://www.ivoa.net/xml/VOTable-1.2.xsd&#8221; and although it is in the noNamespaceSchemaLocation attribute, many xml processing frameworks (in my case .Net XmlSerializer) don&#8217;t recognize it.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>I implemented a workaround to automagically add the correct namespace based on the version=&#8221;1.2&#8221; attribute but again, I don&#8217;t know if it&#8217;s a good policy.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>4. I had a similar issue with XML documents returned by certain services that implement non-standard or not-yet-standard features, such as the TAP service at https://heasarc.gsfc.nasa.gov/xamin/vo/tap/capabilities which returns an xml with namespaces like xmlns:tr=&quot;http://www.ivoa.net/xml/TAP/v1.0&quot; then reference it somewhere as &lt;capability standardID=&quot;ivo://ivoa.net/std/TAP&quot; xsi:type=&quot;tr:TableAccess&quot;&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>My workaround is to simply ignore these but the question is whether this would break anything or not. I assume in case of every TAP service to have a /async and /sync endpoint so I don&#8217;t really need the proper capabilities list.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>5. What is the suggested way of figuring out the list of supported output formats? There seems to be no standard list of mime types. For example the gaia tap interface at &quot;http://gaia.ari.uni-heidelberg.de/tap/ offers this list:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;mime&gt;application/x-votable+xml&lt;/mime&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;alias&gt;votable&lt;/alias&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;/outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;mime&gt;application/x-votable+xml;serialization=BINARY2&lt;/mime&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;alias&gt;votable/b2&lt;/alias&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;/outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;mime&gt;application/x-votable+xml;serialization=TABLEDATA&lt;/mime&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;alias&gt;votable/td&lt;/alias&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;/outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;mime&gt;application/x-votable+xml;serialization=FITS&lt;/mime&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;alias&gt;votable/fits&lt;/alias&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;/outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;mime&gt;application/fits&lt;/mime&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;alias&gt;fits&lt;/alias&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;/outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;mime&gt;application/json&lt;/mime&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;alias&gt;json&lt;/alias&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;/outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;mime&gt;text/csv&lt;/mime&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;alias&gt;csv&lt;/alias&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;/outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;mime&gt;text/tab-separated-values&lt;/mime&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;alias&gt;tsv&lt;/alias&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;/outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;mime&gt;text/plain&lt;/mime&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;alias&gt;text&lt;/alias&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;/outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;mime&gt;text/html&lt;/mime&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                            &lt;alias&gt;html&lt;/alias&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>              &lt;/outputFormat&gt;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>whereas other services (e.g. vizier) use different mime types and some don&#8217;t even provide the aliases. Are the aliases standardized so I can select the best format based on that or I need to do some heuristics based on the mime type strings?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>6. Finally, is there a collection of votables and xml documents available somewhere that can be used for regression testing?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>Thanks a lot for reading all this,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>-Laszlo<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p></div></body></html>