10. 处理指令(Processing instructions)
- 禁止(MUST NOT)创建新的处理指令,除非是为了指定纯粹的本地处理约定,并且应该(SHOULD)完全避免使用。 可以(MAY)使用现有的标准化处理指令。 [理由: 处理指令与 XML 数据模型的契合度很差,总是可以被元素替代;它们的存在主要是为了避免破坏向后兼容性。]
11. XML 文档实例的表示
注意: 这些要点仅为指南,因为程序创建的实例的格式通常不在程序员的控制之内(例如,当使用 XML 序列化库时)。 在任何情况下,XML 解析器都不应依赖这些指南被遵循。 使用标准的 XML 解析器,不要使用手工拼凑的 hack。\
\
- 使用的字符编码应该(SHOULD)是 UTF-8。
例外情况需要极其充分的理由。 [理由: UTF-8
是通用的且被广泛使用。]
\ - 命名空间应该(SHOULD)尽可能在文档的根元素中声明。
[*理由:*清晰性和一致性。]
\ - 命名空间 URI
到前缀的映射应该(SHOULD)在整个文档中保持不变,并且也应该(SHOULD)在设计文档中使用。
[*理由:*清晰性和一致性。]
\ - 知名前缀如 html:(用于 XHTML)、dc:(用于 Dublin Core 元数据)和
xs:(用于 XML Schema)应用于标准命名空间。 [理由:
人类可读性。]
\ - 不应该(SHOULD NOT)在标签中使用多余的空白。
在起始标签中每个属性前使用一个空格;如果起始标签太长,空格可以(MAY)替换为换行符。
[理由: 一致性和简洁性。]
\ - 空元素可以(MAY)表示为空标签或紧跟结束标签的起始标签。任何应用程序不应区分这两种格式。
[理由: XML 解析器不区分它们。]
\ - 文档可以(MAY)使用 2
个空格缩进对子元素进行美化打印(pretty-print)。
包含字符内容的元素不应该(SHOULD NOT)被换行。
长的起始标签可以(MAY)在除最后一个属性值之外的任何属性值后使用换行符断开(可能带有额外缩进)。
[理由: 与我们的风格保持一般性兼容。 换行字符内容会影响其值。]
\ - 属性值可以(MAY)使用引号或撇号包围。规范禁止(MUST
NOT)要求或禁止使用其中任一形式。
' 和
"
可以自由使用来转义每种类型的引号。 [理由: 没有 XML
解析器报告二者之间的区别。]
\ - 禁止(MUST NOT)使用注释来承载真实数据。 在手写 XML
中,注释可以(MAY)用于包含 TODO。 在公开传输的文档中不应该(SHOULD
NOT)使用注释。[*理由:*注释经常被解析器丢弃。]
\ - 如果仍然使用注释,它们应该(SHOULD)只出现在文档序言或包含子元素的元素中。
如果需要美化打印,像元素一样美化打印注释,但要换行。
注释不应该(SHOULD NOT)出现在包含字符内容的元素中。
[*理由:*注释内外的空白可以提高可读性,但将注释嵌入字符内容中可能会导致关于哪些空白属于内容、哪些不属于内容的混淆。]
\ - 注释应该(SHOULD)在
<!— 之后和
—> 之前有空白。
[理由: 可读性。]
\ - 可以(MAY)使用 CDATA 节;它们等价于使用
& 和
<。
规范禁止(MUST NOT)要求或禁止使用 CDATA 节。 [理由: 很少有 XML
解析器报告二者之间的区别,而且 CDATA
和文本的组合通常被报告为单个对象。]
\ - 除了 XML 标准实体引用 &、<、>、" 和 ' 之外,禁止(MUST NOT)使用其他实体引用。 可以(MAY)使用字符引用,但优先使用实际字符,除非字符编码不是 UTF-8。 如往常一样,文本格式不受此规则约束。\
\
\
Last updated on