URI スキーム

アプリのパッケージ、アプリのデータ フォルダー、またはクラウドからのファイルを参照するために使用できる URI (Uniform Resource Identifier) スキームはいくつかあります。 また、URI スキームを使用して、アプリのリソース ファイル (.resw) から読み込まれた文字列を参照することもできます。 これらの URI スキームは、コード、XAML マークアップ、アプリ パッケージ マニフェスト、またはタイルとトースト通知テンプレートで使用できます。

URI スキームの一般的な機能

このトピックで説明するすべてのスキームは、正規化とリソース取得に関する一般的な URI スキーム規則に従います。 URI のジェネリック構文については、 RFC 3986 を参照してください。

すべての URI スキームは、URI の権限コンポーネントとパス コンポーネントとして RFC 3986 ごとの階層部分を定義します。

URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part   = "//" authority path-abempty
            / path-absolute
            / path-rootless
            / path-empty

つまり、URI には基本的に 3 つのコンポーネントがあります。 URI scheme の 2 つのスラッシュの直後には、 authority と呼ばれるコンポーネント (空の場合があります) があります。 その直後が パスです。 URI http://www.contoso.com/welcome.png を例として取ると、スキームは "http://"、機関は "www.contoso.com"、パスは "/welcome.png" です。 もう 1 つの例として、URI ms-appx:///logo.pngがあります。ここで、機関コンポーネントは空であり、既定値を受け取ります。

フラグメント コンポーネントは、このトピックで説明する URI のスキーム固有の処理では無視されます。 リソースの取得と比較中に、フラグメント コンポーネントに影響はありません。 ただし、特定の実装の上のレイヤーは、フラグメントを解釈してセカンダリ リソースを取得する場合があります。

すべての IRI コンポーネントの正規化後にバイトの比較が行われます。

大文字と小文字の区別と正規化

このトピックで説明するすべての URI スキームは、スキームの正規化とリソース取得のための一般的な URI 規則 (RFC 3986) に従います。 これらの URI の正規化された形式では、大文字と小文字が区別され、RFC 3986 の予約されていない文字がパーセントデコードされます。

このトピックで説明するすべての URI スキームについて、 schemeauthority、および path は、標準では大文字と小文字を区別しないか、大文字と小文字を区別しない方法でシステムによって処理されます。 その規則の唯一の例外は、大文字と小文字が区別されるms-resource認証です。

ms-appx と ms-appx-web

ms-appxまたはms-appx-web URI スキームを使用して、アプリのパッケージから取得されたファイルを参照します (アプリのパッケージ化参照)。 アプリ パッケージ内のファイルは、通常、静的イメージ、データ、コード、およびレイアウト ファイルです。 ms-appx-webスキームは、ms-appxと同じファイルにアクセスしますが、Web コンパートメント内にあります。 例と詳細については、「 XAML マークアップとコードから画像やその他の資産を参照するを参照してください。

スキーム名 (ms-appx と ms-appx-web)

URI スキーム名は、文字列 "ms-appx" または "ms-appx-web" です。

ms-appx://
ms-appx-web://

Authority (ms-appx と ms-appx-web)

権限は、パッケージ マニフェストで定義されているパッケージ ID 名です。 したがって、URI と IRI (国際化リソース識別子) 形式の両方で、パッケージ ID 名で許可される文字のセットに制限されます。 パッケージ名は、現在実行中のアプリのパッケージ 依存関係グラフ内のいずれかのパッケージの名前である必要があります。

ms-appx://Contoso.MyApp/
ms-appx-web://Contoso.MyApp/

権限に他の文字が含まれている場合、検索と比較は失敗します。 機関の既定値は、現在実行中のアプリのパッケージです。

ms-appx:///
ms-appx-web:///

ユーザー情報とポート (ms-appx と ms-appx-web)

ms-appxスキームは、他の一般的なスキームとは異なり、ユーザー情報やポート コンポーネントを定義しません。 "@" と ":" は機関の有効な値として許可されていないため、これらが含まれていると参照は失敗します。 次の各エラーが発生します。

ms-appx://john@contoso.myapp/default.html
ms-appx://john:password@contoso.myapp/default.html
ms-appx://contoso.myapp:8080/default.html
ms-appx://john:password@contoso.myapp:8080/default.html

パス (ms-appx と ms-appx-web)

パス コンポーネントは、一般的な RFC 3986 構文と一致し、ASCII 以外の文字を IRI でサポートします。 パス コンポーネントは、ファイルの論理ファイル パスまたは物理ファイル パスを定義します。 このファイルは、機関によって指定されたアプリのアプリ パッケージのインストール場所に関連付けられているフォルダー内にあります。

