1

我正在阅读并关注 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() 类并设置规则,以使数据类型限制在单独创建期间生效?

提前致谢!

4

0 回答 0