Ошибка в xsd при попытке проверки с бесконечными подсписками - PullRequest
0 голосов
/ 22 июня 2010

Учитывая следующий пример 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>

Я создал следующий xsd для этого xml

<?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 Ответ

1 голос
/ 22 июня 2010

Вам не нужна группа замещения.По крайней мере, не для приведенного выше примера XML. substitutionGroup требуется только в том случае, если вы хотите разрешить замену элемента "на месте".

В вашей схеме вы разрешите замену на , чтозаменить на , который можно заменить на ...

Кроме того, ваша схема выглядит подходящей для того, чего вы хотите достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...