パスが物理パスとファイル名を参照している場合、その物理ファイル資産が取得されます。 ただし、このような物理ファイルが見つからない場合、取得時に返される実際のリソースは、実行時にコンテンツ ネゴシエーションを使用して決定されます。 この決定は、アプリ、OS、およびユーザー設定 (言語、表示スケール ファクター、テーマ、ハイ コントラスト、その他のランタイム コンテキストなど) に基づいています。 たとえば、取得する実際のリソース値を決定するときに、アプリの言語、システムの表示設定、ユーザーのハイ コントラスト設定の組み合わせが考慮される場合があります。

ms-appx:///images/logo.png

上記の URI は、実際には、次の物理ファイル名を持つ現在のアプリのパッケージ内のファイルを取得できます。

\Images\fr-FR\logo.scale-100_contrast-white.png

もちろん、フル ネームで直接参照することで、同じ物理ファイルを取得することもできます。

<Image Source="ms-appx:///images/fr-FR/logo.scale-100_contrast-white.png"/>

ms-appx(-web)のパス コンポーネントは、汎用 URI と同様に、大文字と小文字が区別されます。 ただし、リソースにアクセスする基になるファイル システムで大文字と小文字が区別されない場合 (NTFS の場合など)、リソースの取得は大文字と小文字を区別せずに実行されます。

URI の正規化された形式では、大文字と小文字が維持され、パーセント デコード ("%" 記号の後に 2 桁の 16 進数表現が続く) RFC 3986 の予約されていない文字が保持されます。 "?"、"#"、"/"、"*"、'"' (二重引用符) の各文字は、ファイル名やフォルダー名などのデータを示すパス内でパーセントエンコードする必要があります。 パーセントエンコードされたすべての文字は、取得前にデコードされます。 したがって、Hello#World.htmlという名前のファイルを取得するには、この URI を使用します。

ms-appx:///Hello%23World.html

クエリ (ms-appx と ms-appx-web)

リソースの取得中、クエリ パラメーターは無視されます。 正規化された形式のクエリ パラメーターでは、大文字と小文字が維持されます。 比較中、クエリ パラメーターは無視されません。

ms-appdata

ms-appdata URI スキームを使用して、アプリのローカル、ローミング、および一時データ フォルダーから取得されたファイルを参照します。 これらのアプリ データ フォルダーの詳細については、「 Store and retrieve settings and other app dataを参照してください。

ms-appdata URI スキームは、ms-appx と ms-appx-web実行するランタイム コンテンツ ネゴシエーションを実行しません。 ただし、 ResourceContext.QualifierValues の内容に応答し、URI の完全な物理ファイル名を使用してアプリ データから適切な資産を読み込むことができます。

スキーム名 (ms-appdata)

URI スキーム名は文字列 "ms-appdata" です。

ms-appdata://

Authority (ms-appdata)

権限は、パッケージ マニフェストで定義されているパッケージ ID 名です。 したがって、URI と IRI (国際化リソース識別子) 形式の両方で、パッケージ ID 名で許可される文字のセットに制限されます。 パッケージ名は、現在実行中のアプリのパッケージの名前である必要があります。

ms-appdata://Contoso.MyApp/

権限に他の文字が含まれている場合、検索と比較は失敗します。 機関の既定値は、現在実行中のアプリのパッケージです。

ms-appdata:///

ユーザー情報とポート (ms-appdata)

ms-appdataスキームは、他の一般的なスキームとは異なり、ユーザー情報やポート コンポーネントを定義しません。 "@" と ":" は機関の有効な値として許可されていないため、これらが含まれていると参照は失敗します。 次の各エラーが発生します。

ms-appdata://john@contoso.myapp/local/data.xml
ms-appdata://john:password@contoso.myapp/local/data.xml
ms-appdata://contoso.myapp:8080/local/data.xml
ms-appdata://john:password@contoso.myapp:8080/local/data.xml

パス (ms-appdata)

パス コンポーネントは、一般的な RFC 3986 構文と一致し、ASCII 以外の文字を IRI でサポートします。 Windows.Storage.ApplicationData 内場所は、ローカル、ローミング、および一時状態ストレージ用の 3 つの予約済みフォルダーです。 ms-appdataスキームを使用すると、それらの場所にあるファイルやフォルダーにアクセスできます。 パス コンポーネントの最初のセグメントでは、次のように特定のフォルダーを指定する必要があります。 したがって、"hier-part" の "path-empty" 形式は有効ではありません。

ローカル フォルダー。

ms-appdata:///local/

一時フォルダー。

ms-appdata:///temp/

移動フォルダー。

ms-appdata:///roaming/

ms-appdataのパス コンポーネントは、汎用 URI と同様に、大文字と小文字が区別されます。 ただし、リソースにアクセスする基になるファイル システムで大文字と小文字が区別されない場合 (NTFS の場合など)、リソースの取得は大文字と小文字を区別せずに実行されます。

