私は CRUD Web サービスを作成しており、オブジェクト (システムのデータベース レコードでもあります) を持っています。たとえば、数十の属性を持つ顧客としましょう。いくつかの属性は、年月の間に変化する可能性があります。まれに名前を変更できますが、これは問題ではないと思います。これは内部実装であり、属性名をインターフェイスに含める必要がないためです。ただし、新しい属性があり、それらを正しく処理する方法がわかりません。
私が計画していたことは、スキーマでは次のようになります。
<xs:complexType name="tKeyValuePair">
<xs:sequence>
<xs:element name="fieldname" type="xs:string" />
<xs:element name="value" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="keyvaluepair" type="tKeyValuePair" />
<xs:complexType name="tKeyValuePairs">
<xs:sequence>
<xs:element ref="keyvaluepair" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:element name="fieldvalues" type="tKeyValuePairs" />
<xs:complexType name="tCustomerBase">
<xs:sequence>
<xs:element name="customername" type="xs:string" />
<!-- here are other fields that can't change but can be minOccurs="0"-->
<xs:element ref="fieldvalues" />
</xs:sequence>
次に、更新用に tCustomerUpdate に customerid を追加して正しい顧客を見つけるためのキーとして機能し、tCustomerCreate に createuser を追加して挿入用に tCustomerCreate に追加して、他のシステムで作成したユーザーを保存するなど、tCustomerBase を拡張する各操作の型を用意します。
現在、フィールド値は文字列であり、どのフィールドがどのタイプであるべきかがわかっているので、WS での db 操作の前にそれらを変換できます。
しかし、これは理にかなっていますか?使うべきか
xsd:any
どういうわけか残りのフィールドは?
使用について
xsd:anyType
キー値ペアの値の型として文字列の代わりにそれを使用できますか? これを正しく行う方法を本当に助けていただければ幸いです。
私の質問に加えて、このようなスキーマ設計についてのコメントをお待ちしております。だから、私がここに書いたモックアップ スキーマの部分に気軽にコメントしてください!
よろしくお願いいたします -Matti