我有两个 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
我喜欢Ian Dickinson 的回答,如果我只需要这样做一次,我会使用 Jena 的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 );
}
}
}