我不是任何想象力的XML专家,但我对此有所了解。
我创建了一个Schema文档和一个由它验证的示例XML文档。 我使用Altova XML Spy 2004 rel 4来创建和验证XML模式和XML文档。
我已将XML smaple doc和XML Schema发送给测试过它的客户端,并且工作正常。
我发送了一秒钟,他们报告错误。具体做法是:
如果您无法阅读图片文字,请说:
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。
提前致谢...
答案 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,是对原因的完美说明。