Skip to main content

17. XML Extensibility in DAV (DAV 中的 XML 可扩展性)

17. XML Extensibility in DAV (DAV 中的 XML 可扩展性)

本规范中使用 XML 命名空间扩展 ([REC-XML-NAMES]), 以便在不担心与其他元素名称冲突的情况下添加新的 XML 元素。虽然 WebDAV 请求和响应正文可以通过任意 XML 元素进行扩展 (消息接收者可以忽略这些元素), 但不应该在请求或响应正文中使用 "DAV:" 命名空间中的 XML 元素, 除非该 XML 元素在经 WebDAV 工作组审查的 IETF RFC 中明确定义。

为了使 WebDAV 既可扩展又向后兼容, 客户端和服务器都需要知道在收到意外或无法识别的命令扩展时如何行为。对于 XML 处理, 这意味着客户端和服务器必须处理接收到的 XML 文档, 就好像意外的元素和属性 (以及无法识别的元素的所有子元素) 不存在一样。意外的元素或属性包括可能在另一个上下文中使用但在此处不期望的元素或属性。为了处理目的忽略此类项当然可以与记录所有信息或呈现用于调试保持一致。

此限制也适用于客户端对 DAV 属性值的处理, 其中应该忽略意外的 XML 元素, 除非属性的模式另有声明。

此限制不适用于在服务器上设置死 DAV 属性, 服务器必须记录所有 XML 元素。

此外, 此限制不适用于 XML 恰好是实体正文的内容类型的 XML 使用, 例如, 当用作 PUT 的正文时。

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

本规范中定义的所有 XML 元素都包含 XML DTD 片段。但是, 由于命名空间使用和扩展规则, 正确的 XML 根据任何 DTD 都不会有效。特别是:

  • 元素 (来自本规范) 在 "DAV:" 命名空间中,
  • 除非另有说明, 否则元素顺序无关紧要,
  • 可以添加扩展属性,
  • 对于 "ANY" 的元素类型定义, 该元素的规范性文本定义定义了其中可以包含什么以及那意味着什么。
  • 对于 "#PCDATA" 的元素类型定义, 绝对不能添加扩展元素。
  • 对于其他元素类型定义, 包括 "EMPTY", 可以添加扩展元素。

请注意, 这意味着包含元素的元素不能扩展为包含文本, 反之亦然。

通过上述规则放宽 DTD 验证后, DTD 片段描述的约束是规范性的 (例如参见附录 A)。具有 XML 正文的 WebDAV 消息的接收者绝对不能根据任何硬编码或动态声明的 DTD 验证 XML 文档。

请注意, 本节描述了向后兼容的可扩展性规则。有时扩展可能被设计为不向后兼容, 例如, 定义重用本文档中定义的 XML 元素但省略本规范中 DTD 所需的子元素之一的扩展。