不,枚举值不能包含空格;每个枚举值都必须是合法的 NMTOKEN,这意味着它必须是可以出现在 XML 名称中的字符序列。所以 MIXED、Mixed、RESPECT、MIXED-RESPECT 和 MIXED_RESPECT 是枚举中的合法值,但不是“MIXED RESPECT”。对不起。
其价值的原因是历史性的:在 SGML(从中派生出 XML)中,如果使用可能值的枚举列表声明属性名称,则该语言的一个可选特性允许省略属性名称。所以而不是
<SystemName Case="MIXED_RESPECT">...
作者可以写
<SystemName MIXED_RESPECT>...
而不是<table border="noborder">
or<table border="border">
作者可以只写<table border>
or <table noborder>
。为了确保这些值在上下文中是可解析的,它们被限制为合法的 NMTOKEN。
该功能的一个缺点是,为了确保这个魔术总是可行的,SGML 禁止任何两个属性的枚举值重叠,所以你不能有两个属性与yes
和no
作为合法值(因为那时一个解析器看到<table yes>
可能不知道它是否意味着border="yes"
或compact="yes"
)。
XML 中删除了最小化功能(就像所有其他使编写 SGML 解析器如此冒险的最小化功能一样),但保留了使其成为可能的约束,以确保所有 XML DTD 都作为 SGML 合法DTD。