首页 > 解决方案 > 如何使用 Jena 将远程词汇表/命名空间包含到 OntModel?

问题描述

我是语义网和耶拿的新手。

我想从 Jena 中的 OntModel 生成一个本体,我需要使用预定义的词汇表和本体来表征我的类和属性。

在 Jena 中,有 RDF、FOAF 等默认本体......所以我们可以指定类并将属性添加到资源,如:

ontClass.setSameAs(FOAF.Person);
ontClass.addProperty(FOAF.name, "name");

或者

ontProperty.setRange(XSD.xstring);

但是如何将我的ontClass引用到 Jena 中不存在的另一个词汇/本体(GeoSparql、Geofla、我自己定义的词汇等)?知道我可以获得这些词汇表的 URI 吗?

这个问题已经在这个主题中提出:如何在耶拿添加词汇?这建议使用 Jena Schemagen,但我不知道该怎么做。

非常感谢您的帮助!

标签: namespacesjenaontologysemantic-web

解决方案


我想其中一种选择是导入(或阅读)这些词汇/本体,以便您可以使用 Jena Ontology API 使用它们。

例如(如果我们假设您的 ontModel 名为m),您可以将OWL-Time本体读入您的模型,如下所示:

m.read("http://www.w3.org/2006/time")

然后您可以使用 Jena 的编程 API 定义的元素:

OntClass instant = dataModel.getOntClass("http://www.w3.org/2006/time#Instant");

如果您不想阅读模型中的整个本体,您也可以使用其 URI “创建”必要的资源/属性:

Property inXSDDateTime = m.createDatatypeProperty(
    "http://www.w3.org/2006/time#inXSDDateTime");
Resource resource = m.createResource("someURIForThisRessource");
Statement s = m.createStatement(
    resource, inXSDDateTime, m.createTypedLiteral(someValue));
m.add(s);

它应该按预期写入结果(但是,通过这样做,您没有加载您所引用的本体的公理,因此您将无法推理它 - 但根据您的评论,我在想也许那正是你想要的)


推荐阅读