xml – 无效的约束值

在使用生成的.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>

我已经谷歌搜索并发现了许多关于SOAP等的讨论,但这似乎有点偏离了我的项目.我只是想确保.xsd中的逻辑是有根据的.

编辑:

如果我删除属性的默认部分,则错误消失.这不是我的解决方案 – 但也许它有助于诊断.

最佳答案 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).

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

点赞