【发布时间】:2012-07-26 02:21:48
【问题描述】:
是否可以定义一个可以是 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>
这将允许 either lieral value 或 keyref ref:
<color value="0xFF0000" /> <!-- OK -->
<color ref="dialogBorder1" /> <!-- OK -->
但不是两者兼有:
<color value="0xFF0000" ref="colorXYZ" /> <!-- NOT OK -->
【问题讨论】:
标签: xsd