约束值无效

时间:2012-01-23 17:24:07

标签: xml xsd websphere message

使用生成的.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中的逻辑是有根据的。

编辑:

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

1 个答案:

答案 0 :(得分:2)

XSD片段有效,因此error you're getting毫无意义。我相信这是你的WMB软件中的一个错误。

您使用的是哪种版本的WMB?

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

更新:自从发布这个以来,我已经自己进入了这个和其他类似的场景,并意识到架构处理器在验证看起来基本相同的东西时表现不同:根据规范更正的架构,但实际上它描述了一种不可能性。这就是正确的内容。

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

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

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

无法在此XSD中创建有效的XML,就像在您的情况下缺少默认值=“1”和属性一样(模式限制为0和1)。

对我来说,两种情况都有些类似于代码编译器捕获(在编译时)除零条件 - 它可以在哪里。