【问题标题】:Client getting XML Schema errors using schema that works fine for me客户端使用适合我的架构获取 XML 架构错误
【发布时间】:2011-11-23 06:27:42
【问题描述】:

无论如何,我都不是 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 Schema 代码是:

对于日期类型:

导致错误的代码是:

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

对于第一个整数元素:

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

对于第二个整数元素

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

对于第三个整数元素:

<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。

提前谢谢...

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    与数据类型相关的 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>
    

    对于 Date 的相同备注:考虑使用 pattern 构面而不是长度。

    【讨论】:

    • 文森特,非常感谢您的回答。您是说我编写的 XML 模式现在已被弃用,因此在我的环境中可以正常工作,因为它是 XML Spy 的旧版本?
    • 我告诉你的建议是从 2004 年 10 月开始的。你的 2004 年的 XML Spy 可能没有完全意识到这一点。
    • 这就是我的印象。感谢您的澄清和回答。
    【解决方案2】:

    要确保架构有效,您需要做的不仅仅是通过 XML Spy 运行它,尤其是与 XML Spy 2004 一样旧的版本。您的示例显示 XML Spy 无法检测到 'length 的错误使用' 带有 xs:date 的 facet 完美地说明了原因。

    【讨论】:

    • 谢谢,公平地说,我确实在其他地方得到了验证,看起来还不错,但考虑到时间限制和技术,我使用过时的 MaxLength 方面得到了通过。它仍在测试中,所以没有造成任何伤害,但它给了我一个具体的理由让我的客户升级到最新的软件版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多