我计划以 RDF 格式编写和存储大量数据。我将使用 SIOC、GEO 和 dcterms。在 Jena 中,有没有办法从加载的本体中导入命名空间,而不是执行以下操作:
model.setNsPrefix("sioc","http://sioc.com/ontologies/sioc#");
Property ID = model.createProperty("http://sioc.com/ontologies/sioc#" + "ID");
最佳答案
好吧,您可以使用基于字符串的方法,但我强烈建议您使用以下方法:
String SIOC = "http://sioc.com/ontologies/sioc#";
model.setNsPrefix("sioc",SIOC );
Property ID = model.createProperty( SIOC + "ID" );
以节省一些打字和可能的错别字。对于许多常见词汇,Jena 已经预定义了词汇类,这些类定义了一堆有用的常量。其中大部分位于 com.hp.hpl.jena.vocabulary 包中。例如,在
DCTerms
中有诸如 creator
之类的常量,因此您可以执行以下操作Resource r = ...;
r.addProperty( DCTerms.creator, ... );
当然,Jena 只能预定义这么多类。对于其他人,您可以使用 Jena 的 schemagen 来生成这些类。它是一个命令行工具(但我相信您也可以通过编程方式调用它),并将定义词汇表的 RDF 或 OWL 文件传递给它,然后您会得到一个
.java
文件,该文件为所有属性、类和个体的常量在词汇中。您也可以获得简单的基于模型的资源,或基于 OntModel 的资源。它的可配置性很强,我已经在许多项目中使用过。关于rdf - 通过从 jena 中加载的本体导入 namespace 来编写 RDF?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18145663/