Прежде всего, пожалуйста, отправляйте только один вопрос за раз в StackOverflow. Цель этого сайта - попытаться собрать точные, качественные ответы на отдельные вопросы, чтобы будущие пользователи могли воспользоваться ими. Поэтому каждый вопрос должен быть в отдельном посте.
У меня небольшие трудности с пониманием вашего вопроса. Если я могу перефразировать:
- вы обрабатываете файл CSV
- во время обработки каждая строка файла соответствует одному ресурсу и его свойствам, и вы добавляете соответствующие тройки к своей Jena
Model
. Одиночный Resource
создается как субъект каждой тройки для данной строки
- впоследствии вы обнаружите, что два предметных ресурса должны относиться к одной и той же вещи (т. Е. Данные из двух строк вашего CSV-файла относятся к одной и той же сущности реального мира)
- вы хотите объединить тройки из двух ресурсов, чтобы использовать только один предметный ресурс
Если это точное резюме, оно, конечно, немного необычно ... но это ваши данные! В любом случае, вы можете легко объединить операторы из двух ресурсов в один:
Resource r0 = .... ; // the first subject resource
Resource r1 = .... ; // the second subject resource
// we discover that r0 and r1 refer to the same thing, so we
// want to merge their properties ...
List<Statement> r1Props = r1.listProperties().toList();
for (Statement s: r1Props) {
// add the property to r0, so <r1 P O> becomes <r0 P O>
r0.addProperty( s.getPredicate(), s.getObject() );
// remove the statement about r1
// once all of r1's triples are removed, r1 is no longer in the Model
s.remove();
}
В чем я не уверен, так это в том, что это связано с массивами ресурсов. Вам придется объяснить это немного подробнее.
Что касается Q2, вы можете использовать класс com.hp.hpl.jena.vocabulary.RDFS
для ссылки на URI в пространстве имен RDFS, а также для RDF
, OWL
и некоторых других. Чтобы создать свой собственный класс словаря, см. Jena schemagen .