1

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

我们可以通过编程方式(模型检查器)解决这个程序来识别数据集本体的一致性吗?

例如,

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

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

4

2 回答 2

1

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

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

于 2021-07-26T20:56:31.227 回答
0

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

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

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

你的数据有:

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

那么根据 OWL 推理器,甚至是支持数据类型xsd:datexsd:integer. 如果您使用物化,则矛盾变得明显,因为数据需要:

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

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

_:bnode  rdf:type  xsd:date .

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

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

于 2021-07-28T08:00:09.340 回答