Schéma XML de la Façon de Limiter l'Attribut par Énumération
J'ai la Balise XML suivante
<price currency="euros">20000.00</price>
Comment puis-je limiter la devise de l'attribut de l'une des opérations suivantes:
- euros
- livres
- dollars
ET le prix d'un double?
Je viens d'obtenir une erreur quand j'essaie à un type sur les deux, voici ce que j'ai obtenu jusqu'à présent:
<xs:element name="price">
<xs:complexType>
<xs:attribute name="currency" type="xs:string">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="pounds" />
<xs:enumeration value="euros" />
<xs:enumeration value="dollars" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
- Si vous faites cela, vous devez supprimer le type="xs:string" dans le <xs:attribute> élément. Vous ne pouvez pas donner le type quand simpleType ou complexType est présent.
Vous devez vous connecter pour publier un commentaire.
La valeur numérique semble être absent de votre définition des prix.
Essayez ce qui suit:
<xs:extension
ne peuvent pas directement être un enfant de<xs:complexType
mais doit également être contenus par un<xs:complexContent
ou<xs:simpleContent
.Nouvelle réponse à la vieille question
Aucune des réponses à cette vieille question de l'adresse de réel problème.
Le vrai problème était que
xs:complexType
ne peut pas avoir directement unxs:extension
comme un enfant dans XSD. La solution est d'utiliserxs:simpleContent
premier. Détails à suivre...Votre XML,
sera valable contre soit de la suite corrigé XSDs:
Définis localement de type d'attribut
Globalement défini type d'attribut
Notes
price
dexs:string
àxs:decimal
, mais ce n'est pas strictementnécessaire et n'était pas le vrai problème.
définition de la monnaie, et vous pouviez changer de
xs:decimal
, maiscela aussi n'était pas le vrai problème.
Le vrai problème était que
xs:complexType
ne peut pas avoir directement unxs:extension
comme un enfant dans XSD;xs:simpleContent
est d'abord nécessaire.Une question connexe (qui n'était pas demandé, mais peut-être un peu les autres réponses):
Comment pourrait -
price
être limitée étant donné qu'il a un attribut?Dans ce cas, séparément, une définition globale de
priceType
serait nécessaire; il n'est pas possible de le faire avec seulement les définitions de type.Comment restreindre le contenu d'un élément lors de l'élément a un attribut
vous avez besoin pour créer un type et d'en faire l'attribut de ce type:
alors:
Cela permettrait d'éliminer la nécessité pour l'énumération, complètement.
Vous pouvez changer de type à double si nécessaire.
@value
ne peut pas apparaître surxs:attribute
.xs:attribute
ne peut pas apparaître comme un enfant dexs:element
. Besoinxs:
préfixes d'espace de noms sont omis. Cette réponse est un gâchis et devrait être supprimé.