février
2009
A cette étape, le fichier XML shapesDiagram*.xml n’a aucune validation. La validation d’un fichier XML peut s’effectuer à l’aide d’une DTD ou d’un schéma XML. Dans notre cas nous allons valider le fichier XML à l’aide du schéma XML shapesDiagram.xsd. WST gère la validation de fichiers XML par Schéma XML. Le Schéma XML peut se trouver à plusieurs endroits :
- en local. Le schéma XML se trouve dans un projet Eclipse ou sur le disque. Le lien avec le schéma XML s’effectue en utilisant les attributs schemaLocation ou noNamespaceSchemaLocation.
- dans le catalogue XML de WST qui contient les DTD et les schémas XML que l’on peut utiliser dans l’éditeur XML. Le lien avec le schéma XML peut s’effectuer uniquement à l’aide d’un espace de nom. Il y a deux possibilités pour enregistrer le schéma XML dans le catalogue XML :
- User Specified Entries : qui permet d’enregistrer son schéma XML dans le catalogue.
- Plugin Specified Entries qui contiennent les schémas XML et DTD disponibles. Ils proviennent des plugins installés dans votre Eclipse qui ont enregistrés leur DTD et Schéma XML à l’aide du point d’extension org.eclipse.wst.xml.core.catalogContributions fourni par le projet XML de WST.
Il y a un double intérêt de lier le fichier XML shapesDiagram*.xml au Schema XML shapesDiagram.xsd :
- validation du contenu XML qui permet de valider la structure du document XML.
- auto-complétion qui permet de proposer les éléments XML possibles selon l’endroit ou l’on se situe dans l’éditeur XML.
Vous pouvez télécharger le projet org.eclipse.wst.xml.examples.shapes_1.0.0.zip présenté dans ce billet.
Schéma XML – shapesDiagram.xsd
Je ne vais pas faire un cours sur les Schéma XML, et je vous conseille vivement de lire l’article Tutorial XML Schema, notemment :
- 9. Espaces de noms. qui explique comment définir un espace de nom dans un schéma (ce que nous allons utiliser)
- 10. W3C XML Schema dans les documents XML qui explique comment lier un document XML à un schéma XML (schéma définissant un espace de nom..).
Le schéma XML shapesDiagram.xsd est un schéma définissant l’espace de nom http://www.eclipse.org/shapes/ :
elementFormDefault="qualified"
attributeFormDefault="unqualified"
targetNamespace="http://www.eclipse.org/shapes/"
xmlns="http://www.eclipse.org/shapes/">
<xsd:element name="diagram">
...
Il est important de noter que elementFormDefault= »qualified » et attributeFormDefault= »unqualified » doivent être définis.
Le document XML shapesDiagram*.xml sera lié au schéma à en utilisant l’espace de nom http://www.eclipse.org/shapes/ :
...
shapesDiagram.xsd
Voici le contenu du Schéma XML shapesDiagram.xsd :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified"
targetNamespace="http://www.eclipse.org/shapes/"
xmlns="http://www.eclipse.org/shapes/">
<xsd:element name="diagram">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="shapes" minOccurs="0" maxOccurs="1">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="rectangle" type="RectangleType"></xsd:element>
<xsd:element name="ellipse" type="EllipseType"></xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="title" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="RectangleType">
<xsd:complexContent>
<xsd:extension base="ShapeType" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="EllipseType">
<xsd:complexContent>
<xsd:extension base="ShapeType" />
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="ShapeType" abstract="true">
<xsd:attribute name="x" type="xsd:int"></xsd:attribute>
<xsd:attribute name="y" type="xsd:int"></xsd:attribute>
<xsd:attribute name="width" type="xsd:int"></xsd:attribute>
<xsd:attribute name="height" type="xsd:int"></xsd:attribute>
</xsd:complexType>
</xsd:schema>
Local
Créez un projet vide TestShapesDiagramSchemaXML et dans ce projet créez le fichier Schema XML shapesDiagram.xsd (avec le contenu comme décrit ci-dessus) et le fichier XML shapesDiagram.xml comme ceci :
<diagram xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="shapesDiagram.xsd">
<shapes>
<rectangle x="0" y="10" width="45" height="78"/>
<ellipse />
<rectangle />
<ellipse />
</shapes>
</diagram>
Comme vous pouvez le constater, le fichier shapesDiagram.xml est lié au schéma XML shapesDiagram.xsd avec l’attribut schemaLocation qui contient
l’espace de nom http://www.eclipse.org/shapes/, suivi d’un espace puis du nom du fichier schéma XML shapesDiagram.xsd :
xsi:schemaLocation="http://www.eclipse.org/shapes/ shapesDiagram.xsd">
..
Auto-complétion
L’éditeur XML est capable d’utiliser les informations du Schema XML pour proposer les noeuds DOM (element, attributs…) disponibles en fonction de la position du curseur dans l’éditeur. Si vous vous positionnez en dessous de l’élement shapes, puis que vous effectuez Ctrl+Space, la fenêtre d’auto-complétion s’affiche en proposant les élements XML ellipse et rectangle :
Validation
L’éditeur XML gère les erreurs de validation du contenu XML de l’editeur. Par exemple si vous tentez d’ajouter l’élement XML , un marqueur rouge s’affiche en indiquant que l’élement insérés ne suit pas le schéma XML :
Catalogue XML
Le plugin XML de WST fournit la possibilité de stocker les DTD et les chéma XML dans un catalogue XML. Pour y accéder, Ouvrez les préferences via le menu Window/Préférences et accédez au noeud XML/XML Catalog :
Il existe 2 entrées de catalogues :
- User Specified Entries : qui permet d’enregistrer son schéma XML dans le catalogue.
- Plugin Specified Entries qui contiennent les schémas XML et DTD disponibles. Ils proviennent des plugins installés dans votre Eclipse qui ont enregistrés leur DTD et Schéma XML à l’aide du point d’extension org.eclipse.wst.xml.core.catalogContributions fourni par le projet XML de WST.
Catalogue XML – User-Specified Entry
Pour faire référence au schéma XML shapesDiagram.xsd uniquement par espace de nom sans utiliser schemaLocation :
...
il faut enregistrer le schéma XML dans le catalogue XML (section User-Specified Entry). Pour cela accéder au catalogue XML et sélectionnez User-Specified Entry, puis cliquez sur le bouton Add…. Sélectionner le schéma XML :
Key Type à la valeur Namespace Name car nous souhaitons faire réference au schéma par l’espace de nom http://www.eclipse.org/shapes/.
Remplacer le fichier shapesDiagram.xml par ce contenu pour vérifiez que le schéma XML est bien enregistré dans le catalogue XML.
<diagram xmlns="http://www.eclipse.org/shapes/">
<shapes>
<rectangle x="0" y="10" width="45" height="78" />
<ellipse />
<rectangle />
<ellipse />
</shapes>
</diagram>
Catalogue XML – Extension
WST donne la possibilité à n’importe quel plugin, d’enregistrer un schéma XML dans le catalogue XML. En effet le point d’extension.org.eclipse.wst.xml.core.catalogContributions à un plugin d’enregistrer un schéma XML dans le catalogue XML.
Nous allons modifier Shapes DOM-SSE pour enregistrer le schéma XML dans le catalogue XML de WST. Les étapes sont :
- Créer un répertore xsd dans le plugin org.eclipse.wst.xml.examples.shapes.
- Créer shapesDiagram.xsd dans le répertore xsd.
- Ajouter le point d’extension org.eclipse.wst.xml.core.catalogContributions dans le fichier plugin.xml comme suit :
...<extension
point="org.eclipse.wst.xml.core.catalogContributions">
<catalogContribution
id="org.eclipse.wst.xml.examples.shapes.catalog">
<public
publicId="http://www.eclipse.org/shapes/"
uri="xsd/shapesDiagram.xsd">
</public>
</catalogContribution>
</extension>
...
Le wizard de création ShapesCreationWizard d’un fichier shapesDiagram*.xml doit être modifié pour ajouter l’espace de nom http://www.eclipse.org/shapes/ au XML généré. Pour cela modifier la méthode ShapesCreationWizard#getInitialContents() comme ceci :
String xml = new String("<diagram xmlns=\"http://www.eclipse.org/shapes/\" " +
" title=\"My shapes diagram\" >\n" + //
"\t<shapes>\n" //
+ "\t\t<rectangle x=\"10\" y=\"20\" width=\"100\" height=\"100\" />\n" //
+ "\t\t<ellipse x=\"15\" y=\"25\" width=\"80\" height=\"50\" />\n" //
+ "\t</shapes>\n" + //
"</diagram>");
return new ByteArrayInputStream(xml.getBytes());
}
Lorsque vous relancez Shapes DOM-SSE, vous pourrez constater que le schéma XML est enregistrés dans l’entrée XML Catalog Plugin Specificied Entries.
Articles récents
- Conception d’un client Eclipse RCP et serveur OSGI avec Spring DM [step5]
- Conception d’un client Eclipse RCP et serveur OSGI avec Spring DM [step4]
- Conception d’un client Eclipse RCP et serveur OSGI avec Spring DM [step3]
- Conception d’un client Eclipse RCP et serveur OSGI avec Spring DM [step2]
- Conception d’un client Eclipse RCP et serveur OSGI avec Spring DM [step1]
Commentaires récents
- Conception d’un Editeur Eclipse de workflow XML [step 0] dans
- Conception d’un Editeur Eclipse de workflow XML [step 19] dans
- Conception d’un Editeur Eclipse de workflow XML [step 7] dans
- Conception d’un Editeur Eclipse de workflow XML [step 7] dans
- Conception d’un Editeur Eclipse de workflow XML [step 7] dans