2009-06-17 3 views
3

Wir haben eine Menge Serialisierung durch MS XML 4. Wenn wir C++ enums serialisieren, verwenden wir eine Tabelle, um jeden möglichen Wert in eine Zeichenkette zu übersetzen, und sie speichern diese Zeichenkette als Attributwert. Bei der Deserialisierung lesen wir diesen Attributwert, vergleichen ihn mit allen Elementen in der Tabelle und rufen den entsprechenden Enum-Wert ab. Wenn wir nicht finden, melden wir einen Fehler.Ist xs: selection ein Äquivalent zur C++ - Enumeration?

Um das Erstellen von XML-Dateien durch externe Programme zu erleichtern, haben wir XML-Schemas für alle relevanten Datentypen veröffentlicht. Attribute für Enums sind wie folgt definiert:

<xs:complexType> 
    //other fields here 
    <xs:attribute name="Color" type="xs:string"></xs:attribute> 
</xs:complexType> 

Es funktioniert, enthält jedoch keine Definitionen für mögliche Stringwerte. Wie kann ich dieser Definition mögliche Werte hinzufügen? Benutze ich xs: Auswahl dafür?

Antwort

0
<xs:complexType> 
    //other fields here 
    <xs:attribute name="Color"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
     <xs:enumeration value="RED"/> 
     <xs:enumeration value="BLUE"/> 
     <xs:enumeration value="GREEN"/> 
     </xs:restriction> 
    </xs:simpleType> 
    </xs:attribute> 
</xs:complexType> 

Sie können auch, dass als externe Art erstellen:

<xs:complexType> 
    //other fields here 
    <xs:attribute name="Color" type="Color"/> 
</xs:complexType> 
<xs:simpleType name="Color"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="RED"/> 
    <xs:enumeration value="BLUE"/> 
    <xs:enumeration value="GREEN"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:choice> etwas ganz anderes bedeutet. Die Namen im XML-Schema sind nicht intuitiv und etwas irreführend. Auswahl bedeutet eines der enthaltenen Elemente.

+0

in der Praxis obwohl (obwohl ich Ihnen zustimme), erreichen sie nicht im Wesentlichen das Gleiche? –

3

Nein, xs:choice liefert das Schema mit Informationen, die sagen "an dieser Stelle können Sie dies oder das oder das haben, aber nicht eine Kombination"; Sie können mehr über xs:choice here herausfinden. Um eine Aufzählung zu erstellen, müssen Sie sie als Teil einer restricted type basierend auf xs:string definieren.

Zum Beispiel:

<xs:simpleType name="ColorType"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="white"/> 
    <xs:enumeration value="black"/> 
    <xs:enumeration value="blue"/> 
    </xs:restriction> 
</xs:simpleType> 

Sie können dann diese Art verwenden wie jede andere:

<xs:complexType> 
    <xs:attribute name="Color" type="ColorType" /> 
</xs:complexType> 

Für weitere Informationen über using xs:restriction und andere XSD-Elemente und Attribute, überprüfen www.w3schools.com aus. Sie haben gute Referenzhandbücher und Tutorials zu vielen Themen im Zusammenhang mit dem Web wie XHTML, XSLT, XPath und XSD (sowie Javascript und AJAX).

Verwandte Themen