通过 REST HTTP 使用 SPARQL 查询命名图

Query Named Graph with SPARQL over REST HTTP

我能够通过 HTTP REST 成功填充 Named Graph,如下所示 https://docs.aws.amazon.com/neptune/latest/userguide/load-api-reference-load.html

curl -d "@data.json" -H "Content-Type: application/json" -X POST https://co-neptune-db-cluster-myname.cluster-xxxxxxxxxx.us-east-1.neptune.amazonaws.com:8182/loader

其中 data.json 文件是:

{
  "source": "s3://my-bucket-name/dir/",
  "format": "csv",
  "iamRoleArn": "arn:aws:iam::xxxxxxxxxx:role/co-neptune-to-s3-access-role-dev-myname",
  "mode": "AUTO",
  "region": "us-east-1",
  "failOnError": "FALSE",
  "parallelism": "OVERSUBSCRIBE",
  "parserConfiguration": {
    "baseUri": "http://aws.amazon.com/neptune/default",
    "namedGraphUri": "http://aws.amazon.com/account-123456789012-temp"
  },
  "updateSingleCardinalityProperties": "FALSE"
}

所以我希望我的数据存储在名为 http://aws.amazon.com/account-123456789012-temp 的图表中,内容来自源 S3 存储桶 s3://my-bucket-name/dir/

我可以在使用 HTTP RESTGremlin 查询时看到这些数据,如此处所述 https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-rest.html

curl -X POST -d '{"gremlin":"g.V().limit(10)"}' https://co-neptune-db-cluster-myname.cluster-xxxxxxxxxx.us-east-1.neptune.amazonaws.com:8182?gremlin

但是在使用 SPARQL 查询时 https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-sparql-http-rest.html 在我的 Neptune 中看不到任何数据:

$ curl -X POST --data-binary 'query=select ?s ?p ?o where {?s ?p ?o} limit 10' https://co-neptune-db-cluster-myname.cluster-xxxxxxxxxx.us-east-1.neptune.amazonaws.com:8182/sparql

如何使用 SPARQL 查询相同的数据?考虑到我会有不同的命名图,因此需要在我的请求中设置特定图的名称。

目前,Neptune 不支持 属性 Graph 和 RDF 之间的互操作性。在将数据加载到集群之前,您需要选择要使用的框架。如果通过 CSV 加载数据,它只能在 属性 图形模型中使用(使用 Gremlin 查询它)。如果使用其中一种 RDF 文件格式(turtle、rdfxml、ntriples 或 nquads)加载数据,则只能通过 SPARQL 查询它。

Neptune 确实支持在同一个集群中存储两个模型的数据,但是您需要有效地加载数据的两个副本(一个在 属性 Graph 中,另一个在 RDF 中)。

此外,只有在批量加载其中一种 RDF 文件格式时才支持批量加载程序的 parserConfiguration 参数。它对加载 属性 图表 (CSV) 数据没有影响。

提供了一个实用程序,可将 属性 Graph CSV 文件转换为 RDF nquads 文件 [1]。

[1] https://github.com/aws/amazon-neptune-csv-to-rdf-converter