2011-07-31 7 views
1

xsi:typeを使用せずにXMLスキーマでバリアントデータ構造をモデル化するにはどうすればよいですか? 私の目標は、属性と属性タイプがdatatype属性に依存する<property>という名前の要素のスキーマを定義することです。例えば:文字列型指定されたプロパティのdefault属性は、任意の文字を受け入れるものに対し、ここでXMLスキーマでバリアントデータ構造をモデル化する方法

<property datatype="integer" default="1234"/> 
<property datatype="string" default="Abcde" maxlength="255"/> 

、整数型指定されたプロパティのdefault属性は、有効な整数値を受け入れるもの。

さらに、maxlength属性はdatatype="string"場合許可されなければなりません。

I.e.スキーマ検証エラーは、以下の特性の両方で発生する必要があります。

<property datatype="integer" default="NotAnInteger"/> 
<property datatype="integer" default="12345" maxlength="100"/> <!-- maxlength not allowed --> 

は、私が代わりにdatatypexsi:typeを使用している場合、これはXML Schemaでモデル化することは容易であろうことを知っています。 私はここにxsi:typeを使用したくない理由は、少なくとも2つの理由、しかし、があります。私は多くの場所で読んだことがある

  • それは良いスタイルとはみなされませんxsi:type、例えば、使用するには、 xsi:type is EvilまたはSmart but useless, part 3

  • xsi:typeは、単に正確に十分な属性の目的を発現しません。 私はむしろdatatypeを好むでしょう。

答えて

3

あなたがXercesのとサクソンの現在のリリースで実装されているXSD 1.1、この使用して条件付きタイプの割り当てを行うことができます。 XSD 1.0ではこれを行うことはできません。よく知られている制限です(しばしば「共起制約」というラベルの下にあります)。

+0

条件付きタイプの割り当て(= ' ')は、私の必要とするようなものです。残念なことに、XMLスキーマ1.1標準はまだリリースされていないため、多くのXMLプロセッサはXMLスキーマ1.1と互換性がありません。 XML Schema 1.0は私の問題を解決するものを提供していますか? –

関連する問題