У меня есть два документа RDF:
Я хотел бы объединить их в один файл, например, purl_foaf.rdf
. Я работаю на Java; как я могу сделать это с Йеной?
У меня есть два документа RDF:
Я хотел бы объединить их в один файл, например, purl_foaf.rdf
. Я работаю на Java; как я могу сделать это с Йеной?
Для этого в Jena есть встроенная утилита командной строки: rdfcat. Итак, чтобы объединить эти два RDF-файла и записать результаты как Turtle в файл purl_foaf.rdf
, выполните следующие действия в командной строке. Он должен быть на одной строке, но я разделил его для удобства чтения:
rdfcat -out Turtle "http://dublincore.org/2012/06/14/dcterms.rdf" \
"http://xmlns.com/foaf/spec/index.rdf" > purl_foaf.rdf
Мне нравится ответ Яна Дикинсона, и если бы мне нужно было сделать это только один раз, я бы использовал rdfcat
Джены. Вы упомянули, что вам нужно сделать это на Java, поэтому, возможно, инструмент командной строки не подходит. Это по-прежнему довольно легко сделать с помощью Jena API. Если у вас есть только две модели, вы можете создать UnionModel из двух или, если у вас их больше (возможно, две в вопросе — это просто сокращенный случай, и вам действительно нужно обрабатывать больше), вы можете просто создать новую модель для хранения всех троек и добавления троек из двух моделей к новой. Вот код, который показывает каждый подход:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
public class ManualRDFCat {
public static void main(String[] args) throws FileNotFoundException, IOException {
final Model dcterms = ModelFactory.createDefaultModel().read( "http://dublincore.org/2012/06/14/dcterms.rdf" );
final Model foafIndex = ModelFactory.createDefaultModel().read( "http://xmlns.com/foaf/spec/index.rdf" );
// If you only have two models, you can use Union model.
final Model union = ModelFactory.createUnion( dcterms, foafIndex );
try ( final OutputStream out1 = new FileOutputStream( new File( "/tmp/purl_foaf1.rdf" )) ) {
union.write( out1, "Turtle", null );
}
// In general, though, it's probably better to just create a new model to
// hold all the triples, and to add the triples to that model.
final Model blob = ModelFactory.createDefaultModel();
for ( final Model part : new Model[] { dcterms, foafIndex } ) {
blob.add( part );
}
try ( final OutputStream out2 = new FileOutputStream( new File( "/tmp/purl_foaf2.rdf" )) ) {
blob.write( out2, "RDF/XML-ABBREV", null );
}
}
}
На всякий случай, если вы искали rdfcat
, как я, rdfcat
устарел. Если у вас установлены инструменты командной строки Jena, вам просто нужно использовать riot
. Параметры также изменились, полный список параметров находится здесь. Базовое слияние из командной строки:
riot --time --output=RDF/JSON city.rdf company.ttl country.rdf > output.js