如何在RDF(S)/OWL中表示两个实体以某种方式相关?

如何在RDF(S)/OWL中表示两个实体以某种方式相关?,rdf,owl,abstraction,reasoning,Rdf,Owl,Abstraction,Reasoning,我想在RDF中表示,两个实体ex:e1和ex:e2通过某些属性以某种方式相互关联。遗憾的是,属性位置中不允许空白节点。在OWL中有OWL:topProperty,但它的扩展包含所有实体的组合,因此这不是我需要的 当然我可以自己定义一个属性:ex:e1 ex:relatedTo ex:e2,但是还有其他方法吗 这将帮助我抽象RDF图。在抽象图形之后,我们只知道ex:e1和ex:e2是相关的,而不知道哪些特定属性将ex:e1链接到ex:e2。您想要表达的是,这两个资源以某种方式是相关的。在RDF或O

我想在RDF中表示,两个实体ex:e1和ex:e2通过某些属性以某种方式相互关联。遗憾的是,属性位置中不允许空白节点。在OWL中有OWL:topProperty,但它的扩展包含所有实体的组合,因此这不是我需要的

当然我可以自己定义一个属性:ex:e1 ex:relatedTo ex:e2,但是还有其他方法吗


这将帮助我抽象RDF图。在抽象图形之后,我们只知道ex:e1和ex:e2是相关的,而不知道哪些特定属性将ex:e1链接到ex:e2。

您想要表达的是,这两个资源以某种方式是相关的。在RDF或OWL中实现这一点的最佳方法是显式地对该关系建模—这适用于RDF/OWL中的所有关系:

ex:e1 ex:relatedTo ex:e2 .
它与任何其他关系都一模一样。请注意,顺便说一句,在SKOS中,存在一个实际的关系来建模某种相关的关系:SKOS:related。但是,这个特殊的关系在SKOS之外是不可重用的,因为它的域和范围被定义为SKOS:Concept。那就滚你自己的关系吧

或者,您可以使用具体化对象对“未知关系”进行建模:

# an unknown relation between e1 and e2 
ex:r1 a ex:UnknownRelation ;
      ex:subject ex:e1 ;
      ex:object ex:e2 .

这种方法的优点是,如果您愿意,您可以对关系说更多的话,而且虽然它捕获了一个关系存在的知识,但实际上它不会在两个资源之间引入直接链接,这可能是您想要的,也可能不是您想要的,这取决于您的用例。当然,一个主要的缺点是,它使用三个三元组来建模单个关系,并且很难通过SPARQL进行查询。它是否值得取决于您的用例。

某种程度上必须是一个显式关系,要么直接,要么通过一系列关系。在SPARQL中,可以为任何关系编写类似{s a |!a?o}的代码。