I’m trying to validate my XML document against my XML schema.
This is my schema:
<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio 2012 Developer Edition (Trial) 10.1.8.4306 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MSG">
<xs:complexType>
<xs:sequence>
<xs:element name="EnTete" type="EnTeteType" />
<xs:element name="OME" type="OMEType" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Type" type="xs:string" use="required" />
<xs:attribute name="Version" type="xs:decimal" use="required" />
</xs:complexType>
</xs:element>
<xs:complexType name="EnTeteType">
<xs:sequence>
<xs:element ref="Source" />
<xs:element ref="Creation" />
</xs:sequence>
</xs:complexType>
<xs:element name="Source">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="NEBEFI" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Creation">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="12" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:complexType name="OMEType">
<xs:sequence>
<xs:element ref="Derniere-Modif" />
<xs:element ref="Date-Mesure" />
<xs:element name="Reference" type="ReferenceType" />
<xs:element name="Puissance" type="PuissType" />
<xs:element ref="Total" />
</xs:sequence>
<xs:attribute name="Nom" type="xs:string" use="required" />
</xs:complexType>
<xs:element name="Derniere-Modif" type="xs:string" />
<xs:element name="Date-Mesure">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="14" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:complexType name="ReferenceType">
<xs:sequence>
<xs:element ref="Nature" />
<xs:element ref="Statut" />
<xs:element ref="Type-Gest" />
<xs:element ref="Gest" />
<xs:element ref="Type-Res" />
<xs:element ref="Nb-h" />
</xs:sequence>
</xs:complexType>
<xs:element name="Nature" type="xs:string" />
<xs:element name="Statut">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:enumeration value="0" />
<xs:enumeration value="1" />
<xs:enumeration value="2" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Type-Gest" type="xs:string" />
<xs:element name="Type-Res" type="xs:string" />
<xs:element name="Gest">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="10" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Nb-h">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:enumeration value="23" />
<xs:enumeration value="24" />
<xs:enumeration value="25" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Puiss">
<xs:complexType>
<xs:sequence>
<xs:element ref="Val" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Unite" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="Val" type="xs:string" />
<xs:element name="Total">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Unite" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:complexType name="PuissType">
<xs:all>
<xs:element ref="Puiss" />
</xs:all>
</xs:complexType>
</xs:schema>
and this is my XML document:
<?xml version="1.0" encoding="ISO-8859-1"?>
<MSG xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" Type="Publication" Version="1.0">
<EnTete>
<Source>NEBEFI</Source>
<Creation>201208092324</Creation>
</EnTete>
<OME Nom="Effacements RE">
<Derniere-Modif>20120809232419</Derniere-Modif>
<Date-Mesure>20120809000000</Date-Mesure>
<Reference>
<Nature>ACHAT</Nature>
<Statut>2</Statut>
<Type-Gest>RE</Type-Gest>
<Gest>RE_ENEL_RE</Gest>
<Type-Res>D</Type-Res>
<Nb-h>24</Nb-h>
</Reference>
<Puiss Unite="MW">
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
<Val>1.500</Val>
</Puiss>
<Total Unite="MWh">5961</Total>
</OME>
</MSG>
Now when I’m validating the document (via Eclipse) I get following message:
Not valid. Error – Line 18, 21: org.xml.sax.SAXParseException;
lineNumber: 18; columnNumber: 21; cvc-complex-type.2.4.a: Invalid
content was found starting with element ‘Puiss’. One of ‘{Puissance}’
is expected.Error – Line 69, 9: org.xml.sax.SAXParseException; lineNumber: 69;
columnNumber: 9; cvc-complex-type.2.3: Element ‘OME’ cannot have
character [children], because the type’s content type is element-only.Error – Line 70, 7: org.xml.sax.SAXParseException; lineNumber: 70;
columnNumber: 7; cvc-complex-type.2.3: Element ‘MSG’ cannot have
character [children], because the type’s content type is element-only.
This messages doesn’t make any sense, and it’s very hard (impossible?) to search the web for a solution.
The first error at least is very clear – according to your schema the next-to-last child element of OME should be named
Puissance, but the parser has foundPuissinstead. In particular, reading the rest of your schema it looks like it’s expectingIf this is your own schema you may want to replace the
in your
OMETypewith a simpleFor the other two errors I agree, they don’t seem to make much sense unless there’s some invisible non-printing characters in the XML, but I’ve known Eclipse get quite confused by certain classes of error in the past and start reporting problems that aren’t there – once you fix the first error you may find the others disappear too.