Comunica 表达式评价器
之前称为 sparqlee - sparql 表达评价器. 一个简单的符合光谱的SPARQL 1.1表达式评价器包.
更多地了解表达式评估者。 。 。 .
这个模块是 通信框架, (中文(简体) ), 并且只能用于 想要建立自己的查询引擎的开发者。 。 。 .
如果您想要询问Comunica, 请点击这里。 。 。 .
安装
$ yarn add @comunica/expression-evaluator
已曝光课程
AsyncEvaluator: 评估与承诺合作的SPARQL表达式.IAsyncEvaluatorContext: 用于配置上下文AsyncEvaluator。见 配置。 。 。 .SyncEvaluator: SPARQL 表达式的评价员,不承诺工作.ISyncEvaluatorContext: 用于配置上下文SyncEvaluator。见 配置。 。 。 .AggregateEvaluator: SPARQL 汇总表达式的评估者,在不承诺的情况下工作。 见 合计数。 。 。 .ExpressionError: 用于 SPARQL 表达式错误的错误类,定义为 错误区域。 。 。 .isExpressionError: 检查错误类型的方法ExpressionError。 。 。 .orderTypes: 根据 按规格排列的 SPARQL 命令。 。 。 .AsyncAggregateEvaluator: SPARQL 组合表达式的评估者,与承诺配合。 见 合计数。 。 。 .
发展
本地设置
- 安装
yarn财务报告和审定财务报表node。 。 。 . - 运行
yarn install。 。 。 . - 使用这些已显示的命令( 或检查)
package.json:- 新建一次:
yarn run build - 基准:
yarn run bench
- 新建一次:
添加或固定函数
函数在 函数目录,可以在那里添加或修复它们. 所有定义均使用下列定义中定义的构建器模型来定义: 帮助者.ts。 。 。 .
存在三种类型:
- 常态函数:具有统一接口的函数,只需要其参数即可计算出结果.
- 特殊功能:其行为足以偏离规范,因而需要完全控制 超过类型检查和评价(这些主要是功能形式). 它们从正常职能中分离出来,因为它们能够控制评价. 由于我们既支持同步评价,又支持同步评价,每个评价都有不同的背景,因此,特殊职能需要同时执行. 对于正常功能,同步和同步评价是相同的,为了避免间接费用,我们区分这两个功能.
- 命名函数:对应了SPARQL代数命名表达式.
布局和控制流量
API面临的唯一重要的外部问题是创建一个评价员. 当您创建一个时, 所传递的 SPARQL 代数表达式将转换为内部代表( 见 代数转换器.ts) (中文(简体) ). 这将构建对象( 见 表达式模块包含所有用于评价的逻辑和数据, 例如,SPARQL功能的执行(见 函数模块) (中文(简体) ). 改造后,评估人员将对所有表达方式进行再评价.
测试
测试环境的设置是为了用很少的代码进行大量的测试.
负责流利行为的文件位于 test/util 模块.
大多数测试可以通过运行 runTestTable 方法输入 倾斜。 。 。 .
这种方法需要测试表 。 多个测试运行在一个测试表上(每行一个).
如果还提供了别名,则测试表可能包含别名
(一些手动别名居住在 别名.ts) (中文(简体) ).
这意味着当测试诸如 "3"^^xsd:integer equals "3"^^xsd:integer 实值 "true"^^xsd:boolean。 。 。 .
我们将写一个小表格(例如,增加一些测试),并像这样测试:
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 当
我们不提供扩展功能的执行.
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。 。 。 .
此函数将在可能时自动同时运行同步和同步.
这增加了你的检查范围.