客户端使用适合我的架构获取XML架构错误

时间:2011-11-22 13:38:55

标签: xml xsd

我不是任何想象力的XML专家,但我对此有所了解。

我创建了一个Schema文档和一个由它验证的示例XML文档。 我使用Altova XML Spy 2004 rel 4来创建和验证XML模式和XML文档。

我已将XML smaple doc和XML Schema发送给测试过它的客户端,并且工作正常。

我发送了一秒钟,他们报告错误。具体做法是:

enter image description here

如果您无法阅读图片文字,请说:

Code Description                                                   File
-1   The length constraining facet is prohibited for 'Date'.       sample_xml201108.xml
-1   The length constraining facet is prohibited for 'Date'.       xml201108.xsd
-1   The MaxLength constraining facet is prohibited for 'Integer'. xml201108.xsd
-1   The MaxLength constraining facet is prohibited for 'Integer'. xml201108.xsd
-1   The MaxLength constraining facet is prohibited for 'Integer'. xml201108.xsd

关联的XML架构代码是:

日期类型:

导致错误的代码是:

<xs:simpleType name="dateType">
   <xs:restriction base="xs:date">
      <xs:length value="10"/>
   </xs:restriction>
</xs:simpleType>

对于第一个Integer元素:

<xs:element name="x_no" nillable="true">
   <xs:simpleType>
      <xs:restriction base="xs:integer">
         <xs:maxLength value="10"/>
      </xs:restriction>
   </xs:simpleType>
</xs:element>

对于第二个Integer元素

<xs:element name="y_no" nillable="true">
   <xs:simpleType>
      <xs:restriction base="xs:integer">
         <xs:maxLength value="16"/>
      </xs:restriction>
   </xs:simpleType>
</xs:element>

对于第三个Integer元素:

<xs:element name="z_no" nillable="true">
   <xs:simpleType>
      <xs:restriction base="xs:integer">
         <xs:maxLength value="10"/>
      </xs:restriction>
   </xs:simpleType>
</xs:element>

如果我和其他客户都没有遇到这个问题,理解为什么一个客户端会收到这些错误的任何帮助都会感激不尽。

出现错误的客户端正在使用Liquid XML Studio 2009并尝试使用Altova XML Spy 2009。

提前致谢...

2 个答案:

答案 0 :(得分:4)

与数据类型相关的XML Schema规范第2部分(请参阅此处的日期数据类型http://www.w3.org/TR/xmlschema-2/#date)告诉您每个XML Schema简单类型的允许构面。对于整数不允许maxLength,您应该考虑使用totalDigits(仅限制有意义的数字,而不是前导零)或pattern, 例如:

<xs:element name="z_no" nillable="true">
   <xs:simpleType>
      <xs:restriction base="xs:integer">
         <xs:totalDigits value="10"/>
      </xs:restriction>
   </xs:simpleType>
</xs:element>

日期相同:请考虑使用pattern方面而不是长度。

答案 1 :(得分:1)

为确保模式有效,您需要做的不仅仅是通过XML Spy运行它,尤其是与XML Spy 2004一样旧的版本。您的示例显示XML Spy无法检测到'长度的错误使用'faces with xs:date,是对原因的完美说明。