允许动态XSD中的无序元素用于Web服务?

时间:2016-07-25 07:34:11

标签: xml xsd xsd-validation xml-validation

我有一个应用程序,用户可以使用动态数据设计Web服务。用户可以指定Web服务应该处理的数据。 例如,用户定义此数据:

PERSON (minoccurs 1, maxoccurs 1)
   -> Firstname (minoccurs 1, maxoccurs 1)
   -> Lastname (minoccurs 1, maxoccurs 1)
   -> email (minoccurs 0, maxoccurs 3)

所以XML看起来像这样

<Person>
    <Firstname>Peter</Firstname>
    <Lastname>Last</Lastname>
    <Email>email1@example.com</Email>
    <Email>email2@example.com</Email>
 </Person>

在我的应用程序中,我为XML生成一个XSD,我使用序列来处理元素。这很好用,但现在客户想要以任何顺序发送数据,所以我想使用xs:all,但maxOccurs只能是1.我知道XSD 1.1 xs:all能够处理maxOccurs更大的一个。 XSD 1.0中是否有办法处理这个问题?

1 个答案:

答案 0 :(得分:1)

对于这种特殊情况,您可以在email-list周围添加email包装,

PERSON (minoccurs 1, maxoccurs 1)
   -> Firstname (minoccurs 1, maxoccurs 1)
   -> Lastname (minoccurs 1, maxoccurs 1)
   -> email-list (minoccurs 1, maxoccurs 1)      
      -> email (minoccurs 0, maxoccurs 3)

并且仍然在XSD 1.0中使用xsd:all,但在一般情况下,您无法使用XSD 1.0作为目标,而不会在您的类似约束中反映xsd:all的限制输入语言。

因此,正如您对previous question regarding XSD and unordered elements的回答,您真的应该考虑放宽界面的无序方面。