WSDL XSD元素序列

时间:2014-02-01 14:19:33

标签: web-services soap xsd wsdl

XSD元素的序列顺序是否会对客户端应用程序产生重大影响?

想象一下,一个clinet应用程序可以提供不同的顺序。这会以任何方式影响它吗?

此外还有一种特殊情况,即客户端应用程序读取的订单与XSD不同吗?

谢谢

1 个答案:

答案 0 :(得分:2)

1)这取决于“合同”的编写方式......使用了哪个XSD“合成器”(序列,选择和所有):

  • 序列:元素必须以基数约束标识的确切顺序和重复显示。根据需要重复......
  • 选择:对于任何选择的出现,可能会出现选项粒子中的一个。如果选择是可重复的,那么这意味着这些选项可能重复,但没有特别的顺序。
  • 所有:元素可以按任何顺序出现;在XSD 1.0版本中,每个元素最多可以出现一次; XSD 1.1放宽了这个约束,这意味着可能出现更多相同的情况。

如果您使用与使用关联xsd:sequence规定的订单不同的订单向客户端应用程序提供元素,则XSD验证程序必须将XML标记为无效。它不应该为xsd:all或重复选择。

2)如果您使用XML API处理XML,那么the order read by the client application始终是XML实例(而不是XSD)中的那个。如果您使用某种XSD处理XML以编码绑定技术,例如.NET中的JAXB或XML序列化,那么只要XML有效,“排序”的概念就会受到影响......列表仍将反映XML文件中遇到的内容;然而,在面向对象中,类定义中没有字段排序(专有注释/标签仍然可以将其捕获为元数据,以便正确地序列化它,但这只是一种绑定技术“ism”而不是OO概念)。

然后有非常糟糕的XSD合同,其中元素的语义由父元素集合中元素的相对位置暗示(例如,第一个客户是“主要”,第二个是“共同申请人”等。这使得这个讨论更加模糊......