14. XML Element Definitions (XML元素定义)
本章定义了WebDAV中使用的所有XML元素。每个元素定义的最后一行给出使用[REC-XML]中定义的格式的元素类型声明。
重要说明
- Value字段: 如果存在,使用BNF指定对XML元素的可允许内容的进一步限制
- 扩展性: 所有这些元素都可以根据第17章中定义的规则进行扩展
- 命名空间: 此处定义的所有元素都在"DAV:"命名空间中
XML元素快速参考
| 元素名 | 用途 | 内容类型 | 主要使用场景 |
|---|---|---|---|
| activelock | 描述资源锁 | 复合元素 | LOCK响应 |
| allprop | 请求所有属性 | 空元素 | PROPFIND |
| collection | 标识集合 | 空元素 | resourcetype属性 |
| depth | 深度值 | PCDATA | 锁信息 |
| error | 错误信息 | 任意子元素 | 错误响应 |
| exclusive | 排他锁 | 空元素 | LOCK |
| href | URI引用 | PCDATA | 所有方法 |
| include | 包含属性 | 任意子元素 | PROPFIND |
| location | 重定向位置 | href | Multi-Status |
| lockentry | 锁类型定义 | lockscope+locktype | supportedlock |
| lockinfo | 锁请求信息 | lockscope+locktype+owner | LOCK请求 |
| lockroot | 锁根URL | href | lockdiscovery |
| lockscope | 锁范围 | exclusive/shared | LOCK |
| locktoken | 锁令牌 | href | LOCK响应 |
| locktype | 锁类型 | write | LOCK |
| multistatus | 多状态响应根 | response+ | 207响应 |
| owner | 锁所有者 | 任意内容 | LOCK |
| prop | 属性容器 | 任意属性 | PROPFIND/PROPPATCH |
| propertyupdate | 属性更新 | remove/set | PROPPATCH |
| propfind | 属性查询 | allprop/propname/prop | PROPFIND |
| propname | 属性名列表 | 空元素 | PROPFIND |
| propstat | 属性状态 | prop+status | Multi-Status |
| remove | 删除属性 | prop | PROPPATCH |
| response | 单资源响应 | href+status/propstat | Multi-Status |
| responsedescription | 响应描述 | PCDATA | Multi-Status |
| set | 设置属性 | prop | PROPPATCH |
| shared | 共享锁 | 空元素 | LOCK |
| status | HTTP状态 | PCDATA | Multi-Status |
| timeout | 超时值 | PCDATA | LOCK |
| write | 写锁 | 空元素 | LOCK |
详细元素定义
14.1. activelock
名称: activelock
用途: 描述资源上的锁
DTD:
<!ELEMENT activelock (lockscope, locktype, depth, owner?, timeout?,
locktoken?, lockroot)>
说明: 用于lockdiscovery属性中,描述当前活动的锁
14.2. allprop
名称: allprop
用途: 指定返回所有死属性的名称和值,以及本文档定义的活属性
DTD:
<!ELEMENT allprop EMPTY >
示例:
<D:propfind xmlns:D="DAV:">
<D:allprop/>
</D:propfind>
14.3. collection
名称: collection
用途: 标识关联的资源为集合
DTD:
<!ELEMENT collection EMPTY >
要求: 集合资源的DAV:resourcetype属性必须 (MUST) 包含此元素
示例:
<D:resourcetype>
<D:collection/>
</D:resourcetype>
14.4. depth
名称: depth
用途: 在XML内容中表示深度值(例如,在锁信息中)
值: "0" | "1" | "infinity"
DTD:
<!ELEMENT depth (#PCDATA) >
14.5. error
名称: error
用途: 提供额外的错误信息
说明:
- 错误响应(特别是403 Forbidden和409 Conflict)有时需要更多信息来指示出了什么问题
- 服务器可以 (MAY) 返回带有
error文档元素的XML响应体 - 包含子元素标识特定的条件码
要求:
- 包含至少一个XML元素
- 不得 (MUST NOT) 包含文本或混合内容
error元素的任何子元素都被视为前置条件或后置条件码- 必须 (MUST) 忽略无法识别的元素
DTD:
<!ELEMENT error ANY >
示例:
<D:error xmlns:D="DAV:">
<D:lock-token-submitted>
<D:href>/locked-resource</D:href>
</D:lock-token-submitted>
</D:error>
14.6. exclusive
名称: exclusive
用途: 指定排他锁
DTD:
<!ELEMENT exclusive EMPTY >
14.7. href
名称: href
用途: 必须 (MUST) 包含URI或相对引用
说明: href的值可能有限制,取决于其使用上下文
值: Simple-ref
DTD:
<!ELEMENT href (#PCDATA)>
14.8. include
名称: include
用途: 指定要包含在PROPFIND响应中的属性
说明:
- 任何子元素代表要包含的属性名称
includeXML元素内的所有元素必须 (MUST) 定义与资源相关的属性- 属性名称不限于本文档或其他标准中定义的属性名称
- 不得 (MUST NOT) 包含文本或混合内容
DTD:
<!ELEMENT include ANY >
14.9. location
名称: location
用途: 在Multi-Status中提供Location头的值
说明:
- HTTP定义Location头用于某些状态码(如201和300系列码)
- 当这些码在
multistatus元素内使用时,location元素可用于提供相应的Location头值 - 包含单个href元素,值与Location头中使用的相同
DTD:
<!ELEMENT location (href)>
14.10. lockentry
名称: lockentry
用途: 定义可用于资源的锁类型
DTD:
<!ELEMENT lockentry (lockscope, locktype) >
14.11. lockinfo
名称: lockinfo
用途: 与LOCK方法一起使用,指定客户端希望创建的锁类型
DTD:
<!ELEMENT lockinfo (lockscope, locktype, owner?) >
14.12. lockroot
名称: lockroot
用途: 包含锁的根URL
说明:
- 锁的根URL是在LOCK请求中寻址资源的URL
- href元素包含锁的根
- 服务器应该 (SHOULD) 在所有DAV:lockdiscovery属性值和LOCK请求的响应中包含此元素
DTD:
<!ELEMENT lockroot (href) >
14.13. lockscope
名称: lockscope
用途: 指定锁是排他锁还是共享锁
DTD:
<!ELEMENT lockscope (exclusive | shared) >
14.14. locktoken
名称: locktoken
用途: 包含锁令牌URI
说明: href元素包含单个锁令牌URI
DTD:
<!ELEMENT locktoken (href) >
14.15. locktype
名称: locktype
用途: 指定锁的访问类型
说明: 本规范当前仅定义一种锁类型write元素
DTD:
<!ELEMENT locktype (write) >
14.16. multistatus
名称: multistatus
用途: 包含多个响应元素
说明: 207 Multi-Status响应的根元素
DTD:
<!ELEMENT multistatus (response*, responsedescription?) >
14.17. owner
名称: owner
用途: 提供锁创建者的信息
说明:
- 内容是客户端选择的任意内容
- 服务器必须 (MUST) 在lockdiscovery属性和LOCK请求响应中保留和返回
- 建议 (RECOMMENDED) 包含联系信息(如电子邮件或电话号码)
DTD:
<!ELEMENT owner ANY >
14.18. prop
名称: prop
用途: 包含属性及其值
说明:
- 通用容器,用于封装属性
- 实际属性名称和值取决于上下文
DTD:
<!ELEMENT prop ANY >
14.19. propertyupdate
名称: propertyupdate
用途: PROPPATCH请求的根元素
说明: 包含set和/或remove指令
DTD:
<!ELEMENT propertyupdate (remove | set)+ >
14.20. propfind
名称: propfind
用途: PROPFIND请求的根元素
DTD:
<!ELEMENT propfind ( allprop | propname | prop ) >
14.21. propname
名称: propname
用途: 请求返回资源上定义的所有属性的名称
DTD:
<!ELEMENT propname EMPTY >
14.22. propstat
名称: propstat
用途: 将prop和status元素分组
说明: 用于PROPFIND和PROPPATCH响应中,为不同属性提供不同状态
DTD:
<!ELEMENT propstat (prop, status, error?, responsedescription?) >
14.23. remove
名称: remove
用途: 在PROPPATCH中删除属性
说明: 包含要删除的属性
DTD:
<!ELEMENT remove (prop) >
14.24. response
名称: response
用途: 包含单个资源的响应信息
说明: 在Multi-Status响应中使用
DTD:
<!ELEMENT response (href, ((href*, status)|(propstat+)),
error?, responsedescription? , location?) >
14.25. responsedescription
名称: responsedescription
用途: 包含人类可读的响应描述
说明: 可选的额外信息,用于解释响应
DTD:
<!ELEMENT responsedescription (#PCDATA) >
14.26. set
名称: set
用途: 在PROPPATCH中设置属性值
DTD:
<!ELEMENT set (prop) >
14.27. shared
名称: shared
用途: 指定共享锁
DTD:
<!ELEMENT shared EMPTY >
14.28. status
名称: status
用途: 包含HTTP状态行
值: status-line (HTTP/1.1状态行格式)
DTD:
<!ELEMENT status (#PCDATA) >
示例:
<D:status>HTTP/1.1 200 OK</D:status>
14.29. timeout
名称: timeout
用途: 指定锁超时值
值: TimeType格式
DTD:
<!ELEMENT timeout (#PCDATA) >
格式:
Second-XXX: XXX秒后超时Infinite: 无限期(服务器可自行决定何时到期)
14.30. write
名称: write
用途: 指定写锁
DTD:
<!ELEMENT write EMPTY >
完整DTD汇总
<!ELEMENT activelock (lockscope, locktype, depth, owner?, timeout?,
locktoken?, lockroot)>
<!ELEMENT allprop EMPTY >
<!ELEMENT collection EMPTY >
<!ELEMENT depth (#PCDATA) >
<!ELEMENT error ANY >
<!ELEMENT exclusive EMPTY >
<!ELEMENT href (#PCDATA)>
<!ELEMENT include ANY >
<!ELEMENT location (href)>
<!ELEMENT lockentry (lockscope, locktype) >
<!ELEMENT lockinfo (lockscope, locktype, owner?) >
<!ELEMENT lockroot (href) >
<!ELEMENT lockscope (exclusive | shared) >
<!ELEMENT locktoken (href) >
<!ELEMENT locktype (write) >
<!ELEMENT multistatus (response*, responsedescription?) >
<!ELEMENT owner ANY >
<!ELEMENT prop ANY >
<!ELEMENT propertyupdate (remove | set)+ >
<!ELEMENT propfind ( allprop | propname | prop ) >
<!ELEMENT propname EMPTY >
<!ELEMENT propstat (prop, status, error?, responsedescription?) >
<!ELEMENT remove (prop) >
<!ELEMENT response (href, ((href*, status)|(propstat+)),
error?, responsedescription? , location?) >
<!ELEMENT responsedescription (#PCDATA) >
<!ELEMENT set (prop) >
<!ELEMENT shared EMPTY >
<!ELEMENT status (#PCDATA) >
<!ELEMENT timeout (#PCDATA) >
<!ELEMENT write EMPTY >
相关链接
- 上一章: 13. Multi-Status Response (多状态响应)
- 返回 RFC 4918 主页
- 下一章: 第15章 DAV Properties (DAV属性)