如果我有一个元素,动物:
<animal name="dog"/>
可以将以下内容作为 name 属性的值:
- 狗
- 猫
- 鸟
- $(ANY_STRING)
其中 $(ANY_STRING) 是一个简单的名称、值替换,某些软件将在稍后执行和验证(ANY_STRING 实际上是任何字符串)。这个元素的 XML Schema 是什么样的?限制三个已知名称很容易:
<xs:simpleType name="AnimalNames">
<xs:restriction base="xs:string">
<xs:enumeration value="dog"/>
<xs:enumeration value="cat"/>
<xs:enumeration value="bird"/>
</xs:restriction>
</xs:simpleType>
限制 $(ANY_STRING) 本身同样容易(使用 xs:pattern 来限制)。但是由于属性可能只是简单类型,是否可以指定该属性可能在枚举列表或 $(ANY_STRING) 值中?
我考虑过的另一个选择是限制以下模式:
<xs:pattern value="dog|cat|bird|$(.*)"/>
尽管随着可能值列表的增加,这变得非常讨厌。
当然,最简单的选择是只声明一个字符串类型,但我想限制更多。