Ich habe das folgende XML-Tag
<price currency="euros">20000.00</price>
Wie beschränke ich das Währungsattribut auf eines der folgenden:
- Euro
- Pfund
- Dollar
UND der Preis zu einem Doppel?
Ich erhalte nur eine Fehlermeldung, wenn ich versuche, einen Typ für beide zu verwenden. Folgendes habe ich bisher:
<xs:element name="price">
<xs:complexType>
<xs:attribute name="currency">
<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>
Antworten:
Der numerische Wert scheint in Ihrer Preisdefinition zu fehlen. Versuche Folgendes:
quelle
<xs:extension
kann das nicht direkt ein Kind von sein,<xs:complexType
sondern muss auch in einem<xs:complexContent
oder enthalten sein<xs:simpleContent
.Neue Antwort auf alte Frage
Keine der vorhandenen Antworten auf diese alte Frage befasst sich mit dem eigentlichen Problem.
Das eigentliche Problem war, dass
xs:complexType
manxs:extension
als Kind in XSDnicht direkt einen haben kann. Das Update ist zuerst zu verwendenxs:simpleContent
. Details folgen ...Ihr XML,
wird gegen gültig entweder den folgenden korrigiert XSDs:
Lokal definierter Attributtyp
Global definierter Attributtyp
Anmerkungen
price
vonxs:string
nachxs:decimal
, dies ist jedoch nicht unbedingt erforderlich und war nicht das eigentliche Problem.xs:decimal
, aber auch dies war nicht das eigentliche Problem.Das eigentliche Problem war, dass
xs:complexType
manxs:extension
als Kind nicht direkt eine XSD haben kann;xs:simpleContent
wird zuerst benötigt.Eine verwandte Angelegenheit (die nicht gefragt wurde, aber möglicherweise andere Antworten verwirrt hat):
Wie könnte
price
eingeschränkt werden, wenn es ein Attribut hat?In diesem Fall wäre eine separate globale Definition von
priceType
erforderlich. Dies ist nicht nur mit lokalen Typdefinitionen möglich.So beschränken Sie den Elementinhalt, wenn das Element ein Attribut hat
quelle
Sie müssen einen Typ erstellen und das Attribut dieses Typs erstellen:
dann:
quelle
Dies würde die Notwendigkeit einer Aufzählung vollständig beseitigen. Sie können den Typ bei Bedarf in double ändern.
quelle
@value
kann nicht auf erscheinenxs:attribute
.xs:attribute
kann nicht als Kind von erscheinenxs:element
. Erforderlichexs:
Namespace-Präfixe werden weggelassen. Diese Antwort ist ein Chaos und sollte einfach gelöscht werden.