Рассмотрим следующее обновление SPARQL:SPARQL обновление с дополнительными частями
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 {}
Если я не предоставлю значения (например, в Jena-х ParameterizedSparqlString.setIri()
для ?performer
, ?singer
или ?composer
, это обновление не будет вставлять заявления с соответствующими объектов, который, как предполагалось.
Но как я могу подавить [] a mo:Composition
, а если ?composer
отсутствует. Создание его второй INSERT, чьи WHERE фильтры на ISIRI(?composer)
, кажется, не быть одним из вариантов, потому, что INSERT Wo не знаю пустого узла, который уже был создан первым.
Итак, как я могу поддерживать этот тип дополнительных параметров в одном обновлении SPARQL? Например, существуют ли какие-либо средства для «хранения» пустого узла между двумя ВСТАВКАМИ?
Оффлайн, я * думаю *, что вставка (как и конструкция) будет обрабатывать тройки, которые работают, и игнорировать те, которые этого не делают. Например, если у вас есть '? Person: name? Name; : age? age', и у вас есть только привязка для '? age' и'? person', вы * должны * получить символ '? person: age? age', а не'? person: name ... ' троек. –
О, перечитывая свой вопрос, я понимаю, что вы имеете в виду. Пустой узел всегда связан, поэтому вы всегда получаете '[] тройку mo: Composition'. Мой предыдущий комментарий не очень помогает. Это интересный вопрос. Хороший улов! Мое первоначальное предположение заключалось в том, что вы могли бы использовать переменную вместо пустого узла и привязать ее к пустому узлу в запросе. –
@JoshuaTaylor Да, ваш первый комментарий объясняет, почему работает опция «исполнитель» и «певец». Но что делать с менее тривиальным случаем «композитор» ?. BINDing пустой узел звучит многообещающе (если это действительно возможно - я пока не знаю, как). – Drux