2016-09-19 66 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允许“一个”不完全具有一个后代。我仍然对解决方案感兴趣;-) –