Skip to main content

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
hrefURI引用PCDATA所有方法
include包含属性任意子元素PROPFIND
location重定向位置hrefMulti-Status
lockentry锁类型定义lockscope+locktypesupportedlock
lockinfo锁请求信息lockscope+locktype+ownerLOCK请求
lockroot锁根URLhreflockdiscovery
lockscope锁范围exclusive/sharedLOCK
locktoken锁令牌hrefLOCK响应
locktype锁类型writeLOCK
multistatus多状态响应根response+207响应
owner锁所有者任意内容LOCK
prop属性容器任意属性PROPFIND/PROPPATCH
propertyupdate属性更新remove/setPROPPATCH
propfind属性查询allprop/propname/propPROPFIND
propname属性名列表空元素PROPFIND
propstat属性状态prop+statusMulti-Status
remove删除属性propPROPPATCH
response单资源响应href+status/propstatMulti-Status
responsedescription响应描述PCDATAMulti-Status
set设置属性propPROPPATCH
shared共享锁空元素LOCK
statusHTTP状态PCDATAMulti-Status
timeout超时值PCDATALOCK
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响应中的属性

说明:

  • 任何子元素代表要包含的属性名称
  • include XML元素内的所有元素必须 (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 >

相关链接