Open Link Virtuoso 最近添加了 GraphQL 视图,这促使我们再次尝试在 Apache Superset 中使用 Virtuoso 的数据。
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 视图?
看起来您正在通过 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 桥自省图中。