ファイルURIスキーム

ページは半保護されています

プログラミングにおいて、ファイルのUniform Resource Identifier(URI)スキームは、ホストコンピュータ上のファイルを具体的に識別するために使用されるURIの特定の形式です。URIはあらゆるものを識別できますが、ファイルの識別には特定の構文が関連付けられています。[ 1 ] [ 2 ]

形式

ファイルURIの形式は次の通りです

ファイル://ホスト/パス

ここで、hostはパ​​スにアクセスできるシステムの完全修飾ドメイン名であり、pathはディレクトリ/ディレクトリ/.../名前という形式の階層ディレクトリパスです。hostが省略された場合は、 URLを解釈しているマシンである「 localhost 」とみなされます。hostを省略する場合、スラッシュは省略されないことに注意してください(「ファイル:///piro.txt「有効です」ファイル://simpen.txt」はそうではありませんが、一部のインタープリタは後者を処理できます。

RFC 3986 には、URI 内の「..」および「.」セグメントの処理に関する追加情報が含まれています。

スラッシュ文字の数

  • 文字列file:の後の2つのスラッシュ文字(//)の文字列は、ホスト名またはlocalhostというリテラル用語が続くことを示しますが、[ 3 ]この部分は完全に省略することも、空のホスト名を含むこともできます。[ 4 ]
  • ホストパスの間にある単一のスラッシュは、URIのローカルパス部分の開始を示し、必ず存在する必要があります。[ 5 ]
  • したがって、有効なファイル URI は、file:/path(ホスト名なし)、file:///path(空のホスト名)、またはで始まる必要がありますfile://hostname/path
  • file://path(つまり、ホスト名なしの 2 つのスラッシュ) は決して正しくありませんが、よく使用されます。
  • パス内のスラッシュは、ディレクトリとサブディレクトリの階層構造において、ディレクトリ名を区切るために使用されます。この用法では、スラッシュはシステムに依存しない一般的な区切り方であり、特定のホストシステムでは、任意のパス名(Unixシステムなど)でスラッシュが使用される場合があります。

Windows UNCファイル名 ( など) は2 つの方法で\\server\folder\data.xml表現できます。これらは両方とも RFC 8089 の付録 E で「非標準」として説明されています。最初の方法 (ここでは 2 スラッシュ形式と呼びます) は、URI のAuthorityfile://server/folder/data.xml部分を使用してサーバー名を表すもので、 となります。2 番目の方法 (ここでは 4 スラッシュ形式と呼びます) は、サーバー名をPathコンポーネントの一部として表すもので、URI は となりますfile:////server/folder/data.xml。どちらの形式も積極的に使用されています。Microsoft .NET (たとえば、メソッドnew Uri(path)) では一般に 2 スラッシュ形式が使用され、Java (たとえば、メソッドnew URI(path)) では一般に 4 スラッシュ形式が使用されます。どちらの形式でも、URI に対する最も一般的な操作 (相対 URI の解決、およびリモート ファイルへの接続を取得するための逆参照) を正常に使用できます。しかし、これらのURIは非標準であるため、あまり一般的ではない操作が失敗することがあります。例としては、正規化操作(RFC 3986で定義され、Javajava.net.URI.normalize()メソッドで実装されている)があり、これはfile:////server/folder/data.xml使用できない形式になりますfile:/server/folder/data.xml[ 6 ]

Unix

以下は、同じ/etc/fstabファイル を指す 2 つのUnix の例です。

ファイル://localhost/etc/fstab ファイル:///etc/fstab 

KDE環境では権限フィールドのない URI が使用されます。

ファイル:/etc/fstab 

ウィンドウズ

以下は、Windows システム上の一部のアプリケーションで受け入れられる可能性のある、同じローカル ファイルc: \ WINDOWS \ clock.aviを参照する例です。

ファイル://localhost/c:/WINDOWS/clock.avi ファイル:///c:/WINDOWS/clock.avi 

Windows Shell APIが理解できるURIは次のとおりです: [ 7 ]

ファイル:///c:/WINDOWS/clock.avi 

ドライブ文字の後にコロンとスラッシュが続く部分は、許容されるファイル URI の一部であることに注意してください。

実装

ウィンドウズ

Microsoft Windows システムでは、ファイル URL において、デバイス文字の後の通常のコロン (:) が縦棒 (|) に置き換えられる場合があります。これは、コロンがパス部分で予約文字とされていた元の URL 構文を反映しています。

Internet Explorer 4以降、WindowsではファイルURIが標準化されており、以下のスキームに従う必要があります。これは、URLMONまたはSHLWAPIを用いてURIの解析、取得、またはバインディングを行うすべてのアプリケーションに適用されます。パスをURLに変換するには を使用しUrlCreateFromPath、URLをパスに変換するには を使用しますPathCreateFromUrl[ 7 ]

ファイル「the file.txt」にアクセスするには、次のようにします。

ネットワークの場所の場合:

ファイル://ホスト名/パス/to/the%20file.txt 

または、ローカル ファイルの場合、ホスト名は省略されますが、スラッシュは省略されません (3 番目のスラッシュに注意してください)。

ファイル:// / c:/path/to/the%20file.txt 

これは、ホスト名の代わりに文字列「localhost」やドット「.」を指定することとは異なります。文字列「localhost」は、UNCパスとしてファイルにアクセスしようとします\\localhost\c:\path\to\the file.txtが、共有名ではコロンが許可されていないため、これは機能しません。ドット「.」を使用すると、文字列は として渡され\\.\c:\path\to\the file.txt、ローカルファイルでは機能しますが、ローカルシステム上の共有では機能しません。例えば、は機能しません。これは、共有名がネットワーク共有ではなく、DOSDEVICES名前空間の一部として解釈される file://./sharename/path/to/the%20file.txtためです。

以下の概要は要件を大まかに説明したものです。

  • コロンを使用する必要があります。Internet Explorer では縦棒に置き換えないでください。
  • パスを区切るにはスラッシュを使用する必要があります。
  • ファイル名の一部であるハッシュ (#) や疑問符 (?) などの文字はパーセントエンコードする必要があります。
  • URIでは許可されていないがファイル名では許可されている文字も、パーセントエンコードする必要があります。例えば、「{}`^」やすべての制御文字などがこ​​れに該当します。上記の例では、ファイル名のスペースは%20としてエンコードされています。
  • URI とファイル名の両方で許可される文字は、パーセントエンコードしてはなりません。
  • 従来の ACP エンコーディングを使用しないでください。(ACP コード ページは、DOS CHCP または Windows コントロール パネルの言語設定によって指定されます。)
  • ASCII範囲外の Unicode 文字はUTF-8でエンコードする必要があり、それらの UTF-8 エンコードはパーセントエンコードする必要があります。

可能であれば、提供されている関数を使用してください。プログラムでURLを作成する必要があり、SHLWAPI.dllにアクセスできない場合(例えば、スクリプトや同等の関数が利用できない他のプログラミング環境など)は、上記の概要が役立ちます。

レガシーURL

Win32上のレガシーアプリケーションのインストールベースを支援するため、PathCreateFromUrlこれらの基準を満たさない特定のURLを認識し、それらを一律に扱います。これらは「健全な」ファイルURLではなく「レガシー」ファイルURLと呼ばれます。[ 8 ]

過去には、様々なアプリケーションが他のシステムを使用していました。中には、2つのスラッシュを追加するものもありました。例えば、UNCパスは「healthy」の代わりに に\\remotehost\share\dir\file.txtなります。 file:////remotehost/share/dir/file.txtfile://remotehost/share/dir/file.txt

ウェブページ

ファイルURLは、特定のファイルが指定されたホストまたはローカルコンピュータ上に存在することが分かっている場合にのみ役立つため、パブリックインターネット上のウェブページではほとんど使用されません。また、ウェブブラウザは、セキュリティ上の理由から、ファイルURLから読み込まれていないウェブページでは、ファイルURLを無効にするのが一般的です。[ 9 ]

ホスト指定子外部ソースからファイルを取得するために使用できます。ただし、具体的なファイル取得プロトコルは規定されておらず、ホスト指定子の解釈も十分に標準化されていないため、特定の状況でのみ有用です。

Web ページが、Web ブラウザーが実行されているコンピューターに保存されているファイルにアクセスする場合、ファイル URL の最新の代替手段はHTML5 ファイル APIです。

参考文献

  1. ^ Kerwin, Matthew (2017年2月). 「file」URIスキーム(レポート). Internet Engineering Task Force.
  2. ^ 「Uniform Resource Identifier (URI)とは何か?」 WhatIs.com . 2023年9月12日閲覧
  3. ^ RFC 8089、セクション2
  4. ^ RFC 3986、セクション3.2.2
  5. ^ RFC 3986、セクション3.3
  6. ^ RFC 8089、付録E
  7. ^ a b Risney, Dave (2006). 「Windows のファイル URI」 . IEBlog . Microsoft Corporation . 2020年10月2日閲覧。
  8. ^「file:」URLの奇妙で不幸な物語 - 自由連想 - サイトホーム - MSDNブログ. Blogs.msdn.com (2005年5月19日). 2014年3月8日閲覧。
  9. ^ 「なぜ最新のブラウザではローカルリンクがデフォルトで無効になっているのか?」 Information Security Stack Exchange . 2025年3月13日閲覧