Je souhaite valider des fichiers XML par rapport au schéma suivant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="firm:invoice"
            elementFormDefault="unqualified"
            attributeFormDefault="unqualified"
            version="1.0">
	<xsd:element name="invoice">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="client">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="name" type="xsd:string"></xsd:element>
							<xsd:element name="firstname" type="xsd:string"></xsd:element>
							<xsd:element name="address">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="street"
											type="xsd:string">
										</xsd:element>
										<xsd:element name="postalCode"
											type="xsd:string">
										</xsd:element>
										<xsd:element name="City"
											type="xsd:string">
										</xsd:element>
									</xsd:sequence>
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="articles" maxOccurs="1" minOccurs="1">
					<xsd:complexType>
						<xsd:sequence>
							<xsd:element name="article" maxOccurs="unbounded" minOccurs="1">
								<xsd:complexType>
									<xsd:sequence>
										<xsd:element name="id"
											type="xsd:string">
										</xsd:element>
										<xsd:element name="description"
											type="xsd:string">
										</xsd:element>
										<xsd:element name="quantity"
											type="xsd:string">
										</xsd:element>
									</xsd:sequence>
								</xsd:complexType>
							</xsd:element>
						</xsd:sequence>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
 
</xsd:schema>
J'ai le fichier XML suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
<?xml version="1.0" encoding="UTF-8"?>
<invoice xmlns="firm:invoice">
  <client>
    <name>Dupont</name>
    <firstname>Franck</firstname>
    <address>
      <street>32, rue de la paix</street>
      <postalCode>75001</postalCode>
      <City>Paris</City>
    </address>
  </client>
  <articles>
    <article>
      <id>1</id>
      <description>article 1</description>
      <quantity>1</quantity>
    </article>
    <article>
      <id>23</id>
      <description>article 2</description>
      <quantity>3</quantity>
    </article>
    <article>
      <id>78</id>
      <description>article 3</description>
      <quantity>2</quantity>
    </article>
    <article>
      <id>14</id>
      <description>article 4</description>
      <quantity>1</quantity>
    </article>
  </articles>
</invoice>
Je valide le fichier à l'aide du code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
 
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
 
import org.w3c.dom.Document;
 
public class SchemaValidationTests
{
 
    /**
     * @param args
     */
    public static void main(String[] args)
    {
        try {
            Document document_l = null;
            DocumentBuilder parser_l;
            DocumentBuilderFactory docFactory_l = DocumentBuilderFactory.newInstance();
            docFactory_l.setNamespaceAware(true);
            parser_l = docFactory_l.newDocumentBuilder();
            document_l = parser_l.parse(SchemaValidationTests.class.getResourceAsStream("invoice.xml"));
 
            SchemaFactory factory_l = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Source[] sources_l = new Source[] {
                    new StreamSource(SchemaValidationTests.class.getResourceAsStream("invoice.xsd"))
            };
            Schema schema_l = factory_l.newSchema(sources_l);
            Validator validator_l = schema_l.newValidator();
            validator_l.validate(new DOMSource(document_l));
        }
        catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
}
J'obtiens alors l'erreur suivante:
ERREUR : 'cvc-complex-type.2.4.a: Invalid content was found starting with element 'client'. One of '{"":client}' is expected.'

Ou est mon erreur ? Merci pour votre aide.