【问题标题】:What is the difference between GraphQL and SPARQL?GraphQL 和 SPARQL 有什么区别?
【发布时间】:2018-10-08 08:18:58
【问题描述】:

我现在正在对语义 Web 和代表个人与组织之间关系的复杂数据模型进行大量研究。 我知道一点语义本体,但如果不制作图形,我永远不明白它是用来做什么的。

我在大学 wiki 上看到质疑本体的语言是 SPARQL(如果我错了请告诉我)。

但最近我看到一家公司创建了一个语义本体,将其以我不知道的 GraphQL 形式 (https://diffuseur.datatourisme.gouv.fr/graphql/voyager/)。

在我看来,语义本体是为了更好地查找信息,例如制作一个聊天机器人(这是我想做的),但在这里他们将语义本体转换为 API,对吗?做一个 GraphQL,我应该先构建一个语义本体吗?

你能向我解释一下这一切之间的区别吗,老实说这对我来说有点模糊。

【问题讨论】:

标签: graphql sparql rdf semantic-web ontology


【解决方案1】:

上下文

Datatourisme 是一个平台,允许发布(通过Producteur 组件)和消费(通过Diffuseur 组件)POI 相关的开放数据。

您似乎已在GraphQL Voyager 的帮助下链接到通过Diffuseur 开发的特定应用程序。该应用程序展示了 Diffuseur 公开的 GraphQL API 的功能。

此处提供 API 文档(法语):

问题

  • Datatourisme 以 RDF 格式存储数据(可能使用 Blazegraph 三重商店)
  • Datatourisme 通过 GraphQL(不是 SPARQL)提供访问权限

为什么选择 RDF

  • 部分由于一些“无模式”,RDF 在异构数据集成任务中很方便:

    旅游国家本体以通用共享格式构建从不同官方法国数据库中提取的整个旅游数据:娱乐和活动、自然和文化景点、休闲和体育活动、旅游产品、旅游、住宿、商店、餐馆。

  • RDF 是语义的:特别是,RDF 是自描述的。

SPARQL

  • SPARQL 是用于 RDF 查询的 W3C 标准语言。还提出了其他 RDF 查询语言。

    顺便说一句,可以使用 SPARQL 查询非 RDF 源,例如。 G。定义 R2RML 映射。

  • RDF 的自描述性和 SPARQL 标准性消除了每天创建或学习新的(糟糕的)API 的需要。

GraphQL

  • 与 SPARQL 类似,GraphQL 允许避免多个请求。

  • GraphQL 允许包装不同类型的不同数据源,但通常它们是 REST API。

    如您所见,包装一个 SPARQL 端点是 possible(也存在 HyperGraphQL)。

为什么选择 GraphQL

为什么 Datatourisme 偏爱 GraphQL?

  • GraphQL 更接近于他们大量使用的开发人员和技术。过去,JSON-LD 也有同样的动机(不过,请参阅我关于 JSON-LD 的注释here)。

  • 看起来,Diffuseur 的 GraphQL 层提供 API 密钥支持并防止过于复杂的 SPARQL 查询。

数据仍然是语义的吗

  • 答案取决于您所说的语义。有an opinion,即使是关系模型也很有语义......

  • 如果可以提取 e,我会肯定回答。 G。使用 GraphQL 将 comment 转换为 :rcs 属性(答案似乎是否定的)。

结论

回答您的直接问题:

  • 没有必要(尽管可能)首先创建语义本体来使用 GraphQL;
  • 在创建语义本体之后没有必要(尽管可能)使用 GraphQL。

回答你的间接问题:

  • 可能你需要一个语义本体来构建such聊天机器人;
  • 可能您还需要其他东西。

另见:How is the knowledge represented in Siri – is it an ontology or something else?

更新

除了 HyperGraphQL,还有其他有趣的融合项目:

【讨论】:

  • 感谢 Stanislav 令人印象深刻的回答,我的目标是帮助市民行动并参与到他们城市的日常生活中,这就是为什么我想建立一个本体来描述城市的生态系统(个人 - 组织),并为 IHM 构建一个聊天机器人,一个人工智能。你有什么建议吗?
  • @ErwanPesle,不幸的是,我不熟悉这个主题......我希望 T. Gruber 的采访会有所帮助。
  • 请将链接更新为hypergraphql.org。 Stackoverflow 不允许我编辑少于 6 个字符。
【解决方案2】:

GraphQLSPARQL 是用于不同目的的不同语言。 SPARQL 是一种可用于三重存储、图形数据集和 RDF 节点的语言。 GraphQL 是一种 API 语言,最好用于处理 JSON 结构。至于您的具体情况,我建议澄清您在应用程序中使用 AI 的目标。如果您需要在应用程序中应用图形数据集,执行更高级的知识发现,例如对数据集进行推理,那么您可能需要语义 Web 方法在数据集之上应用 SPARQL。如下图所示,语义网通过本体设计和 RDF 化数据集呈现不同的层来执行知识发现、执行推理。

请参阅here 了解更多信息。 如果您的 AI 应用程序没有此类要求,并且您可以使用基于 JSON 的数据库完成数据分析,那么 GraphQL 可能是创建 API 的不错选择,因为它现在被不同的 Web 和移动应用程序广泛使用。特别是,它用于通过不同的平台和微服务共享您的数据。请参阅here 了解更多信息。

【讨论】:

  • 谢谢,对于聊天机器人,您会使用哪种技术?
  • 在第一张图中,为什么 RDF 位于 XML 之上?这是否表明 RDF 在某些方面需要 XML,没有它就无法使用?
  • @ErwanPesle 我在不同的项目中使用这两种技术。我主要使用语义网进行深入研究。例如,当我想通过图形数据库回答复杂的查询时。另一方面,我在一家公司使用 graphql 在关系数据库之上构建 API,而不是使用 REST API。
  • @jaco0646 XML 主要是一种序列化格式,而 RDF 主要是一种数据模型。换句话说,我们用 XML 格式表示数据,而 RDF 是更高层次和数据结构的一般方面(例如,每个对象都可以定义为 SUBJECT、OBJECT 和 PREDICATE)。所以 RDF 三元组可以用不同的格式来表示,比如turtle, XML, .... 希望我能解释清楚!在这里阅读cambridgesemantics.com/blog/semantic-university/learn-rdf/…
  • @jaco0646 是的,可以。图片取自第一个 SW 架构。不时地,更多的数据表示被添加到架构中。
【解决方案3】:

很快,区别是:

  • SPARQL(SPARQL 协议和 RDF 查询语言)是一种专用于查询 RDF 图数据库(CRUD 等)的语言。它是语义 Web 工具中的一个标准,由 W3C 推荐标准提供。

  • GraphQL 是一种由 Facebook 创建的语言,它非常类似于 JSON 以与 API 进行通信。它是客户端和服务器端点之间的通信工具。请求自己定义了答案的结构。它的使用不仅限于 SQL 或 NoSQL 或 ... 对于 RDF,“Graph”并不意味着“由三元组组成的结构”。

这是针对不同应用程序的两种不同语言。

【讨论】:

  • 您好,感谢您的回答。那么,我应该更好地使用 sparql 或 graphql 来构建我的 AI 吗?为什么这家公司做一个本体然后一个graphql?他们是否使用本体来构建数据模型的逻辑,然后使用 graphql 来更快地查询它?谢谢
【解决方案4】:

一个非常重要的区别(我在之前的答案中没有看到)是,虽然 SPARQL 通常是更强大的查询语言,但它只产生表格输出,而 GraphQL 提供树结构,这在某些情况下很重要实施案例。

【讨论】:

  • 感谢@Ivo 提到它,here'is 一个我需要获得树结构的实现案例,我希望在尝试使用 Sparql 之前知道这一点。
  • @ivo-velitchkov : sparql CONSTRUCT 请求在输出中生成图形
猜你喜欢
  • 2015-11-10
  • 2021-04-25
  • 2021-06-24
  • 2020-05-28
  • 2021-08-07
  • 2020-02-23
  • 2021-03-24
  • 2017-11-26
  • 2018-11-20
相关资源
最近更新 更多