Skip to content

17. DAV 中的 XML 可扩展性

在本规范中使用 XML 名称空间扩展名([REC-XML-NAMES]),以允许添加新的 XML 元素而不必担心与其他元素名称冲突。尽管 WebDAV 请求和响应主体可以由任意 XML 元素进行扩展,而消息接收者也可以忽略它们,但是除非被明确定义在 IETF RFC 中并由 WebDAV 工作组审查通过,否则不应在其它 XML 元素上使用“DAV:”命名空间。

为了使 WebDAV 既可扩展又可向后兼容,客户端和服务器都需要知道在接收到意外的或无法识别的命令扩展时该怎么办。先说 XML 处理过程,客户端和服务器在遇到这些预期之外的元素和属性(以及所有此类子元素)时要当它们不存在。非预期的元素或属性可能在其他上下文中有用但是在这里没有用。当然,在处理时忽略此类项目与同时记录这些信息供调试并不冲突。

此约束还适用于客户端处理 DAV 属性值的情况,除非属性的 schema 另行声明,否则应忽略非预期的 XML 元素。

此约束不适用于服务器设置 DAV 死属性时被要求同时必须记录所有 XML 元素的情况。

此外,此约束不适用于作为实体内容的 XML,例如,客户端 PUT 了一个 XML 文档要求服务器保存。

收件人应忽略 XML 中的处理指令。因此,WebDAV 的扩展规范不应使用处理指令来定义规范行为。

本规范中定义的所有 XML 元素都包含 XML DTD 片段。但是,由于命名空间的使用和扩展规则的存在,在 WebDAV 看来是正确的 XML 依据 DTD 标准可能是无效的。尤其是以下情况:

  • 位于“DAV:”命名空间中的元素,
  • 除非另有说明,否则元素顺序无关紧要,
  • 可以添加扩展属性,
  • 对于“ANY”的元素类型定义,该元素的规范文本定义了其中可以有什么及其含义。
  • 对于“#PCDATA”的元素类型定义,不得添加扩展元素。
  • 对于包括“EMPTY”在内的其他元素类型,可以添加扩展元素。
  • 请注意,包含元素的元素不能扩展为包含文本,反之亦然。

通过上述规则放宽了 DTD 验证后,DTD 片段描述的约束就是强制性的了(参见附录 A)。具有 XML 主体的 WebDAV 消息的接收者就不能再根据其它任何硬编码或动态声明的 DTD 来验证 XML 文档。 请注意,本节描述了向后兼容的扩展性规则。有时也可能会将扩展设计为不向后兼容,例如,定义一个扩展来复用本文档中定义的 XML 元素内容,但是忽略其中 DTD 所需的子元素。