Как объединить пустые узлы в Jena без дублирования

Использование Jena для десериализации RDF, содержащего пустые узлы, приводит к получению уникальных идентификаторов для этих узлов каждый раз при десериализации одного и того же RDF. Если один и тот же RDF несколько раз десериализуется и объединяется, пустые узлы дублируются. Есть ли способ избежать или удалить дублирование?

static final String RDF =
        "<http://www.foo.com/subject>" +
            "<http://www.foo.com/predicate>" +
                "[ a  <http://www.foo.com/bar> , <http://www.foo.com/baz> ] .";

public static void main(String... args) {
    Model m1 = ModelFactory.createDefaultModel().read(new StringReader(RDF), null, "ttl");
    Model m2 = ModelFactory.createDefaultModel().read(new StringReader(RDF), null, "ttl");
    Model m3 = m1.union(m2);
    RDFDataMgr.write(System.out, m3, Lang.TURTLE);
}

//<http://www.foo.com/subject>
//    <http://www.foo.com/predicate>  [ a  <http://www.foo.com/bar> , <http://www.foo.com/baz> ] ;
//    <http://www.foo.com/predicate>  [ a  <http://www.foo.com/bar> , <http://www.foo.com/baz> ] .

Этот надуманный пример немного глуп, но учтите, что я пытаюсь объединить RDF-файлы, которые могут быть, а могут и не быть идентичными.


person jaco0646    schedule 09.09.2017    source источник
comment
Эти тройки не идентичны. Используя другую сериализацию вывода, вы можете увидеть, что эти пустые узлы имеют разные метки пустых узлов. См. этот ответ для некоторого объяснения. Что касается обходного пути, возможно, вы могли бы использовать пустые узлы Jena pseudo -URI в сериализации ввода. Насколько мне известно, слияние изоморфных (под)графов RDF сложно.   -  person Stanislav Kralin    schedule 09.09.2017
comment
Я попытался изменить приведенный выше код, чтобы использовать NTriples, а не Turtle. После этого пустые метки узлов будут видны в сериализации; однако метки по-прежнему каждый раз десериализуются в новые метки.   -  person jaco0646    schedule 10.09.2017