2016-04-15 5 views
1

Я пытаюсь создать запрос, который возвращает события с двумя именованными участниками. Имена этих участников указаны с использованием значений для имени и фамилии. До сих пор это единственный рабочее решение, которое я смог придумать:Задание пересечения с несколькими значениями в запросе SPARQL

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 . 
} 

... но мне интересно, если есть лучший способ сделать это?

Любая помощь была бы принята с благодарностью!

+0

Это очень похоже на [сужая на SPARQL запрос] (HTTP: // StackOverflow .com/д/36647451/1281433). Любой шанс это назначение класса или что-то подобное? –

+0

Например, некоторые из этих вопросов, похоже, очень похожи на вопросы в [этом экзамене] (http://cgi.di.uoa.gr/~pms547/homework/homework1-fdb2010-v3.pdf). –

+0

Привет, Джошуа, да, похоже, мы можем быть в одном классе :) Мы должны разработать онтологию и написать для нее некоторые запросы. – mpr

ответ

0

Это почти идентично Narrowing down on SPARQL query, за исключением того, что есть более конкретные условия для того, кого вы ищете в этом (в другом случае задача заключалась в том, чтобы найти участников, модераторов или гостей чести). Ответ там поможет. В этом случае вы можете сделать это немного проще. Вы можете разделить несколько объектов запятыми (например, ? Event hasParticipant? P1,? P2). Вы можете использовать пустые узлы, чтобы избежать связывания переменных для людей, и вы можете (вероятно) исключить типы данных на струнах:

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

Большое вам спасибо, это работает очень хорошо! – mpr