要約

  • RFC 3368のgo:には、特定のCNRPサービスを指す使い方と、一般名の照会をクライアントが選んだサービスへ渡す使い方があった。
  • サーバーを指定したid=リンクは、読者が想定する人間向けの名前を含まずにレコードを指せた。構文、登録、実際の解決は別の証拠である。

2002年8月、RFC 3368は通常のWebアドレスだけでは扱いにくい問いにリンクを与えようとした。人は名前を覚える一方、ネットワークは識別子とサービスを通じてリソースを扱う。go:は名前そのものに権威を与えたのではない。クライアントがCNRPの照会をサービスまで運ぶ方法を定めた。

違いはコロンの直後に表れる。go://cnrp.example?Ada%20Lovelaceは特定のサーバーを指定し、そこへ照会を送る。go:Ada%20Lovelaceにはサーバーが書かれていない。RFC 3368は、クライアントに設定済みの一つ以上のCNRPサービスへ照会を送る形式として説明した。同じ名前を含む文字列でも、端末が違えば問い合わせ先の集合が異なり得る。リンク自体は、世界共通の解決サービス一覧を持ち運ばなかった。

サーバーだけを含むURIにも別の意味がある。それは個別の検索ではなく、CNRPサービスを識別する。クライアントはservicequeryを使い、そのサービスが扱える機能を問い合わせられる。サーバー欄が空ならlocalhostを意味する。ほかのトランスポート情報がなければ、RFC 3368が示した既定値はポート1096のHTTPだった。こうした既定値は接続を始める手掛かりであり、サーバーが現在到達可能か、信頼できるか、稼働中かを証明しない。

短い構文にしたのは意図的だった。CNRPにはXML形式の照会があったが、複雑な内容をURIへ埋め込むと長さの制限を超えかねない。そこでRFC 3368は、一般名と属性・値の組からなる簡略構文を定めた。UTF-8を使い、文法で許されないオクテットはパーセントエンコードする。例ではüをUTF-8のバイト列として表す。本文に示された短縮形は説明用であり、正式な構文はABNFである。

より重要な境界例はgo://cnrp.example?id=5432345だった。このURIは、特定サーバー上の特定レコードを指すが、一般名を含まない。RFC 3368のセキュリティ節は、そのずれに注意を促した。利用者は「BMW」に現在対応付けられているリソースへのリンクだと思っても、URIに「BMW」という名前が入っているとは限らない。機械が読める識別子は安定していても、信頼を求められる人には不透明なままである。

関連するRFC 3367は、サービス提供者の発見と選択、名前の登録、所有権、一意性を当初の範囲外に置いた。したがって、クライアントに設定されたサービス集合はローカルな選択であって、誰が名前を代表するかについての世界共通の裁定ではない。その後、IANAのURI Scheme RegistryはgoをPermanentとしてRFC 3368を参照している。この登録記録が示すのは登録状態であり、ブラウザーの対応、現役サービス、トラフィック、普及ではない。

歴史から読み取るべき境界は明快だ。リンクが指すサービス、照会、レコードは互いに置き換えられない。Heng Luの「Reality Layers」と「Running-Code Primacy」は、構文、登録された設計、実際の稼働を区別するために明示した編集上の視点である。プロトコル要件でも、go:の導入実績を示す証拠でもない。

出典