Рассмотрим следующее обновление 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 {}
Если я не укажу значения (например, в ParameterizedSparqlString.setIri()
Йены для ?performer
, ?singer
или ?composer
, это обновление не будет вставлять операторы с соответствующими объектами, как и предполагалось.
Но как я могу подавить [] a mo:Composition
, если ?composer
отсутствует. Создание его во втором INSERT, чьи фильтры WHERE на ISIRI(?composer)
, кажется, не вариант, потому что этот INSERT не будет знать пустой узел, который уже был создан первым.
Итак, как я могу поддерживать такие необязательные параметры в одном обновлении SPARQL? Например, есть ли какие-либо средства для «хранения» пустого узла между двумя INSERT?
?person :name ?name ; :age ?age
и у вас есть привязка только для?age
и?person
, вы должны получить тройку?person :age ?age
, а не тройку?person :name ...
. - person Joshua Taylor   schedule 02.01.2015[] a mo:Composition
. Мой предыдущий комментарий мало помогает. Это интересный вопрос. Хороший улов! Мое первоначальное предположение заключалось в том, что вы могли бы использовать переменную вместо пустого узла и привязать ее к пустому узлу в запросе. - person Joshua Taylor   schedule 02.01.2015?performer
и?singer
работает. Но что делать с менее тривиальным случаем?composer
?. Привязка пустого узла звучит многообещающе (если это действительно возможно — я пока не знаю, как это сделать). - person Drux   schedule 02.01.2015