2008-11-11 3 views

Répondre

0

Vous pourriez truquer ceci en utilisant < choix> et/ou < séquence>. Par exemple, vous pouvez autoriser rien, fieldB, ou fieldA et fieldB, mais pas seulement fieldA. Cela pourrait conduire à la duplication, que vous pourriez éviter en définissant un complexType.

0

Vos options pour ce genre de chose dépendent de la façon dont les «champs» sont représentés en XML et de la version de XSD que vous utilisez. Si fieldA et fieldB sont des éléments, y compris une structure de la forme suivante dans le modèle de contenu approprié ferait l'affaire.

<sequence minOccurs="0"> 
    <element ref="tns:fieldA" minOccurs="0"/> 
    <element ref="tns:fieldB"/> 
</sequence> 

(Les deux références d'éléments peuvent apparaître dans l'autre ordre si vous préférez.) Il est pas clair pour moi pourquoi Erik Hesselink craint que cela peut conduire à la duplication, ou quelle forme de double emploi, il est inquiet.

Si vous faites fieldB être un élément et fieldA être un attribut (facultatif?) Sur cet élément, la contrainte de cooccurrence que vous voulez suit automatiquement.

Si vous définissez les deux attributs, la contrainte de cooccurrence ne peut pas être appliquée par XSD 1.0; certaines personnes ont recours à Schematron pour gérer des choses comme ça. Dans XSD 1.1, les options permettant d'appliquer la contrainte dans cette situation incluent xs:assert et l'affectation de type conditionnelle.

Questions connexes