我将数据库解析为 RDFlib 图。我现在想将该图中的三元组插入到 GraphDB 三元组存储中。当我在 Sesame 上托管的旧版本 GraphDB-Lite 上执行该代码时,该代码运行良好。但是,在现在独立的 GraphDB 7.0.0 上执行相同的查询时出现错误。在引发错误之前,该图已被部分解析,并且插入的三元组确实显示在三元组存储中。
这是代码的一部分:
graphdb_url = 'http://my.ip.address.here:7200/repositories/Test3/statements'
##Insert into Sesame
for s,p,o in graph1:
pprint.pprint ((s,p,o))
queryStringUpload = 'INSERT DATA {%s %s %s}' %(s,p,o)
# queryStringUpload = 'DELETE WHERE {?s ?p ?o .}'
# print queryStringUpload
sparql = SPARQLWrapper(graphdb_url)
sparql.method = 'POST'
sparql.setQuery(queryStringUpload)
sparql.query()
Run Code Online (Sandbox Code Playgroud)
以下是错误:
ARQLWrapper.SPARQLExceptions.QueryBadFormed: QueryBadFormed: a bad request has been sent to the endpoint, probably the sparql query is bad formed.
Response:
MALFORMED QUERY: Lexical error at line 1, …Run Code Online (Sandbox Code Playgroud) 我正在使用 GraphDB Free,并且正在尝试使用 sparql 将一些三元组插入到商店中。查询看起来像一个简单的 INSERT:
//Some Prefixes
INSERT DATA { subject predicate object }
Run Code Online (Sandbox Code Playgroud)
我使用 Postman 将请求正文中的查询 POST 到 SPARQL 端点,并使用 dotNetRdf 将查询提交到代码中的 SPARQL 端点。
我在上述两种方式中都收到以下错误:
MALFORMED QUERY: Encountered " "insert" "INSERT "" at line 5, column 1.
Was expecting one of:
"base" ...
"prefix" ...
"select" ...
"construct" ...
"describe" ...
"ask" ...
Run Code Online (Sandbox Code Playgroud)
在 SPARQL 表单中的 Workbench 中提交相同的 INSERT DATA { ... } 时按预期工作,因此 INSERT 没问题。
在文档GraphDB Sparql Comliance中提到支持 SPARQL 1.1 更新(包括插入数据)。Sparql 端点是否不支持提到的 Spaqrl 1.1 UPDATE …
我的 rdf4j 有问题:我想从我的 GraphDB 存储库中删除“Feed”所有带有feed:hashCode谓词的三元组。
第一个查询验证是否存在一个三元组,其中url参数作为主语,feed:hashCode作为谓语,并且hash参数具有宾语,并且它有效。如果我的存储库中不存在此语句,则第二个查询开始,它应该删除所有带有feed:hashCode谓词和url主语的三元组,但它不起作用,问题是什么?
这是代码:
public static boolean updateFeedQuery(String url, String hash) throws RDFParseException, RepositoryException, IOException{
Boolean result=false;
Repository repository = new SPARQLRepository("http://localhost:7200/repositories/Feed");
repository.initialize();
try {
try (RepositoryConnection conn = repository.getConnection()) {
BooleanQuery feedUrlQuery = conn.prepareBooleanQuery(
// @formatter:off
"PREFIX : <http://purl.org/rss/1.0/>\n" +
"PREFIX feed: <http://feed.org/>\n" +
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +
"PREFIX dc: <http://purl.org/dc/elements/1.1/>\n" +
"ASK{\n" +
"<"+url+"> feed:hashCode \""+hash+"\";\n"+
"rdf:type :channel.\n" +
"}"
// @formatter:on
); …Run Code Online (Sandbox Code Playgroud) 我用 Protege 创建了一个本体,并将其保存为.owl文件。
当我尝试通过 Workbench Import -> RDF -> Upload RDF files将其加载到 GraphDB (8.9.0) 时(支持的 RDF 格式为 .ttl .rdf .rj .n3 .nt .nq .trig .trix .brf .owl .jsonld,以及它们的 .gz 版本和 .zip 档案)我收到错误:
RDF Parse Error: Content is not allowed in prolog. [line 1, column 1]。
完整日志:
01:00:37.877 [import-task-Accounting-1] ERROR o.e.r.rio.helpers.ParseErrorLogger - [Rio fatal] Content is not allowed in prolog. (1, 1)
01:00:37.879 [import-task-Accounting-1] ERROR c.o.f.impex.FileImportRunnableTask - RDF Parse Error
org.eclipse.rdf4j.rio.RDFParseException: Content is not allowed in …Run Code Online (Sandbox Code Playgroud) 问题中的一切。
附加信息:
并且我仍然收到“访问 ' http://localhost:7200/repositories/...from origin ' http://localhost:8080 ' 已被 CORS 策略阻止...
您好,我有一个 SPARQL 查询,它在 where 子句中包含此内容
...
optional {
?v foo:thing ?something .
$dontgetthis
?v bar:somethingelse ?otherthing .
...
}
...
Run Code Online (Sandbox Code Playgroud)
现在,我明白了大部分内容,除了一件事。我不明白$dontgetthis。这是什么意思? $dontgetthis不在查询中的其他任何地方使用。