Est-il valide, d'avoir un "choix" du "groupe" d'éléments lors de la définition d'un Schéma XML (XSD)
Est-il valide, d'avoir un "choix" ou "groupe" d'éléments lors de la définition d'un Schéma XML (XSD)
c'est à dire est la suivante valide
<xs:complexType name="HeaderType">
<xs:sequence>
<xs:element name="reservation-number" type="ReservationNumberType" minOccurs="1" maxOccurs="1" nillable="false" />
<xs:choice minOccurs="1" maxOccurs="1">
<xs:group ref="ReservationGroup" />
<xs:group ref="CancellationGroup"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
Où un message XML peut représenter, par exemple, soit une nouvelle demande de réservation ou d'annulation d'une réservation existante.
Si le message est une demande de réservation, alors il doit inclure tous les éléments définis dans le ReservationGroup groupe.
Si c'est une annulation, alors il doit inclure tous les éléments définis dans le CancellationGroup groupe.
Pour une raison quelconque, mon éditeur XML (Eclipse) n'aime pas cela, mais n'indique pas pourquoi. Il montre qu'il y ait une erreur sur la ligne <xs:complexType name="HeaderType"> mais il ne dit pas quelle est l'erreur
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas un expert XML, bien que je l'utilise beaucoup. Ce n'est pas la façon dont je l'avais généralement faire ce genre de structure. Je préfère un complexe séparé types plutôt qu'un choix de deux groupes (voir la fin de cette réponse).
Je soupçonne que le problème est que ReservationGroup et CancellationGroup commencer avec le même élément, dans ce cas, vous violera le Composant de Schéma de Contrainte: Attribution de Particule Unique (ci-dessous).
http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#cos-nonambig
Par exemple, les deux groupes ci-dessous sont illégales dans le même choix, car chacun de leur premier élément est "nom", ce qui signifie que vous ne pouvez pas vous identifier à quel groupe vous êtes en train de regarder. Cependant, c'est le premier élément de ReservationGroup est différente de l'Annulation de groupe
(resDate et cancDate peut-être), puis le valide.
Edit: je n'avais jamais rencontré ce genre de problème avant, et je pense que son fascinant que les définitions des groupes sont tout à fait légal, mais si vous les mettez ensemble dans un choix, ce choix devient illégale en raison de la définition de chaque groupe.
Groupes qui ne forment pas un choix légal
Des groupes qui constituent un choix
Comme je l'ai mentionné ci-dessus, je ferais ce genre de chose avec les types complexes. Oui, il ajoute un autre élément, mais il semble que le moyen le plus évident et j'ai comme une évidence.
Oui. C'était parce que les deux la ReservationGroup et la CancellationGroup eu le même premier élément - une réserve de type "élément avec une valeur fixe de "Réserve" dans le ReservationGroup et "Annulation" dans le Cancellationgroup respectivement.
Si c'est valable dépend du contenu des groupes: si elles sont "séquence" ou "choix" modèle de groupes, il est parfaitement légal; 'toutes' les groupes du modèle sont de plus en plus problématique et n'est généralement pas autorisé dans ce cas.