SPARQL Обновление типа личности - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть простая онтология, которая структурирована таким образом:

| Cell
    | CellFree
    | CellTree
    | CellPlayer

Мое приложение использует Stardog, и я хочу динамически обновлять тип человека, который в начале Cell и нуждается вбыть обновленным до одного из подклассов.

Мой первый подход был такой:

DELETE {?c rdf:type :Cell}
INSERT {?c rdf:type :CellFree}
WHERE {?c a :Cell . ?c :x 6 . ?c :y 3}

К сожалению, это удаляет ячейку, но не вставляет ее обратно.Как мне этого добиться?Каждая ячейка имеет свойства и данные, поэтому важно не терять их в процессе (я новичок в SPARQL).

1 Ответ

0 голосов
/ 26 декабря 2018

То, что вы являетесь членом подкласса, обычно не означает, что оно не является членом суперкласса (так что вы можете просто полностью исключить DELETE).Я понимаю, что это ваш выбранный в настоящее время обходной путь.

Тем не менее, это всего лишь предположение, и я думаю, что это не имеет значения, но вы пробовали просто изменить порядок DELETE и INSERT?Учитывая то, что вы описали в целом, вы также можете попробовать разбить их на два отдельных SPARQL-запроса, которые выполняются последовательно (в этом случае вы определенно хотите сначала выполнить INSERT).Помимо этих мыслей (и даже если они делают то, что вы хотите), описанное вами поведение звучит как ошибка в Stardog, поэтому я бы также заручился их прямой поддержкой.

...