GraphQL和SPARQL有什么区别?

Erw*_*sle 17 semantic-web artificial-intelligence ontology sparql graphql

我现在正在对语义Web和代表个人与组织之间关系的复杂数据模型进行大量研究.我知道一些语义本体,虽然如果不制作图表,我从未理解它的用途.

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

但最近我看到一家创建了语义本体的公司把它放在GraphQL的形式中,我不知道(https://diffuseur.datatourisme.gouv.fr/graphql/voyager/).

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

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

Sta*_*lin 19

上下文

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

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

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

问题

  • Datatourisme以RDF格式存储数据(可能使用Blazegraph triplestore)
  • Datatourisme通过GraphQL提供访问(不是SPARQL)

为何选择RDF

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

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

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

SPARQL

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

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

  • RDF自我描述和SPARQL标准消除了每天创建或学习新(shitty)API的需要.

GraphQL

  • 与SPARQL类似,GraphQL允许避免多个请求.
  • GraphQL允许包装不同类型的不同数据源,但通常它们是REST API.

    如您所见,可以包装SPARQL端点(也存在HyperGraphQL).

为何选择GraphQL

为什么Datatourisme更喜欢GraphQL?

  • GraphQL更接近他们集体使用的开发人员和技术.在过去,JSON-LD有相同的动机(但是,请参阅我在这里关于JSON-LD的说明).

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

数据是否仍然是语义的

  • 答案取决于语义的含义.有一种观点认为即使是关系模型也是相当语义的......

  • 我肯定地回答,如果有可能用GraphQL 提取例如对该属性的评论:rcs(并且答案似乎是否定的).

结论

回答你的直接问题:

  • 为了使用GraphQL,首先创建语义本体是不必要的(虽然可能);
  • 在创建语义本体之后,没有必要(尽管可能)使用GraphQL.

回答你的间接问题:

  • 可能你需要一个语义本体来构建这样的聊天机器人;
  • 可能你还需要别的东西.

另请参阅:Siri中的知识如何 - 是本体论还是其他什么?

更新

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

  • 感谢您令人印象深刻的回答斯坦尼斯拉夫,我的目标是帮助公民采取行动并参与他们城市的日常生活,这就是为什么我考虑建立一个本体来描述城市的生态系统(个人 - 组织),并为IHM,构建一个聊天机器人,一个人工智能。您有什么建议吗? (2认同)

Gil*_*Nys 6

很快,差异是:

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

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

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

  • 您好,感谢您的回答。那么,我应该更好地使用 sparql 或 graphql 来构建我的 AI 吗?为什么这家公司先做本体然后做graphql?他们是否使用本体来构建数据模型的逻辑,然后使用 graphql 来更快地查询它?谢谢你 (2认同)

Ena*_*yat 5

我从事语义Web已有多年。Graphql和Sparql是用于不同目的的不同语言。SPARQL是一种用于Triple存储,图形数据集和RDF节点的语言。Graphql是一种API语言,最好用于JSON结构。至于您的具体情况,我建议您阐明在应用程序中使用AI的目标。如果需要在应用程序中应用图形数据集,对数据集进行推理等更高级的知识发现,则可能需要使用语义Web方法将SPARQL应用于数据集顶部。如下图所示,语义Web通过本体设计和RDF大小化数据集展示了不同的层来执行知识发现,执行推理。

在此处输入图片说明

看到这里阅读更多。如果您的AI应用程序没有这样的要求,并且您可以使用基于JSON的数据库来完成数据分析,那么Graphql可能是创建您的API的一个不错的选择,因为如今它已被不同的Web和移动应用程序广泛使用。特别是,它用于通过不同的平台和微服务共享您的数据。有关更多信息,请参见此处。 在此处输入图片说明

希望能帮助到你!

  • @jaco0646 是的,可能是。该图取自第一个SW架构。有时,更多的数据表示会被添加到架构中。 (3认同)

Ivo*_*kov 5

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

  • @ivo-velitchkov :一个 sparql [CONSTRUCT](https://www.w3.org/TR/rdf-sparql-query/#construct) 请求在输出中生成一个图形 (9认同)