pebbie / rmlx-mapper
RML 处理器,用于将 CSV/JSON/XML 映射到 RDF
Requires
- easyrdf/easyrdf: ^0.9.1
- flow/jsonpath: ^0.4.0
- phpoffice/phpspreadsheet: dev-master
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is auto-updated.
Last update: 2024-09-19 09:20:26 UTC
README
使用 RMLx 语言的 RML (RDF 映射语言) 处理器。
历史记录
之前它与 RMLx 网页界面紧密集成,作为后端 [1]。旧的映射策略效率不高,特别是对于较大的文件,因为输入和输出图是在内存中持有的,并且映射策略每次都会遍历 RML 图。尽管如此,对于小型中型数据集来说还是可以接受的。但是,在将 11MB 的 CSV 文件映射到需要超过 2GB 内存的 RDF 数据立方体时,发现了一些瓶颈,这需要近半小时的时间。
因此,我决定重构处理器以提高其效率。当前存储库包含提取的处理器,使用 PHP 7 OOP(之前是一系列函数)重新实现,并使其符合 PSR-4 标准。对于前一段中提到的相同案例,当前实现仅需要 20MB 和几分钟。
当前策略分两步进行映射
- 解析 RML 规范并构建映射执行组件树(mapper)
- 运行 mapper
安装
composer require pebbie/rmlx-mapper
目前,为了导入此内容,您的最小稳定性必须为 dev
用法
composer run rmlx <RML 文件>.ttl [key=value]*
例如:composer run rmlx data/test_const.rml.ttl
(也请参阅其他 test_*.rml.ttl
文件)
默认输出到终端,并使用 ntriples 格式。如果您想生成其他格式(例如 n3
),请确保通过设置 quiet=on
禁止终端输出,然后使用 output_file=somefile.ttl output_format=n3
作为附加参数。
问题
R2RML 兼容性(关系数据库)实现不是优先考虑的内容。PDOSource 存在作为占位符,但没有实际实现。
内部机制
RMLx:与 RML.io 规范的区别
RMLx 在 RML(LDOW 论文)问世不久后开发。因此,当前规范的一些方面可能没有实现,而其他一些功能则是为了满足我们的出版/用例需求(统计数据、流式传感器、会议 PC 成员、链接小部件集成)而实现的。
-
rmlx:sourceTemplate
:将源转换为模板(用于对同一模型进行参数化) -
rmlx:defaultValue
:引入 '变量',可以从固定值、命令行参数、Web 参数中在引用/模板中使用 -
rmlx:predicateInv
:当发出时使三元关系关系逆转(o, p, s) -
rmlx:transform
:调用内置/外部函数以转换变量(例如,参考、defaultValue)的值
数据转换:函数和 API 调用
数据转换规则使用 rmlx:transform
定义。
当 rmlx:transform
关系分配给三元映射节点时,它将在没有源或每次迭代每个源(例如,每行 CSV)时调用一次,并添加/更新关联的(输出)变量。
此功能建立在 R2RML 中的 rr:inverseExpression
通用化和 RDF 化的基础上
内置函数(在论文版本中实现)
-
rop:make_array
:将空数组分配给变量 -
rop:array_push
:将值推送到数组的末尾 -
rop:trim
:从字符串变量的开始和结尾删除空格 -
rop:replace
:在字符串变量中替换字符串出现 -
rop:split
:将字符串变量拆分成数组变量 -
rop:md5
:计算字符串变量的 MD5 散列 -
rop:sha1
: 计算字符串变量的SHA1哈希值 -
rop:assign
: 将常量字符串值分配给变量(行为类似于rmlx:defaultValue) -
rop:auto_increment
: 获取当前全局计数器 -
rop:reset_auto_increment
: 将全局计数器重置为0
参考文献
[1] Aryan, Peb R.,等人。“RMLx:将开放数据与链接数据探索环境集成的接口。”2017年第1届信息学与计算科学国际会议(ICICoS)。IEEE,2017。代码 OSF项目页面