根据本体验证 RDF 数据以进行一致性检查

如何解决根据本体验证 RDF 数据以进行一致性检查

我想根据构建的本体验证 RDF 数据(无论格式如何)。

我们能否以编程方式(模型检查器)解决此程序以识别数据集本体的一致性?

例如,

aaa <http://bbb/date> "2004"^^<http://www.w3.org/2001/XMLSchema#integer> .

上面的三元组一个属性日期,需要对象位置有日期。假设本体中提到了这个约束,我想在没有人为干预的情况下以编程方式自动验证这个三元组

解决方法

需要注意的是,本体中指定的数据类型不是约束。相反,当在 OWL 定义中指定数据类型时,它是关于该数据类型范围的声明。推理引擎可以使用它来对图中的数据进行推断。对于域和范围声明,如此。如果您说关系 hasBoyfriend 的范围是 schema:Person,但向图中添加了一个表示 Person_A hasBoyfriend Dog_A 的关系,推理引擎将创建一个表示 {{1} } 既是狗 又是 Dog_A

正如 Henriette 在评论中提到的,对于一致性检查,您需要使用一种单独但相关的技术:shexshacl。在尝试之前,请确保您使用的任何堆栈都支持其中一个!

,

您可以通过将本体和数据组合在一起并使用推理器来测试 RDF 数据与本体的一致性。对此有不同的方法:将所有内容加载到推理器的数据结构中并从那里测试一致性,或者使用数据库来具体化推断数据并寻找矛盾的事实。

例如,如果您有一个本体说:

onto:date  a  owl:DatatypeProperty;
  rdfs:range  xsd:date .

并且您的数据具有:

ex:aaa  onto:date  "2004"^^xsd:integer .

那么根据 OWL 推理器,甚至支持数据类型 xsd:datexsd:integer 的 RDFS 推理器,两者的合并将是不一致的。如果您使用物化,矛盾就会变得明显,因为数据需要:

ex:aaa  onto:date  _:bnode .
_:bnode  rdf:type  xsd:integer .

并且这些数据与本体的结合需要:

_:bnode  rdf:type  xsd:date .

因此我们有一个节点属于两种不兼容的数据类型,这是一个直接的矛盾。

如果您知道自己只处理某些类型的不一致,例如数据类型不一致,那么使用成熟的推理器并不是最有效的选择。另外,从您的问题来看,不清楚您是要测试逻辑一致性还是某种完整性约束,因为数据类型的情况很特殊。很多人混淆了公理和约束。这就是为什么她评论中的 Henriette HamrseThomas 中的 his answer 都指的是 ShEx 和 SHACL,它们更适合测试约束。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?