【问题标题】:Sparql Query Results without Namespace没有命名空间的 Sparql 查询结果
【发布时间】:2012-06-29 08:48:20
【问题描述】:

我想从 sparql 查询中获取结果,结果不包含命名空间。 例如:有三重格式的结果,如:

"http://www.xyz.com#Raxit"  "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"  "http://www.xyz.com#Name"

所以我只想得到以下内容:

Raxit type Name

我想直接从 sparql 查询中得到这个结果。我正在使用 virtuoso。

是否可以从 sparql 获得这个?

请分享您对此的看法。

提前致谢。

【问题讨论】:

    标签: sparql semantic-web jena virtuoso


    【解决方案1】:

    如果您的数据是常规的,并且您知道您想要的子字符串总是出现在 # 字符之后,那么您可以使用 SPARQL 1.1 中的 strafter 函数。我不知道这在 Virtuoso 的实现中是否可用。

    然而一般来说,这是一个非常冒险的策略。并非所有 URI 都在 # 字符后使用本地名称部分进行格式化。事实上,一般来说,URI 可能根本没有合法或有用的本地名称。所以你应该问自己:为什么你认为你需要这个?一般来说,语义 Web 应用程序使用整个 URI 作为不可分割的标识符。如果您实际上需要在 UI 中显示人性化的内容,请让您的查询同时查找 rdfs:labelskos:label 属性。最坏的情况,尝试将 URI 缩写为 q-name 形式(即prefix:name),使用模型中的前缀或prefix.cc之类的服务

    【讨论】:

    • 是的,我需要这个。我想向用户显示数据,我不想在 java 中使用 split 或 indexof 函数。这就是为什么我想直接从 sparql 查询中获取。
    • 我觉得有这么少的工具有这个选项有点难以置信。我猜使用 rdf 的人很少使用文本格式? Apache Jena 的 arq 输出默认是前缀而不是完整的 uris
    【解决方案2】:

    实现这一点的最简单方法是不要费心调整您的查询,而只需自己对结果进行后处理。根据您用于与 Virtuoso 通信的客户端库,您通常会发现它具有 API 支持来解析结果、获取值,然后为每个值获取本地名称(我建议您寻找 URI.getLocalName() 方法或类似的东西)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      相关资源
      最近更新 更多