将 CSV 转换为 RDF,其中一列是一组值

2024-01-28

我想将 CSV 转换为 RDF。

事实上,该 CSV 的一列是一组用分隔符(在我的例子中为空格符)连接的值。

以下是 CSV 示例(带标题):

col1,col2,col3
"A","B C D","John"
"M","X Y Z","Jack"

我希望转换过程创建一个与此类似的 RDF:

:A :aProperty :B, :C, :D; :anotherProperty "John".
:M :aProperty :X, :Y, :Z; :anotherProperty "Jack".

我通常使用 Tarql 进行 CSV 转换。
每行迭代一次就可以了。
但它没有在列值“内部”进行子迭代的功能。

SPARQL-Generate 可能会有所帮助(据我所知,使用 iter:regex 和子生成)。但我找不到任何符合我的用例的示例。

PS:也许 RML 也有帮助。但我对这项技术一无所知。


你可以通过以下方式完成此操作RML https://rml.io and FnO https://fno.io.

首先,我们需要访问每一行,这可以通过 RML 来完成。 RML 允许您迭代 CSV 文件的每一行(ql:CSV)与一个逻辑源 https://rml.io/specs/rml/#logical-source。 指定iterator https://rml.io/specs/rml/#iterator (rml:iterator) 不需要,因为 RML 中的默认迭代器是基于行的迭代器。 这会产生以下 RDF(Turtle):

<#LogicalSource>
    a rml:LogicalSource;
    rml:source "data.csv";
    rml:referenceFormulation ql:CSV.

实际上三元组是在一个的帮助下生成的三元地图 https://rml.io/specs/rml/#triples-map哪个 使用 LogicalSource 从每个 CSV 行检索数据:

<#MyTriplesMap>
    a rr:TriplesMap;
    rml:logicalSource <#LogicalSource>;

    rr:subjectMap [
        rr:template "http://example.org/{col1}";
    ];

    rr:predicateObjectMap [
        rr:predicate ex:aProperty;
        rr:objectMap <#FunctionMap>;
    ];

    rr:predicateObjectMap [
        rr:predicate ex:anotherProperty;
        rr:objectMap [
            rml:reference "col3";
        ];
    ].

The col3CSV 列用于创建以下三元组:

<http://example.org/A> <http://example.org/ns#anotherProperty> "John".

但是,CSV 列中的字符串col2需要先拆分。 这可以通过 Fno(功能本体)和 RML 处理器来实现, 支持FnO功能的执行。这样的 RML 处理器可以是RML映射器 https://github.com/RMLio/rmlmapper-java,但其他处理器可以 也可以使用。 需要以下 RDF 来调用 FnO 函数来分割输入 以空格作为分隔符的字符串,并以我们的 LogicalSource 作为输入数据:

<#FunctionMap>
    fnml:functionValue [
        rml:logicalSource <#LogicalSource>; # our LogicalSource
        rr:predicateObjectMap [
            rr:predicate fno:executes; 
            rr:objectMap [ 
                rr:constant grel:string_split # function to use
            ];
        ];
        rr:predicateObjectMap [
            rr:predicate grel:valueParameter;
            rr:objectMap [ 
                rml:reference "col2" # input string
            ];
        ];
        rr:predicateObjectMap [
            rr:predicate grel:p_string_sep;
            rr:objectMap [ 
                rr:constant " "; # space separator
            ];
        ];
    ].

RML 映射器支持的 FnO 函数可在此处获得:https://rml.io/docs/rmlmapper/default-functions/ https://rml.io/docs/rmlmapper/default-functions/您可以在该页面上找到函数名称及其参数。

映射规则

@base <http://example.org> .
@prefix rml: <http://semweb.mmlab.be/ns/rml#> .
@prefix rr: <http://www.w3.org/ns/r2rml#> .
@prefix ql: <http://semweb.mmlab.be/ns/ql#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix fnml: <http://semweb.mmlab.be/ns/fnml#> .
@prefix fno: <https://w3id.org/function/ontology#> .
@prefix grel: <http://users.ugent.be/~bjdmeest/function/grel.ttl#> .
@prefix ex: <http://example.org/ns#> .

<#LogicalSource>
    a rml:LogicalSource;
    rml:source "data.csv";
    rml:referenceFormulation ql:CSV.


