是否可以定义一个可以是 keyref 或数字文字的类型?就像在任何类型化的编程语言中一样,您可以将数字文字或另一个变量的名称分配给数字变量。我正在创建一个模式来定义绘图 api 元素(用于另一种编程语言),并且想定义一个color
类型,它可以是十六进制文字(例如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>
这将允许lieralvalue
或keyref ref
:
<color value="0xFF0000" /> <!-- OK -->
<color ref="dialogBorder1" /> <!-- OK -->
但不是两者兼而有之:
<color value="0xFF0000" ref="colorXYZ" /> <!-- NOT OK -->