当为 DTD 属性定义指定枚举值列表时,是否可以使用多字值?
<!ATTLIST SystemName Case ("MIXED RESPECT"|"MIXED IGNORE"|"LOWER RESPECT"|"LOWER IGNORE"|"UPPER RESPECT"|"UPPER IGNORE") "MIXED IGNORE">
Run Code Online (Sandbox Code Playgroud)
我尝试将值放在引号中(如图所示),而不是放在引号中。我一直在阅读有关符号和 nmtokens 的内容,但我看到的每一个地方似乎都在说“请参阅废话规范”,但没有一个例子。示例价值约一百万页规格。
不可以,枚举值不能包含空格;每个枚举值必须是合法的 NMTOKEN,这意味着它必须是可以出现在 XML 名称中的字符序列。因此,MIXED、Mixed、RESPECT、MIXED-RESPECT 和 MIXED_RESPECT 是枚举中的合法值,但不是“MIXED RESPECT”。对不起。
就其价值而言,其原因是历史性的:在 SGML(XML 从中派生)中,该语言的一个可选功能允许在使用可能值的枚举列表声明属性名称时省略属性名称。所以而不是
<SystemName Case="MIXED_RESPECT">...
Run Code Online (Sandbox Code Playgroud)
作者可以写
<SystemName MIXED_RESPECT>...
Run Code Online (Sandbox Code Playgroud)
作者可以直接写or来代替<table border="noborder">or 。为了确保这些值可以在上下文中解析,它们被限制为合法的 NMTOKEN。 <table border="border"><table border><table noborder>
该功能的一个缺点是,为了确保这一魔术始终可行,SGML 禁止任何两个属性的枚举值重叠,因此您不能将两个属性与 和yes作为no合法值(因为解析器看到<table yes>可能不知道这是否意味着border="yes"或compact="yes")。
XML 中删除了最小化功能(就像所有其他使编写 SGML 解析器变得如此冒险的最小化功能一样),但保留了使其成为可能的约束,以确保所有 XML DTD 都与 SGML 一样合法DTD。
| 归档时间: |
|
| 查看次数: |
1950 次 |
| 最近记录: |