在使用生成的.xsd时,我在WebSphere MQ Broker Tool v7.0中收到以下验证错误: a-props-correct.2: Invalid value constraint value '0' in attribute 'attrname'. 相关的.xsd文本是属性的用法: xsd:complexType name="CTypeC
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相关的模式失败了.
更新:自从发布这个以来,我已经进入了这个和其他类似的场景,并且意识到架构处理器在验证看起来基本相同的东西时表现不同:根据规范更正的架构,但实际上它描述了不可能的.这就是事情变得有趣的地方.
这种情况可能有点微妙,因为它涉及到this和this正确;基本上如果默认启动,它将使用相关值的规范表示(而不是默认值中的字符串!).因为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).
对我来说,两种情况都有点类似于代码编译器捕获(在编译时)除零条件 – 它可以在哪里.