2

我是 RDF/本体的新手,在这个领域的工作方式对我来说有点不清楚。目前我对三重验证感到困扰。我仍然以关系方式思考,我首先创建一个模式,然后为了插入数据,我需要遵循该结构。

为了插入三元组,我使用 Jena,然后使用生成的字符串执行插入命令。所以这是我的问题:

  • 有没有办法验证我生成的 RDF 三元组(当前使用 Jena)实际上是否遵循我的本体结构。

  • 或者,当我执行插入时,有没有办法由 rdf 存储(当前 Virtuoso)通知?我做了一些搜索,发现:如何将本体导入 Virtuoso?. 这是否意味着我的三元组将根据我的本体进行检查/验证?

  • 还发现了RDF 和 OWL 工作流问题。那里说

    1. 在创建了我的本体之后,我应该
    2. 将本体导出为 RDF,以便
    3. 将其导入 RDF 存储。将我的本体导入 Virtuoso(如:如何将本体导入 Virtuoso?)是否意味着步骤 1 和 2 已完成,我现在正在执行步骤 3?
4

2 回答 2

4

A) 这种验证不是 RDF 模型的一部分,因此大多数三元存储/API 不支持它。我建议你放弃这种心态,但要回答你的问题:是的,有一些工具可以让你做这种事情。一个例子是 Pellet OWL 推理器,它有一个约束验证模式,但我相信还有其他的。或者您当然可以实现自己的验证,或者通过实现某种检查传入三元组的解析器侦听器,或者通过对您的三元组进行一些事后检查,使用查询,或者使用 RDF-OO 映射解决方案,如例如阿里巴巴或帝国。

B)我对 Virtuoso 不够熟悉,无法 100% 确定,但我怀疑它不会根据模式验证插入。如前所述,这在 RDF 世界中是一件不寻常的事情。

C)(更新):是的,如果您将本体导入 Virtuoso,那么您确实将其加载到三重存储中,所以这三个步骤都已完成。

于 2014-03-23T19:51:49.937 回答
2

RDF 图遵循“开放世界”模型,这与 SQL 表的“封闭世界”模型完全不同。在 SQL 中,您只能填写模式预定义的表格单元格。在 RDF 中,“任何人都可以随时对任何事情发表任何意见”。这提供了很大的自由和权力,但确实需要一些学习才能利用。

您可能会认为每个三元组对应于 SQL 表中的单个单元格 -entity, attribute, valuesubject, predicate, object大致匹配primary key, column, value。在 SQL 世界中,最好填充表中的每个单元格——空单元格可能意味着被解释为有意义。在 RDF 世界中,稀疏数据(具有许多空单元格)往往是规则,而那些空单元格除了“我们对此没有价值”之外没有任何意义。

用于检查给定数据集是否符合“形状”(可能是本体)的新工具来自 W3C 的SHACL和相关项目。这些工具不限制可以输入的数据,而是检查您正在使用的数据是否符合您想要的形状。

Virtuoso 还没有对 SHACL 和相关的内置支持,但这些都在 To-Do 列表中。也就是说,可以使用 SHACL 验证工具来处理 Virtuoso 中/来自 Virtuoso 的数据。

(ObDisclaimer:OpenLink Software生产Virtuoso并雇用我。)

于 2017-08-16T23:07:45.920 回答