【问题标题】:Resolve prefix programmatically, Jena以编程方式解析前缀,耶拿
【发布时间】:2011-04-18 04:39:53
【问题描述】:

我必须通过包含指向 dbpedia.org 的 URI 链接的 xml 进行解析。我必须使用 Jena 库根据给定的本体从这些 URI 中提取 rdf 三元组。如何根据给定的本体在 Java 中以编程方式解析前缀。

给定的本体说可以通过查询 dbpedia.org 来提取三元组。对于所有这样的三元组,相应的 dbpedia 资源可用于开始编写查询。但问题是我如何编写只有可用资源的查询。我有要查询的属性。但我没有这些属性的前缀

【问题讨论】:

    标签: ontology jena


    【解决方案1】:

    虽然这可能无法直接回答问题,但我有一大堆 URI,有些前缀有些没有,我希望它们都没有前缀(即完整地写出它们的前缀)。在 Google 搜索时,我遇到的最有用的东西是这个问题(首先)和 JavaDoc,所以我想我会将我的经验添加到这个问题中,以帮助其他可能正在搜索相同内容的人。

    Jena 的 PrefixMap 接口(由 Model 实现)具有 expandPrefixqnameFor 方法。 expandPrefix 方法对我有帮助(qnameFor 正好相反,即它将 PrefixMap 中的前缀应用于字符串,如果找不到这样的映射,则返回 null)。

    因此对于任何资源,为了确保您拥有完全扩展的 URI,您可以这样做

    myRes.getModel().expandPrefix(myRes.getURI());
    

    希望这对某人有所帮助。

    【讨论】:

    • qnameFor 的替代品是shortForm,它本质上做同样的事情,但如果没有找到映射则返回原始值。
    • 在对shortForm 进行了一些测试之后,它似乎使用了第一个可用的前缀,即使该命名空间只是作为实际 URI“片段”前缀的部分匹配。
    【解决方案2】:

    您的问题不是很清楚,因此如果此答案不能解决您的问题,请编辑您的问题以更清楚地说明您的问题是什么。但是,根据您的要求,一旦您以 XML 或任何其他编码将 RDF 文件读入 Jena 模型,使用的前缀可通过接口com.hp.hpl.jena.shared.PrefixMapping 中的方法获得(请参阅javadoc) . Model 对象实现了该接口。自动扩展前缀"foo",使用方法getNsPrefixURI()

    编辑

    好的,鉴于您修改后的问题,您可以做很多事情来将简单的属性名称转换为可以在 SPARQL 查询中使用的属性 URI:

      1234563可能的扩展之一是http://dbpedia.org/ontology/elevation
    • 在资源 URI 上发出 SPARQL describe query 以查看 RDF 描述中返回了哪些属性,然后将这些属性与您获得的不带前缀的属性名称进行匹配

    • 请您的数据提供者为您提供完整的属性名称,或以其他方式提供前缀扩展,以使您不必对他或她最初所指的属性进行逆向工程。

    如果可能的话,我个人会提倡第三种选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      相关资源
      最近更新 更多