Использование массивов ресурсов в Йене - PullRequest
0 голосов
/ 20 декабря 2011

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

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] отличается от первой, сделайте то же самоекак описано выше, создайте тройки для этой записи, запишите их и т. д.

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

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

Нужно ли мне также делать операторы в виде массива?

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

1 Ответ

0 голосов
/ 11 марта 2012

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

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

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

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

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

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

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

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

...