Вопрос

Я просто изучаю 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top