2014-10-07 69 views
1

我用两个本体加载了Jena。他们都有一个Person类定义。他们都有一个人名约翰。他们不是“同一个”约翰;不同的人,不同的前缀,不同的IRI。在不改变原有本体的情况下,是否有一个系统(比如向商店添加一个三元组),以便它们可以相当。 rdfs:subClassOf内置?本体之间的Sparql查询

+2

问题询问SPARQL的标题,但问题似乎是关于OWL或RDFS。在OWL中,你可以说john1 owl:sameAs john2。如果您想在SPARQL查询中将它们视为“等效”,则需要提供更多上下文。例如,您可以添加owl:sameAs triple,然后使用一些包含owl:sameAs的属性路径,因此可以将john1和john2视为相同的类型。 – 2014-10-07 20:38:00

+1

你可以添加一个你想链接的数据的例子吗?有没有可以匹配的标签或共同信息?这会帮助你做@JoshuaTaylor建议的,这是解决你的问题的最好方法。 – magnudae 2014-10-08 07:04:36

回答

0

正如评论中所述,解决方案之一是通过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 . 
}