この質問を検索しましたが、適切な回答が見つかりませんでした。
RIs に関するWikipediaの記事でさえ、それを完全に説明していません。 Webページにアクセスするためのプロトコルだと思いました。例えばHTTP/HTTPS/FTPですが、wikiの記事にはそうではありません。
一部のURIスキームは特定のプロトコル(「ファイル」など)に関連付けられておらず、その他のスキームの多くはプロトコルの名前を接頭辞として使用しません(「ニュース」など)。
URLのpartがschemeであることがわかります。しかし、私の本当の質問はそれは何をするのですか?
さて、私はURLのどの部分がスキームであるか知っています。しかし、私の本当の質問はそれが何をするのですか?
コロンの後ろの後にURLの一部を解釈する方法を単に示しています。
たとえば、file://usr/share/doc
、file
は、コロンをローカルで利用可能なファイルシステムパスとして解釈する必要がある後の部分を示します。トランスポート層やエンコーディングがないため、これはプロトコルと同じではありません。クライアントは通常のローカルシステムコールを使用してアクセスします。
逆に、https://programmers.stackexchange.com
はスキーム(https
、つまり means "HTTP over TLS")を指定しますが、クライアントは、それに到達するために使用される物理トランスポートについて独自の選択を行う必要があります。
ウィキペディアからの引用は少し誤解を招くかもしれません。それが意味することは、たとえば、file:
URIスキームは、データ(またはそれが指しているもの)へのアクセスにどのような方法が使用されているかを述べていないということです。 http:
を使用すると、HTTPプロトコルが使用されていることがわかります。 file:
を使用すると、アプリケーションで使用したいものをすべて使用できます。
news:
では、プロトコル名はNNTPですが、名前はそれを反映していません。 news:
の方がずっと明確なので、これは私の心の中で良いことです。
したがって、URIスキームはコロンを含む最初の部分にすぎません。
私はアップルの説明が好きです:
URLスキームは、デバイスがURLを開くために使用するアプリケーションのタイプを指定するリンクの一部です。多くのアプリがURLスキームをサポートしています。Safariが
facetime://
で始まるURLを処理するのと同じように、FaceTimeはhttp://
で始まるURLが開かれたときにURLスキームを使用して呼び出しを行います。ショートカットのURLスキーム
shortcuts://
は、ショートカットからショートカットアプリを起動して、ショートカットのインポートや実行などのタスクを実行します。これらのリンクは、ウェブ上や、URLを開くことをサポートする他のアプリでショートカットを使用する場合など、さまざまな状況で役立ちます。
スキームは、使用されるアドレス指定システムを示します。 URLは、実際にはさまざまな異なるアドレス指定システムを統合したものです。コロンの前の部分は使用中のスキームを識別し、コロンの後のすべてはスキームに固有の構文です。各スキームは、リソースをアドレス指定する独自の方法を定義します。これにより、新しいスキームを追加することで、URL標準を無限に拡張できます。
スキームは大きく異なるため、スキームについて一般的に何も言うことは困難です。多くの場合、スキームの名前は、リソース(http、https、ftpなど)をフェッチするために使用できるプロトコルの名前ですが、これは難しい規則ではありません。 「mailto」スキームは電子メールアドレスを示しますが、特定のプロトコルを示しません。一部のスキームは特定のプロトコルに対応していません。たとえば、Webブラウザーで使用される「about」スキームのように、リソースはプロトコルを介してまったくフェッチされず、クライアントに組み込まれています。
URIのコロンの前の部分です。
たとえば、http://en.wikipedia.org/
のスキームはhttp
です。 file:///etc/passwd
のスキームはfile
です。 ftp://example.org/resource.txt
のスキームはftp
です。
スキームはURIの最初の階層であり、したがって最も「目立つ」部分であり、リソースの「目的」を識別するために使用されます。リソースの「種類」(Webリンク、ニュース、ファイル)に興味がある場合は、リソース文字列全体ではなく、スキーマをチェックするだけでわかります。
これは、一連のリソースを表す単なる文字列です。