From: Guillaume Selindorf (selindorf@hotmail.com)
Date: 05/02/2003 - 08:44
Bonjour,
Il y a peut etre une solution :
------------------------------------------
Comment peut-on définir avec W3C XML Schema des contenus qui dépendent d'une
valeur (pays ou nationalité par exemple)?
Eric van der Vlist, Dyomedea (vdv@dyomedea.com).
vendredi 13 septembre 2002
Question:
J'aurais voulu savoir comment je pourrais valider un document XML dont le
contenu varie suivant la valeur d'un attribut comme par exemple:
<enregistrement contenu="type1">
<a />
</enregistrement>
<enregistrement contenu="type2">
<b />
</enregistrement>
Où le contenu autorisé dans l'élément "enregistrement" dépend de la valeur
de l'attribut "contenu".
Réponse:
Si vous tenez au nom de l'attribut "contenu", W3C XML Schema seul ne peut
pas grand chose pour vous et vous devrez accepter que votre contenu soit le
contenu "type1" ou "type2" quelque soit la valeur de l'attribut "contenu" en
écrivant un schéma qui accepte toutes les combinaisons, par exemple:
<xs:element name="enregistrement">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="a" type="..."/>
</xs:sequence><xs:sequence>
<xs:element name="b" type="..."/>
</xs:sequence></xs:choice>
<xs:attribute name="contenu">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="type1"/>
<xs:enumeration value="type2"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
A ce schéma de base, vous pouvez éventuellement ajouter des règles XPath en
utilisant le langage de schémas Schematron si vos applications le
supportent.
Si par contre vous pouvez changer le nom de l'attribut "contenu" et utiliser
à la place l'attribut "xsi:type" prévu à cet usage par W3C XML Schema, vous
pouvez simplement déclarer votre élément "enregistrement" comme acceptant un
type abstrait dont seront dérivés vos contenus possibles.
<xs:complexType name="generique" abstract="true">
<xs:sequence>
<xs:element name="a" type="..." minOccurs="0"/>
<xs:element name="b" type="..." minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="type1">
<xs:complexContent>
<xs:restriction base="generique">
<xs:sequence>
<xs:element name="a" type="..."/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="type2">
<xs:complexContent>
<xs:restriction base="generique">
<xs:sequence>
<xs:element name="b" type="..."/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:element name="enregistrement" type="generique"/>
Il ne reste plus ensuite qu'à déclarer dans vos éléments quel est le type
utilisé:
<enregistrement xsi:type="type1">
<a/>
</enregistrement>
<enregistrement xsi:type="type2">
<b/>
</enregistrement>
-----------------------------------------------
La structure de l'élément "enregistrement" dépends bien de la valeur de
l'attribut ! Je pense que ca pourrait répondre à votre problème non ?
Cordialement
Guillaume PATIES
PS : j'ai conservé ce message de coté et je me permet de le recopier ici,
j'espère avoir le droit ;) (sinon je m'en excuse)
>From: Eric van der Vlist <vdv@dyomedea.com>
>Reply-To: xml-tech@xmlfr.org
>To: xml-tech@xmlfr.org
>Subject: [xml-tech] Re: Faire dépendre larègle à appliquer selon la
>valeurd'un attribut
>Date: 04 Feb 2003 10:02:40 +0100
>
>
>On Tue, 2003-02-04 at 09:45, Antoine.Mathieu@cec.eu.int wrote:
> > Bonjour,
> >
> > Je suppose qu'il n'est pas possible de creer un XML-Schema validant le
>XML
> > ci dessous (faire que la règle s'appliquant à l'élément dépende de la
>valeur
> > de l'attribut).
>
>Non, effectivement, voir:
>
>http://xmlfr.org/documentations/faq/020913-0003
>
> > D'une manière générale, avez-vous une (bonne) référence indiquant les
> > limitations du XML-Schema ?
>
>A part la recommandation elle-même (difficile à lire), je peux
>conseiller:
>
>http://xml.com/pub/a/2001/12/12/schemacompare.html
>
>ainsi que mon livre :-)
>
>Cordialement,
>
>Eric van der Vlist
>--
>If you have a XML document, you have its schema.
> http://examplotron.org
>------------------------------------------------------------------------
>Eric van der Vlist http://xmlfr.org http://dyomedea.com
>(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
>------------------------------------------------------------------------
>
>--
>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)
_________________________________________________________________
MSN Search, le moteur de recherche qui pense comme vous !
http://search.msn.fr/worldwide.asp
--
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:06 UTC
webmaster@xmlfr.org
|