我打算以RDF格式编写和存储大量数据。我将使用SIOC,GEO和dcterms。在Jena中,有没有办法从加载的本体导入名称空间而不是执行以下操作:
model.setNsPrefix("sioc","http://sioc.com/ontologies/sioc#");
Property ID = model.createProperty("http://sioc.com/ontologies/sioc#" + "ID");
答案 0 :(得分:2)
嗯,您可以使用基于字符串的方法,但我强烈建议使用以下内容:
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的schemagen来生成这些类。它是一个命令行工具(但你也可以通过编程方式调用它,我相信),并将它传递给定义词汇表的RDF或OWL文件,然后你得到一个.java
文件,返回所有属性的常量常量,课程和词汇中的个人。您也可以获得简单的基于模型的资源或基于OntModel的资源。它是可配置的,我已经在许多项目中使用过。
答案 1 :(得分:0)
如果您使用的是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编译时,你会发现OWL / RDF文件中的所有资源和属性都被转换为具有OWL / RDF文件名的相应类中的常量。所以,您可以使用类似OWLFILENAME.RESOURCE或OWLFILENAME.PROPERTY的代码在代码中调用它们。