尝试使用无限子列表进行验证时xsd出错

时间:2010-06-21 21:23:09

标签: xml xsd

给出以下xml示例:

<MyCustomXml>
    <ClientId>SomeGuid</ClientId>
    <Contact>someEmail@example.com</Contact>
    <Data>
        <Item name="SomeName" type="String">
            SomeValue
        </Item>
        <Item name="SubList" type="List">
            <Data>
                <Item name="AnotherItem" type="String">
                    Hello
                </Item>
                <Item name="Key2" type="String">
                    World
                </Item>
                <Item name="Sub2" type="List">
                    <Data>
                        <Item name="KeeyGoing" type="String">
                            The Sub list can keep going infinately
                        </Item>
                    </Data>
                </Item>
            </Data>
        </Item>
    </Data>
</MyCustomXml>

我为这个xml创建了以下xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="MyCustomXml" >
        <xs:complexType>
            <xs:all>
                <xs:element name="ClientId" type="xs:string" minOccurs="0" maxOccurs="1"/>
                <xs:element name="Contact" type="xs:string" minOccurs="0" maxOccurs="1" />
                <xs:element ref="Data" minOccurs="0" maxOccurs="1" />
                </xs:all>
        </xs:complexType>
    </xs:element>

    <xs:element name="Data" substitutionGroup="Data">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Item" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="Item" substitutionGroup="Item">
        <xs:complexType mixed="true">
            <xs:sequence>
                <xs:element ref="Data" minOccurs="0" />
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" use="required" />
            <xs:attribute name="type" use="required" />
        </xs:complexType>
    </xs:element>

</xs:schema>

编入http://www.validome.org/grammar/validate/ xsd无效。以下错误是:

第13行专栏:55
错误:检测到元素':数据'的循环替换组 错误位置:

第20行专栏:55
错误:检测到元素':Item'的循环替换组 错误位置:

如何解决循环替换?我尝试更改substitutionGroup但是没有用。

1 个答案:

答案 0 :(得分:1)

您不需要substitutionGroup。至少不适用于上面的XML示例。 只有在您希望允许“就地”替换元素时才需要substitutionGroup

在您的架构中,您可以替换&lt; Data&gt;与&lt; Item&gt;可以替代  &lt;数据&GT;可以用&lt; Item&gt;代替...

除此之外,您的架构看起来也适合您想要实现的目标。