XSD 对于任何复杂类型的订单?
XSD for any order in complex type?
我在生成 XSD 时遇到问题。在我们的应用程序中,用户可以定义自己的数据格式,因此用户可以定义将哪些数据传递给网络服务。在那里他可以定义一个元素是可以出现一次还是经常出现。所以我得到 XML 这样的:
<WaitForSoap>
<Lastname>last</Lastname>
<Firstname>first</Firstname>
<Birthday>hallo</Birthday>
<Firstname>first</Firstname>
<Firstname>first1</Firstname>
</WaitForSoap>
所以我现在想要的是 XSD,它确保姓氏、生日出现一次,名字出现 3 次。 WaitForSoap
元素中元素的顺序应该是任意顺序。所以这里用xsd:sequence
是不对的; xsd:all
甚至不对,因为我不能在那里使用 maxoccurs
。 xsd:choice
我没有得到正确的解决方案。
我还有什么其他想法吗?
您的设计不必要地复杂。对 Firstname
、Lastname
和 Birthday
进行排序,复杂性就会消失。在 XSD 1.0.
中,您将能够使用简单的出现约束来表示您的要求
如果您坚持允许任何排序,您将无法在 XSD 1.0 中表示您的要求。您必须使用 XSD 1.1 并在 WaitForSoap
上编写断言,而不是对其子项使用更自然的 minOccurs
和 maxOccurs
约束。
我在生成 XSD 时遇到问题。在我们的应用程序中,用户可以定义自己的数据格式,因此用户可以定义将哪些数据传递给网络服务。在那里他可以定义一个元素是可以出现一次还是经常出现。所以我得到 XML 这样的:
<WaitForSoap>
<Lastname>last</Lastname>
<Firstname>first</Firstname>
<Birthday>hallo</Birthday>
<Firstname>first</Firstname>
<Firstname>first1</Firstname>
</WaitForSoap>
所以我现在想要的是 XSD,它确保姓氏、生日出现一次,名字出现 3 次。 WaitForSoap
元素中元素的顺序应该是任意顺序。所以这里用xsd:sequence
是不对的; xsd:all
甚至不对,因为我不能在那里使用 maxoccurs
。 xsd:choice
我没有得到正确的解决方案。
我还有什么其他想法吗?
您的设计不必要地复杂。对 Firstname
、Lastname
和 Birthday
进行排序,复杂性就会消失。在 XSD 1.0.
如果您坚持允许任何排序,您将无法在 XSD 1.0 中表示您的要求。您必须使用 XSD 1.1 并在 WaitForSoap
上编写断言,而不是对其子项使用更自然的 minOccurs
和 maxOccurs
约束。