# @comunica/expression-evaluator 中文文档

规范地址：https://npmcn.com/package/%40comunica/expression-evaluator/

版本：3\.2\.1
npm 元数据更新时间：2026-10-22T07:38:16.021Z
中文译文更新时间：2026-11-10T14:41:09.316Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：667 kB，150 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：12 个
- 首次发布：2023-09-07T12:49:56.686Z
- 最新版本发布：2024-08-07T05:35:25.230Z
- 近 30 天下载量：17153（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：9（近 12 个月 0 个）

## 中文简介

一个简单的 SPARQL 表达式评估器

## 安装

```sh
npm install @comunica/expression-evaluator
```

也可以使用：`pnpm add @comunica/expression-evaluator`、`yarn add @comunica/expression-evaluator`、`bun add @comunica/expression-evaluator`

## README

# Comunica 表达式评价器

[![npm version](https://badge.fury.io/js/%40comunica%2Fexpression-evaluator.svg)](https://www.npmjs.com/package/@comunica/expression-evaluator)

之前称为 sparqlee - sparql 表达评价器. 一个简单的符合光谱的SPARQL 1.1表达式评价器包.

**[更多地了解表达式评估者](https://comunica.dev/docs/modify/advanced/expression-evaluator/)。 。 。 .**

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

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

## 安装

```bash
$ yarn add @comunica/expression-evaluator
```

## 已曝光课程

-   [`AsyncEvaluator`](https://comunica.github.io/comunica/classes/_comunica_expression_evaluator.AsyncEvaluator.html): 评估与承诺合作的SPARQL表达式.
-   [`IAsyncEvaluatorContext`](https://comunica.github.io/comunica/interfaces/_comunica_expression_evaluator.IAsyncEvaluatorContext.html): 用于配置上下文 `AsyncEvaluator`。见 [配置](https://comunica.dev/docs/modify/advanced/expression-evaluator/#config)。 。 。 .
-   [`SyncEvaluator`](https://comunica.github.io/comunica/classes/_comunica_expression_evaluator.SyncEvaluator.html): SPARQL 表达式的评价员,不承诺工作.
-   [`ISyncEvaluatorContext`](https://comunica.github.io/comunica/interfaces/_comunica_expression_evaluator.ISyncEvaluatorContext.html): 用于配置上下文 `SyncEvaluator`。见 [配置](https://comunica.dev/docs/modify/advanced/expression-evaluator/#config)。 。 。 .
-   [`AggregateEvaluator`](https://comunica.github.io/comunica/classes/_comunica_expression_evaluator.AggregateEvaluator.html): SPARQL 汇总表达式的评估者,在不承诺的情况下工作。 见 [合计数](https://comunica.dev/docs/modify/advanced/expression-evaluator/#aggregates)。 。 。 .
-   [`ExpressionError`](https://comunica.github.io/comunica/classes/_comunica_expression_evaluator.ExpressionError.html): 用于 SPARQL 表达式错误的错误类,定义为 [错误区域](https://comunica.dev/docs/modify/advanced/expression-evaluator/#errors)。 。 。 .
-   [`isExpressionError`](https://comunica.github.io/comunica/functions/_comunica_expression_evaluator.isExpressionError.html): 检查错误类型的方法 `ExpressionError`。 。 。 .
-   [`orderTypes`](https://comunica.github.io/comunica/functions/_comunica_expression_evaluator.orderTypes.html): 根据 [按规格排列的 SPARQL 命令](https://www.w3.org/TR/sparql11-query/#modOrderBy)。 。 。 .
-   [`AsyncAggregateEvaluator`](https://comunica.github.io/comunica/classes/_comunica_expression_evaluator.AsyncAggregateEvaluator.html): SPARQL 组合表达式的评估者,与承诺配合。 见 [合计数](https://comunica.dev/docs/modify/advanced/expression-evaluator/#aggregates)。 。 。 .

## 发展

## 本地设置

1.  安装 `yarn` 财务报告和审定财务报表 `node`。 。 。 .
2.  运行 `yarn install`。 。 。 .
3.  使用这些已显示的命令( 或检查) `package.json`:
    -   新建一次: `yarn run build`
    -   基准: `yarn run bench`

### 添加或固定函数

函数在 [函数目录](https://npmcn.com/package/%40comunica/expression-evaluator/lib/functions),可以在那里添加或修复它们. 所有定义均使用下列定义中定义的构建器模型来定义: [帮助者.ts](https://npmcn.com/package/%40comunica/expression-evaluator/lib/functions/Helpers.ts)。 。 。 .

存在三种类型:

-   常态函数:具有统一接口的函数,只需要其参数即可计算出结果.
-   特殊功能:其行为足以偏离规范,因而需要完全控制 超过类型检查和评价(这些主要是功能形式). 它们从正常职能中分离出来,因为它们能够控制评价. 由于我们既支持同步评价,又支持同步评价,每个评价都有不同的背景,因此,特殊职能需要同时执行. 对于正常功能,同步和同步评价是相同的,为了避免间接费用,我们区分这两个功能.
-   命名函数:对应了SPARQL代数命名表达式.

### 布局和控制流量

API面临的唯一重要的外部问题是创建一个评价员. 当您创建一个时, 所传递的 SPARQL 代数表达式将转换为内部代表( 见 [代数转换器.ts](https://npmcn.com/package/%40comunica/expression-evaluator/lib/transformers/AlgebraTransformer.ts)) (中文(简体) ). 这将构建对象( 见 [表达式模块](https://npmcn.com/package/%40comunica/expression-evaluator/lib/expressions)包含所有用于评价的逻辑和数据, 例如,SPARQL功能的执行(见 [函数模块](https://npmcn.com/package/%40comunica/expression-evaluator/lib/functions)) (中文(简体) ). 改造后,评估人员将对所有表达方式进行再评价.

### 测试

测试环境的设置是为了用很少的代码进行大量的测试. 负责流利行为的文件位于 [`test/util`](https://npmcn.com/package/%40comunica/expression-evaluator/test/util) 模块. 大多数测试可以通过运行 `runTestTable` 方法输入 [倾斜](https://npmcn.com/package/%40comunica/expression-evaluator/test/util/utils.ts)。 。 。 . 这种方法需要测试表 。 多个测试运行在一个测试表上(每行一个). 如果还提供了别名,则测试表可能包含别名 (一些手动别名居住在 [别名.ts](https://npmcn.com/package/%40comunica/expression-evaluator/test/util/Aliases.ts)) (中文(简体) ). 这意味着当测试诸如 `"3"^^xsd:integer equals "3"^^xsd:integer` 实值 `"true"^^xsd:boolean`。 。 。 . 我们将写一个小表格(例如,增加一些测试),并像这样测试:

```js
import { bool, merge, numeric } from './util/Aliases';
import { Notation } from './util/TruthTable';
import { runTestTable } from './util/utils';
runTestTable({
  testTable: `
       3i 3i = true
       3i -5i = false
       -0f 0f = true
       NaN  NaN = false
   `,
  arity: 2,
  operation: '=',
  aliases: merge(numeric, bool),
  notation: Notation.Infix,
});
```

可提供更多的选项,并按以下论据的类型定义加以解释: `runTestTable`。 。 。 .

我们还可以提供 `errorTable` 页:1 `runTestTable` 方法. 如果我们想要测试某些参数上调用某些函数会抛出我们想要的错误,则使用此选项 . 一个例子是测试是否 `Unknown named operator` 当 我们不提供扩展功能的执行.

```js
import { bool, merge, numeric } from './util/Aliases';
import { Notation } from './util/TruthTable';
import { runTestTable } from './util/utils';
runTestTable({
  errorTable: `
       3i 3i = 'Unknown named operator'
       3i -5i = 'Unknown named operator'
       -0f 0f = 'Unknown named operator'
       NaN  NaN = 'Unknown named operator'
   `,
  arity: 2,
  operation: '<https://example.org/functions#equal>',
  aliases: merge(numeric, bool),
  notation: Notation.Infix,
});
```

当你不在乎错误是什么, 你可以只是测试 `''`。 。 。 .

如果表格对您进行测试的限制太大,您需要评估. 你还是应该用 `generalEvaluate` 函数从 [总体评价.ts](https://npmcn.com/package/%40comunica/expression-evaluator/test/util/generalEvaluation.ts)。 。 。 . 此函数将在可能时自动同时运行同步和同步. 这增加了你的检查范围.

## 常见问题

### @comunica/expression-evaluator 是什么？

一个简单的 SPARQL 表达式评估器

### 如何安装 @comunica/expression-evaluator？

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

### @comunica/expression-evaluator 支持 TypeScript 吗？

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

### @comunica/expression-evaluator 支持 ESM 还是 CommonJS？

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

### @comunica/expression-evaluator 可以商用吗？

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

### @comunica/expression-evaluator 的下载量有多少？

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

### @comunica/expression-evaluator 还在维护吗？

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

