我打算以 RDF 格式编写和存储大量数据。我将使用 SIOC、GEO 和 dcterms。在 Jena 中,有没有办法从加载的本体中导入命名空间,而不是执行以下操作:
model.setNsPrefix("sioc","http://sioc.com/ontologies/sioc#");
Property ID = model.createProperty("http://sioc.com/ontologies/sioc#" + "ID");
我打算以 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 的资源。它非常可配置,我已经在许多项目中使用过。
如果您使用的是 maven,则可以使用以下插件。
<plugins>
<plugin>
<groupId>org.apache.jena</groupId>
<artifactId>jena-maven-tools</artifactId>
<version>0.8</version>
<configuration>
<includes>
<include>src/main/resources/ontologies/*.owl</include>
<include>src/main/resources/ontologies/*.rdf</include>
</includes>
<fileOptions>
<source>
<input>default</input>
<package-name>com.example.ontology</package-name>
</source>
<source>
<input>src/main/resources/ontologies/*.owl</input>
<include>src/main/resources/ontologies/*.rdf</include>
<ontology>true</ontology>
</source>
</fileOptions>
</configuration>
<executions>
<execution>
<id>schemagen</id>
<goals>
<goal>translate</goal>
</goals>
</execution>
</executions>
</plugin>
当您运行 maven compile 时,您会发现 OWL/RDF 文件中的所有资源和属性都转换为具有 OWL/RDF 文件名的相应类中的常量。因此,您可以在代码中使用类似 OWLFILENAME.RESOURCE 或 OWLFILENAME.PROPERTY 的方式调用它们。