2011-10-25 16 views
1

XMLスキーマでグローバル要素を定義し、特定の親要素のコンテキスト内でその要素定義を上書きすることはできますか?同じ要素をスキーマ内でグローバルに定義することも、ローカルに定義することも、どちらか一方にすることもできますか?グローバル要素定義をローカル要素定義で上書きできますか?

グローバル要素を上書きする例は、次のようになります。注は、いくつかの他の要素を含むグローバル要素として定義されます。しかし、本の文脈の中では、単に文字列を保持する要素です。

<xs:element name="note"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="to" type="xs:string"/> 
     <xs:element name="from" type="xs:string"/> 
     <xs:element name="heading" type="xs:string"/> 
     <xs:element name="body" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="book"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="title" type="xs:string"/> 
     <xs:element name="note" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

答えて

1

はい、そうすることができます。グローバル定義を使用する場合は、nameの代わりにrefを使用します。ただし、同じシーケンス内でこれらの2つを組み合わせることは許可されません。なぜなら、バリデーターはその2つのうちどれを意味するのかをもう判断できないからです。

EDIT:実際には、あなたは本当に何かを「上書き」していません。名前が "note"の要素を匿名で定義しました。 refを使用してローカルで定義を変更した場合は優先されますが、AFAIKとAFAIKのどちらでも実行できません。とにかくそれは意味をなさないでしょう。

+0

お返事ありがとうございます。私はまた、http://www.validome.org/grammar/validate/のオンラインバリデーターでサンプルスキーマを再確認し、これが本当に有効であることを確認しました。 – Scott

+0

ええ、XMLSpyに貼り付けてF8を押しただけです:pすぐにこれに答えるのに十分なXMLスキーマの仕様は本当にわかりません。時には私のツールが私を可能にするほど賢いだけです。 –

0

はい、あなたは何も上書きしていないのでこれを行うことができます。 1つのグローバル定義があり、 "内部"のノート(ブック内)は実際にグローバルノートと無関係なローカル定義です。

関連する問題