2015-12-05 4 views
0

У меня есть следующий код в python с использованием RDFLib, и я хочу перевести его в JAVA с использованием библиотек Sesame.RDFLib (Python) to Sesame (JAVA)

Python

restrictionNode= BNode() 
    g.add((nodeIndividualName,rdftype,restrictionNode)) 
    g.add((restrictionNode, rdftype, OWL.Restriction)) 
    g.add((restrictionNode, OWL.onProperty, rno.is_extent_of)) 

    listClassNode = BNode() 
    g.add((restrictionNode, OWL.allValuesFrom, listClassNode)) 
    g.add((listClassNode, rdftype, OWL.Class)) 

    arcListNode = BNode() 
    g.add((listClassNode, OWL.oneOf,arcListNode)) 
    Collection(g, arcListNode,arcIndividualList) 

В приведенном выше коде, г представляет собой график.

приведенный выше код создает следующее утверждение:

is_extent_of only ({arc_1,arc_2,arc_4}) 

Я был в состоянии создать тот же код, но в последней строке. Кто-нибудь знает, есть ли такое же понятие, как Collection в Sesame API, или мне нужно вручную создать список, используя первый и остальные?

ответ

1

Ключевая библиотека Сезам в настоящее время не имеет удобных функций для Коллекций - это исправляется; в следующей версии планируется добавить базовые утилиты для обработки коллекций в основные библиотеки.

Существует несколько сторонних библиотек расширения Sesame, которые предлагают такую ​​вещь (например, для этой цели библиотека SesameTools имеет класс RdfListUtil). И, конечно же, вы можете создать список RDF вручную. Основная процедура довольно проста, что-то вроде этого должно сделать трюк:

// use a Model to collect the triples making up the RDF list 
    Model m = new TreeModel(); 
    final ValueFactory vf = SimpleValueFactory.getInstance(); 

    Resource current = vf.createBNode(); // start node of your list 
    m.add(current, RDF.TYPE, RDF.LIST); 

    // iterate over the collection you want to convert to an RDF List 
    Iterator<? extends Value> iter = collection.iterator(); 
    while (iter.hasNext()) { 
     Value v = iter.next(); 
     m.add(current, RDF.FIRST, v); 
     if (iter.hasNext()) { 
      Resource next = vf.createBNode(); 
      m.add(current, RDF.REST, next); 
      current = next; 
     } 
     else { 
      m.add(current, RDF.REST, RDF.NIL); 
     } 
    }