2016-09-19 64 views
0

我想指定使用XSD形式的XML的文件:XSD延伸序列

<root xsi:noNamespaceSchemaLocation="test2.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <mult> 
    <end /> 
    <one> 
     <end /> 
    </one>   
    <end /> 
    <mult> 
     <end /> 
    </mult> 
    <mult /> 
    </mult> 
</root> 

也就是說,兩個,多重峯和結束,實例化一個共同的抽象類型。 我不清楚如何定義MULT類型沒有進一步引入XML的內容如下:

<root xsi:noNamespaceSchemaLocation="test2.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <mult> 
    <value> 
     <end /> 
    </value> 
    <value> 
     <one> 
      <end /> 
     </one> 
    </value> 
    <value> 
     <end /> 
    </value> 
    <value> 
     <mult> 
      <value> 
       <end /> 
      </value> 
     </mult> 
    </value> 
    <value> 
     <mult /> 
    </value> 
    </mult> 
</root> 

爲後者的文件,我可以使用:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:complexType name="TYPE_end" /> 

<xs:complexType name="TYPE_one"> 
    <xs:complexContent> 
     <xs:extension base="TYPE_abstract" /> 
    </xs:complexContent>     
</xs:complexType> 

<xs:complexType name="TYPE_mult"> 
    <xs:sequence> 
     <xs:element name="value" type="TYPE_one" maxOccurs="unbounded" minOccurs="0"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="TYPE_abstract"> 
    <xs:choice> 
     <xs:element name="end" type="TYPE_end" /> 
     <xs:element name="one" type="TYPE_one" /> 
     <xs:element name="mult" type="TYPE_mult" /> 
    </xs:choice> 
</xs:complexType> 


<xs:element name="root" type="TYPE_abstract"/> 

</xs:schema> 

不過,我不知道如何以避免額外的價值標籤。 我可以重複的元素,如下面的例子中的列表中,但這種重複是不是很好,以及...

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:complexType name="TYPE_end" /> 

<xs:complexType name="TYPE_one"> 
    <xs:complexContent> 
     <xs:extension base="TYPE_abstract" /> 
    </xs:complexContent>     
</xs:complexType> 

<xs:complexType name="TYPE_mult"> 
    <xs:sequence> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="end" type="TYPE_end" /> 
      <xs:element name="one" type="TYPE_one" /> 
      <xs:element name="mult" type="TYPE_mult" /> 
     </xs:choice> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="TYPE_abstract"> 
    <xs:choice> 
     <xs:element name="end" type="TYPE_end" /> 
     <xs:element name="one" type="TYPE_one" /> 
     <xs:element name="mult" type="TYPE_mult" /> 
    </xs:choice> 
</xs:complexType> 


<xs:element name="root" type="TYPE_abstract"/> 

</xs:schema> 

任何想法如何提供更好的解決方案?

回答

0

沒有爲您的XML規則的詳細信息,下面看起來會工作

<?xml version="1.0" encoding="utf-8" ?> 
<!--Created with Liquid XML 2016 Developer Bundle Edition 14.1.4.6649 (https://www.liquid-technologies.com)--> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="TYPE_abstract"> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="end" /> 
      <xs:element name="one" type="TYPE_abstract" /> 
      <xs:element name="mult" type="TYPE_abstract" /> 
     </xs:choice> 
    </xs:complexType> 
    <xs:element name="root" type="TYPE_abstract" /> 
</xs:schema> 

enter image description here

+0

謝謝您的回答!但是,這不是解決方案,因爲您提供的xsd允許「一個」不完全具有一個後代。我仍然對解決方案感興趣;-) –