Я хотел бы использовать SPARQL DELETE/INSERT, чтобы убедиться, что после повторных обновлений ?performance
и некоторые связанные пустые узлы не имеют нескольких значений свойств, но только ноль (для необязательных случаев) или один (для обязательных случаев).Операция DELETE/INSERT может использоваться для удаления троек, содержащих пустые узлы: как?
Если я отправлю DELETE/INSERT (см. Ниже) на сервер Jena Fuseki 1.1.1, я получаю следующее сообщение об ошибке: «Пустые узлы не допускаются в шаблонах DELETE».
Однако спецификация содержит это предложение: «Операция DELETE/INSERT может использоваться для удаления троек, содержащих пустые узлы».
Итак, какова действительная форма DELETE/INSERT, которая выполняет эту работу в этом случае? Чтобы облегчить техническое обслуживание, было бы хорошо, если части DELETE и INSERT останутся структурно подобными. (Это follow-up вопрос.)
DELETE {
?performance
mo:performer ?_ ;
mo:singer ?_ ;
mo:performance_of [ ### error marked here ###
dc:title ?_ ;
mo:composed_in [ a mo:Composition ;
mo:composer ?_
]
]
}
INSERT {
?performance
mo:performer ?performer ; # optional
mo:singer ?singer ; # optional
mo:performance_of [
dc:title ?title ; # mandatory
mo:composed_in [ a mo:Composition ;
mo:composer ?composer # optional
]
]
}
WHERE {}
Я предполагаю, что проблема также вызвана этим предложением также из спецификации: «Пустые узлы в графических шаблонах действуют как переменные, а не как ссылки к конкретным пустым узлам в запрошенных данных ». Ссылаясь на них как '_: b1',' _: b2', '_: b3' также вызывает ошибку ... – Drux