Пусть говорят, что я троек видаSPARQL запрос для получения экземпляров только некоторые, а не все свойства
uri:ObjA1 uri:propAA uri:Obj1A .
uri:ObjA1 uri:propAA uri:Obj1B .
uri:ObjA2 uri:propAA uri:Obj1A .
uri:ObjA2 uri:propAA uri:Obj1B .
uri:ObjA2 uri:propAA uri:Obj1C .
Теперь, что я пытаюсь сделать, это найти все экземпляры, которые имеют только значения Obj1A и Obj1B для propAA. В принципе, запрос должен возвращать ObjA1, а не ObjA2, потому что только ObjA1 принимает значения Obj1A и Obj1B только для propAA. Что у меня сейчас есть
SELECT * where {
?sub uri:propAA uri:Obj1A .
?sub uri:propAA uri:Obj1B .
FILTER NOT EXISTS {
?sub uri:propAA ?obj .
FILTER((?obj != uri:Obj1A) && (?obj != uri:Obj1B)) .
}
}
Теперь этот запрос работает. Если я не поставлю условие FILTER NOT EXISTS, он возвращает оба ObjA1 и ObjA2. Теперь я ищу, чтобы узнать, есть ли лучший способ написать этот запрос? Лучше будет означать, более эффективный или более краткий (или оба).
Я пробовал этот запрос, но он не работает. Он не игнорирует те экземпляры, которые имеют другие значения для propAA, кроме Obj1A и Obj1B. Я ищу только те экземпляры, которые имеют Obj1A и Obj1B как значения для propAA. Ничего более или менее не нужно возвращать. В примере, который я дал, ObjA2 не следует возвращать, потому что помимо Obj1A и Obj1B в качестве значений для propAA он также имеет Obj1C как значение для propAA. – thisisshantzz
В этом случае, я думаю, что у вас все в порядке. – scotthenninger