<#MyTriplesMap>
    a rr:TriplesMap;
    rml:logicalSource <#LogicalSource>;

    rr:subjectMap [
        rr:template "http://example.org/{col1}";
    ];

    rr:predicateObjectMap [
        rr:predicate ex:aProperty;
        rr:objectMap <#FunctionMap>;
    ];

    rr:predicateObjectMap [
        rr:predicate ex:anotherProperty;
        rr:objectMap [
            rml:reference "col3";
        ];
    ].

<#FunctionMap>
    fnml:functionValue [
        rml:logicalSource <#LogicalSource>;
        rr:predicateObjectMap [
            rr:predicate fno:executes; 
            rr:objectMap [ 
                rr:constant grel:string_split 
            ];
        ];
        rr:predicateObjectMap [
            rr:predicate grel:valueParameter;
            rr:objectMap [ 
                rml:reference "col2" 
            ];
        ];
        rr:predicateObjectMap [
            rr:predicate grel:p_string_sep;
            rr:objectMap [ 
                rr:constant " ";
            ];
        ];
    ].

Output

<http://example.org/A> <http://example.org/ns#aProperty> "B".
<http://example.org/A> <http://example.org/ns#aProperty> "C".
<http://example.org/A> <http://example.org/ns#aProperty> "D".
<http://example.org/A> <http://example.org/ns#anotherProperty> "John".
<http://example.org/M> <http://example.org/ns#aProperty> "X".
<http://example.org/M> <http://example.org/ns#aProperty> "Y".
<http://example.org/M> <http://example.org/ns#aProperty> "Z".
<http://example.org/M> <http://example.org/ns#anotherProperty> "Jack".

