我有以下代码列出本体的个人:
public static void main(String[] args) {
OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
String fileName = "C:/Users/Ikno/Desktop/workspace/Jena/ontrdf.rdf";
try {
InputStream inputStream = new FileInputStream(fileName);
model.read(inputStream, "RDF/XML");
//model.read(inputStream, "OWL/XML");
inputStream.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
ExtendedIterator<Individual> itI = model.listIndividuals();
while (itI.hasNext()) {
Individual i = itI.next();
System.out.println(i.getLocalName());
}
}
代码没问题,它返回所有单独的本地名称。问题是我在Protégé中创建了 OWL 本体,将它转换为RDF是一个浪费的步骤,只是由Jena操作。如果我取消注释model.read(inputStream, "OWL/XML");
,则会出现以下错误:
class org.apache.jena.riot.RiotException
[line: 266, col: 31] {E201} Multiple children of property element
Jena不能用 OWL 格式支持这种操作吗?
答案 0 :(得分:3)
作为一个选项,您可以使用ONT-API,它是OWL-API和Apache Jena之间的桥梁。因此,它支持所有jena和owl-api格式(OWL / XML是OWL-API的原始格式和仅仅是protege),但是(注意)没有自己的实现。
答案 1 :(得分:2)
根据Jena文档here如果你看一下read方法,很明显Jena不支持OWL / XML。 lang的预定义值(读取方法的第二个Arg)是&#34; RDF / XML&#34;,&#34; N-TRIPLE&#34;,&#34; TURTLE&#34; (或&#34; TTL&#34;)和&#34; N3&#34;。 null表示默认语言,&#34; RDF / XML&#34;。 &#34; RDF / XML的缩写&#34;是&#34; RDF / XML&#34;的同义词。因此,在您的情况下,我将本体保存为RDF / XML,然后使用Jena读取它。