【问题标题】:Invalid Constraint Value无效的约束值
【发布时间】:2012-01-23 17:24:07
【问题描述】:

在使用生成的 .xsd 时,我在 WebSphere MQ Broker Tool v7.0 中收到以下验证错误:

a-props-correct.2: Invalid value constraint value '0' in attribute 'attrname'.

相关的.xsd文本是属性的用法:

<xsd:complexType name="CTypeContent">
    <xsd:simpleContent>
        <xsd:extension base="xsd:base64Binary">
            <xsd:attribute name="attrname" type="BooleanType" use="optional" default="1" />
        </xsd:extension>
    </xsd:simpleContent>
</xsd:complexType>

以及属性的定义:

  <xsd:simpleType name="BooleanType">
    <xsd:restriction base="xsd:boolean">
      <xsd:pattern value="0|1" />
    </xsd:restriction>
  </xsd:simpleType>

我在 Google 上搜索过很多关于 SOAP 之类的讨论,但这似乎有点偏离我的项目。我只是想确保 .xsd 中的逻辑是有根据的。

编辑:

如果我删除属性的默认部分,错误就会消失。这对我来说不是一个解决方案 - 但也许它有助于诊断。

【问题讨论】:

    标签: xml xsd websphere message


    【解决方案1】:

    XSD sn-ps 是有效的,所以 error you're getting 没有意义。我相信这是您的 WMB 软件中的一个错误。

    您使用的是什么版本的 WMB?

    由于您似乎可以使用 XSD,如果不删除默认属性,尝试将模式从值为“0|1”的模式重写为两个单独的模式,这也将有助于故障排除,一个值为“0”,另一个值为“1”。我以前见过来自同一供应商的其他产品,其中与 xsd:boolean 相关的模式惨遭失败。

    更新:自发布此消息以来,我遇到了这种情况和其他类似情况,并意识到模式处理器在验证看起来基本相同的东西时表现不同:根据规范正确的模式,但实际上它描述了一种不可能。这就是关于什么是正确的事情变得有趣的地方。

    这种情况可能更微妙一些,因为它涉及到让thisthis 正确;基本上,如果默认启动,它将使用关联值的规范表示(而不是默认值中的字符串!)。由于 1 表示布尔值的 True,其规范表示是字符串 true 现在显然与模式不匹配(处理用词法表示 - 基本上是字符串) 0|1 这反过来又使这两个不兼容。考虑到 PSVI,支持 XSD 的 XML 处理器在应用默认值时无法创建有效的 XML。这就是错误消息的内容。

    要显示我通常使用的任何 XSD 处理器未标记的其他不可能性,请考虑以下特定的 sn-p:

    <xsd:complexType name="Test">
        <xsd:sequence>
            <xsd:element name="Impossible" type="Test"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="Test" type="Test"/>
    

    不可能从此 XSD 创建有效的 XML,就像在您的情况下缺少 default="1" 和属性(模式限制为 0 和 1)。

    对我来说,这两种情况有点类似于代码编译器捕获(在编译时)除以零的条件 - 可以做到。

    【讨论】:

    • 我做了更多的搜索,我遇到了这个:osdir.com/ml/text.xml.xerces-j.devel/2005-04/msg00015.html 我不太擅长 XML 和 XSD 格式 - 但我相信事实是 0 正在转换为我的模式拒绝的“假”(布尔类型)。
    • 是的,这就是大多数时候的问题所在。通常,供应商会告诉您删除模式,除了拆分模式之外,您也应该尝试这样做。
    • 但我声称错误在于我的 .xsd 文件而不是 WMB 软件 - 我不确定这是否与您的上述帖子相反。
    • 啊。好吧,拆分模式似乎并不能帮助减轻错误。
    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多