用于INSERT和DELETE查询的SPARQL Parser

时间:2016-09-29 17:27:08

标签: python parsing sparql rdf

我需要测试某些SPARQL查询是否确实是INSERTDELETE语句。因此,我一直在使用不同的解析器(主要是fyzzSPARQLWrapper),如下所示:

try:
    sparql = parse(Query_String)
except Exception as e:
    raise ContentsUnacceptable(
        " The query attribute does not conform to the SPARQL query syntax !!")

和:

try:
    sparql = SPARQLWrapper("local/graph/file")
    sparql.setQuery(Query_String)
    results = sparql.query().convert()
except Exception as e:
    raise ContentsUnacceptable(
        " The query does not conform to the SPARQL query syntax !!")

我的两个代码都适用于SELECT语句,但只要我尝试INSERTDELETE语句,我就会在代码"The query does not conform to the SPARQL query syntax !!"上写入异常这可能意味着解析器无法识别INSERT和DELETE语句。根据我的研究,主要有两个用于SPARQL查询的解析器。有没有办法让fyzz和SPARQLWrapper解析器识别这些语句?

1 个答案:

答案 0 :(得分:0)

SPARQLWrapper实际上并不打算作为SPARQL解析器。它所做的就是充当SPARQL端点服务的客户端--AFAICT查询字符串的实际解析由端点本身完成。

在您的特定示例中,您将SPARQLWrapper指向一个本地文件,因为本地文件不是SPARQL端点,所以该文件根本无法工作。在 指向SPARQL端点的尝试中,该端点不接受SPARQL更新(因为可以理解的是,他们不允许远程客户端更新其数据)。

如果您希望坚持使用SPARQLWrapper,(非常笨重)解决方案将是设置您自己的SPARQL端点服务,将其配置为允许远程更新,然后使用该端点验证您的查询/更新(有大量免费的SPARQL端点实现,包括RDF4J Server和Jena Fuseki,仅举两个流行的实例)。

但是如上所述,这是一个笨重的解决方案:如果您的目标只是解析字符串以验证其语法,那么您应该在Python中使用实际的SPARQL解析器。 RDFLib's SPARQL Parser在这里可能是一个不错的选择。我不是Python专家,但我想到了以下几点:

import rdflib.plugins.sparql.parser

parser.parseQuery("SELECT ...")

parser.parseUpdate("INSERT ...")

可以帮到你。