From: Eric van der Vlist (vdv@dyomedea.com)
Date: 10/02/2004 - 14:45
On Tue, 2004-02-10 at 15:30, Robin Berjon wrote:
> AS wrote:
> > je voudrais déclarer (dans un schema xml) un élément
> > avec 2 attributs avec la contrainte suivante : au
> > moins un des deux doit être présent
>
> Je pense que ça devrait faire:
>
> <element name='foo'>
> <oneOrMore>
> <choice>
> <attribute name='att1'/>
> <attribute name='att2'/>
> </choice>
> </oneOrMore>
> </element>
Avec RELAX NG que nous ne conseillerons jamais assez, trois fois oui !!!
Avec W3C XML Schema, c'est beaucoup plus hasardeux, mais si on est prêt
à accepter ce message d'erreur (très déroutant pour un utilisateur dit
final) lorsqu'il n'y a aucun attribut :
[Error] 2att.xml:5:9: Identity Constraint error
(cvc-identity-constraint.4.2.1): element "foo" has a key with no value.
On peut utiliser cet obscur contournement :
<xs:element name="foo">
<xs:complexType>
<xs:attribute name="bar" type="xs:token" use="optional"/>
<xs:attribute name="bat" type="xs:token" use="optional"/>
</xs:complexType>
<xs:key name="bidouille">
<xs:selector xpath="."/>
<xs:field xpath="@bar|@bat"/>
</xs:key>
</xs:element>
Le fait de définir une clé sur "@bar|@bat" a pour conséquence de
provoquer une erreur si aucun des deux attributs n'est présent.
Lorsqu'au moins un des deux attributs est présent, la clé ne sert à rien
(vu l'endroit où elle est placée) mais elle ne provoque pas d'erreur.
Cordialement,
Eric van der Vlist
--
Did you know it? Python has now a Relax NG (partial) implementation.
http://advogato.org/proj/xvif/
Upcoming XML schema languages tutorial:
- Santa Clara -half day- (15/03/2004) http://masl.to/?J24916E96
------------------------------------------------------------------------
Eric van der Vlist http://xmlfr.org http://dyomedea.com
(ISO) RELAX NG ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
(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)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:05 UTC
webmaster@xmlfr.org
|