【问题标题】:Sparql query between ontologies本体之间的 Sparql 查询
【发布时间】:2014-10-07 20:20:49
【问题描述】:

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

【问题讨论】:

  • 题主问的是SPARQL,但问题好像是关于OWL还是RDFS。在 OWL 中,你可以说 john1 owl:sameAs john2。如果您想在 SPARQL 查询中将它们视为“等价物”,则需要提供更多上下文。例如,您可以添加 owl:sameAs 三元组,然后使用一些包含 owl:sameAs 的属性路径,这样就可以将 john1 和 john2 视为相同。
  • 你能添加一个你想链接的数据的例子吗?有没有可以匹配的标签或常见信息?这将帮助您按照@JoshuaTaylor 的建议去做,这是解决您的问题的最佳方式。

标签: rdf sparql jena ontology triples


【解决方案1】:

如 cmets 中所述,一种解决方案是通过 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 .
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    相关资源
    最近更新 更多