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