Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Properties 是否可以编写一个形状来验证给定属性的域和范围?_Properties_Shacl - Fatal编程技术网

Properties 是否可以编写一个形状来验证给定属性的域和范围?

Properties 是否可以编写一个形状来验证给定属性的域和范围?,properties,shacl,Properties,Shacl,我尝试使用SHACL形状验证我的本体实例。然而,我不知道如何说一个给定的属性实例只有在它有一个Class1实例作为主题,一个Class2实例作为对象时才有效 换句话说,我想指定这个属性的域(即Class1)和范围(即Class2) 在下面的示例中,我们确定范围为(客户和个人),但未指定域 ex:InvoiceShape a sh:NodeShape ; sh:property [ sh:path ex:customer ; sh:class ex:Customer ; s

我尝试使用SHACL形状验证我的本体实例。然而,我不知道如何说一个给定的属性实例只有在它有一个Class1实例作为主题,一个Class2实例作为对象时才有效

换句话说,我想指定这个属性的域(即Class1)和范围(即Class2)

在下面的示例中,我们确定范围为(客户和个人),但未指定域

ex:InvoiceShape
a sh:NodeShape ;
sh:property [
    sh:path ex:customer ;
    sh:class ex:Customer ;
    sh:class ex:Person ;
] .
我知道可以为形状指定目标类(TC),但当域为TC时,这限制了属性ex:customer的范围,而不是在所有情况下

是否可以编写一个形状来固定给定属性的域和范围


谢谢大家!

要声明上述属性约束适用于ex:Invoice的所有实例,可以添加ex:InvoiceShape rdf:type rdfs:Class或ex:InvoiceShape sh:targetClass ex:Invoice。但是,这并没有指定ex:customer三元组的所有主题都必须是ex:Invoice的实例

要确保属性ex:customer只能用于ex:Invoice实例,您可以使用:

ex:InverseInvoiceShape
    a sh:NodeShape ;
    sh:targetSubjectsOf ex:customer ;
    sh:class ex:Invoice .
上述形状适用于ex:customer三元组的所有主题。如果该主题不是ex:Invoice实例,则将报告违规行为

FWIW您的原始示例声明ex:customer的值必须同时为ex:customer和ex:Person实例。如果你想表达“客户或个人”,那么使用

ex:InvoiceShape
    a sh:NodeShape ;
    sh:targetClass ex:Invoice ;
    sh:property [
        sh:path ex:customer ;
        sh:or (
            [ sh:class ex:Customer ]
            [ sh:class ex:Person ]
        )
    ] .