代码之家  ›  专栏  ›  技术社区  ›  MattG

如何定义XML XSD类型来描述“double”的子集,不包括“nan”、“positiveInfinity”、“negativeInfinity”

  •  1
  • MattG  · 技术社区  · 6 年前

    我有一个现有的xsd,其中一个元素的类型被指定为“double”,根据 spec 这将有效值限制为:

    1)非零数m_ 2e,其中m是绝对值小于253的整数,e是介于1074和971之间的整数,包括在内。 2)除这些值外,double的_·值空间还包含以下特殊值_·:正零、负零、正无穷、负无穷和NotaNumber。

    我对第一部分没意见,但我不允许/排除以下内容:

    • 正无穷大
    • 否定性
    • NotaNumber(南)

    定义这种新类型的XML XSD语法/定义是什么,它表示“double,positiveInfinity、negativeInfinity、notanumber(nan)”。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Nesku    6 年前

    你可以用一个 restriction

    <xs:element name="myDouble">
        <xs:simpleType>
            <xs:restriction base="xs:double">
              <xs:minExclusive value="-INF"/>
              <xs:maxExclusive value="INF"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
    

    注释 :南似乎也被 <xs:maxExclusive value="INF"/>

    错误:元素“mydouble”:[方面“maxExclusive”]值“nan”必须 小于“inf”。

    我试过了,它能和

    <myDouble>123.456</myDouble> <!-- OK -->
    <myDouble>+1234.456</myDouble> <!-- OK -->
    <myDouble>-1.2344e56</myDouble> <!-- OK -->
    <myDouble>-.45E-6</myDouble> <!-- OK -->
    <myDouble>INF</myDouble> <!-- KO -->
    <myDouble>-INF</myDouble> <!-- KO -->
    <myDouble>NaN</myDouble> <!-- KO -->