У меня есть такой запрос:SPARQL: запрос для получения полного списка
CONSTRUCT {
?p a :IndContainer .
?p :contains ?ind .
} WHERE{
:ClassContainer_1 :contains ?class .
?ind a ?class .
BIND (IRI(...) AS ?p) .
}
Индивид ClassContainer_1
относится к некоторым классам. Я получаю эти классы и пытаюсь найти людей для этих классов. Затем я пытаюсь создать IndContainer
, который должен хранить найденных лиц (точки используются только для упрощения). Итак, я хочу:
- Создать особь
IndContainer
только тогда, когда отдельные лица для всех привязок?class
были найдены; - Создайте индивидуумов
IndContainer
для всех возможных наборов физических лиц от?ind
(то есть, когда некоторые из?class
имеют нумер отдельных лиц).
Возможно ли создать такой запрос SPARQL? Или нужно использовать какой-то механизм правил?
EDIT (добавить иллюстрации): Положительный пример. Есть:
test:ClassContainer_1
rdf:type test:ClassContainer ;
test:contains test:Type1 ;
test:contains test:Type2 ;
.
test:Type1_1
rdf:type test:Type1 ;
.
test:Type1_2
rdf:type test:Type1 ;
.
test:Type2_1
rdf:type test:Type2 ;
.
Хочет получить:
test:IndContainer_1
rdf:type test:IndContainer ;
test:contains test:Type1_1 ;
test:contains test:Type2_1 ;
.
test:IndContainer_2
rdf:type test:IndContainer ;
test:contains test:Type1_2 ;
test:contains test:Type2_1 ;
.
Отрицательного пример: такие же, как положительное исключения того, что нет особого класса Type2
и поэтому не индивидуумы IndContainer
должны быть сгенерированы.
EDIT 2 (проблема проблемы): Мы можем рассмотреть эту проблему с точки зрения составления комбинации. У нас есть две позиции (в моем примере) в каждой комбинации. Количество позиций определяется количеством классов, от которых зависит ClassContainer
. Каждая позиция должна быть заполнена одним человеком класса, который соответствует этой позиции. Поэтому в моем примере первая позиция должна быть заполнена одним человеком из класса Type1
, вторая - с классом Type2
(но порядок не имеет значения). У нас есть два человека для первого класса и один человек для второго класса. Чтобы получить количество комбинаций, мы можем использовать правило произведения из комбинаторики - 2 * 1 = 2, т. Е. {Type1_1, Type2_1} - первая комбинация, а {Type1_2, Type2_1} - вторая комбинация. Для каждой комбинации необходимо сформировать IndContainer
человек.
Можете ли вы показать пример данных, которые у вас есть и данные, которые вы хотите, чтобы ваша конструкция запроса для возврата. Не совсем понятно, что вы хотите. Я думаю, что это возможно, используя SPARQL. –
Добавить иллюстрации для положительных и отрицательных случаев. – DrDecay
Просто заметьте, если вы поместите «@» в свой комментарий, человек получит уведомление.Я не получил предупреждения о вашем комментарии, но был бы, если бы включил в него «@JoshuaTaylor». –