1
我用两个本体加载了Jena。他们都有一个Person类定义。他们都有一个人名约翰。他们不是“同一个”约翰;不同的人,不同的前缀,不同的IRI。在不改变原有本体的情况下,是否有一个系统(比如向商店添加一个三元组),以便它们可以相当。 rdfs:subClassOf内置?本体之间的Sparql查询
我用两个本体加载了Jena。他们都有一个Person类定义。他们都有一个人名约翰。他们不是“同一个”约翰;不同的人,不同的前缀,不同的IRI。在不改变原有本体的情况下,是否有一个系统(比如向商店添加一个三元组),以便它们可以相当。 rdfs:subClassOf内置?本体之间的Sparql查询
正如评论中所述,解决方案之一是通过owl:sameAs将资源定义为等价物并运行推理器。这将为每个属性定义适当的属性联合,这意味着每个资源将具有相同的属性和值。
如果运行的是推理不是你要找的内容,那么你可以运行等同SPARQL来插入数据:
CONSTRUCT {
<person1> ?p2 ?o2
<person2> ?p1 ?o1 .
}
WHERE {
<person1> ?p1 ?o1 .
<person2> ?p2 ?o2 .
}
这将返回构造三元组集合,即那些做不是已经存在的,因此给你一个和OWL推理器相同的联合。
如果你只需要做到这一点一个在数据加载,然后只需使用相同的查询模式插入数据:
INSERT {
GRAPH <graph-uri> {
<person1> ?p2 ?o2
<person2> ?p1 ?o1 .
}
}
WHERE {
<person1> ?p1 ?o1 .
<person2> ?p2 ?o2 .
}
问题询问SPARQL的标题,但问题似乎是关于OWL或RDFS。在OWL中,你可以说john1 owl:sameAs john2。如果您想在SPARQL查询中将它们视为“等效”,则需要提供更多上下文。例如,您可以添加owl:sameAs triple,然后使用一些包含owl:sameAs的属性路径,因此可以将john1和john2视为相同的类型。 – 2014-10-07 20:38:00
你可以添加一个你想链接的数据的例子吗?有没有可以匹配的标签或共同信息?这会帮助你做@JoshuaTaylor建议的,这是解决你的问题的最好方法。 – magnudae 2014-10-08 07:04:36