代码之家  ›  专栏  ›  技术社区  ›  David Basarab

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

  •  0
  • David Basarab  · 技术社区  · 14 年前

    给出以下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”的循环替换组。

    如何解决循环替换?我试着改变替换组,但没有成功。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Community CDub    4 年前

    这个 substitutionGroup 仅当您希望允许替换“就地”元素时才需要。

    <数据>可以用<项目>。。。

    除此之外,您的模式看起来适合您想要实现的目标。