扩展元素的xsd扩展序列

时间:2016-09-19 13:02:45

标签: xsd xsd-validation

我想使用xsd指定格式为xml的文件:

<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和end都实例化了一个常见的抽象类型。 我不清楚如何定义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>

但是,我不知道如何避免额外的value-tag。 我可以复制元素列表,如下例所示,但这种复制也不好......

<?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>

如何提供更好的解决方案?

1 个答案:

答案 0 :(得分: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

相关问题