2009-06-17 4 views
3

私たちはMS XML 4で一連のシリアライズを行っています。C++ enumをシリアル化するときには、表を使用して各可能な値を文字列に変換し、その文字列を属性値として格納します。デシリアライズすると、その属性値が読み取られ、テーブルのすべての項目と比較され、対応する列挙型の値が取得されます。見つけられなかった場合は、エラーが発生します。xs:choiceはC++列挙型と同等ですか?

外部プログラムによるXMLの作成を容易にするために、関心のあるすべてのデータ型に対してXMLスキーマを公開しました。列挙型の属性は次のように定義されます。

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

これは機能しますが、可能な文字列値の定義はありません。可能な値をこの定義にどのように追加できますか? xs:choiceを使うのですか?

答えて

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> 

また、外部型としてあることを作成することができます

<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>完全に何かを意味します。 XMLスキーマの名前は直感的ではなく、やや誤解を招きます。選択肢とは、含まれる要素の1つを意味します。

+0

実際には(私はあなたに同意しますが)彼らは本質的に同じことを成し遂げませんか? –

3

いいえ、xs:choiceは、「この場所では、これまたはこれまたはこれを持つことができますが、組み合わせではありません」という情報をスキーマに提供します。 xs:choice hereについて詳しく知ることができます。

列挙型を作成するには、xs:stringに基づいてrestricted typeの一部として定義する必要があります。例えば

<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> 

あなたはその後、他のどのようなこのタイプを使用することができます:using xs:restrictionと他のXSDの要素と属性に

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

詳細については、www.w3schools.comをチェックしてください。彼らには、XHTML、XSLT、XPath、XSD(そしてjavascriptやAJAXなど)など、Webに関連する多くのトピックに関する参考ガイドとチュートリアルがあります。