neo4j neosemantics:加载模型约束



我想使用新语义学来验证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]

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

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

最新更新