AnzoGraphDB 3.1空图执行SPARQL查询报400错误的技术咨询
AnzoGraph 3.1空图查询报错问题解答
我们使用AnzoGraph 3.1版本,在名为DemoGraph的空图(无任何元组)上执行以下SPARQL SELECT查询:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT ?s (IRI(<vertex1>) AS ?labels) ?attr2 ?attr3 FROM <DemoGraph> WHERE {?s rdf:type <vertex1> . OPTIONAL{?s <String_Property> ?attr2 } . OPTIONAL{?s <Attr_Integer_Property> ?attr3 } . FILTER(?attr3 = "77"^^<http://www.w3.org/2001/XMLSchema#integer>) }
执行时抛出400错误:
bad request (400) with below error - Error - m_type == row->a_field_type(m_colnum):Invalid system state type mismatch for var(?attr3) vartype(21): rowtype(22)
当向DemoGraph插入以下数据后:
INSERT DATA { GRAPH <DemoGraph> { <NewSubject_200> rdf:type <vertex1>. <NewSubject_200> <String_Property1> "New_Vertex"^^<http://www.w3.org/2001/XMLSchema#string>. <NewSubject_200> <Attr_Integer_Property1> "70"^^<http://www.w3.org/2001/XMLSchema#int>. } }
再次执行相同查询时,返回0行(符合预期)。
问题解答
问题1:在空图上执行查询应返回0行却报错,此行为是否合理?
不合理。根据SPARQL规范,针对空图的这类查询应该返回0行结果而非抛出错误。这是AnzoGraph 3.1版本在处理空图中可选绑定变量类型推断时的bug——空图中没有数据可用于推断?attr3的类型,导致查询执行时触发类型不匹配的系统状态错误。
问题2:插入数据后查询不再报错,是否必须先插入数据才能执行查询?
不是必须的。插入数据后,AnzoGraph可以从现有数据中推断出?attr3对应的属性类型,从而避免类型不匹配错误,但这只是临时的规避方式,并非官方要求的前置操作。
问题3:如何在空图上无错执行该查询,是否需要配置?
可以通过两种方式解决:
- 修改查询,显式指定
?attr3的类型,比如将FILTER条件改为FILTER(xsd:integer(?attr3) = 77),让查询无需依赖图中数据就能明确变量类型; - 升级AnzoGraph到更高版本,这类空图类型推断的bug在后续版本中大概率已被修复。
目前没有专门的配置项可直接解决该问题,核心是让查询能明确变量类型,避免依赖图中现有数据进行推断。
问题4:该错误信息具体含义是什么?
错误的核心是变量?attr3的类型与系统内部行结构的类型不匹配:
vartype(21)对应AnzoGraph内部定义的整数类型(映射xsd:integer);rowtype(22)代表未定义/未知类型;
因为空图中没有数据,系统无法推断?attr3的类型,执行FILTER时,预期的整数类型与实际的未知类型冲突,触发系统状态校验失败的错误。
内容的提问来源于stack exchange,提问作者user27080506
相关产品推荐
相关产品推荐

