validar validacion tipos esquema ejemplo con como xml xsd xml-validation xml-error

validacion - xsd con xml



ValidaciĆ³n del esquema XML: no se puede encontrar la declaraciĆ³n del elemento (3)

Todavía soy un poco nuevo en el esquema XML, etc., y he estado trabajando para desarrollar algunos XML, un esquema y una hoja de estilo (XSLT). He hecho un progreso razonable, pero luego me di cuenta de que mi esquema había dejado de funcionar, por lo que lo he vuelto a un ejemplo más simple y sin descripción.

Aquí está mi XML:

<?xml version="1.0" encoding="UTF-8"?> <Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="Test.Namespace" schemaLocation="http://myNameSpace.com Test1.xsd"> <element1 id="001"> <element2 id="001.1"> <element3 id="001.1" /> </element2> </element1> </Root>

He escrito un esquema que está aquí:

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="Test.Namespace" elementFormDefault="qualified"> <xsd:element name="Root"> <xsd:complexType> <xsd:sequence> <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="element1Type"> <xsd:sequence> <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="element2Type"> <xsd:sequence> <xsd:element name="item" type="element3Type"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="element3Type"> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> </xsd:schema>

El esquema es representativo de la estructura de mi XML real.

Ahora, cuando intento validar mi XML, recibo este error:

cvc-elt.1: Cannot find the declaration of element ''Root''. [7]

Creo que esto tiene que ver con un problema de espacio de nombres en el elemento raíz, pero realmente no estoy seguro.

¿Puede alguien sugerir lo que estoy haciendo mal por favor.


cvc-elt.1: no se puede encontrar la declaración del elemento ''Root''. [7]

Su atributo schemaLocation en el elemento raíz debe ser xsi:schemaLocation , y debe corregirlo para usar el espacio de nombres correcto.

Probablemente debería cambiar el targetNamespace del esquema y los xmlns del documento a http://myNameSpace.com (ya que se supone que los espacios de nombres son URI válidos, que Test.Namespace no es, aunque urn:Test.Namespace estaría bien ). Una vez que lo hagas deberás encontrar el esquema. El punto es que los tres espacios de nombres de destino del esquema, el espacio de nombres del documento y el espacio de nombres para el que está dando la ubicación del esquema deben ser los mismos.

(aunque todavía no se validará, ya que su <element2> contiene un <element3> en el documento donde el esquema espera el item )


El targetNamespace de su esquema XML no coincide con el espacio de nombres del elemento raíz (punto en Test.Namespace vs. coma en Test,Namespace )

Una vez que esté de acuerdo con lo anterior, debe considerar que su element2 tiene un orden de atributo que no está en su XSD.


Gracias a todos los anteriores, pero esto ya está arreglado. Para el beneficio de otros, el error más importante fue alinear los tres espacios de nombres como lo sugirió Ian.

Para completar, aquí está el XML y XSD corregidos

Aquí está el XML, con los errores tipográficos corregidos (perdón por cualquier confusión causada por la tardanza)

<?xml version="1.0" encoding="UTF-8"?> <Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:Test.Namespace" xsi:schemaLocation="urn:Test.Namespace Test1.xsd" > <element1 id="001"> <element2 id="001.1"> <element3 id="001.1" /> </element2> </element1> </Root>

y aqui esta el esquema

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Test.Namespace" xmlns="urn:Test.Namespace" elementFormDefault="qualified"> <xsd:element name="Root"> <xsd:complexType> <xsd:sequence> <xsd:element name="element1" maxOccurs="unbounded" type="element1Type"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="element1Type"> <xsd:sequence> <xsd:element name="element2" maxOccurs="unbounded" type="element2Type"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="element2Type"> <xsd:sequence> <xsd:element name="element3" type="element3Type"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="element3Type"> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> </xsd:schema>

Gracias de nuevo a todos, espero que sea de utilidad para otra persona en el futuro.