Ich erstelle ein XML-Schema, das Informationen über Häuser speichert.
Ich möchte die price
und die currency
speichern.
Es macht Sinn, dies zu erklären, indem ich die Währung als Attribut des Preiselements verwende.
Ich möchte auch die Werte einschränken, die als currency
in Pfund, Euro oder Dollar eingegeben werden können.
EG:
%Vor%Im Moment deklariere ich das in meinem XML Schema als:
%Vor%Das Problem, das ich damit habe:
pounds, euros or dollars
beschränken wird.
Ich kann nicht scheinen, ein type
auf dem Preis zu einem Doppel zu spezifizieren, wie ich wegen des Fehlers wünschen würde:
Element 'price' has both a 'type' attribute and a 'anonymous type' child. Only one of these is allowed for an element.
Soll ich es einfach halten und sie als separate Elemente deklarieren:
%Vor%... oder bin ich auf dem richtigen Weg?
Im Folgenden wird das price
-Element so definiert, dass es einen xs:double
-Wert mit einem currency
-Attribut hat, dessen Werte auf einen Wert von entweder Pfund, Euro oder Dollar beschränkt sind.
Aus dem von Michael Kay geposteten Link, der auf Ihr Problem angewendet wurde. (Hinweis: Verwenden Sie den Dezimaltyp anstelle von double, um Präzisionsfehler zu vermeiden.)
%Vor%Sie möchten einen "komplexen Typ mit einfachem Inhalt". Hier finden Sie ein Beispiel:
oder als Erweiterung von Michaels Antwort:
%Vor%wenn Sie es in einem Tag möchten. Dadurch wird das Attribut mit Aufzählung einfach zu einem Dezimaltyp hinzugefügt, sodass das gewünschte Ergebnis erzielt wird.
Sehen Sie sich die Implementierung der SOAP-API von PayPal als Praxis an.
Der Service definiert eine Reihe von Codes für Währungen (CurrencyCodeType definiert in eBLBaseComponents.xsd) nach dem ISO-4217-Standard .
AmountType (definiert von CoreComponentTypes.xsd) ist eine Zusammensetzung eines Double mit einem Attribut von currencyType.
Ich würde empfehlen, einen ähnlichen Ansatz in Ihrer Anwendung zu verwenden und die akzeptablen Währungen in Ihrer Geschäftslogik und nicht im Schema einzuschränken.
Prost!