我的要求是使用两种不同的验证策略验证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进行验证吗?
答案 0 :(得分:0)
瑞克,
我在我们的应用程序中遇到了类似的问题,我们最好的解决方案是使用模块化模式。
因此,除了不同的部分之外,Schema1和Schema2不是彼此重复,而是让Schema1和Schema2只包含不同的约束,并且都导入一个定义共享约束的公共Schema3
如何执行此操作的示例是here。
它不会为您提供单个XSD,但它确实减少了重复,因此它有助于提高可维护性,并有助于避免在Schema1和Schema2之间存在大量重复时出现错误的可能性。
缺点是模式对于人类来说变得有点困难,因为定义在不同文件之间分开。