xsd même élément, différents types?
J'ai une situation où un élément dans le fichier XML peut être de deux types différents dans le fichier XSD.
Ce que je veux faire, c'est d'abord pour valider la valeur entrée à la plus stricte type (si c'est une personne qui remplit le formulaire) et si ce n'est pas tirer à travers, de les valider à la moindre de type strict (si c'est une organisation qui remplit le formulaire), sinon laissez la validation échouera si cela ne valide pas du tout.
C'est donc, fondamentalement, il s':
<xsd:complexType name="ForminfoType"> `
<xsd:sequence>
<xsd:element name="formname" type="xsd:string" />
<xsd:element name="timestamp" type="xsd:dateTime" />
<xsd:element name="sender" type="PersonType" minOccurs="0" />
<xsd:element name="receiver" type="OrganizationType" minOccurs="0" />
<xsd:element name="signature" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
Ce que le PersonType déclare agit essentiellement d'un numéro à 12 chiffres construit selon un modèle spécifique. Ce que le type de l'Organisation déclare est fondamentalement juste un numéro à 10 chiffres.
Donc ce que j'ai logiquement voudrais faire, c'est mettre ceci:
<xsd:element name="sender" type="OrganizationType" minOccurs="0" />
dans la séquence, mais vous ne pouvez pas avoir les deux éléments avec le même nom et les différents types. Donc, je pense que je doit le résoudre d'une autre manière.
Ce que j'ai trouvé est celle-ci:
http://xsd.stylusstudio.com/2007Oct/post05003.htm
Qui est à peu près ce que je veux faire, mais je ne suis pas sûr que c'est possible.
Quiconque a d'autres idées sur comment résoudre ce problème?
Merci d'avance.
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Non, vous ne pouvez pas vraiment faire. Une option que vous avez pour créer un "PersonOrOrgSender" de type complexe le long des lignes de :
et ensuite faire votre "expéditeur" une instance de ce type:
mais vous aurez de données XML comme ceci:
ou
Vous ne pouvez pas faire une seule balise (par exemple, "expéditeur") une chose dans un cas, et un autre dans un autre cas une balise doit avoir exactement un bien de type défini et a ce type une fois et pour tous les temps.
Marc
Donné à vos questions avec la solution fournie par @mark_s, vous avez plusieurs options:
sender
. Dans votre code qui déclenche la validation, de les exécuter de manière séquentielle (c'est à dire la personne qui était alors l'organisation). Ceci a l'avantage supplémentaire que votre code ne sais qui de validation passé (et pourrait faire des choix sur la base de cette connaissance).Déplacer le choix d'un niveau dans le XSD. À l'intérieur de
ForminfoType
ajouter un choix nœud avec les deux séquences (une personne, une organisation). Je n'ai pas validé, mais, en gros: