2016-05-08 5 views
0

При загрузке файла N3 RDF с указанным ниже форматом в репозиторий Sesame можно указать Sesame '|' как разделитель?Как читать нестандартный формат RDF в Sesame

Следующая тройка разделена | :

http://article.com/1-3|http://relationship.com/wasGeneratedBy|http://edit.com/comment1-2 
+4

Нельзя сказать, что для N3, поскольку N3 не позволяет использовать разные разделители. У вас просто нет файла N3. Вероятно, вы должны просто предварительно обработать текст как текст, а затем загрузить его в качестве того формата, в который вы его конвертировали. И обратите внимание, что в вашем случае, даже если вы замените | с пространством, это все еще не N3; вам нужно обернуть эти IRI угловыми скобками и добавить период в конце тройки. –

ответ

3

Как уже отмечались в комментариях: формат у вас есть просто не Н3 синтаксиса, поэтому вы не можете загрузить это с помощью N3 парсера Сезам в. Это также не в любом стандартизованном формате, поэтому для его обработки нет парсера.

Однако было бы довольно просто обработать файл в этом формате «вручную» и добавить его к Сезам непосредственно. Это, вероятно, сделать трюк:

try (RepositoryConnection conn = rep.getConnection()) { 
     ValueFactory vf = conn.getValueFactory(); 

     File file = new File("/path/to/weirdlyformattedrdffile.txt"); 

     // open the file for reading 
     try (BufferedReader br = new BufferedReader(new FileReader(file))) { 
     String line; 

     // start a transaction 
     conn.begin(); 

     // read the file line-by-line 
     while ((line = br.readLine()) != null) { 
      // each line is an RDF triple with a subject, predicate, and object 
      String[] triple = line.split("|"); 

      IRI subject = vf.createIRI(triple[0]); 
      IRI predicate = vf.createIRI(triple[1]); 
      IRI object = vf.createIRI(triple[2]); 

      // add the triple to the database 
      conn.add(subject, predicate, object); 
     }     
     // commit the txn when all lines are read 
     conn.commit(); 
     } 
    } 

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