我正在处理第三方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模式,我可以从中添加额外的检查,并且会有很大的开销吗?
谢谢, 帕特里克
答案 0 :(得分:1)
您最好的选择是,一如既往地通知第三方其架构中的不一致之处。毕竟,如果他们在将数据发送给您之前使用该模式来验证他们的数据,那么扩展它就没有用了,因为数据类型保证等于模式中的(有限的)定义。
但是,XML Schema Definitions允许导入架构。您可以做的是编写自己的XSD,使用<xsd:import />
导入第三方的架构。不幸的是,它取决于导入的XSD中的定义,无论您是否确实可以覆盖它们。换句话说,即使在这种情况下,您的选择也是有限的。
针对两种不同的模式测试输入数据:我不会这样做。如果您的架构正在扩大定义(即允许更多),那么在所有场景中它都是无用的。如果它是一个缩小的定义,它可能会带来好处,但仅适用于您自己的应用程序。