Как вставить / обновить RDF-файл с помощью Jena? - PullRequest
3 голосов
/ 03 октября 2011

Я хочу вставить узел в мой файл RDF. Я знаю, что есть SPARQL-синтаксис вставки / обновления, но как это сделать с помощью Jena. Пример будет очень полезен.

Ответы [ 3 ]

3 голосов
/ 03 октября 2011

Вы уверены, что вам нужно использовать обновление SPARQL?В Jena узлы (ресурсы или литералы) находятся не в Model сами по себе, а только благодаря тому, что являются частью тройки (то есть Statement) в модели.Если в вашем коде есть объект Model, используйте один из множества вариантов addStatement, чтобы добавить данный ресурс или литерал в график.

Приложение

После уточнения вашего комментариячто вы хотите добавить в файл на диске, вы можете сделать, как говорит RobV, изменить Model в памяти, а затем снова записать его.И это действительно правильный способ сделать это.Тем не менее, есть быстрый и грязный обходной путь, который вы могли бы найти полезным.Если ваш файл в формате Turtle или N-Triples, вы можете просто добавить в конец файла (что, очевидно, вы не можете сделать в XML).Так что что-то вроде:

File f = new File( "where.your.file.is" );
FileOutputStream out = new FileOutputStream( f, true );
out.write( ":john :loves :jane.\n" );
out.close();

будет работать.На самом деле это не рекомендуется, потому что вы рискуете: (а) не иметь правильных префиксов пространства имен, (б) ввести синтаксические ошибки (так как вы не используете средство записи Jena) и (в) создать дублирующиеся тройки, ноиногда это полезный трюк в трудной ситуации.Очевидно, что вы можете только добавлять информацию, используя эту технику, но не обновлять или удалять существующие тройки.

Прямое добавление в конец файла N-triples является допустимым и полезным методом при сборе больших объемов данных из текущей регистрации илиприложения для мониторинга.

1 голос
/ 14 февраля 2015

попробуйте

   Model m = ModelFactory.createDefaultModel();
        m.read("/Users/heshanjayasinghe/Documents/A-enigmaProject/jena_Enigma/src/jena_enigma/Enigma.RDF", "RDF/XML");
        String NS="http://www.heshjayasinghe.webatu.com/Enigma.RDF#";

        Resource r = m.createResource(NS+"user8");//like subject
        Property p1 =m.createProperty(NS+"lname");
        Property p2 =m.createProperty(NS+"email");
        Property p3 =m.createProperty(NS+"fname");
        Property p4 =m.createProperty(NS+"password");


        r.addProperty(p1, "thathasara", XSDDatatype.XSDstring);
        r.addProperty(p2, "nt@gmail.com", XSDDatatype.XSDstring);
        r.addProperty(p3, "nipun", XSDDatatype.XSDstring);
        r.addProperty(p4, "t123", XSDDatatype.XSDstring);
      //   m.write(System.out,"thurtle");
          m.write(new FileOutputStream("/Users/heshanjayasinghe/Documents/A-enigmaProject/jena_Enigma/src/jena_enigma/Enigma.RDF"), "RDF/XML");
0 голосов
/ 03 октября 2011

Используйте ARQ (библиотека процессора Jena SPARQL) UpdateFactory , чтобы создать обновление, а затем UpdateExecutionFactory , чтобы создать UpdateProcessor , который может оценивать обновления.

Это немного сложнее, чем этот, так как вам также нужен набор данных для оценки обновлений. Я, честно говоря, не знаю, как легко создать набор данных из одной модели, но не могу представить, что это так сложно

...