<div dir="ltr">Hi Markus,<div><br></div><div>The use of the question mark (?) instead of the hash (#) was originally motivated by Norman&#39;s note on the use of fragments in URIs:  <a href="http://ivoa.net/documents/Notes/URIFragments/20120525/NOTE-URIFragments-1.0-20120525.html">http://ivoa.net/documents/Notes/URIFragments/20120525/NOTE-URIFragments-1.0-20120525.html</a></div><div><br></div><div>But I think you&#39;re right, these particular identifiers don&#39;t seem to go against those recommendations.  Thanks for the clarification. </div><div><br></div><div>Brian</div><div><br><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 21, 2017 at 1:56 AM, Markus Demleitner <span dir="ltr">&lt;<a href="mailto:msdemlei@ari.uni-heidelberg.de" target="_blank">msdemlei@ari.uni-heidelberg.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Grid,<br>
<br>
While I cannot really comment most of Brian&#39;s points, I feel<br>
compelled to stress one important bit on URI semantics:<br>
<span class="gmail-"><br>
On Tue, Jun 20, 2017 at 12:22:50PM -0700, Brian Major wrote:<br>
&gt; 2.0 synctrans:  ivo://<a href="http://ivoa.net/std/VOSpace/v2.0#/synctrans" rel="noreferrer" target="_blank">ivoa.net/std/VOSpace/v2.<wbr>0#/synctrans</a><br>
&gt; 2.1 synctrans:  ivo://<a href="http://ivoa.net/std/VOSpace?synctrans-2.1" rel="noreferrer" target="_blank">ivoa.net/std/VOSpace?<wbr>synctrans-2.1</a><br>
<br>
</span>This really needs to be ivo://<a href="http://ivoa.net/std/VOSpace#synctrans-2.1" rel="noreferrer" target="_blank">ivoa.net/std/VOSpace#<wbr>synctrans-2.1</a><br>
(hash rather than question mark).  The background is that<br>
synctrans-2.1 refers to something *within* the resource<br>
ivo://<a href="http://ivoa.net/std/VOSpace" rel="noreferrer" target="_blank">ivoa.net/std/VOSpace</a>: A standard key, in this case.<br>
<br>
The URI ivo://<a href="http://ivoa.net/std/VOSpace?synctrans-2.1" rel="noreferrer" target="_blank">ivoa.net/std/VOSpace?<wbr>synctrans-2.1</a> would essentially<br>
mean: Dereference the URI ivo://<a href="http://ivoa.net/std/VOSpace" rel="noreferrer" target="_blank">ivoa.net/std/VOSpace</a> and then make<br>
some sort of request to it with synctrans-2.1 as a parameter-like<br>
thing.<br>
<br>
This is not different form the way these things work with common HTML<br>
resources referenced through HTTP URLs.  Consider, for instance, the<br>
following python CGI:<br>
<br>
  import os<br>
  print(&quot;&quot;&quot;content-type:text/<wbr>html\n<br>
  &lt;html&gt;<br>
  &lt;p id=&quot;constant&quot;&gt;Hello World&lt;/p&gt;&lt;p&gt;{}&lt;/p&gt;<br>
  &lt;/html&gt;<br>
  &quot;&quot;&quot;.format(os.environ.get(&quot;<wbr>QUERY_STRING&quot;, &quot;&quot;)))<br>
<br>
which I&#39;ve installed on <a href="http://www.g-vo.org/cgi-bin/frag.py" rel="noreferrer" target="_blank">http://www.g-vo.org/cgi-bin/<wbr>frag.py</a> [1].<br>
<br>
With this,<br>
<br>
<a href="http://www.g-vo.org/cgi-bin/frag.py#constant" rel="noreferrer" target="_blank">http://www.g-vo.org/cgi-bin/<wbr>frag.py#constant</a><br>
<br>
will (conceptually) be the DOM element &lt;p&gt;Hello World&lt;/p&gt;<br>
(referencing something *within* the resource).<br>
<br>
<a href="http://www.g-vo.org/cgi-bin/frag.py?constant" rel="noreferrer" target="_blank">http://www.g-vo.org/cgi-bin/<wbr>frag.py?constant</a><br>
<br>
on the other hand, is the entire document<br>
<br>
  &lt;html&gt;<br>
  &lt;p id=&quot;constant&quot;&gt;Hello World&lt;/p&gt;&lt;p&gt;constant&lt;/p&gt;<br>
  &lt;/html&gt;<br>
<br>
<br>
The URI<br>
<br>
<a href="http://www.g-vo.org/cgi-bin/frag.py#random" rel="noreferrer" target="_blank">http://www.g-vo.org/cgi-bin/<wbr>frag.py#random</a><br>
<br>
is a dangling reference, as there&#39;s no entity with the id (or &lt;a<br>
name&gt;) &quot;random&quot; in the resource before the fragment identifier.<br>
<br>
The URI<br>
<br>
<a href="http://www.g-vo.org/cgi-bin/frag.py?random" rel="noreferrer" target="_blank">http://www.g-vo.org/cgi-bin/<wbr>frag.py?random</a><br>
<br>
is perfectly ok (try it if it&#39;s not obvious to you what resource it<br>
references), as is, in this particular case,<br>
<br>
<a href="http://www.g-vo.org/cgi-bin/frag.py?random#constant" rel="noreferrer" target="_blank">http://www.g-vo.org/cgi-bin/<wbr>frag.py?random#constant</a><br>
<br>
which references the same p element as above. The qualification &quot;in<br>
this particular case&quot; is because in general, appending a query string<br>
can of course totally alter the resource returned, so in general<br>
there&#39;s no guarantee that a given fragment will be present in a<br>
response regardless of the query string[2].<br>
<br>
Sorry for posting lots of code, URIs, and angle brackets, but we&#39;re<br>
really doing ourselves a favour if we work with, rather than against<br>
the URI semantics as planned by the URI creators.<br>
<br>
        -- Markus<br>
<br>
<br>
[1] Yes, I&#39;m aware that this code is wide open to XSS, and you<br>
shouldn&#39;t put it onto a server in this form; in the thing<br>
actually on my server, there&#39;s some additional code to plug this,<br>
irrelevant to this example.<br>
<br>
[2] as an example, consider the the CGI script<br>
<br>
  import os<br>
  print(&quot;&quot;&quot;content-type:text/<wbr>html\n<br>
  &lt;html&gt;<br>
  &lt;p id=&quot;{1}&quot;&gt;Hello World&lt;/p&gt;<br>
  &lt;/html&gt;<br>
  &quot;&quot;&quot;.format(os.environ.get(&quot;<wbr>QUERY_STRING&quot;, &quot;&quot;)))<br>
<br>
With it, only URIs of the form ...?&lt;stuff&gt;#&lt;same stuff&gt; would actually<br>
reference something if there&#39;s a fragment identifier.<br>
</blockquote></div><br></div></div></div></div>