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 :
Il y a un double intérêt de lier le fichier XML shapesDiagram*.xml au Schema XML shapesDiagram.xsd :
Vous pouvez télécharger le projet org.eclipse.wst.xml.examples.shapes_1.0.0.zip présenté dans ce billet.
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 :
Le schéma XML shapesDiagram.xsd est un schéma définissant l'espace de nom http://www.eclipse.org/shapes/ :
<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">
...
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/ :
<diagram xmlns="http://www.eclipse.org/shapes/" >
...
Voici le contenu du Schéma XML shapesDiagram.xsd :
<?xml version="1.0" encoding="UTF-8"?>
<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>
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 :
<?xml version="1.0" encoding="UTF-8"?>
<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 :
<diagram xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.eclipse.org/shapes/ shapesDiagram.xsd">
..
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 :

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 <a>, un marqueur rouge s'affiche en indiquant que l'élement insérés ne suit pas le schéma 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 :
Pour faire référence au schéma XML shapesDiagram.xsd uniquement par espace de nom sans utiliser schemaLocation :
<diagram xmlns="http://www.eclipse.org/shapes/" >
...
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.
<?xml version="1.0" encoding="UTF-8"?>
<diagram xmlns="http://www.eclipse.org/shapes/">
<shapes>
<rectangle x="0" y="10" width="45" height="78" />
<ellipse />
<rectangle />
<ellipse />
</shapes>
</diagram>
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 :
<plugin>
...<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 :
protected InputStream getInitialContents() {
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.
Cet article n'a pas de Commentaires/Pingbacks pour le moment...
Vous devez être identifié pour poster un commentaire.
| Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
|---|---|---|---|---|---|---|
| 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 |
Copyright © 2000-2012 - www.developpez.com