【问题标题】:Sesame workbench querying an online data setSesame 工作台查询在线数据集
【发布时间】:2015-05-25 07:17:40
【问题描述】:

我有以下 sparql 查询:

PREFIX ab:<http://learningsparql.com/ns/addressbook#>
SELECT ?firstName ?lastName ?streetAddress ?city ?region ?postalCode

FROM <http://www.learningsparql.com/2ndeditionexamples/ex041.ttl>

WHERE
{
?s ab:firstName ?firstName;
ab:lastname ?lastName;
ab:address ?address.

?address ab:postalCode ?postalCode;
      ab:city ?city;
      ab:streetAddress ?streetAddress;
      ab:region ?region.
}

当我使用 Apache ARQ 运行此查询时,它可以正常工作。选定的变量(?firstName ?lastName 等)使用来自“FROM”子句旁边的指定 URI 的 ex041.ttl 中的数据进行填充。 当我从芝麻工作台运行此查询时,变量(?firstName ?lastName 等)为空,我不知道为什么。就像芝麻一样,它没有连接到远程 ex041.ttl 文件。 远程数据集 ex041.ttl 包含以下数据:

# filename: ex041.ttl

@prefix ab: <http://learningsparql.com/ns/addressbook#> .

ab:i0432 ab:firstName    "Richard" ;
         ab:lastName      "Mutt" ;
         ab:homeTel       "(229) 276-5135" ;
    ab:email         "richard49@hotmail.com" ;
    ab:address       _:b1 .

_:b1    ab:postalCode    "49345" ;
        ab:city          "Springfield" ;
        ab:streetAddress "32 Main St." ;
        ab:region        "Connecticut" .

您可以通过在浏览器中输入其 URI 来访问此文件。

【问题讨论】:

  • 抱歉,问题太模糊了...
  • 我已经改变了问题,希望现在更好
  • 很高兴尝试并提供帮助,但您需要在在问题本身中显示实际查询和正在执行它的数据集示例(链接到Youtube 视频真的不够好)。换句话说,您需要提供一个最小、完整和可验证的示例 (MCVE)。详情请查看how to write a good question
  • 更新了问题。我希望我这次做得很好
  • 好多了,谢谢。现在很清楚,您的问题是由于对 SPARQL 查询的工作原理存在基本误解。详情见我的回答。

标签: rdf sparql semantic-web sesame triplestore


【解决方案1】:

ARQ 工具​​误导您相信您的 SPARQL 查询中 FROM 子句的含义是引擎应该从该 URL 提供的文件中检索数据。这是SPARQL 的非标准行为,事实上大多数 SPARQL 引擎不会这样做(下文会详细介绍)。

Sesame Workbench 是 Sesame Server 的客户端应用程序。反过来,Sesame Server 是一个数据库管理器应用程序:它允许您通过 Web 创建和访问 Sesame RDF 数据库(也称为“存储库”)(它还将它们公开为 SPARQL 端点)。

要使用 SPARQL 从 Sesame Workbench 查询 RDF 数据,您需要满足以下条件之一:

  1. 您希望查询的 RDF 数据存储在 Sesame 服务器上的 Sesame 存储库中,或者;
  2. 您希望查询的 RDF 数据可通过某个远程 SPARQL 端点访问。

但是,您不能像这样直接查询可从 Web 上某处下载的 RDF 文件。

要使用 Sesame Workbench 查询此数据,您应该在服务器上创建一个存储库并将文件中的数据加载到此存储库中。然后,您可以通过 Workbench 在此存储库上执行查询。或者,如果 RDF 数据可以通过某个您知道其地址的现有 SPARQL 端点访问,您可以使用 SERVICE-clause 从 Workbench 查询它。

关于FROM 子句含义的更多背景知识:SPARQL 查询通常由 SPARQL 引擎评估。通常,任何 SPARQL 引擎都有一个特定的默认数据集,它会在该数据集上执行它接收到的查询(在 Sesame Workbench 的情况下,该数据集等于您在其上执行它的 Sesame 数据库的内容) .

FROMFROM NAMED 子句指示 SPARQL 引擎仅查询(默认)数据集的特定部分:这些子句中的值是所谓的 命名图的标识符 em>,本质上是整个数据集的子集。 Sesame 数据库是所谓的 quad stores,这意味着它们(可选地)在您添加的每个 RDF 语句中存储一个命名的图形标识符(这将标准 RDF 'triple' 转换为 'quad')。在 Sesame 这样的四元存储中,您可以使用 FROM 子句将您的查询限制在整个数据库的这样一个子集中。

因此,使用这些子句就像对查询应用“缩放过滤器”:您指示引擎仅查看所有可用数据的特定子集。但是,如果您查询的数据集中不知道该子集的标识符,您的查询将不会返回任何结果。

【讨论】:

  • 非常感谢您的回答。我现在一切都清楚了。
  • @whitefang1993 没问题。顺便说一句,与其在评论中感谢我,不如投票接受答案更有用。见what should I do when someone answers
  • 不能投票,因为我没有足够的声望点。这是我在stackoverflow上的第一篇文章,我是初学者。我接受了你的回答。
  • 我不知道您需要 10 个代表来对您自己问题的答案进行投票,所以我在这里学到了一些东西,谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2017-03-15
  • 2021-06-17
  • 2014-11-14
  • 1970-01-01
相关资源
最近更新 更多