带有可选部分的 SPARQL 更新
SPARQL update with optional parts
考虑以下 SPARQL 更新:
INSERT {
?performance
mo:performer ?performer ; # optional
mo:singer ?singer ; # optional
mo:performance_of [
dc:title ?title ; # mandatory
mo:composed_in [ a mo:Composition ;
mo:composer ?composer # optional
]
]
}
WHERE {}
如果我不提供值(例如在耶拿的 ParameterizedSparqlString.setIri()
中 ?performer
、?singer
或 ?composer
,此更新将不会插入具有相应值的语句对象,这是预期的。
但是,如果 ?composer
丢失,我该如何抑制 [] a mo:Composition
。在第二个 INSERT 中创建它,其 WHERE 过滤器 ISIRI(?composer)
似乎不是一个选项,因为该 INSERT 不知道第一个已经创建的空白节点。
那么如何在单个 SPARQL 更新中支持这种可选参数呢?例如,"storing" 两个 INSERT 之间的空白节点有什么方法吗?
当调用者将 composition
设置为空白节点时,当且仅当它设置 ?composer
为 IRI 时,以下内容似乎有效。
if (composer != null) {
parameterizedSparqlString.setIri ("composer" , composer);
parameterizedSparqlString.setParam("composition", NodeFactory.createAnon());
}
INSERT {
?performance
mo:performer ?performer ; # optional
mo:singer ?singer ; # optional
mo:performance_of [
dc:title ?title ; # mandatory
mo:composed_in ?composition ] . # optional
?composition a mo:Composition ;
mo:composer ?composer .
}
WHERE {}
向@Joshua Taylor 致敬。
如果可能的话,我仍然更喜欢不需要额外参数 ?composition
的独立版本(即无需对调用者提出额外要求即可工作)。
考虑以下 SPARQL 更新:
INSERT {
?performance
mo:performer ?performer ; # optional
mo:singer ?singer ; # optional
mo:performance_of [
dc:title ?title ; # mandatory
mo:composed_in [ a mo:Composition ;
mo:composer ?composer # optional
]
]
}
WHERE {}
如果我不提供值(例如在耶拿的 ParameterizedSparqlString.setIri()
中 ?performer
、?singer
或 ?composer
,此更新将不会插入具有相应值的语句对象,这是预期的。
但是,如果 ?composer
丢失,我该如何抑制 [] a mo:Composition
。在第二个 INSERT 中创建它,其 WHERE 过滤器 ISIRI(?composer)
似乎不是一个选项,因为该 INSERT 不知道第一个已经创建的空白节点。
那么如何在单个 SPARQL 更新中支持这种可选参数呢?例如,"storing" 两个 INSERT 之间的空白节点有什么方法吗?
当调用者将 composition
设置为空白节点时,当且仅当它设置 ?composer
为 IRI 时,以下内容似乎有效。
if (composer != null) {
parameterizedSparqlString.setIri ("composer" , composer);
parameterizedSparqlString.setParam("composition", NodeFactory.createAnon());
}
INSERT {
?performance
mo:performer ?performer ; # optional
mo:singer ?singer ; # optional
mo:performance_of [
dc:title ?title ; # mandatory
mo:composed_in ?composition ] . # optional
?composition a mo:Composition ;
mo:composer ?composer .
}
WHERE {}
向@Joshua Taylor 致敬。
如果可能的话,我仍然更喜欢不需要额外参数 ?composition
的独立版本(即无需对调用者提出额外要求即可工作)。