Решения для 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. Если вы не можете дождаться официального релиза, вы можете посмотреть его исходный код и просто скопировать то, что он делает, чтобы получить для этого свои собственные утилиты.

Другие вопросы по тегам