What, exactly, is the relationship between keys, URLs and URIs? As I understand it, for each key, git-annex keeps a list of zero or more URLs/URIs from which the key's contents may be downloaded. Is each entry in this list specific to one special remote, i.e. is this really a list of pairs (URL/URI, special-remote-uuid)? Is the record of which key is present in which remote completely independent of the record of which key may be downloaded from which remote through which URL/URI? Is the only difference between URLs and URIs that, when a URL is added for a key, git-annex records the key as present in the web special remote, while when a URI is added, it doesn't? (Sorry for too many questions.)
The main difference is that git-annex will not try to download URIs itself, but will try to download URLs.
Also,
git annex whereis
displays any URIs claimed by the remote, but not URLs unless the remote reponds to WHEREIS by listing them.URLs/URIs are not recorded with a particular remote owning them, but CLAIMURL can be used for a remote to claim ownership.
My comment http://git-annex.branchable.com/design/external_special_remote_protocol/#comment-f7b2275dc00920599a108a3e99cab4f2 sums it up pretty well, I thought.