SPARQL - 如果不存在则插入 属性

SPARQL - INSERT property if not exists

我目前正在尝试创建一个 SPARQL 查询,如果它不存在于目标图中,它可以插入新的公理。我正在使用集成了 Jena ARQ 的 ONT-API。

这是我的空白目标查询 ontology:

PREFIX t: <testOntologyIRI#>
INSERT DATA {
   t:testClassA t:hasProperty t:testClassB 
}

这没有产生预期的结果:我的空白处有一个新的公理 ontology testClassA hasProperty testClassB

如果目标 ontology 中不存在新的 属性,我会遇到一些问题。

要注意的是,如果我 运行 上面的相同查询(知道 属性 hasProperty 存在于 ontology 中)==> 它会隐式生成单独的 testClassA、testClassB最后是我的目标公理。

为了解决这个问题 "issue",我想在我的查询中创建条件,例如:

    PREFIX t: <testOntologyIRI#>
    PREFIX owl:     <http://www.w3.org/2002/07/owl#>
    INSERT DATA {
       t:testClassA ?hasProperty t:testClassB  .
BIND(IF(EXISTS{t:hasProperty},t:hasProperty, t:hasProperty a owl:ObjectProperty) as ?hasProperty).
    }

这个查询对我来说很麻烦,而且它不起作用。 您建议编辑什么以自动生成 ontology 中不存在的 属性 并且需要插入所需的公理?

此致,

您需要使用负条件来测试特定三元组的缺失。

prefix t:<testOntologyIRI#>

insert { t:testClassA t:hasProperty t:testClassB .
         t:hasProperty rdf:type owl:Property
 }
where { minus { t:hasProperty rdf:type owl:Property }}

如果 属性 已经存在,则不会插入任何内容。