使用两个xsd文件验证文件单个XML属性?

时间:2012-01-12 15:04:46

标签: xml xsd

我正在处理第三方xml文件,并根据第三方提供的xsd对其进行验证。他们的xsd不完整(imo)。例如,他们的属性定义如下:

<xsd:attribute name="debit_flag" type="string_1" use="required"></xsd:attribute>

但它只能有值“1”或“0”:

<xs:element name="debit_flag_type">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="1"/>
      <xs:enumeration value="0"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

我无法更改他们的xsd(因为他们将来可能会更新它)所以我可以添加第二个xsd模式,我可以从中添加额外的检查,并且会有很大的开销吗?

谢谢, 帕特里克

1 个答案:

答案 0 :(得分:1)

您最好的选择是,一如既往地通知第三方其架构中的不一致之处。毕竟,如果他们在将数据发送给您之前使用该模式来验证他们的数据,那么扩展它就没有用了,因为数据类型保证等于模式中的(有限的)定义。

但是,XML Schema Definitions允许导入架构。您可以做的是编写自己的XSD,使用<xsd:import />导入第三方的架构。不幸的是,它取决于导入的XSD中的定义,无论您是否确实可以覆盖它们。换句话说,即使在这种情况下,您的选择也是有限的。

针对两种不同的模式测试输入数据:我不会这样做。如果您的架构正在扩大定义(即允许更多),那么在所有场景中它都是无用的。如果它是一个缩小的定义,它可能会带来好处,但仅适用于您自己的应用程序。