Bonjour,

Je cherche à parser des XSD en java pour en extraire les informations pertinentes. Ces XSD sont complexes (complexeType, import, contraintes de format/ordre/enum, ...).
Un de mes premiers objectifs est de générer un tableau qui liste les données et leur contraintes. J'ai donc besoin de parcourir l'xsd selon la sémantique d'un schéma (et non pas celle d'un xml).

Voici un exemple qui correspond au type de schéma que je dois prendre en charge. Il faudrait rajouter un import pour que l'exemple soit complet :
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
60
61
62
63
64
65
66
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 
 <xsd:annotation>
  <xsd:documentation xml:lang="en">
   Purchase order schema Par exemple.com.
   Copyright 2000 exemple.com. All rights reserved.
  </xsd:documentation>
 </xsd:annotation>
 
 <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
 
 <xsd:element name="comment" type="xsd:string"/>
 
 <xsd:complexType name="PurchaseOrderType">
  <xsd:sequence>
   <xsd:element name="shipTo" type="USAddress"/>
   <xsd:element name="billTo" type="USAddress"/>
   <xsd:element ref="comment" minOccurs="0"/>
   <xsd:element name="items"  type="Items"/>
  </xsd:sequence>
  <xsd:attribute name="orderDate" type="xsd:date"/>
 </xsd:complexType>
 
 <xsd:complexType name="USAddress">
  <xsd:sequence>
   <xsd:element name="name"   type="xsd:string"/>
   <xsd:element name="street" type="xsd:string"/>
   <xsd:element name="city"   type="xsd:string"/>
   <xsd:element name="state"  type="xsd:string"/>
   <xsd:element name="zip"    type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="country" type="xsd:NMTOKEN"
     fixed="US"/>
 </xsd:complexType>
 
 <xsd:complexType name="Items">
  <xsd:sequence>
   <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
    <xsd:complexType>
     <xsd:sequence>
      <xsd:element name="productName" type="xsd:string"/>
      <xsd:element name="quantity">
       <xsd:simpleType>
        <xsd:restriction base="xsd:positiveInteger">
         <xsd:maxExclusive value="100"/>
        </xsd:restriction>
       </xsd:simpleType>
      </xsd:element>
      <xsd:element name="USPrice"  type="xsd:decimal"/>
      <xsd:element ref="comment"   minOccurs="0"/>
      <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
     </xsd:sequence>
     <xsd:attribute name="partNum" type="SKU" use="required"/>
    </xsd:complexType>
   </xsd:element>
  </xsd:sequence>
 </xsd:complexType>
 
 <!-- Stock Keeping Unit, one code for identifying products -->
 <xsd:simpleType name="SKU">
  <xsd:restriction base="xsd:string">
   <xsd:pattern value="\d{3}-[A-Z]{2}"/>
  </xsd:restriction>
 </xsd:simpleType>
 
</xsd:schema>
Les informations a extraire seraient les suivantes afin de compléter un tableau du type :
Nom : TableauXSD.png
Affichages : 303
Taille : 25,6 Ko

J'ai identifié les API suivantes pour cela mais je souhaiterai votre avis avant de me lancer dans une implémentation.
  • XML Schema Object Model (XSOM)

Propose visiblement toutes les fonctionnalités nécessaires mais j'ai un doute car il ne semble plus être maintenu et je crain des incompatibilités avec les dernières normes XSD.

  • XML Shema Infoset Model

Pluggin eclipse. S'appuye sur org.eclipse.xsd mais je ne sais pas si ces lib sont utilisables pour un programme perso. Je n'ai pas trouvé de tuto pour lire un XSD.

  • EasyWSDL + EasySchema

Pas certain qu'il respecte l'ensemble des normes XSD.

Je vous remercie par avance pour votre aide.