Java API для разделения RDF-файлов
Я хотел бы использовать Java API для разделения файлов RDF в Java. (не по командам ОС).
Кто-нибудь знает какую-либо библиотеку Java для этого? Есть опыт?
Я уже много искал в гугле, но ничего не смог найти.
Заранее спасибо.
1 ответ
Расщепление с помощью парсинга
Если вы счастливы использовать Apache Jena, тогда вы можете использовать абстракцию StreamRDF. Вы можете реализовать пользовательские StreamRDF
экземпляр в сочетании с использованием встроенного StreamRDFWriter.getWriterStream()
разбить проанализированные тройки на отдельные выходные файлы.
Если вы предпочитаете использовать Sesame, вы можете использовать их абстракцию RIO для достижения чего-то очень похожего.
Расщепление без разбора
Разделение без разбора возможно только при использовании строчной сериализации RDF, такой как NTriples или NQuads, в противном случае вам придется анализировать и разбивать файлы таким образом, поскольку не существует надежного надежного способа разделения других сериализаций.
Если у вас есть NTriples или NQuads, вы можете наивно разделиться с помощью * nix split
команда вроде так:
> split -l 50000 input.nq prefix-
куда -l
указывает количество строк для размещения в каждом файле, input.nq
ваш входной файл и prefix-
это префикс для выходных имен файлов. Это создаст кучу файлов в текущем каталоге с именем prefix-aa
, prefix-ab
и т.д. в зависимости от того, сколько строк в вашем входном файле.
Разделение и пустые узлы
Если ваши данные содержат пустые узлы, вы должны быть осторожны при попытке разбить данные.
Обратите внимание, что все сериализации RDF определены так, что идентификаторы пустых узлов в данных имеют область документа, т.е. они относятся к файлу, в котором они появляются. Таким образом, если вы разбиваете файл, содержащий пустые узлы, на несколько файлов, вы меняете смысл своих данных. Это относится ли ваш сплит через
Например, у вас есть _:a
во всем исходном файле, который будет рассматриваться как один пустой узел. Если вы разбили свой файл на N
части у вас теперь есть до N
разные _:a
в ваших файлах, каждый из которых рассматривается как отдельный пустой узел (из-за области видимости документа), и, таким образом, значение ваших данных было изменено, потому что один узел теперь может интерпретироваться как N
разные узлы.