17. DAV 中的 XML 扩展性
此规范中使用 XML命名空间扩展 ([REC-XML-NAMES]),
以允许添加新的 XML元素而不用担心与其他元素产生命名冲突.
虽然 WebDAV 请求和响应正文可以通过任意 XML元素进行扩展, 且这些元素可以被消息接收方忽略,
但不应[SHOULD_NOT]在请求或响应正文中使用 DAV:
命名空间中的 XML元素,
除非该 XML元素在由 WebDAV 工作组审查的 IETF RFC 中有明确定义.
为了使 WebDAV 同时具有可扩展性与向后兼容性, 客户端和服务器在接收到预料外或未识别的命令扩展时需要知道如何表现. 对于 XML 处理方面, 这意味着客户端和服务器必须[MUST]将接收到的 XML 文档中预料外的元素和属性(以及未识别元素的所有子元素) 进行忽略处理. 这包括可以在另一上下文中使用但在此上下文中预料外的元素或属性. 出于处理方面的目的而忽略这些项, 这显然符合 "记录所有信息" 或 "用于调试" 的场景.
此限制还适用于客户端处理 DAV属性值的情况, 其中预料外的 XML元素应该[SHOULD]被忽略, 除非该属性模式有另行声明.
此限制不适用于在服务器上设置 DAV 死属性, 因为服务器必须记录所有 XML元素.
此外, 这一限制不适用于在 XML 恰好是实体正文的内容类型情况下使用, 例如当用作 PUT正文时.
XML 中的处理指令应该[SHOULD]被接收方忽略. 因此, 扩展 WebDAV 的规范不应[SHOULD_NOT]使用处理指令来定义规范行为.
本规范中定义的所有 XML元素都包含 XML DTD段. 然而, 由于命名空间使用和扩展规则, 正确的 XML 将不会根据任何 DTD 生效. 具体来说:
- 元素(来自本规范) 位于
DAV:
命名空间中. - 元素排序是无关紧要的, 除非另行说明.
- 可能[MAY]添加扩展属性.
- 对于
ANY
元素类型定义, 该元素的规范文本定义了其中可以什么可以包含其中以及代表了什么. - 对于
#PCDATA
元素类型定义, 不得[MUST_NOT]通过添加来扩展元素. - 对于其他元素类型定义, 包括
EMPTY
, 可以[MAY]通过添加来扩展元素.
需要注意的是, 这意味着被元素包含的元素不能被扩展来包含文本, 反之亦然.
在上述规则放宽 DTD 验证的情况下, 对 DTD段的描述约束是规范的 (e.g., 参见附录 A). 接收方获得 WebDAV 消息并带有 XML正文时, 不得[MUST_NOT]根据任何硬编码或动态声明的 DTD 来验证 XML 文档.
需要注意的是该章节描述了向后兼容的可扩展性规则. 优势设计的扩展也可能不是向后兼容的, 例如, 定义一个扩展, 该扩展重用本文档中定义的 XML元素, 但省略了本规范中 DTD 中需求的一个子元素的情况.