Note:我为 RML 及其技术做出贡献。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 CSV 转换为 RDF,其中一列是一组值 的相关文章

  • 如何将 HTML 表格转换为 csv 格式?

    是否有 HTML 解析器或某些库可以自动将 HTML 表格转换为 CSV 数据行 Here is http www unix com shell programming scripting 45274 html table csv html
  • 使用 R 下载压缩数据文件、提取并导入 .csv

    我正在尝试使用以下方法从网页下载并提取 csv 文件R 这个问题是重复的使用 R 下载压缩数据文件 提取和导入数据 https stackoverflow com questions 3053833 using r to download
  • java中的csv到pdf文件

    我正在尝试获得一个csv文件解析为pdf 到目前为止我所拥有的内容附在下面 我的问题是这段代码最终出现在 pdf 中的文件在 csv 文件的第一行被截断 我不明白为什么 附示例 本质上我想要一个没有任何操作的 csv 文件的 pdf 版本
  • 将 csv 中的选定列转换为字典

    我有一个名为 archive 的 csv 文件 它以读者身份打开 我希望创建一个字典 其值 k v 是由 row 0 row 2 row 7 对于 csv 文件中的每一行 必须有一种简单直接的方法可以将此 csv 转换为字典 其中k row
  • 降低计算精度以加快执行速度

    我有一个数据采集系统 可以进行几分钟的测量并生成一个包含 1000 万行和 10 列的 csv 文件 然后我在Python csv reader 中导入这个csv文件 对获取的数值数据执行一系列操作 但一次 只能 10000行 否则计算机内
  • 如何使用Shiny中的下载按钮?

    我想下载一个csv使用 Shiny 中的下载按钮下载文件 该文件将使用辅助 r 脚本中的参数创建 SERVER output downloadData lt downloadHandler filename function paste d
  • 在Java中读取制表符分隔的文件

    我有以下代码来读取 Java 中的制表符分隔文件 while str in readLine null if str trim length 0 continue String values str split t System out p
  • pandas read_csv 之前预处理数据文件

    我使用 SAP 的数据输出 但它既不是 CSV 因为它不引用包含其分隔符的字符串 也不是固定宽度 因为它具有多字节字符 它是一种 固定宽度 字符 为了将其放入 pandas 我当前读取文件 获取分隔符位置 对分隔符周围的每一行进行切片 然后
  • 使用 python 从 CSV 创建字典

    我有一个 CSV 格式的文件 其中 A B 和 C 是标题 我如何以Python方式将此CSV转换为以下形式的字典 A 1 B 4 C 7 A 2 B 5 C 8 A 3 B 6 C 9 到目前为止我正在尝试以下代码 import csv
  • OpenFileDialog 无法加载 CSV 文件,但可以加载 xls/xlsx Excel 文件 [重复]

    这个问题在这里已经有答案了 在我的 Windows 窗体应用程序中加载 Excel 文件时 我可以加载 xls and xlsx格式很好 但是当我选择一个 CSV我收到以下错误 System NullReferenceException 未
  • 带有制表符分隔文本文件的 StreamReader

    我对这篇文章有类似的要求 使用文本文件在运行时填充 Gridview https stackoverflow com questions 13971165 populate gridview at runtime using textfil
  • 从逗号分隔的字符串中删除项目[重复]

    这个问题在这里已经有答案了 假设我有一个字符串 cat mouse dog horse 是否有正则表达式或函数可以按如下方式工作 1 cat return string gt mouse dog horse 2 mouse return s
  • 解析 Google 表格中制表符分隔的文本文件

    我在网上有一个 txt 文件 其中包含制表符分隔值 TSV CSV 如下所示 产品IDtabColortabPricetabQuantity项目1tabRed tab 5 2 tab5项目2tabBlue tab 7 5 tab10 我使用
  • 为什么 Response.Write() 无法将 CSV 文件导出到浏览器?

    我正在尝试将 DataTable 的内容作为 Excel csv 文件导出到用户的浏览器 当我单击 导出 按钮并在调试器中单步执行代码时 一切看起来都在发生 但实际上没有文件发送到浏览器 问题是 我在另一个项目中使用了这个完全相同的代码 并
  • CSV 提供的数据源第一列中存在奇数字符

    我有一个 CSV 文件 已添加到 Visual Studio 单元测试项目中 它有七列 如下所示 assessmentitemid reviewer1 reviewer2 reviewer3 reviewer4 reviewer5 revi
  • 如何在 T-SQL 中将 CSV 转换为记录集?

    在我的存储过程中 我传递一个过滤器 使用 WHERE Column IN 子句 作为参数 参数值以 CSV 形式给出 将此 CSV 转换为记录集的最佳方法是什么 例子 SELECT FROM Employee WHERE Name IN J
  • 如何避免 pandas 在保存的 csv 中创建索引

    我试图在对文件进行一些编辑后将 csv 保存到文件夹中 每次我使用pd to csv C Path of file csv csv 文件有一个单独的索引列 我想避免将索引打印到 csv 我试过 pd read csv C Path to f
  • 使用 silverlight 4 和 c# 创建 CSV 下载

    我正在努力寻找示例或代码 以便能够在 silverlight 中创建 CSV 或文本文件作为可下载链接 我已经在 ASP net 中完成了此操作 但无法找到使用 Silverlight 的方法 我在旋转轮子吗 或者我应该创建一个 ASP 页
  • 有谁知道一种更快的方法来执行 String.Split() 吗?

    我正在读取 CSV 文件的每一行 并且需要获取每一列中的各个值 所以现在我只是使用 values line Split delimiter where line是保存由分隔符分隔的值的字符串 衡量我的表现ReadNextRow我注意到它花费
  • 对 CSV 文件中的列进行分组并连接另一列的值

    我刚刚开始使用 PowerShell 在任何地方都找不到这个问题的答案 尝试编写一个脚本来导入 CSV 文件并搜索该文件以查看是否有任何名称相同 如果名称相同 我想将所有这些值写在同一行上 并且只显示名称一次 例如 Name Number

