URI 方案

你可以使用几种 URI(统一资源标识符)方案引用来自应用包、应用的数据文件夹或云的文件。 还可以使用 URI 方案引用从应用的资源文件 (.resw) 加载的字符串。 可以在代码、XAML 标记、应用包清单或磁贴和 Toast 通知模板中使用这些 URI 方案。

URI 方案的常见功能

本主题中所述的所有方案都遵循典型的 URI 方案规则进行规范化和资源检索。 有关 URI 的泛型语法,请参阅 RFC 3986

所有 URI 方案将每个 RFC 3986 的分层部分定义为 URI 的颁发机构和路径组件。

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

这意味着 URI 本质上有三个组件。 紧跟 URI 方案的 两个正斜杠后面的组件(可以是空)称为 颁发机构。 紧随其后的是 路径。 以 URI http://www.contoso.com/welcome.png 为例,方案为“”http://,颁发机构为“”www.contoso.com,路径为“/welcome.png”。 另一个示例是 URI ms-appx:///logo.png,其中颁发机构组件为空,并采用默认值。

此片段组件由本主题中提到的 URI 的特定于方案的处理忽略。 在资源检索和比较期间,片段组件不具有任何影响。 但是,特定实现上方的层可能会解释片段以检索辅助资源。

在规范化所有 IRI 组件后,对字节进行字节比较。

不区分大小写和规范化

本主题中所述的所有 URI 方案都遵循典型的 URI 规则(RFC 3986),以便进行方案规范化和资源检索。 这些 URI 的规范化形式维护大小写和百分比解码 RFC 3986 未保留字符。

对于本主题中所述的所有 URI 方案,方案颁发机构路径要么按标准不区分大小写,要么以不区分大小写的方式由系统处理。 请注意,该规则的唯一例外是ms-resource权限(区分大小写)。

ms-appx 和 ms-appx-web

ms-appx使用或 ms-appx-web URI 方案引用来自应用包的文件(请参阅打包应用)。 应用包中的文件通常是静态图像、数据、代码和布局文件。 方案 ms-appx-web 访问的文件与 Web 隔离舱中的文件 ms-appx相同。 有关示例和详细信息,请参阅 从 XAML 标记和代码引用图像或其他资产。

方案名称(ms-appx 和 ms-appx-web)

URI 方案名称是字符串“ms-appx”或“ms-appx-web”。

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

Authority (ms-appx 和 ms-appx-web)

颁发机构是在包清单中定义的包标识名称。 因此,URI 和 IRI(国际化资源标识符)格式限制为包标识名称中允许的字符集。 包名称必须是当前正在运行的应用包依赖项关系图中其中一个包的名称。

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 语法匹配,并支持 IRI 中的非 ASCII 字符。 路径组件定义文件的逻辑或物理文件路径。 该文件位于与应用包的已安装位置关联的文件夹中,由颁发机构指定的应用。

如果路径引用物理路径和文件名,则会检索该物理文件资产。 但是,如果未找到此类物理文件,则在运行时使用内容协商来确定检索期间返回的实际资源。 此决定基于应用、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 的规范化形式维护大小写和百分比解码(后跟两位数十六进制表示形式)RFC 3986 未保留字符。 字符“?”、“#”、“/”、“*”和‘”’(双引号字符)在路径中必须为百分比编码以表示文件或文件夹名等数据。 检索之前将解码所有百分比编码字符。 因此,若要检索名为Hello#World.html的文件,请使用此 URI。

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

查询(ms-appx 和 ms-appx-web)

在检索资源期间忽略查询参数。 查询参数的规范化形式维护大小写。 比较期间不会忽略查询参数。

ms-appdata

使用 ms-appdata URI 方案引用来自应用的本地、漫游和临时数据文件夹的文件。 有关这些应用数据文件夹的详细信息,请参阅 “存储和检索设置”和其他应用数据

ms-appdata URI 方案不执行 ms-appx 和 ms-appx-web 执行的运行时内容协商。 但你可以响应 ResourceContext.QualifierValues 的内容,并使用 URI 中的完整物理文件名从应用数据加载相应的资产。

方案名称 (ms-appdata)

URI 方案名称是字符串“ms-appdata”。

ms-appdata://

Authority (ms-appdata)

颁发机构是在包清单中定义的包标识名称。 因此,URI 和 IRI(国际化资源标识符)格式限制为包标识名称中允许的字符集。 包名称必须是当前正在运行的应用包的名称。

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

Path (ms-appdata)

路径组件与通用 RFC 3986 语法匹配,并支持 IRI 中的非 ASCII 字符。 在 Windows.Storage.ApplicationData 位置中,有三个保留文件夹用于本地、漫游和临时状态存储。 此 ms-appdata 方案允许访问这些位置中的文件和文件夹。 路径组件的第一段必须按以下方式指定特定文件夹。 因此,“hier-part”的“path-empty”形式不合法。

本地文件夹。

ms-appdata:///local/

临时文件夹。

ms-appdata:///temp/

漫游文件夹。

ms-appdata:///roaming/

路径组件 ms-appdata (如泛型 URI)区分大小写。 但是,如果访问资源的基础文件系统不区分大小写(例如对于 NTFS),则不区分大小写地检索资源。

URI 的规范化形式维护大小写和百分比解码(后跟两位数十六进制表示形式)RFC 3986 未保留字符。 字符“?”、“#”、“/”、“*”和‘”’(双引号字符)在路径中必须为百分比编码以表示文件或文件夹名等数据。 检索之前将解码所有百分比编码字符。 因此,若要检索名为Hello#World.html的本地文件,请使用此 URI。

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

检索资源以及顶级路径段的标识在点规范化后进行处理(“.././b/c)。 因此,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://

颁发机构(ms-resource)

颁发机构是在包资源索引(PRI)中定义的顶级资源映射,通常对应于包清单中定义的包标识名称。 请参阅打包应用。 因此,URI 和 IRI(国际化资源标识符)格式限制为包标识名称中允许的字符集。 包名称必须是当前正在运行的应用包依赖项关系图中其中一个包的名称。

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 子树的分层位置(请参阅资源管理系统)及其内的 NamedResource。 通常,这对应于资源文件(.resw)的文件名(不包括扩展名),以及其中字符串资源的标识符。

有关示例和详细信息,请参阅 UI 和应用包清单 中的本地化字符串,以及 语言、缩放和高对比度的磁贴和 Toast 通知支持。

路径组件 ms-resource (如泛型 URI)区分大小写。 但是,当基础检索执行 CompareStringOrdinal 时,ignoreCase 设置为 true

URI 的规范化形式维护大小写和百分比解码(后跟两位数十六进制表示形式)RFC 3986 未保留字符。 字符“?”、“#”、“/”、“*”和‘”’(双引号字符)在路径中必须为百分比编码以表示文件或文件夹名等数据。 检索之前将解码所有百分比编码字符。 因此,若要从名为 Hello#World.resw 的资源文件中检索字符串资源,请使用此 URI。

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

查询(ms-resource)

在检索资源期间忽略查询参数。 查询参数的规范化形式维护大小写。 比较期间不会忽略查询参数。 查询参数区分大小写。

在此 URI 分析之上分层的特定组件的开发人员可以选择在查询参数适合时使用查询参数。