Rdf 本体之间的Sparql查询

Rdf 本体之间的Sparql查询,rdf,sparql,jena,ontology,triples,Rdf,Sparql,Jena,Ontology,Triples,我给Jena加载了两个本体。它们都定义了Person类。他们都有一个叫约翰的人。他们不是同一个约翰;不同的人,不同的前缀,不同的IRI。在不改变原始本体论的情况下,是否有一个系统说向存储添加一个三元组,以便它们可以等价。一个rdfs:builtin的子类?如注释中所述,一个解决方案是通过owl:sameAs将资源定义为等效资源,并运行推理器。这将为每个资源定义适当的属性并集,这意味着每个资源将具有相同的属性和值 如果您不希望运行推理程序,则可以运行等效的SPARQL来插入数据: CONSTRUC

我给Jena加载了两个本体。它们都定义了Person类。他们都有一个叫约翰的人。他们不是同一个约翰;不同的人,不同的前缀,不同的IRI。在不改变原始本体论的情况下,是否有一个系统说向存储添加一个三元组,以便它们可以等价。一个rdfs:builtin的子类?

如注释中所述,一个解决方案是通过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的。在猫头鹰中,你可以说john1猫头鹰:sameasjohn2。如果希望在SPARQL查询中将它们视为等价的,则需要提供更多上下文。例如,您可以添加owl:sameAs三元组,然后使用一些包含owl:sameAs的属性路径,这样就可以将john1和john2视为相同的类型。您可以添加一个要链接的数据示例吗?是否有您可以匹配的标签或通用信息?这将帮助你按照@JoshuaTaylor的建议去做,这是解决你问题的最好方法。