GraphQL 和 SPARQL 有什么区别?

What is the difference between GraphQL and SPARQL?

我现在正在对语义 Web 和代表个人与组织之间关系的复杂数据模型进行大量研究。 我知道一点语义本体,但如果不做图,我一直不知道它的用途。

我在大学维基上看到,质疑 ontology 的语言是 SPARQL(如果我错了请告诉我)。

不过最近看到一家公司搞了个语义ontology 把我不知道的GraphQL 形式(https://diffuseur.datatourisme.gouv.fr/graphql/voyager/).

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

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

很快,区别是:

  • SPARQL(SPARQL Protocol and RDF Query Language)是一种专用于查询RDF图数据库(CRUD等)的语言。它是语义 Web 工具中的一个标准,由 W3C Recommendation 提供。

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

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

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

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

上下文

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

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

API 文档可在此处获得(法语):

问题

  • Datatourisme 以 RDF 格式存储数据(大概使用 Blazegraph 三层存储)
  • Datatourisme 通过 GraphQL(而非 SPARQL)提供访问

为什么是 RDF

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

    Tourism national ontology structuring in a common sharing format the whole tourism data extracted from different official French data bases: entertainment and events, natural and cultural sites, leisure and sports activities, touristic products, tours, accomodations, shops, restaurants.

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

SPARQL

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

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

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

GraphQL

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

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

    如你所见,是possible to wrap a SPARQL endpoint (there also exists HyperGraphQL).

为什么选择 GraphQL

为什么 Datatourisme 更喜欢 GraphQL?

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

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

数据是否仍然语义化

  • 答案取决于你所说的语义是什么意思。有人 an opinion 甚至关系模型也很语义化...

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

结论

回答您的直接问题:

  • 没有必要(尽管可能)先创建语义 ontology 才能使用 GraphQL;
  • 创建语义后没有必要(尽管可能)使用 GraphQL ontology。

回答你的间接问题:

  • 可能您需要语义 ontology 才能构建 聊天机器人;
  • 可能您还需要其他东西。

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

更新

除了HyperGraphQL,还有其他有趣的收敛项目:

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