Как мне создать массив ресурсов с помощью Jena? - PullRequest
0 голосов
/ 09 декабря 2011

Я использую Jena и Java и читаю файл CSV.Для каждой строки файла есть тематический ресурс.Два предметных ресурса в соседних строках могут иметь одинаковое значение поля в строке (например: обе строки имеют одинаковый идентификатор процесса).В этом случае мне нужно объединить два предметных ресурса, поскольку каждый из них представляет подпроцесс в производстве (например).

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

1 Ответ

0 голосов
/ 11 декабря 2011

На этот вопрос было бы намного легче ответить, если бы вы могли показать некоторые примеры данных. На самом деле, я думаю, что вы сосредоточены на неправильном вопросе. Если вы можете четко решить, что означает иметь две строки в CSV с одинаковым процессом, и затем вы решите, как вы собираетесь кодировать это значение в своей модели RDF, тогда возникает вопрос о том, как писать код - как массив или что-то еще - будет намного понятнее.

Например (и я собираюсь составить здесь некоторые данные - как я уже сказал, было бы проще, если бы вы показали реальный пример), предположим, что ваш CSV содержит:

processId,startTime,endTime
123,15:22:00,15:23:00
123,16:22:00,16:25:00

Итак, процесс 123 имеет, по-видимому, две пары времени начала и окончания. Если вы наивно моделируете это в RDF, вы получите запутанную модель:

process:process123
    a :Process;
    process:start "15:22:00"^^xsd:time;
    process:end "15:23:00"^^xsd:time;
    process:start "16:22:00"^^xsd:time;
    process:end "16:25:00"^^xsd:time;
.

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

process:process123
    a :Process;
    process:episode [
        a process:Episode;
        process:start "15:22:00"^^xsd:time;
        process:end "15:23:00"^^xsd:time;
    ];
    process:episode [
        a process:Episode;
        process:start "16:22:00"^^xsd:time;
        process:end "16:25:00"^^xsd:time;
    ]
.

Как только моделирование станет ясным в вашем уме, я думаю, вы увидите, что вопрос о том, как создать RDF для желаний, утраивается из кода Java - и нужен ли вам массив - намного яснее. Не менее важно то, что вы можете думать с точки зрения тестов JUnit, которые вы написали бы, чтобы проверить, правильно ли работает ваш код.

...