Pergunta

Estou apenas aprendendo XML/XSD e estou lutando com a implementação de um XML-Schema que modela uma estrutura de pastas. O que eu tinha em mente era definir um complexo para a pasta que pode ter instâncias adicionais de pastas que representam subpastas. Usando o validador de esquema XSD aqui sempre retorna que o esquema é inválido.

Eu tentei definir o complexo de antecedência e depois usar o Ref Palavra -chave para subpastas:

<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" />

Quanto ao próprio elemento:

<xs:element name="Folder" type="tFolder" />

O erro retornado pelo validador é:

"Não é possível resolver o nome 'pasta' para um componente (n) 'declaração de elemento'."

e o erro ocorre na linha

<xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />

Definir o complexo dentro do próprio elemento produz exatamente o mesmo erro:

<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>

O que eu li, esse tipo de recursão deve funcionar usando Ref.

Alguém pode me dizer o que eu fiz de errado? Talvez o validador XSD esteja apenas com defeito? Se sim, alguém conhece uma alternativa melhor? Eu tentei usar o do w3.org também, mas parece estar deixado offline ...

Foi útil?

Solução

Eu acho que esta é a maneira de fazê -lo (não use ref):

<element name="test" type="tns:TestType"></element>

<complexType name="TestType">
    <sequence>
        <element name="test" type="tns:TestType"></element>
    </sequence>
</complexType>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top