默认的XML序列(或所有序列)是否必须拥有至少一个可选的子元素?

8 浏览
0 Comments

默认的XML序列(或所有序列)是否必须拥有至少一个可选的子元素?

如果有人能够确认以下模式的解释是否正确,我将不胜感激:

虽然Child1Child2都是可选的,但为了符合上述模式,Element1必须至少有一个子元素;即以下文档:

将不符合要求。要使其有效,需要将序列的minOccurs = 0(?)

更新

该问题涉及当子元素是可选的时,序列(以及所有元素)的出现的含义。例如,以下文档:

将符合上述模式。序列会出现两次;在第一次中,Child1不存在。在第二次中,Child2不存在。但重点是,序列的minOccurs(默认为1)得到满足,因为它出现了两次。

对于我上面给出的第一个例子(只有Element1;没有子元素),序列根本不会出现,并且(在我看来)不满足minOccurs = 1

0
0 Comments

默认的XML序列(或所有)具有可选子元素时,是否必须至少有一个子元素?

不是必需的...

虽然Child1Child2都是可选的,但Element1必须至少有一个子元素以符合上述模式。

minOccurs的默认值为1,因此您可以正确地假设xsd:sequence只能出现一次。但是,只要满足子元素的出现约束条件一次,xsd:sequence minOccurs="1"就会被满足。当所有子元素的出现约束条件为minOccurs="0"时,允许一个空序列。因此,即使没有任何Child1Child2子元素,<Element1/>也是有效的。

另请参见:

- [XML Schema minOccurs / maxOccurs default values](https://stackoverflow.com/questions/4821477)

- [The difference between <all> <sequence> <choice> and <group> in XSD?](https://stackoverflow.com/questions/36286056)

进一步的示例:

XSD示例:xs:sequence minOccurs="0"


    
        
            
             
        
    

有效的XML示例: <r/><r><a/><b/></r>

XSD示例:xs:sequence minOccurs="1"(默认)


    
        
            
             
        
    

有效的XML示例: <r><a/><b/></r>

XSD示例:xs:sequence minOccurs="2"


    
        
            
             
        
    

有效的XML示例: <r><a/><b/><a/><b/></r>

0