neo4j 新语义学:加载模型约束

neo4j neosemantics: loading model constraints

我想使用新语义学来验证 neo4j 中的图形,但我无法在最小示例中加载模型约束:

假设我有下图:

CREATE (n:Person {name: 'Andy'})

然后,我将新语义初始化如下:

CALL n10s.graphconfig.init();

现在我应该可以去验证图表了。根据我在这里找到的内容 (https://neo4j.com/labs/neosemantics/4.0/validation/), 我认为以下模式应该作为第一种方法:

call n10s.validation.shacl.import.inline('

@prefix neo4j: <http://neo4j.com/myvoc#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .

neo4j:PersonShape a sh:NodeShape ;
  sh:targetClass neo4j:Person ;
  sh:property [
    sh:path neo4j:name ;
    sh:datatype xsd:string ;
  ];
.','Turtle')

然而,这给了我:

Failed to invoke procedure `n10s.validation.shacl.import.inline`: Caused by: n10s.utils.UriUtils$UriNamespaceHasNoAssociatedPrefix: Prefix Undefined: No prefix defined for namespace <http://neo4j.com/myvoc#Person>. Use n10s.nsprefixes.add(...) procedure.

感觉很奇怪,但为了匹配该错误消息,我尝试添加行

@prefix neo4jPerson: <http://neo4j.com/myvoc#Person> .

但这并没有帮助。

然后我尝试了以下操作:

CALL n10s.graphconfig.init({handleVocabUris:"IGNORE"});

然后,验证规则被接受,但它看起来并没有真正连接到任何东西:

target  propertyOrRelationshipPath  param   value
"__NONE__"  "__NONE__"  "datatype"  "string"

我认为一直删除命名空间的东西会很有帮助。所以我也尝试了

call n10s.validation.shacl.import.inline('

@prefix neo4j: <http://neo4j.com/myvoc#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .

PersonShape a sh:NodeShape ;
  sh:targetClass Person ;
  sh:property [
    sh:path name ;
    sh:datatype xsd:string ;
  ];
.','Turtle')

但这也不起作用,因为解析器坚持让命名空间的东西起作用:

Failed to invoke procedure `n10s.validation.shacl.import.inline`: Caused by: org.eclipse.rdf4j.rio.RDFParseException: Expected ':', found ' ' [line 6]

我在这里有点不知所措。我给出的代码或多或少来自 neosemantics 用户指南 (https://neo4j.com/labs/neosemantics/4.0/)。 并且只是稍微适应了。他们的单元测试似乎也没有添加魔法 https://github.com/neo4j-labs/neosemantics/blob/4.0/src/test/java/n10s/validation/SHACLValidationProceduresTest.java#L59。我仍然收到上面概述的错误消息。我错过了什么?是否有任何人的 MWE 让 neo4j 图形验证工作?

回答我自己的问题,neo4j 命名空间已更改为 <neo4j://graph.schema#> (https://github.com/neo4j-labs/neosemantics/issues/229)