Xsd рекурсия комплексных типов
-
21-09-2019 - |
Вопрос
Я просто изучаю XML/XSD и борюсь с реализацией XML-Schema, которая моделирует структуру папок. Что я имел в виду, так это определение комплексноготип для папки, которая может иметь дополнительные экземпляры папок, которые представляют подпапки. Использование валидатора схемы XSD здесь Всегда возвращает, что схема недействительна.
Я попытался определить комплекстип спереди, а затем использовать рефери Ключевое слово для подпадок:
<xs:complexType name="tFolder">
<xs:sequence>
<xs:element name="Path" type="tFolderType" msdata:Ordinal="0" />
<xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="File" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent msdata:ColumnName="File_Text" msdata:Ordinal="0">
<xs:extension base="xs:string">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Type" type="tFolderType" />
Что касается самого элемента:
<xs:element name="Folder" type="tFolder" />
Ошибка, возвращенная валидатором:
«Не удается разрешить имя« Папка »на компонент (n)« декларации элемента ».
и ошибка возникает на линии
<xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />
Определение комплексатипа в самом элементе дает ту же ошибку:
<xs:element name="Folder">
<xs:complexType>
<xs:sequence>
<xs:element name="Path" type="tFolderType" msdata:Ordinal="0" />
<xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="File" nillable="true" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent msdata:ColumnName="File_Text" msdata:Ordinal="0">
<xs:extension base="xs:string">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Type" type="tFolderType" />
</xs:complexType>
</xs:element>
Что я прочитал, этот вид рекурсии должен работать с помощью рефери.
Кто -нибудь может сказать мне, что я сделал не так? Может быть, валидатор XSD просто неисправен? Если так, кто -нибудь знает лучшую альтернативу? Я также пытался использовать тот, который также от w3.org, но, похоже, он снят с автономного линии ...
Решение
Я думаю, что это способ сделать это (не используйте ссылку):
<element name="test" type="tns:TestType"></element>
<complexType name="TestType">
<sequence>
<element name="test" type="tns:TestType"></element>
</sequence>
</complexType>