随机推荐

  • ElasticSearch:未分配的分片,如何修复?

    我有一个有4个节点的ES集群 number of replicas 1 search01 master false data false search02 master true data true search03 master fals
  • 按下按钮刷新 tkinter 框架

    我正在使用来自的代码在 tkinter 中的两个框架之间切换 https stackoverflow com questions 7546050 switch between two frames in tkinter制作我的图形用户界面
  • 在 Swift 中将参数传递给选择器

    我正在构建一个应用程序来跟踪大学课程的阅读作业 每个 ReadingAssignment 都包含一个 Bool 值 指示读者是否已完成阅读作业 ReadingAssignments 被收集到 WeeklyAssignment 数组中 我希望
  • 具有相同标签的不同散点图标记

    我遇到了 类似 的问题Matplotlib 一个标签具有多个不同标记的图例 https stackoverflow com questions 9262307 matplotlib legend with multiple differen
  • 多个域的集成 Windows 身份验证

    我有一个针对域 A 用户的 Asp net 网站 具有集成 Windows 身份验证 现在B域的用户需要访问该网站 但域B用户访问网站时会弹出窗口输入验证信息 我的问题是 如何配置IIS或Windows Server 让B域用户像A域用户一
  • XAML 文件的智能感知 (Xamarin.Forms)

    在 Visual Studio 15 中 如何让 XAML Intellisense 适用于 Xamarin Forms 中的 XAML 文件 编辑 将答案与问题分开 这个解决方案是在这个论坛 https social msdn micro
  • 如何检测 Angular 中属性的更改

    我有一个带有子组件的组件timeline
  • $null 应该位于相等比较的左侧吗? (-eq 与数组)

    与同事讨论 应该 null是在支票的左边还是右边 有什么例子可以说明为什么这很重要吗 abc null null eq abc True abc eq null True All ok abc 6 7 null 8 9 null eq ab
  • 使用 NPOI 将图像插入 Excel 文件

    我正在使用 C 在 Visual Studio 2010 中编写一个程序 并且正在使用 NPOI 库 我正在尝试将图像插入到 Excel 文件中 我尝试了两种不同的方法 但都不起作用 Method 1 HSSFPatriarch patri
  • 服务重启后 Docker 节点宕机

    我的服务器似乎空间不足 并且某些已部署的 Docker 堆栈出现了一些问题 我花了一段时间才弄清楚 但最终我做到了 并删除了一些容器和图像以释放一些空间 我能够跑service docker restart它起作用了 然而 也存在一些问题
  • 通过java应用程序发送附有excel文件的电子邮件 - 不起作用

    我试图通过Java应用程序发送一封邮件 其中包含excel文件作为附件 而不实际创建该文件 excel文件中的数据来自数据库 我可以发送带有附件的邮件 但文件是文本 制表符分隔 格式 但我希望该文件仅为 Excel 格式 请帮忙 以下是代码
  • 在 Java 调试器中,如何忽略从未通过我的代码的异常

    我目前正在使用 IntelliJ IDEA 进行 Java 开发 但我也对针对其他 IDE 的答案或调试 Java 代码的一般概念感兴趣 因为我在许多 IDE 中都错过了这个功能 所以我不确定在从其他语言转移我的调试习惯时是否错过了工作流程
  • Google Dataflow(Apache Beam)JdbcIO批量插入mysql数据库

    我正在使用 Dataflow SDK 2 X Java API Apache Beam SDK 将数据写入 mysql 我创建了基于管道Apache Beam SDK 文档 https beam apache org documentati
  • 使用 window.open() 的多个窗口

    众所周知 如果您单击嵌入其中的提交按钮onClick windown open 这将打开一个新窗口 其中包含您指定的所有可爱属性 但是 如果继续单击父窗口并再次单击 提交 按钮而不关闭先前的弹出窗口 则同一窗口将被新数据覆盖 现在我需要一种
  • 词汇量和嵌入维度之间的首选比例是多少?

    例如使用时gensim word2vec或用于训练嵌入向量的类似方法我想知道什么是好的比率 或者嵌入维度与词汇量之间是否有首选比率 随着更多数据的出现 这种情况会如何变化 由于我仍在讨论这个主题 因此在训练嵌入向量时如何选择合适的窗口大小
  • 哪些 OpenGL ES 2.0 纹理格式可进行颜色、深度或模板渲染?

    From OpenGL ES 2 0 规范 http www khronos org registry gles specs 2 0 es full spec 2 0 25 pdf第 4 4 5 节 表 4 5 中未列出的格式 包括压缩的内
  • 如何将两个日期列表合并为一系列日期间隔?

    我有开始日期列表和结束日期列表 他们已经排序了 start dates datetime date 2009 11 5 datetime date 2009 11 13 datetime date 2009 11 25 datetime d
  • 实体框架:如何在提交之前检查值是否存在

    我正在使用存储库模式 我有一个国家 地区存储库 我正在使用服务来提交该存储库 我应该在哪里检查该国家 地区是否已存在于数据库中 我会抛出异常吗 有没有一种方法可以在一次数据库调用中做到这一点 如果不存在则检查并插入 如果可以的话 可以在服务
  • 使用区域设置来检测是否使用英制单位

    我正在开发一个应用程序 想要以厘米 cm 或英寸 为单位显示长度 有没有办法从区域设置中选择正确的单位 无论如何 我还将输入一个选项 以便用户可以覆盖区域设置 美国 利比里亚和缅甸应使用英制单位 而世界其他国家应使用正常单位 一种方法是将此
  • 将 CSV 转换为 RDF,其中一列是一组值

    我想将 CSV 转换为 RDF 事实上 该 CSV 的一列是一组用分隔符 在我的例子中为空格符 连接的值 以下是 CSV 示例 带标题 col1 col2 col3 A B C D John M X Y Z Jack 我希望转换过程创建一个