2011-06-01 47 views
0

我坚持到创建的XSD架构只允许元素的下一个序列包裹节点:如何创建XML架构允许一个节点或由另一人

<root> 
    <node /> 
    <node /> 
    ... 
<root> 

<root> 
    <wrapper> 
     <node /> 
     ... 
    </wrapper> 
    <node /> 
    ... 
    <wrapper> 
     <node /> 
     ... 
    </wrapper> 
<root> 

即数的节点,它们中的一些可以被包装,而有些则不是。

这里是我已经有:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="node" minOccurs="0" maxOccurs="unbounded" type="NodeElement" /> 
     </xs:sequence> 
     <xs:sequence> 
     <xs:element name="node" minOccurs="0" maxOccurs="unbounded" type="WrapperElement" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:complexType name="NodeElement" ></xs:complexType> 
    <xs:complexType name="WrapperElement" ></xs:complexType> 
</xs:schema> 
+0

你能告诉我们你尝试过什么到目前为止? – vanje 2011-06-01 14:28:03

回答

1

我缺少的东西或不会只是一个简单的<xs:choice>适合

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="root"> 
    <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element ref="wrapper" /> 
     <xs:element ref="node" /> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="wrapper"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="node" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="node" type="xs:string" /> 

</xs:schema>