2012-03-16 25 views
1

xsdには、 'id'、 'name'、 'date'などの一般的なフィールドがいくつかあります。 「anyspecificId」は、これらのタイプがお互いに非常に似ていることを意味し、それぞれに共通のフィールドを1つ追加するのは悪夢です。複合型の基本型を定義することが可能なので、この複合型は基本親型の項目/項目を拡張しますか? その場合、この新しいフィールドを基本タイプに追加するだけで、子フィールドのそれぞれには追加しません。 これは可能ですか?あなたはタイプの拡張子を使用する必要があります。もちろん、xsdスキーマで複数の要素が共通しています

+0

拡張機能は常に最善のものではありません。制限を伴う問題に遭遇した場合、それらをオブジェクトに変換することはきれいではないため、グループモデル(xsd:groupおよびattributes attributeGroupの要素)を使用することは再利用性を達成するために考慮する可能性があります。 –

答えて

2

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="employee" type="fullpersoninfo"/> 

<xs:complexType name="personinfo"> 
    <xs:sequence> 
    <xs:element name="firstname" type="xs:string"/> 
    <xs:element name="lastname" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="fullpersoninfo"> 
    <xs:complexContent> 
    <xs:extension base="personinfo"> 
     <xs:sequence> 
     <xs:element name="address" type="xs:string"/> 
     <xs:element name="city" type="xs:string"/> 
     <xs:element name="country" type="xs:string"/> 
     </xs:sequence> 
    </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

</xs:schema> 

http://www.w3schools.com/schema/el_extension.asp

2

拡張子によって種類の導出は確かにこれに対処する一つの方法です。時にはうまくいく別のアプローチは、名前付きモデルグループを使うことです。これはより柔軟にすることができます。たとえば、共通要素がカスタム要素の前に来なければならないという制約はありません。

関連する問題