2009-09-27 4 views
2

J'essaie d'autoriser deux valeurs d'attribut pour un élément. C'est ainsi que je l'ai fait maintenant, mais je veux seulement autoriser 1 des 2, mais pas les deux.Existe-t-il un moyen d'autoriser l'attribut 'this' ou l'attribut 'this other', mais pas les deux?

<contact phoneH="cell">8025550000</contact> 
<contact phoneW="work"> 8025550094</contact> 

Je cherche à être en mesure de faire quelque chose comme ceci:

<xsd:attribute name="phoneH|phoneW" type="xsd:string" /> 

est-il un moyen de faire utiliser l'élément de restriction avec des attributs?

Merci,
Levi

Répondre

1

Vous ne pouvez pas faire cela avec W3C xsd.

Une alternative serait de faire des sous-éléments de contact téléphoniqueH et téléphonique, et d'utiliser xs:choice pour limiter l'utilisateur à l'un ou l'autre sous-élément.

+0

Ok. En fait, je venais tout juste de lire la deuxième option et je devais normalement passer à autre chose et faire comme ça, mais cela fait partie de certains devoirs non gradés, donc je ne voulais pas trop dévier des exigences. Mais oui, le choix est une bonne alternative pour un scénario normal. Merci! – Levi

1

Je ne crois pas que la contrainte d'attribut est possible avec le schéma XML.

Vous pouvez appliquer des mécanismes de validation supplémentaires (à savoir schematron) ou utiliser une autre mise en œuvre du schéma (à savoir Relax-NG)

http://lists.xml.org/archives/xml-dev/200107/msg00070.html

Malheureusement vous ne pouvez pas le faire avec W3C XML Schema. Comme je vois que vous avez deux options:

1) Modification d'un dialecte schéma différent (je pense que le soutien RELAX-NG cette fonctionnalité ) 2) Exprimez-vous co-contrainte en utilisant une règle intégrée Schematron

Ces contraintes peuvent être validées avec le nouveau Validateur Schematron de Topologi. L'outil est gratuit et peut être téléchargé sur www.topologi.com.

+0

Ok, je vais devoir faire quelques lectures sur les deux. Je sais qu'à un certain moment ce semestre mon professeur de XML va les passer en revue, mais il serait peut-être bon d'avoir quelques notions de base avant cela. – Levi

Questions connexes