如何实现Virtuoso中的Graphql与Python graphql-db-api的兼容

问题描述 投票:0回答:1

Open Link Virtuoso 最近添加了 GraphQL 视图,这促使我们再次尝试在 Apache Superset 中使用 Virtuoso 的数据。

为此目的,可以使用 Python lib

graphql-db-api
。它提供了与 SQLAlchemy 所需的集成,并且 Superset 与
graphql-db-api
示例中使用的 GraphQL 端点配合良好。

但是,尝试使用该库从 Virtuoso GraphQL 端点检索数据并没有给出积极的结果。

调查显示

graphql-db-api
期望在 GraphQL 模式中使用
NON_NULL
类型的显式顶级类型,但 Virtuoso 并未在自己的 GraphQL 模式中使用此类顶级类型。

例如,GraphQL 端点

graphql://pet-library.moonhighway.com
具有以下架构片段:

    {
        "data": {
            "__schema": {
                "queryType": {
                    "fields": [
                        {
                            "name": "allPets",
                            "type": {
                                "name": null,
                                "kind": "NON_NULL",
                                "ofType": {
                                    "name": null,
                                    "kind": "LIST",
                                    "ofType": {
                                        "kind": "NON_NULL",
                                        "name": null,
                                        "ofType": {
                                            "name": "Pet"
                                        }
                                    }
                                }
                            }
                        },

字段

allPets
有一个顶级类型 kind
NON_NULL
,只有在那之后,才会有 kind 类型
LIST

Virtuoso 托管的 GraphQL 端点返回以下架构:

{
    "data": {
        "__schema": {
            "queryType": {
                "fields": [
                    {
                        "name": "ConceptSchemes",
                        "type": {
                            "name": null,
                            "kind": "LIST",
                            "ofType": {
                                "name": "ConceptScheme",
                                "kind": "OBJECT",
                                "ofType": null
                            }
                        }
                    }

这里字段

ConceptSchemes
只有一种类型
LIST

是否可以在 Virtuoso 中使用

NON_NULL
类型的附加级别配置 GraphQL 视图?

sqlalchemy graphql virtuoso
1个回答
0
投票

看起来您正在通过 GraphQL 桥尝试 RDF 链接数据视图,并谈论 Python 应用程序/驱动程序使用的 GraphQL 内省查询结果。

因此,您正在按照

此处
的描述进行TTLP(GQL_CREATE_TYPE_SCHEMA ('rdf view generated schema graph IRI'))

上面的语句导入了一个 Turtle 文档,描述了 RDF 视图的内省图;因此它包含

Query
type
的语句, 像这样——

:Query :fields [ :name "Products" ; :type [ :kind "LIST" ; :ofType ns0:Products ] ] .

如果你想让

Products
列出
non-null
,你必须保存
GQL_CREATE_TYPE_SCHEMA()
的结果,例如通过
string_to_file()
函数,然后将Turtle文档中的上述语句修改为—

:Query :fields [ :name "Products" ; :type  [ :kind "NON_NULL"; :ofType  [  :kind "LIST" ; :ofType ns0:Products ] ] ] .

— 或者您可以像这样使用自己的 SDL —

type Product {
  ProductId: ID!
  ProductName: String!
  # etc.
}

type Query {
  Products: [Product!]!
}

—并通过

GQL_GENERATE_INTRO([sdl document])
为内省图制作一个 Turtle 文档。

一旦为这种特定类型的数组声明的三元组不可为空,您应该导入并注册到 Graphql 桥自省图中。

© www.soinside.com 2019 - 2024. All rights reserved.