it-swarm.dev

cvc-elt.1: Não é possível encontrar a declaração do elemento 'MyElement'

Eu estou tentando validar um xml realmente simples usando xsd, mas por algum motivo eu recebo este erro. Eu realmente aprecio se alguém puder me explicar o porquê.

Arquivo XML

<?xml version="1.0" encoding="utf-8"?> 
<MyElement>A</MyElement>

Arquivo XSD

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.example.org/Test"
        xmlns:tns="http://www.example.org/Test"
        elementFormDefault="qualified">

    <simpleType name="MyType">
        <restriction base="string"></restriction>
    </simpleType>

    <element name="MyElement" type="tns:MyType"></element>
</schema>
28
Mitko Mitev

Seu esquema é para seu namespace de destino http://www.example.org/Test, portanto, ele define um elemento com o nome MyElement nesse namespace de destino http://www.example.org/Test. No entanto, o seu documento de instância tem um elemento com o nome MyElement em no namespace . É por isso que o analisador de validação informa que não pode encontrar uma declaração para esse elemento, você não forneceu um esquema para elementos em nenhum namespace.

Você precisa alterar o esquema para não usar um namespace de destino ou precisa alterar a instância para usar, por exemplo, <MyElement xmlns="http://www.example.org/Test">A</MyElement>.

29
Martin Honnen

Eu tive esse erro para o meu elemento XXX e foi porque meu XSD foi formatado incorretamente de acordo com javax.xml.bind v2.2.11. Acho que está usando um formato XSD mais antigo, mas não me preocupei em confirmar.

Meu XSD inicial errado era parecido com o seguinte:

<xs:element name="Document" type="Document"/>
...
<xs:complexType name="Document">
    <xs:sequence>
        <xs:element name="XXX" type="XXX_TYPE"/>
    </xs:sequence>
</xs:complexType>

O bom formato XSD para minha migração ter sucesso foi o seguinte:

<xs:element name="Document">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="XXX"/>
        </xs:sequence>
    </xs:complexType>        
</xs:element>
...
<xs:element name="XXX" type="XXX_TYPE"/>

E assim por diante, para todos os nós XSD semelhantes.

0
Michael Fayad