验证XML模式中的不同必需属性集

时间:2010-10-29 18:16:23

标签: xml xsd xml-validation xsd-validation

我的要求是使用两种不同的验证策略验证xml。在策略1中,xml需要具有具有某些必需属性的元素的实例。在策略2中,xml需要具有具有不同必需属性的相同元素的实例。因此,我们的想法是,每个集合中有两个不同的相同元素集合,并且具有不同的必需属性集合。有没有办法只使用一个xsd来验证这一点。到目前为止,我唯一的解决方案是使用两个不同的xsd文件进行验证。

示例1:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element firstName="something"/> <!--required -->
    <element lastName="something"/> <!-- required -->
 <element phoneNumber="something"/> <!-- not required -->
<root>

示例2:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element firstName="something"/> <!-- not required -->
    <element lastName="something"/> <!-- required -->
 <element phoneNumber="something"/> <!-- required -->
<root>

可以通过xsd进行验证吗?

1 个答案:

答案 0 :(得分:0)

瑞克,

我在我们的应用程序中遇到了类似的问题,我们最好的解决方案是使用模块化模式。

因此,除了不同的部分之外,Schema1和Schema2不是彼此重复,而是让Schema1和Schema2只包含不同的约束,并且都导入一个定义共享约束的公共Schema3

如何执行此操作的示例是here

它不会为您提供单个XSD,但它确实减少了重复,因此它有助于提高可维护性,并有助于避免在Schema1和Schema2之间存在大量重复时出现错误的可能性。

缺点是模式对于人类来说变得有点困难,因为定义在不同文件之间分开。