Если вы просто пытаетесь извлечь все предметы и объекты принадлежат и опубликованы троек, то это может быть очень простой запрос. Если, с другой стороны, вам нужны только данные, где есть все три части, вам нужен полный союз. Давайте создадим несколько примеров данных и посмотреть, что мы можем сделать:
@prefix : <urn:ex:>
:a :owns :b .
:b :publishes 1 .
:c :owns :d .
:d :publishes 2 .
:e :owns :f . # no corresponding :publishes
:g :publishes :h . # no corresponding :ownsprefix : <urn:ex:>
Вот ваш текущий запрос и результаты:
select ?x ?y ?z {
?x :owns ?y .
?y :publishes ?z .
}
---------------
| x | y | z |
===============
| :a | :b | 1 |
| :c | :d | 2 |
---------------
Теперь, если вы готовы, чтобы получить те, владеет и публикует тройки, которые не имеют соответствующей публикации и владеют тройками, вы можете использовать объединение, блок ценностей или путь собственности. Союз будет
{ ?x :owns ?y } union { ?x :publishes ?y }
значения блок будет будет немного проще:
values ?p { :owns :publishes }
?x ?p ?y
Вы можете сделать это еще проще с пути свойства:
?x :owns|:publishes ?y
Все это даст вам :
-----------
| x | y |
===========
| :a | :b |
| :b | 1 |
| :c | :d |
| :d | 2 |
| :e | :f | * owns
| :g | :h | * publishes
-----------
Обратите внимание, что строки со звездами присутствуют, потому что «e владеет f» и «g публикует h», хотя нет ничего, что опубликовано, и ничего, что принадлежит g. Ваш исходный запрос не найдет их. Если вам нужно исключить своих владельцев и опубликовать троек, которые не публикуются и не имеют собственных копий, вам необходимо использовать опцию union, которая включает все части, как в user205512's answer.
Каков был ваш первоначальный запрос? Я думаю, вам просто нужно разделить оригинал на объединение, но немного сложно помочь, когда вы представляете его вот так. – user205512
только что обновил вопрос, спасибо за вашу помощь :) – TheEnglishMe
@ozama ли ваш набор данных содержит любое использование собственных или публикует там другие компоненты? То есть, вы просто хотите выбрать всех своих и опубликовать троек или хотите только? X и? Z, когда между ними есть * common * y? –