Решения для BNode в кунжуте
Есть ли решение для обработки BNODE в кунжуте? например:
if(! (statement.getObject() instanceof BNode))
tempModel.remove(statement);
если у нас есть RDF, такой как { s p1 _:a, _:a p2 "value"), поэтому даже после удаления оператора вторая тройка останется в модели. Нет ли какого-либо решения для обработки BNode в Сезаме?
1 ответ
Вы можете просто сделать это:
tempModel.remove(statement); // remove the first statement
if (statement.getObject() instanceof BNode) {
// remove the second statement
tempModel.remove((BNode)statement.getObject(), null, null);
}
Это позаботится об этом в большинстве простых случаев.
Однако, если BNode является началом коллекции RDF (то есть моделируется с использованием большого количества rdf:first
а также rdf:rest
свойства, и много пустых узлов), вам понадобится что-то более умное, чем это, так как в этом случае объект второго оператора также может снова быть пустым узлом.
В текущем выпуске Sesame вам понадобится выполнить рекурсивный цикл вручную, чтобы получить это право.
Однако в Sesame 4.1.0 будет выпущена служебная функция для более удобной работы с коллекциями RDF. Если вы не можете дождаться официального релиза, вы можете посмотреть его исходный код и просто скопировать то, что он делает, чтобы получить для этого свои собственные утилиты.