在 SPARQL 查询中指定具有多个值的交集

Specifying an intersection with multiple values in a SPARQL query

我正在尝试构建一个查询,查询 returns 有两个指定参与者的事件。这些参与者的姓名是使用名字和姓氏的值指定的。 到目前为止,这是我能够想出的唯一可行的解​​决方案:

SELECT ?event
WHERE {
    ?event con:hasParticipant ?personA .
    ?personA con:hasFirstName "Bob"^^xsd:string .
    ?personA con:hasLastName "Smith"^^xsd:string .
    ?event con:hasParticipant ?personB .
    ?personB con:hasFirstName "The"^^xsd:string .
    ?personB con:hasLastName "Bear"^^xsd:string .
}

...但我想知道是否有更好的方法?

如有任何帮助,我们将不胜感激!

这与 几乎相同,只是在这个中有更多关于您要寻找的人的具体条件(在另一个中,任务是寻找参与者、版主或嘉宾荣誉)。那里的答案会有所帮助。在这种情况下,您可以使其更简单一些。您可以用逗号分隔多个对象(例如,?event hasParticipant ?p1, ?p2)。您可以使用空白节点来避免为人们绑定变量,并且您可以(可能)消除字符串上的数据类型:

SELECT ?event {
    ?event con:hasParticipant [ con:hasFirstName "Bob" ;
                                con:hasLastName "Smith" ] ,
                              [ con:hasFirstName "The" ;
                                con:hasLastName "Bear" ] .
}