Не видя всего вашего кода и некоторых значений, мы не можем быть уверены, что происходит, но я думаю, что проблема здесь в том, что вы не можете использовать RDFList#add с пустым списком. , и я думаю, что это то, что вы создаете в самом начале. Поскольку вы создаете список без элементов, вы должны получить обратно rdf:nil, то есть пустой список. Обратите внимание, что документация для RDFList#add говорит:
Если этот список является пустым (нулевым) списком, мы не можем выполнить побочное обновление без изменения URI этого узла (с rdf:nil) на пустой узел для новой ячейки списка) без нарушения инварианта Jena. Таким образом, эта операция обновления вызовет исключение, если будет предпринята попытка добавления в нулевой список. Безопасные способы добавления в пустой список включают with(RDFNode) и cons(RDFNode).
Вы не упомянули, получаете ли вы это исключение или нет.
В вашем случае, я думаю, проще всего было бы создать массив OntClass, а затем просто создать из них список. То есть вы можете сделать что-то вроде (непроверено):
String[] parts = list.split("-");
RDFNode[] elements = new RDFNode[parts.length];
for(int i = 0; i<parts.length; i++){
elements[i] = model.getOntClass("http://example.org/"+parts[i]);
}
RDFList list = model.createList(elements);
В качестве альтернативы, если вы хотите использовать with, как указано в документации, вы должны сделать что-то вроде (опять же, не проверено):
RDFList list = model.createList(new RDFNode[] {});
//string with names of rdf classes
String[] parts = list.split("-");
for(int i = 0; i<parts.length; i++){
OntClass oclass = model.getOntClass("http://example.org/"+parts[i]);
list = list.with(oclass);
}
Чтобы узнать больше об этом, вы можете найти этот мой ответ и соответствующие комментарии к нему. Вы не первый, у кого возникли проблемы с РДФЛ.
person
Joshua Taylor
schedule
01.10.2015