2012-01-23 58 views
4

我收到下面的验证错误在WebSphere MQ代理工具V7.0与已生成的.xsd工作时:无效约束值

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中的逻辑是有根据的。

编辑:

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

回答

2

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

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

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

更新:自从发布这个以来,我已经将自己投入到这个和其他类似的场景中,并且意识到架构处理器在验证似乎基本相同的事情时表现得有所不同:一种根据规范正确的架构实际上它描述了一种不可能性。这是什么正确是有趣的地方。

这种情况可能有点微妙,因为它涉及获得thisthis正确;基本上,如果默认启动,它将使用关联值的标准表示(不是默认值中的字符串!)。由于用于在布尔,那规范化表示是字符串真正现在显然不匹配的模式(与词汇表示交易 - 串基本)0 | 1这转而使这两者不相容。考虑到PSVI,支持XSD的XML处理器在应用默认设置时不能创建有效的XML。这就是错误信息所说的。

为了表明不是由我通常使用任何XSD处理器标记等imposibility,考虑这个特定摘录:

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

这是不可能建立一个有效的XML出这个XSD的,不仅仅是具有默认值=“1”,你的情况下缺少属性(模式限制为0和1)。

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

+0

我做更多的搜索,我碰到这个传来: http://osdir.com/ml/text.xml.xerces-j.devel/2005-04/msg00015.html 我对XML和XSD格式不太好 - 但我相信事实上0被转换为'false'(布尔类型),我的模式被拒绝。 – sdasdadas

+0

是的,这就是问题的大部分时间。通常情况下,供应商会告诉您放弃该模式,除了分割模式之外,您还应该尝试该模式。 –

+0

但我的说法是,错误在于我的.xsd文件,而不是WMB软件 - 我不确定这是否与您的上述文章背道而驰。 – sdasdadas