2011-12-20 2 views
0

Мне нужно прочитать CSV-файл, а затем заполнить онтологию с помощью jena и java. Так как мне нужно ссылаться на некоторые ресурсы позже в коде, я создал Массивы таких ресурсов, как показано ниже:Использование массивов ресурсов в Jena

Resource [] singular_process= new Resource[1000]; 
singular_process[k] = model.createResource(URI + "singular_process"+i); 

Где i является UUID

при чтении файла, k представляет собой номер записи, предположит, что я сделал троек с использованием онтологий, таких как:

Statement S1 = model.createStatement(singular_process[k],RDF.type,control); 
model.add(S1); 

и я сделал больше троек, используя тот же singular_process[k] и писать свои заявления. , такие как

Statement S2 = model.createStatement(singular_process[k],go:count,numbers); 
model.add(S2); 

вышеуказанные два заявления для одной записи файла

потом я прочитал еще одну запись и и k в singular_process[k] отличается от первого, сделать то же самое, как и в выше создания triplesfor этой записи и писать их и так далее.

Мой вопрос: этот подход дает правильные результаты, так как мой файл n3 объединяет данные из обоих вышеперечисленных ресурсов, которые я не могу понять, как это происходит!

Во-вторых, как связать вышеупомянутые два определенных ресурса позже в коде, чтобы слить их, как если бы они имели общую информацию о том, что каждый из них будет членом нового большого процесса, как ссылаться на них?

Нужно ли делать заявления в виде массива?

Любые другие подходы, которые могут дать правильный ответ.

+1

Я не могу точно сказать, что вы пытаетесь сделать, что делает его почти невозможно, чтобы ответить на этот вопрос. Я могу сказать из кода, как 'model.createResource (URI +«singular_process»+ I)', что вы на самом деле не понял вашу проблему еще. Пожалуйста, обновите свой вопрос, чтобы показать актуальную проблему **, которую вы пытаетесь решить **. Например: минимальный набор строк из вашего CSV вместе с тройками RDF, которые вы планируете создать из них. –

ответ

0

Как писал Ян в своем комментарии, ваш вопрос не совсем ясен.

Однако, сделав некоторое преобразование данных из CSV, TSV и табличных данных, в последнее время я попытаюсь предоставить вам некоторые рекомендации, по крайней мере.

При преобразовании данных из CSV-файла в RDF вы обычно обрабатываете одну строку в то время независимо. Для каждой строки вам нужно решить, каков будет субъект, и сформировать соответствующие URI свойств из имен столбцов, значений и/или некоторого файла сопоставления/конфигурации. То же самое касается объектов/литералов ваших заявлений.

Редко вам нужны значения из предыдущих строк для обработки текущей строки. Однако иногда это так.

Когда это произошло со мной, вместо использования дополнительных структур данных, таких как Resource [] в вашем вопросе, я использую Jena Model через Jena API или SPARQL-запросы для чтения необходимой мне информации. Я не считаю это лучшей практикой, в идеале вы хотите обрабатывать каждую линию самостоятельно, однако при необходимости она работает хорошо. Моя модель Jena подкрепляется TDB, поэтому это работает очень хорошо, даже если ваш набор данных не полностью помещается в ОЗУ (однако это не так быстро, как обработка одной строки в то время независимо).

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

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

Чтобы заключить и повторить: не используйте дополнительную структуру данных, напишите данные RDF в модель Jena и используйте это для чтения ранее сгенерированных данных.

Смежные вопросы