pebbie/rmlx-mapper

RML 处理器,用于将 CSV/JSON/XML 映射到 RDF

dev-master 2019-03-18 21:20 UTC

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项目页面