keyref または数値リテラルのいずれかになる型を定義することは可能ですか? 型付きプログラミング言語と同様に、数値リテラルまたは別の変数の名前を数値変数に割り当てることができます。color
(別のプログラミング言語用に) 描画 API 要素を定義するスキーマを作成しており、16 進数リテラル (0xFF0000
明るい赤など) または他の場所で定義された色への参照のいずれかになる型を定義したいと考えています。したがって、(XMLドキュメントで)次のことができます。
<color key="dialogBorder1">0x222222</color>
<color key="dialogFill1">0xCCCCCC</color>
<!-- later... -->
<windowTheme name="warningWindow">
<border>
<color>0xFF0000</color> <!-- defined literally -->
</border>
<fill>
<solid>
<color>dialogFill1</color> <!-- defined by keyref -->
</solid>
</fill>
</windowTheme>
属性に制限を課すことができればchoice
、次のようなことができますが、現在の (1.0) バージョンの XSD 仕様ではこれは不可能であるという印象を受けています。
<!-- I wish: -->
<xs:complexType name="colorType" >
<xs:attrchoice>
<xs:attribute name="value" type="HexLiteral" /> <!-- literal -->
<xs:attribute name="ref" type="xs:string" /> <!-- keyref (defined elsewhere) -->
</xs:attrchoice>
</xs:complexType>
どちらがlieralまたは keyrefを許可します:value
ref
<color value="0xFF0000" /> <!-- OK -->
<color ref="dialogBorder1" /> <!-- OK -->
しかし、両方ではありません:
<color value="0xFF0000" ref="colorXYZ" /> <!-- NOT OK -->