Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XML Schema Validation : Cannot find the declaration of element

I am still a bit new to XML Schema etc. and have been working to develop some XML, Schema and a Stylesheet (XSLT). I have made reasonable progress, but then realized that my Schema had stopped working, so I have taken it back to a simpler non-descript example.

Here is my 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> 

I have written a Schema that is here:

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

The Schema is representative of the structure of my real XML.

Now, when I try to validate my XML, I get this error:

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

This I think is to do with a namespace issue on the Root element, but I am really not sure.

Can someone suggest what I am doing wrong please.

like image 491
Nerdio Avatar asked Mar 26 '13 16:03

Nerdio


Video Answer


1 Answers

Thanks to everyone above, but this is now fixed. For the benefit of others the most significant error was in aligning the three namespaces as suggested by Ian.

For completeness, here is the corrected XML and XSD

Here is the XML, with the typos corrected (sorry for any confusion caused by tardiness)

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

and, here is the Schema

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

Thanks again to everyone, I hope this is of use to somebody else in the future.

like image 53
Nerdio Avatar answered Sep 29 '22 11:09

Nerdio