【问题标题】:Using a compact URI in Jena在 Jena 中使用紧凑的 URI
【发布时间】:2015-02-23 17:21:51
【问题描述】:

我正在使用 Jena 来读取本体,到目前为止它运行良好。不幸的是,我无法弄清楚如何使用我在模型中定义的紧凑 uri。我已经使用模型的 setNSPrefix(String prefix, String uri) 方法定义了前缀。当我尝试使用前缀检索语句时,我什么也得不到。此外,当我成功检索语句时,它包含完整的 uri,而不是我定义的紧凑 uri。它甚至可以为 xsd uri http://www.w3.org/2001/XMLSchema#

例如,我使用的是 uri http://www.example.com#,我将前缀映射定义为 ex,我的 Statement 是 http://www.example.com#father http://www.example.com#parentOf http://www.example.com#child,其中父亲是主语,parentOf 是谓词,child 是目的。如果我尝试使用ex:father 检索它,我不会得到任何结果,并且当我返回 Statement 时,主语、谓词和宾语的完整 uri 就在那里。当我执行model.write(OutputStream) 时,我已经看到它使用前缀而不是uri,但这对我来说并不是特别有用。我是否可以像我一直在尝试做的那样使用前缀代替 uri,或者这不是 Jena 会为我提供的东西吗?

【问题讨论】:

    标签: java jena n-triples


    【解决方案1】:

    当我尝试使用前缀检索语句时,我什么也得不到。

    你不能这样做,例如,

    model.getResource("ex:foo")`
    

    你必须这样做

    model.getResource("http://example.org/foo");
    

    当然,您可以通过

    来简化它
    String EX = "http://example.org/";
    model.getResource(EX+"foo");
    

    前缀实际上只是为了使序列化更好地读写。

    【讨论】:

    • 所以当我得到一个基于资源的语句时,有没有办法显示前缀而不是完整的 uri,或者是在类似的情况下?例如,当我真的想要ex:child 时,statement.getObject() 将返回http://www.example.com#child
    • 没有通用的方法可以做到这一点。例如,如果模型中定义了两个前缀:“ex:example.com#”和“ex2:ex:example.com#chi”怎么办?你想要 ex:child 还是 ex2:ld?如果没有前缀怎么办?如果它是不可缩写的 IRI 怎么办?如果你想要这样的东西,你将不得不自己动手检查给定的 IRI 是否可以用模型中声明的任何前缀来缩写。
    • 好吧,这就是我想我必须做的。我的想法是从模型中获取前缀映射,使用它来查看 uri 是否有前缀,然后将其写为该前缀而不是完整的 uri。
    • "如果 uri 有前缀" 它也可以有多个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2010-12-19
    • 2019-02-14
    • 1970-01-01
    • 2011-02-12
    • 2017-07-03
    相关资源
    最近更新 更多