From: Benoit Lefevre (benoit.lefevre@effix.fr)
Date: 24/04/2001 - 10:31
Bon, je vais esseiller d'illustrer mon probleme avec un exemple (le plus simple possible mais ce n'est pas gagne :)
D'un cote je doit decrire une structure de donnes de type messages. Voici une instance possible de ce type de donnes XML :
--------------------------------------------------
<msgHeureLocale>
<heures>5</heures>
<minutes>27</minutes>
</msgHeureLocale>
--------------------------------------------------
Cela me permet de stocker ou de representer (ou quoi que ce soit d'autre) un "message". Entre autre j'ai beaucoup de test de validite a faire sur ces messages, d'ou mon utilisation de XSD.
Si j'utilise XSD pour definir mes propre tag (par exemple msgHeureLocale). Ceux-ci herite d'un type message ayant de base deux attributs, le nom et l'idantifiant.
Voici ce type :
-----------------------------------------------------
<xsd:complexType name="TMSG">
<xsd:attribute name="NAME" type="perso:Tstring" use="required"/>
<xsd:attribute name="ID" type="perso:TID" use="required"/>
</xsd:complexType>
----------------------------------------------------
C'etait ma premiere idee pour avoir un tag / clef. Mais je ne pense plus que cela fonctionne. J'ai donc oublie pour un temps ces deux attributs mais j'ai garde le type TMSG.
Ce type ainsi que quelques autres sont mes types de base qui me permettent par la suite de creer mes propre tags representant des messages. Ils sont definis dans un premier fichier XSD, appelons le
SD1.
Dans un second fichier XSD (SD2) je souhaite faire la chose suivante : verifier la validite de ce fichier SD2 comme etant conforme par rapport a SD1 ET a la fois definir dans SD2 des elements heritant
du type TMSG vu precedement.
L'exemple suivant montre ce que l'ont pourrais trouver dans SD2 avec une tentative d'utiliser ce que Eric m'a conseille, a ceci pres que je ne suis pas certain de son utilisation :
----------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<XSD="C:\SD1.xsd"/>
<xsd:element name="msgHeureLocale">
<xsd:annotation>
<xsd:appinfo>
<knet:Identifiant> 1 </knet:Identifiant>
<!-- je ne suis pas certain de l'utilite du tag suivant -->
<knet:Nom> msgHeureLocale </knet:Nom>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType name="TmsgHeureLocale">
<xsd:complexContent>
<xsd:extension base="perso:TMSG">
<xsd:sequence>
<xsd:element name="heures" type="perso:Tint"/>
<xsd:element name="minutes" type="perso:Tint"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
-------------------------------------------------
Comme ont peu le voir ici tout le probleme reside dans le fait que je souhaiterais
me servire du tag <element> de deux facons :
-d'une part, pour definir un tag sur lequel il y aura par la suite des test de validite effectue automatiquement lors d'une de ses instanciations.
-d'autre part, pour utiliser <element> comme un tag me premettant de decrire une donne en temps que tel. En effet je souhaite verifier que SD2 est valide par rapport a SD1; ceci avant d'appliquer
un XSL sur SD2 pour generer du code. Ce fichier SD2 est donc dans la deuxieme partie de mon implementation sence etre considere non plus comme un fichier XSD mais comme un fichier XML contenant des
instances, une donne. Si instance il y a je doit etre en mesure (comment je ne sais pas) d'inserer quelque part un <key> permettant de verifier la coherance de cette instance.
L'idee de cet agencement des fichier et surtout de ce double emplois est de pouvoir :
1) verifier la validite de fichier XML par rapport a SD2
2) verifier la validite de SD2 par rapport a SD1
3) verifier la validite de SD2 par rapport a un eventuel
<key> sur l'identifiant vu dans l'exemple precedent
4) generer du code C++ a partir de SD2 et d'un .XSL
Je veux peut etre en faire trop d'un coup mais mon cheminement logique (a premiere vue je precise :) m'a ammene a agencer les choses comme ca.
voila pour ce qui est des precisions.
la question est toujour la meme : comment ajouter a cet agencement de fichier et de type un controle sur les tags <identifiant> 3 </identifiant> presente dans l'exemple precedent.
je doit bien avouer au passage que pour ce que j'ai pu en lire (et seulement lire :( ) l'utilisation du tag <key> est assez floue pour moi.
Je vois ca comme ca : lorsqu'on utilise <key>, il doit etre associe a la declaration d'une sorte de tag contenaire. Au cour de cette declaration, grace a <key> on precise qu'au seins du tag
contenaire, sur tel ou tel Xpath, tel ou tel tag doit etre considire comme une clef. Le test d'integrite intervient alors lors de la validation d'un document XML contenant des tag contenaire.
voila.
(ouf ! :) , et desole pour les fautes ... )
benoit lefevre.
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:05 UTC
webmaster@xmlfr.org
|