

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 什么是程序包 URL？
<a name="sbom-generator-purl-sbom"></a>

 [程序包 URL 或 PURL](https://github.com/package-url/purl-spec) 是一种标准化格式，用于在不同的程序包管理系统中识别软件程序包、组件和库。该格式使跟踪、分析和管理软件项目中的依赖关系变得更加容易，尤其是在生成软件物料清单 (SBOMs) 时。

## PURL 结构
<a name="w2aac37c33b5"></a>

 PURL 结构类似于 URL，由多个部分组成：
+  `pkg` – 文本前缀 
+  `type` – 程序包类型 
+  `namespace` – 分组 
+  `name` – 程序包名称 
+  `version` – 程序包版本 
+  `qualifiers` – 额外的键值对 
+  `subpath` – 程序包中的文件路径 

**PURL 示例**  
 以下是 PURL 可能呈现形式的示例。

```
pkg:<type>/<namespace>/<name>@<version>?<qualifiers>#<subpath>
```

### 通用 PURL
<a name="w2aac37c33b5c11"></a>

 通用 PURL 用于表示不属于已建立程序包生态系统的软件程序包和组件，例如 npm、pypi 或 maven。它可以识别软件组件，并捕获可能与特定程序包管理系统不一致的元数据。通用 PURL 可用于各种软件项目，从已编译的二进制文件到平台，不一而足，例如 Apache 和 WordPress。可将其应用于各种使用案例，包括编译后的二进制文件、Web 平台和自定义软件发行版。

**关键使用案例**  
 
+  支持编译后的二进制文件，对 Go 和 Rust 很有用 
+  支持 Web 平台，例如 Apache 和 WordPress，其中程序包可能与传统程序包管理器无关联。
+  通过允许组织参考内部开发的软件或缺少正式程序包的系统，从而支持自定义旧版软件。

**格式示例**  
 以下是通用 PURL 格式的示例。

```
pkg:generic/<namespace>/<name>@<version>?<qualifiers>
```

#### 通用 PURL 格式的其他示例
<a name="w2aac37c33b5c11c13"></a>

 以下是通用 PURL 格式的其他示例。

**编译后的 Go 二进制文件**  
以下表示使用 Go 编译的 `inspector-sbomgen binary`。

```
pkg:generic/inspector-sbomgen?go_toolchain=1.22.5
```

**编译后的 Rust 二进制文件**  
 以下表示使用 Rust 编译的 `myrustapp` 二进制文件。

```
pkg:generic/myrustapp?rust_toolchain=1.71.0
```

**Apache 项目**  
 以下指的是 Apache 命名空间下的一个 http 项目。

```
pkg:generic/apache/httpd@1.0.0
```

**WordPress 软件**  
 以下指的是核心 WordPress 软件。

```
pkg:generic/wordpress/core/wordpress@6.0.0
```

**WordPress 主题**  
 以下指的是自定义 WordPress 主题。

```
pkg:generic/wordpress/theme/mytheme@1.0.0
```

**WordPress 插件**  
 以下指的是自定义 WordPress 插件。

```
pkg:generic/wordpress/plugin/myplugin@1.0.0
```