Понимание шаблонов construct

Я изучаю SPARQL прямо сейчас, и мне сложно понять ограничения шаблонов CONSTRUCT. Обычно все работает нормально, примерно так, как я ожидал. Однако мое понимание рушится, когда я начинаю создавать шаблоны, которые семантически не имеют смысла. Вот пример:

У меня хранятся следующие данные:

me:     a        foaf:Person .
foaf:mbox  rdfs:label  "Email" .

С шаблоном по умолчанию ?s ?p ?o я, очевидно, получаю обратно те точные данные. Если я пойду на что-то немного бессмысленное, например:

CONSTRUCT {
    ?type ?labeled ?label
}
WHERE {
    me: a ?type .
    ?labeled rdfs:label ?label .
}

Я возвращаю эту тройку:

foaf:Person  foaf:mbox  "Email" .

Для меня это имеет смысл, потому что есть три переменных, и каждая имеет только одно значение, к которому она может привязаться в наборе данных. Однако как только я переключаю порядок переменных в шаблоне на следующий: ?type ?label ?labeled, я практически ничего не получаю обратно. Это почему? Шаблон ?type ?labeled ?label уже нарушает исходную структуру данных, и я все еще получаю что-то обратно, так почему же ?type ?label ?labeled должен быть другим?

Разве это не очевидно? Литерал не может находиться в предикатной позиции тройки RDF

UninformedUser 13.09.2018 20:29

@AKSW Ах, это не та деталь, которую я упустил. Если бы это было для меня очевидно, я бы не задавал этот вопрос :)

The Guy with The Hat 13.09.2018 20:35

Знаю, шучу, иногда (а довольно часто) это настолько банально, что за деревьями лес не разглядеть.

UninformedUser 14.09.2018 08:20
0
3
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как отмечает @AKSW, литералы не могут быть предикатами. "Email" - это литерал, и поэтому его нельзя КОНСТРУКТИРОВАТЬ в позицию предиката.

Другие вопросы по теме