我必须通过包含指向 dbpedia.org 的 URI 链接的 xml 进行解析。我必须使用 Jena 库根据给定的本体从这些 URI 中提取 rdf 三元组。如何根据给定的本体在 Java 中以编程方式解析前缀。
给定的本体说可以通过查询 dbpedia.org 来提取三元组。对于所有这样的三元组,相应的 dbpedia 资源可用于开始编写查询。但问题是我如何编写只有可用资源的查询。我有要查询的属性。但我没有这些属性的前缀
虽然这可能不能直接回答这个问题,但我有一大堆 URI,有些前缀有些没有,我希望它们都没有前缀(即完整地写出它们的前缀)。在谷歌搜索我遇到的最有用的事情是这个问题(首先)和 JavaDoc,所以我想我会将我的经验添加到这个问题中,以帮助其他可能正在搜索相同内容的人。
Jena 的 PrefixMap 接口(Model 实现)有expandPrefix
和qnameFor
方法。该expandPrefix
方法是帮助我的方法(qnameFor
相反,即它将前缀从 PrefixMap 应用到字符串,如果找不到这样的映射,则返回 null)。
因此,对于任何资源,为了确保您拥有完全扩展的 URI,您可以执行
myRes.getModel().expandPrefix(myRes.getURI());
希望这可以帮助某人。
您的问题不是很清楚,因此如果此答案不能解决您的问题,请编辑您的问题以更清楚地说明您的问题是什么。但是,根据您的要求,一旦您将 RDF 文件以 XML 或任何其他编码方式读入 Jena 模型,所使用的前缀可通过接口中的方法获得com.hp.hpl.jena.shared.PrefixMapping
(请参阅javadoc)。一个Model
对象实现该接口。要自动扩展前缀"foo"
,请使用 方法getNsPrefixURI()
。
编辑
好的,鉴于您修改后的问题,您可以做很多事情来将简单的属性名称转换为可以在 SPARQL 查询中使用的属性 URI:
使用prefix.cc服务来查看前缀和前缀名称的可能扩展(例如,如果你被给定了dbpedia:elevation
,你可以在 prefix.cc 上查找它(即:http ://prefix.cc/dbpedia:elevation )以查看可能的扩展之一是http://dbpedia.org/ontology/elevation
对资源 URI发出SPARQL 描述查询以查看 RDF 描述中返回了哪些属性,然后将这些属性与您获得的不带前缀的属性名称进行匹配
要求您的数据提供者为您提供完整的属性名称,或以其他方式提供前缀扩展,以使您不必对他或她最初所指的属性进行逆向工程。
如果可能的话,我个人会提倡第三种选择。