# @comunica/utils-bindings-factory 中文文档

规范地址：https://npmcn.com/package/%40comunica/utils-bindings-factory/

版本：5\.4\.0
npm 元数据更新时间：2026-10-22T07:39:19.991Z
中文译文更新时间：2026-11-10T14:42:13.561Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40comunica/utils-bindings-factory
原文对照：https://npmcn.com/package/%40comunica/utils-bindings-factory/?lang=original
项目主页：https://comunica.dev/
源码仓库：https://github.com/comunica/comunica

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：51.5 kB，15 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：6 个
- 首次发布：2024-10-08T10:19:51.394Z
- 最新版本发布：2026-09-14T09:09:55.626Z
- 近 30 天下载量：249211（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：19（近 12 个月 11 个）

## 中文简介

Comunica的装订厂模块

## 安装

```sh
npm install @comunica/utils-bindings-factory
```

也可以使用：`pnpm add @comunica/utils-bindings-factory`、`yarn add @comunica/utils-bindings-factory`、`bun add @comunica/utils-bindings-factory`

## README

# 机械装订厂

[![npm version](https://badge.fury.io/js/%40comunica%2Futils-bindings-factory.svg)](https://www.npmjs.com/package/@comunica/utils-bindings-factory)

这个包提供了工厂 `Bindings` 对象,可以将变量映射到 RDF 术语. 此套件执行 RDF/ JS [`BindingsFactory`](http://rdf.js.org/query-spec/#bindingsfactory-interface) 财务报告和审定财务报表 [`Bindings`](http://rdf.js.org/query-spec/#bindings-interface) 接口.

在内部,它利用 [`immutable`](https://www.npmjs.com/package/immutable) 以确保诸如 `set` 财务报告和审定财务报表 `delete` 尽可能重新使用内部内存.

这个模块是 [通信框架](https://github.com/comunica/comunica), (中文(简体) ), 并且只能用于 [想要建立自己的查询引擎的开发者](https://comunica.dev/docs/modify/)。 。 。 .

[如果您想要询问Comunica, 请点击这里](https://comunica.dev/docs/query/)。 。 。 .

## 安装

```bash
$ yarn add @comunica/utils-bindings-factory
```

## 使用量

```typescript
import * as RDF from '@rdfjs/types';
import { DataFactory } from 'rdf-data-factory';
import { BindingsFactory } from '@comunica/utils-bindings-factory';

const DF = new DataFactory();
const BF = new BindingsFactory(DF);

const bindings1: RDF.Bindings = BF.bindings([
  [ DF.variable('var1'), DF.literal('abc') ],
  [ DF.variable('var2'), DF.literal('def') ],
]);

const bindings2: RDF.Bindings = BF.fromRecord({
  var1: DF.literal('abc'),
  var2: DF.literal('def'),
});
```

### 工厂方法

工厂实例如下.

#### 创建新的约束

绑定可以通过传出密钥值对来创建,也可以以记录形式:

```typescript
const bindings1: RDF.Bindings = BF.bindings([
  [ DF.variable('var1'), DF.literal('abc') ],
  [ DF.variable('var2'), DF.literal('def') ],
]);

const bindings2: RDF.Bindings = BF.fromRecord({
  var1: DF.literal('abc'),
  var2: DF.literal('def'),
});
```

#### 克隆装订

捆绑可以克隆如下:

```typescript
const clonedBindings = BF.fromBindings(otherBindings);
```

### 约束方法

以下方法被暴露在由工厂创建的捆绑上.

由于所有约束都是不可改变的,所以原来的约束实例永远不会被改变.

#### `Bindings.has()`

这个 `has()` 方法用于检查给定变量是否存在值. 变量可以作为字符串提供( 不包含 `?` 前缀),或作为RDF/JS变量.

```typescript
if (bindings.has('var1')) {
  console.log('Has var1!');
}
if (bindings.has(DF.variable('var2'))) {
  console.log('Has var2!');
}
```

#### `Bindings.get()`

这个 `get()` 方法用于读取变量的约束值. 变量可以作为字符串提供( 不包含 `?` 前缀),或作为RDF/JS变量.

```typescript
const term1: RDF.Term | undefined = bindings.get('var1');
const term2: RDF.Term | undefined = bindings.get(DF.variable('var2'));
```

#### `Bindings.set()`

这个 `set()` 方法用于创建当前绑定对象的副本,并添加一个新的可变绑定. 变量可以作为字符串提供( 不包含 `?` 前缀),或作为RDF/JS变量.

```typescript
const newBindings = bindings
  .set('var1', DF.namedNode('ex:term1'))
  .set(DF.variable('var2'), DF.namedNode('ex:term2'));
```

#### `Bindings.delete()`

这个 `delete()` 方法用于创建当前绑定对象的副本,并去除可变绑定. 变量可以作为字符串提供( 不包含 `?` 前缀),或作为RDF/JS变量.

```typescript
const newBindings = bindings
  .delete('var1')
  .delete(DF.variable('var2'));
```

#### `Bindings.keys()`

这个 `keys()` 方法返回对所有 RDF/JS 变量键的可执行性,这些键在此绑定对象中具有值.

```typescript
for (const variable of bindings.keys()) {
  console.log(variable);
}
```

#### `Bindings.values()`

这个 `values()` 方法返回所有 RDF/JS 术语中在此绑定对象中有密钥的可移动值.

```typescript
for (const term of bindings.values()) {
  console.log(term);
}
```

#### `Bindings.forEach()`

这个 `forEach()` 方法在此绑定对象中的所有条目上延展 并引用每个条目的RDF/JS词组值和RDF/JS可变键的回调.

```typescript
bindings.forEach((value, key) => {
  console.log(key);
  console.log(value);
})
```

#### `Bindings.size`

这个 `size` 字段返回绑定对象中键值条目的数量.

```typescript
console.log(bindings.size);
```

#### 条目迭代

每个绑定对象都是可以移动的, 每一个条目都是二重奏 `[RDF.Variable, RDF.Term]`。 。 。 .

```typescript
// Iterate over all entries
for (const [ key, value ] of bindings) {
  console.log(key);
  console.log(value);
}

// Save the entries in an array
const entries = [ ...bindings ];
```

#### `Bindings.equals`

这个 `equals()` 如果此绑定对象的条目等于另一个绑定对象的条目,则方法检查.

```typescript
bindings1.equals(bindings2);
```

#### `Bindings.filter`

这个 `filter()` 方法通过使用回调过滤条目来创建新的绑定对象. 每个条目都适用回调. 返回真值表示此条目必须包含在产生的绑定对象中.

```typescript
const filteredBindings = bindings.filter((value, key) => {
  return key.value !== 'abc';
});
```

#### `Bindings.map`

这个 `map()` 方法通过使用回调绘图条目来创建新的绑定对象. 召回对每个被返回的值所取代的原始值的条目适用.

```typescript
const mappedBindings = bindings.map((value, key) => {
  return DF.namedNode(value.value + '_modified');
});
```

#### `Bindings.merge`

这个 `merge()` 方法将这个绑定对象的条目与另一个绑定对象的所有条目合并. 如果发生合并冲突(此等同变量与等同值),则返回未定义的变量.

```typescript
const mergedBindings = bindings1.merge(bindings2);
```

#### `Bindings.mergeWith`

这个 `mergeWith()` 方法将此绑定对象与另一个对象合并 其中合并冲突可以使用回调函数解决. 合并冲突发生时引用的回调功能, 中,返回的值被视为合并值.

```typescript
const mergedBindings = bindings1.mergeWith((self, other, key) => {
  return DF.namedNode(self.value + other.value);
}, bindings2);
```

#### `Bindings.toString`

这个 `toString()` 方法返回约束对象的紧凑字符串表示, 用于调试.

```typescript
console.log(bindings.toString());

/*
Can output in the form of:
{
  "a": "ex:a",
  "b": "ex:b",
  "c": "ex:c"
}
 */
```

## 常见问题

### @comunica/utils-bindings-factory 是什么？

Comunica的装订厂模块

### 如何安装 @comunica/utils-bindings-factory？

在项目目录运行 npm install @comunica/utils-bindings-factory，或使用 pnpm add / yarn add / bun add。

### @comunica/utils-bindings-factory 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @comunica/utils-bindings-factory 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @comunica/utils-bindings-factory 可以商用吗？

@comunica/utils-bindings-factory 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @comunica/utils-bindings-factory 的下载量有多少？

根据 npm 官方下载统计，@comunica/utils-bindings-factory 在 2026/10/11 – 2026/11/09 这 30 天内被下载 249,211 次，日均约 8,307 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @comunica/utils-bindings-factory 还在维护吗？

最新版本 5\.4\.0 发布于 2026/09/14（1 个月前）；至今共发布 19 个版本，其中过去 12 个月发布了 11 个；首次发布于 2024/10/08。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