URI の正規化された形式では、大文字と小文字が維持され、パーセント デコード ("%" 記号の後に 2 桁の 16 進数表現が続く) RFC 3986 の予約されていない文字が保持されます。 "?"、"#"、"/"、"*"、'"' (二重引用符) の各文字は、ファイル名やフォルダー名などのデータを示すパス内でパーセントエンコードする必要があります。 パーセントエンコードされたすべての文字は、取得前にデコードされます。 したがって、Hello#World.htmlという名前のローカル ファイルを取得するには、この URI を使用します。

ms-appdata:///local/Hello%23World.html

リソースの取得と最上位のパス セグメントの識別は、ドット (".) の正規化後に処理されます。/./b/c")。 そのため、予約済みフォルダーの 1 つから URI 自体をドットアウトすることはできません。 したがって、次の URI は許可されません。

ms-appdata:///local/../hello/logo.png

ただし、この URI は許可されます (冗長ではあります)。

ms-appdata:///local/../roaming/logo.png

クエリ (ms-appdata)

リソースの取得中、クエリ パラメーターは無視されます。 正規化された形式のクエリ パラメーターでは、大文字と小文字が維持されます。 比較中、クエリ パラメーターは無視されません。

ms-resource

ms-resource URI スキームを使用して、アプリのリソース ファイル (.resw) から読み込まれた文字列を参照します。 リソース ファイルの例と詳細については、「 UI およびアプリ パッケージ マニフェストで文字列をローカライズするを参照してください。

スキーム名 (ms-resource)

URI スキーム名は文字列 "ms-resource" です。

ms-resource://

Authority (ms-resource)

この権限は、パッケージ リソース インデックス (PRI) で定義されている最上位レベルのリソース マップであり、通常はパッケージ マニフェストで定義されているパッケージ ID 名に対応します。 アプリのパッケージ化) を参照してください。 したがって、URI と IRI (国際化リソース識別子) 形式の両方で、パッケージ ID 名で許可される文字のセットに制限されます。 パッケージ名は、現在実行中のアプリのパッケージ 依存関係グラフ内のいずれかのパッケージの名前である必要があります。

ms-resource://Contoso.MyApp/
ms-resource://Microsoft.WinJS.1.0/

権限に他の文字が含まれている場合、検索と比較は失敗します。 機関の既定値は、現在実行中のアプリの大文字と小文字が区別されるパッケージ名です。

ms-resource:///

機関では大文字と小文字が区別され、正規化された形式では大文字と小文字が維持されます。 ただし、リソースの検索では大文字と小文字が区別されません。

ユーザー情報とポート (ms-resource)

ms-resourceスキームは、他の一般的なスキームとは異なり、ユーザー情報やポート コンポーネントを定義しません。 "@" と ":" は機関の有効な値として許可されていないため、これらが含まれていると参照は失敗します。 次の各エラーが発生します。

ms-resource://john@contoso.myapp/Resources/String1
ms-resource://john:password@contoso.myapp/Resources/String1
ms-resource://contoso.myapp:8080/Resources/String1
ms-resource://john:password@contoso.myapp:8080/Resources/String1

パス (ms-resource)

このパスは、 ResourceMap サブツリー ( Resource 管理システムを参照) とその中の NamedResource の階層的な場所を識別します。 通常、これは Resources Files (.resw) のファイル名 (拡張子を除く) とその中の文字列リソースの識別子に対応します。

例と詳細については、「 言語、スケール、ハイ コントラストに関する UI およびアプリ パッケージ マニフェストの文字列の割り当て および Tile とトースト通知のサポート」を参照してください

ms-resourceのパス コンポーネントは、汎用 URI と同様に、大文字と小文字が区別されます。 ただし、基になる取得では ignoreCasetrue に設定して CompareStringOrdinal が実行されます。

URI の正規化された形式では、大文字と小文字が維持され、パーセント デコード ("%" 記号の後に 2 桁の 16 進数表現が続く) RFC 3986 の予約されていない文字が保持されます。 "?"、"#"、"/"、"*"、'"' (二重引用符) の各文字は、ファイル名やフォルダー名などのデータを示すパス内でパーセントエンコードする必要があります。 パーセントエンコードされたすべての文字は、取得前にデコードされます。 このため、Hello#World.resw という名前のリソース ファイルから文字列リソースを取得するには、次の URI を使用します。

ms-resource:///Hello%23World/String1

クエリ (ms-resource)

リソースの取得中、クエリ パラメーターは無視されます。 正規化された形式のクエリ パラメーターでは、大文字と小文字が維持されます。 比較中、クエリ パラメーターは無視されません。 クエリ パラメーターは、大文字と小文字を区別して比較されます。

この URI 解析の上に階層化された特定のコンポーネントの開発者は、必要に応じてクエリ パラメーターを使用することを選択できます。