我正在阅读并关注 owlready2 文档,并且我已经在 ConstrainedDatatype 中。这些例子是:
ConstrainedDatatype(int, min_inclusive = 0, max_inclusive = 20)
ConstrainedDatatype(str, max_length = 100)
这很简单,但没有关于如何在上下文中使用它的进一步示例。所以我在 DataProperty 中尝试使用它:
with onto:
class Drug(Thing0: pass
class x(DataProperty, FunctionalProperty):
domain = [Drug]
range = ConstrainedDatatype(str, max_length = 3)
现在看看这是否会正确实现/编写,我保存了 owl 文件。这是保存的 XML 的片段:
<owl:DatatypeProperty rdf:about="#x">
<rdf:type
rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:domain rdf:resource="#Drug"/>
<rdfs:range>
<rdfs:Datatype>
<owl:onDatatype rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<owl:withRestrictions>
<rdf:Description>
<rdf:first>
<rdf:Description>
<xsd:maxLength rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">3</xsd:maxLength>
</rdf:Description>
</rdf:first>
<rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
</rdf:Description>
</owl:withRestrictions>
</rdfs:Datatype>
</rdfs:range>
</owl:DatatypeProperty>
由于限制已写在 XML 中,我现在期望药物个体/实例的“x”数据属性将只接受长度 <=3 的字符串值。为了测试这一点,我创建了一个实例并将值设置为长度大于 3 的字符串:
y = Drug()
y.x = "this is just an example"
这就是我的困惑和问题出现的地方......由于我试图存储的字符串长度大于3,这不应该引发异常/错误吗?或者我应该使用 Imp() 类并设置规则,以使数据类型限制在单独创建期间生效?
提前致谢!