考虑以下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
中,此更新不会提供具有相应对象的语句,这是预期的。
但是,如果缺少[] a mo:Composition
,我怎么能抑制?composer
。在ISIRI(?composer)
上WHERE过滤器的第二个INSERT中创建它似乎不是一个选项,因为INSERT不知道第一个已经创建的空白节点。
那么我如何在单个SPARQL更新中支持这种可选参数?例如,有没有任何方法可以存储"两个INSERT之间的空白节点?
答案 0 :(得分:1)
以下似乎有效,当调用者将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
的自包含版本(即无需对来电者提出额外要求),如果可能的话。<\ n> / p>