draft-reschke-webdav-search-18.txt | draft-reschke-webdav-search-latest.txt | |||
---|---|---|---|---|
Network Working Group J. Reschke, Ed. | Network Working Group J. Reschke, Ed. | |||
Internet-Draft greenbytes | Internet-Draft greenbytes | |||
Intended status: Standards Track S. Reddy | Intended status: Standards Track S. Reddy | |||
Expires: March 3, 2009 Mitrix | Expires: May 5, 2009 Mitrix | |||
J. Davis | J. Davis | |||
A. Babich | A. Babich | |||
IBM | IBM | |||
August 30, 2008 | November 2008 | |||
Web Distributed Authoring and Versioning (WebDAV) SEARCH | Web Distributed Authoring and Versioning (WebDAV) SEARCH | |||
draft-reschke-webdav-search-18 | draft-reschke-webdav-search-latest | |||
Status of this Memo | Status of this Memo | |||
By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
skipping to change at page 1, line 39 ¶ | skipping to change at page 1, line 39 ¶ | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt. | http://www.ietf.org/ietf/1id-abstracts.txt. | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
This Internet-Draft will expire on March 3, 2009. | This Internet-Draft will expire on May 5, 2009. | |||
Abstract | Abstract | |||
This document specifies a set of methods, headers and properties | This document specifies a set of methods, headers, and properties | |||
composing WebDAV SEARCH, an application of the HTTP/1.1 protocol to | composing Web Distributed Authoring and Versioning (WebDAV) SEARCH, | |||
efficiently search for DAV resources based upon a set of client- | an application of the HTTP/1.1 protocol to efficiently search for DAV | |||
supplied criteria. | resources based upon a set of client-supplied criteria. | |||
Editorial Note (To be removed by RFC Editor before publication) | ||||
Please send comments to the Distributed Authoring and Versioning | ||||
(WebDAV) DASL mailing list at <mailto:www-webdav-dasl@w3.org>, which | ||||
may be joined by sending a message with subject "subscribe" to | ||||
<mailto:www-webdav-dasl-request@w3.org>. Discussions of the WebDAV | ||||
DASL mailing list are archived at | ||||
<http://lists.w3.org/Archives/Public/www-webdav-dasl/>. | ||||
An issues list and XML and HTML versions of this draft are available | ||||
from <http://greenbytes.de/tech/webdav/#draft-reschke-webdav-search>. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.1. DASL . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.1. DASL . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.2. Relationship to DAV . . . . . . . . . . . . . . . . . . . 6 | 1.2. Relationship to DAV . . . . . . . . . . . . . . . . . . . 5 | |||
1.3. Terms . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.3. Terms . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.4. Notational Conventions . . . . . . . . . . . . . . . . . . 8 | 1.4. Notational Conventions . . . . . . . . . . . . . . . . . . 7 | |||
1.5. Note on Usage of 'DAV:' XML Namespace . . . . . . . . . . 9 | 1.5. Note on Usage of 'DAV:' XML Namespace . . . . . . . . . . 8 | |||
1.6. An Overview of DASL at Work . . . . . . . . . . . . . . . 9 | 1.6. An Overview of DASL at Work . . . . . . . . . . . . . . . 8 | |||
2. The SEARCH Method . . . . . . . . . . . . . . . . . . . . . . 9 | 2. The SEARCH Method . . . . . . . . . . . . . . . . . . . . . . 8 | |||
2.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 2.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
2.2. The Request . . . . . . . . . . . . . . . . . . . . . . . 9 | 2.2. The Request . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
2.2.1. The Request-URI . . . . . . . . . . . . . . . . . . . 10 | 2.2.1. The Request-URI . . . . . . . . . . . . . . . . . . . 9 | |||
2.2.2. The Request Body . . . . . . . . . . . . . . . . . . . 10 | 2.2.2. The Request Body . . . . . . . . . . . . . . . . . . . 9 | |||
2.3. The Successful 207 (Multistatus) Response . . . . . . . . 11 | 2.3. The Successful 207 (Multistatus) Response . . . . . . . . 10 | |||
2.3.1. Result Set Truncation . . . . . . . . . . . . . . . . 11 | 2.3.1. Result Set Truncation . . . . . . . . . . . . . . . . 10 | |||
2.3.2. Extending the PROPFIND Response . . . . . . . . . . . 12 | 2.3.2. Extending the PROPFIND Response . . . . . . . . . . . 11 | |||
2.3.3. Example: A Simple Request and Response . . . . . . . . 12 | 2.3.3. Example: A Simple Request and Response . . . . . . . . 11 | |||
2.3.4. Example: Result Set Truncation . . . . . . . . . . . . 13 | 2.3.4. Example: Result Set Truncation . . . . . . . . . . . . 12 | |||
2.4. Unsuccessful Responses . . . . . . . . . . . . . . . . . . 14 | 2.4. Unsuccessful Responses . . . . . . . . . . . . . . . . . . 13 | |||
2.4.1. Example of an Invalid Scope . . . . . . . . . . . . . 14 | 2.4.1. Example of an Invalid Scope . . . . . . . . . . . . . 13 | |||
3. Discovery of Supported Query Grammars . . . . . . . . . . . . 15 | 3. Discovery of Supported Query Grammars . . . . . . . . . . . . 14 | |||
3.1. The OPTIONS Method . . . . . . . . . . . . . . . . . . . . 15 | 3.1. The OPTIONS Method . . . . . . . . . . . . . . . . . . . . 14 | |||
3.2. The DASL Response Header . . . . . . . . . . . . . . . . . 16 | 3.2. The DASL Response Header . . . . . . . . . . . . . . . . . 15 | |||
3.3. DAV:supported-query-grammar-set (protected) . . . . . . . 16 | 3.3. DAV:supported-query-grammar-set (Protected) . . . . . . . 15 | |||
3.4. Example: Grammar Discovery . . . . . . . . . . . . . . . . 16 | 3.4. Example: Grammar Discovery . . . . . . . . . . . . . . . . 15 | |||
4. Query Schema Discovery: QSD . . . . . . . . . . . . . . . . . 19 | 4. Query Schema Discovery: QSD . . . . . . . . . . . . . . . . . 18 | |||
4.1. Additional SEARCH Semantics . . . . . . . . . . . . . . . 19 | 4.1. Additional SEARCH Semantics . . . . . . . . . . . . . . . 18 | |||
4.1.1. Example of Query Schema Discovery . . . . . . . . . . 20 | 4.1.1. Example of Query Schema Discovery . . . . . . . . . . 19 | |||
5. The DAV:basicsearch Grammar . . . . . . . . . . . . . . . . . 21 | 5. The DAV:basicsearch Grammar . . . . . . . . . . . . . . . . . 20 | |||
5.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 21 | 5.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
5.2. The DAV:basicsearch DTD . . . . . . . . . . . . . . . . . 22 | 5.2. The DAV:basicsearch DTD . . . . . . . . . . . . . . . . . 21 | |||
5.2.1. Example Query . . . . . . . . . . . . . . . . . . . . 24 | 5.2.1. Example Query . . . . . . . . . . . . . . . . . . . . 23 | |||
5.3. DAV:select . . . . . . . . . . . . . . . . . . . . . . . . 25 | 5.3. DAV:select . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
5.4. DAV:from . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 5.4. DAV:from . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
5.4.1. Relationship to the Request-URI . . . . . . . . . . . 25 | 5.4.1. Relationship to the Request-URI . . . . . . . . . . . 24 | |||
5.4.2. Scope . . . . . . . . . . . . . . . . . . . . . . . . 26 | 5.4.2. Scope . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
5.5. DAV:where . . . . . . . . . . . . . . . . . . . . . . . . 26 | 5.5. DAV:where . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
5.5.1. Use of Three-Valued Logic in Queries . . . . . . . . . 26 | 5.5.1. Use of Three-Valued Logic in Queries . . . . . . . . . 25 | |||
5.5.2. Handling Optional Operators . . . . . . . . . . . . . 26 | 5.5.2. Handling Optional Operators . . . . . . . . . . . . . 25 | |||
5.5.3. Treatment of NULL Values . . . . . . . . . . . . . . . 26 | 5.5.3. Treatment of NULL Values . . . . . . . . . . . . . . . 25 | |||
5.5.4. Treatment of Properties with mixed/element Content . . 27 | 5.5.4. Treatment of Properties with Mixed/Element Content . . 26 | |||
5.5.5. Example: Testing for Equality . . . . . . . . . . . . 27 | 5.5.5. Example: Testing for Equality . . . . . . . . . . . . 26 | |||
5.5.6. Example: Relative Comparisons . . . . . . . . . . . . 27 | 5.5.6. Example: Relative Comparisons . . . . . . . . . . . . 26 | |||
5.6. DAV:orderby . . . . . . . . . . . . . . . . . . . . . . . 28 | 5.6. DAV:orderby . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
5.6.1. Example of Sorting . . . . . . . . . . . . . . . . . . 28 | 5.6.1. Example of Sorting . . . . . . . . . . . . . . . . . . 27 | |||
5.7. Boolean Operators: DAV:and, DAV:or, and DAV:not . . . . . 28 | 5.7. Boolean Operators: DAV:and, DAV:or, and DAV:not . . . . . 27 | |||
5.8. DAV:eq . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 5.8. DAV:eq . . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
5.9. DAV:lt, DAV:lte, DAV:gt, DAV:gte . . . . . . . . . . . . . 29 | 5.9. DAV:lt, DAV:lte, DAV:gt, DAV:gte . . . . . . . . . . . . . 28 | |||
5.10. DAV:literal . . . . . . . . . . . . . . . . . . . . . . . 29 | 5.10. DAV:literal . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
5.11. DAV:typed-literal (optional) . . . . . . . . . . . . . . . 29 | 5.11. DAV:typed-literal (Optional) . . . . . . . . . . . . . . . 28 | |||
5.11.1. Example for Typed Numerical Comparison . . . . . . . . 30 | 5.11.1. Example for Typed Numerical Comparison . . . . . . . . 29 | |||
5.12. Support for Matching xml:lang Attributes on Properties . . 30 | 5.12. Support for Matching xml:lang Attributes on Properties . . 29 | |||
5.12.1. DAV:language-defined (optional) . . . . . . . . . . . 31 | 5.12.1. DAV:language-defined (Optional) . . . . . . . . . . . 30 | |||
5.12.2. DAV:language-matches (optional) . . . . . . . . . . . 31 | 5.12.2. DAV:language-matches (Optional) . . . . . . . . . . . 30 | |||
5.12.3. Example of Language-Aware Matching . . . . . . . . . . 31 | 5.12.3. Example of Language-Aware Matching . . . . . . . . . . 30 | |||
5.13. DAV:is-collection . . . . . . . . . . . . . . . . . . . . 31 | 5.13. DAV:is-collection . . . . . . . . . . . . . . . . . . . . 30 | |||
5.13.1. Example of DAV:is-collection . . . . . . . . . . . . . 32 | 5.13.1. Example of DAV:is-collection . . . . . . . . . . . . . 31 | |||
5.14. DAV:is-defined . . . . . . . . . . . . . . . . . . . . . . 32 | 5.14. DAV:is-defined . . . . . . . . . . . . . . . . . . . . . . 31 | |||
5.15. DAV:like . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 5.15. DAV:like . . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
5.15.1. Syntax for the Literal Pattern . . . . . . . . . . . . 33 | 5.15.1. Syntax for the Literal Pattern . . . . . . . . . . . . 32 | |||
5.15.2. Example of DAV:like . . . . . . . . . . . . . . . . . 33 | 5.15.2. Example of DAV:like . . . . . . . . . . . . . . . . . 32 | |||
5.16. DAV:contains . . . . . . . . . . . . . . . . . . . . . . . 33 | 5.16. DAV:contains . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
5.16.1. Result Scoring (DAV:score Element) . . . . . . . . . . 34 | 5.16.1. Result Scoring (DAV:score Element) . . . . . . . . . . 33 | |||
5.16.2. Ordering by Score . . . . . . . . . . . . . . . . . . 35 | 5.16.2. Ordering by Score . . . . . . . . . . . . . . . . . . 34 | |||
5.16.3. Examples . . . . . . . . . . . . . . . . . . . . . . . 35 | 5.16.3. Examples . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
5.17. Limiting the Result Set . . . . . . . . . . . . . . . . . 35 | 5.17. Limiting the Result Set . . . . . . . . . . . . . . . . . 34 | |||
5.17.1. Relationship to Result Ordering . . . . . . . . . . . 35 | 5.17.1. Relationship to Result Ordering . . . . . . . . . . . 34 | |||
5.18. The 'caseless' XML Attribute . . . . . . . . . . . . . . . 36 | 5.18. The 'caseless' XML Attribute . . . . . . . . . . . . . . . 35 | |||
5.19. Query Schema for DAV:basicsearch . . . . . . . . . . . . . 36 | 5.19. Query Schema for DAV:basicsearch . . . . . . . . . . . . . 35 | |||
5.19.1. DTD for DAV:basicsearch QSD . . . . . . . . . . . . . 36 | 5.19.1. DTD for DAV:basicsearch QSD . . . . . . . . . . . . . 35 | |||
5.19.2. DAV:propdesc Element . . . . . . . . . . . . . . . . . 37 | 5.19.2. DAV:propdesc Element . . . . . . . . . . . . . . . . . 36 | |||
5.19.3. The DAV:datatype Property Description . . . . . . . . 37 | 5.19.3. The DAV:datatype Property Description . . . . . . . . 36 | |||
5.19.4. The DAV:searchable Property Description . . . . . . . 38 | 5.19.4. The DAV:searchable Property Description . . . . . . . 37 | |||
5.19.5. The DAV:selectable Property Description . . . . . . . 38 | 5.19.5. The DAV:selectable Property Description . . . . . . . 37 | |||
5.19.6. The DAV:sortable Property Description . . . . . . . . 38 | 5.19.6. The DAV:sortable Property Description . . . . . . . . 37 | |||
5.19.7. The DAV:caseless Property Description . . . . . . . . 38 | 5.19.7. The DAV:caseless Property Description . . . . . . . . 37 | |||
5.19.8. The DAV:operators XML Element . . . . . . . . . . . . 38 | 5.19.8. The DAV:operators XML Element . . . . . . . . . . . . 37 | |||
5.19.9. Example of Query Schema for DAV:basicsearch . . . . . 40 | 5.19.9. Example of Query Schema for DAV:basicsearch . . . . . 39 | |||
6. Internationalization Considerations . . . . . . . . . . . . . 40 | 6. Internationalization Considerations . . . . . . . . . . . . . 39 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 40 | |||
7.1. Implications of XML External Entities . . . . . . . . . . 41 | 7.1. Implications of XML External Entities . . . . . . . . . . 40 | |||
8. Scalability . . . . . . . . . . . . . . . . . . . . . . . . . 42 | 8. Scalability . . . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 41 | |||
9.1. HTTP Headers . . . . . . . . . . . . . . . . . . . . . . . 42 | 9.1. HTTP Headers . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
9.1.1. DASL . . . . . . . . . . . . . . . . . . . . . . . . . 42 | 9.1.1. DASL . . . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 42 | 10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 41 | |||
11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 43 | 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 43 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . . 43 | 12.1. Normative References . . . . . . . . . . . . . . . . . . . 42 | |||
12.2. Informative References . . . . . . . . . . . . . . . . . . 44 | 12.2. Informative References . . . . . . . . . . . . . . . . . . 43 | |||
Appendix A. Three-Valued Logic in DAV:basicsearch . . . . . . . . 45 | Appendix A. Three-Valued Logic in DAV:basicsearch . . . . . . . . 44 | |||
Appendix B. Candidates for Future Protocol Extensions . . . . . . 46 | Appendix B. Candidates for Future Protocol Extensions . . . . . . 45 | |||
B.1. Collation Support . . . . . . . . . . . . . . . . . . . . 46 | B.1. Collation Support . . . . . . . . . . . . . . . . . . . . 45 | |||
B.2. Count . . . . . . . . . . . . . . . . . . . . . . . . . . 47 | B.2. Count . . . . . . . . . . . . . . . . . . . . . . . . . . 46 | |||
B.3. Diagnostics for Unsupported Queries . . . . . . . . . . . 47 | B.3. Diagnostics for Unsupported Queries . . . . . . . . . . . 46 | |||
B.4. Language Matching . . . . . . . . . . . . . . . . . . . . 47 | B.4. Language Matching . . . . . . . . . . . . . . . . . . . . 46 | |||
B.5. Matching Media Types . . . . . . . . . . . . . . . . . . . 47 | B.5. Matching Media Types . . . . . . . . . . . . . . . . . . . 46 | |||
B.6. Query by Name . . . . . . . . . . . . . . . . . . . . . . 48 | B.6. Query by Name . . . . . . . . . . . . . . . . . . . . . . 47 | |||
B.7. Result Paging . . . . . . . . . . . . . . . . . . . . . . 48 | B.7. Result Paging . . . . . . . . . . . . . . . . . . . . . . 47 | |||
B.8. Search Scope Discovery . . . . . . . . . . . . . . . . . . 48 | B.8. Search Scope Discovery . . . . . . . . . . . . . . . . . . 47 | |||
Appendix C. Change Log (to be removed by RFC Editor before | Appendix C. Open issues (to be removed by RFC Editor prior to | |||
publication) . . . . . . . . . . . . . . . . . . . . 48 | publication) . . . . . . . . . . . . . . . . . . . . 47 | |||
C.1. From draft-davis-dasl-protocol-xxx . . . . . . . . . . . . 48 | C.1. edit . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
C.2. since start of draft-reschke-webdav-search . . . . . . . . 50 | C.2. auth48 . . . . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
C.3. since draft-reschke-webdav-search-00 . . . . . . . . . . . 52 | Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 | |||
C.4. since draft-reschke-webdav-search-01 . . . . . . . . . . . 52 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 49 | |||
C.5. since draft-reschke-webdav-search-02 . . . . . . . . . . . 52 | Intellectual Property and Copyright Statements . . . . . . . . . . 51 | |||
C.6. since draft-reschke-webdav-search-03 . . . . . . . . . . . 53 | ||||
C.7. since draft-reschke-webdav-search-04 . . . . . . . . . . . 53 | ||||
C.8. since draft-reschke-webdav-search-05 . . . . . . . . . . . 54 | ||||
C.9. since draft-reschke-webdav-search-06 . . . . . . . . . . . 54 | ||||
C.10. since draft-reschke-webdav-search-07 . . . . . . . . . . . 55 | ||||
C.11. since draft-reschke-webdav-search-08 . . . . . . . . . . . 55 | ||||
C.12. since draft-reschke-webdav-search-09 . . . . . . . . . . . 55 | ||||
C.13. since draft-reschke-webdav-search-10 . . . . . . . . . . . 56 | ||||
C.14. since draft-reschke-webdav-search-11 . . . . . . . . . . . 56 | ||||
C.15. since draft-reschke-webdav-search-12 . . . . . . . . . . . 56 | ||||
C.16. since draft-reschke-webdav-search-13 . . . . . . . . . . . 56 | ||||
C.17. since draft-reschke-webdav-search-14 . . . . . . . . . . . 56 | ||||
C.18. since draft-reschke-webdav-search-15 . . . . . . . . . . . 57 | ||||
C.19. since draft-reschke-webdav-search-16 . . . . . . . . . . . 57 | ||||
C.20. since draft-reschke-webdav-search-17 . . . . . . . . . . . 57 | ||||
Appendix D. Resolved issues (to be removed by RFC Editor | ||||
before publication) . . . . . . . . . . . . . . . . . 58 | ||||
D.1. safeness . . . . . . . . . . . . . . . . . . . . . . . . . 58 | ||||
D.2. ordering-vs-limiting . . . . . . . . . . . . . . . . . . . 58 | ||||
Appendix E. Open issues (to be removed by RFC Editor prior to | ||||
publication) . . . . . . . . . . . . . . . . . . . . 58 | ||||
E.1. edit . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | ||||
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 60 | ||||
Intellectual Property and Copyright Statements . . . . . . . . . . 62 | ||||
1. Introduction | 1. Introduction | |||
1.1. DASL | 1.1. DASL | |||
This document defines Web Distributed Authoring and Versioning | This document defines Web Distributed Authoring and Versioning | |||
(WebDAV) SEARCH, an application of HTTP/1.1 forming a lightweight | (WebDAV) SEARCH, an application of HTTP/1.1 forming a lightweight | |||
search protocol to transport queries and result sets that allows | search protocol to transport queries and result sets that allows | |||
clients to make use of server-side search facilities. It is based on | clients to make use of server-side search facilities. It is based on | |||
the expired internet draft for DAV Searching & Locating [DASL]. | earlier work done in the IETF DASL Working Group (see Section 10). | |||
[DASLREQ] describes the motivation for DASL. In this specification, | In this specification, the terms "WebDAV SEARCH" and "DASL" are used | |||
the terms "WebDAV SEARCH" and "DASL" are used interchangeably. | interchangeably. | |||
DASL minimizes the complexity of clients so as to facilitate | DASL minimizes the complexity of clients so as to facilitate | |||
widespread deployment of applications capable of utilizing the DASL | widespread deployment of applications capable of utilizing the DASL | |||
search mechanisms. | search mechanisms. | |||
DASL consists of: | DASL consists of: | |||
o the SEARCH method and the request/response formats defined for it | o the SEARCH method and the request/response formats defined for it | |||
(Section 2), | (Section 2), | |||
o feature discovery through the "DASL" response header and the | o feature discovery through the "DASL" response header and the | |||
optional DAV:supported-grammar-set property (Section 3), | optional DAV:supported-grammar-set property (Section 3), | |||
o optional grammar schema discovery (Section 4) and | o optional grammar schema discovery (Section 4), and | |||
o one mandatory grammar: DAV:basicsearch (Section 5). | o one mandatory grammar: DAV:basicsearch (Section 5). | |||
1.2. Relationship to DAV | 1.2. Relationship to DAV | |||
DASL relies on the resource and property model defined by [RFC4918]. | DASL relies on the resource and property model defined by [RFC4918]. | |||
DASL does not alter this model. Instead, DASL allows clients to | DASL does not alter this model. Instead, DASL allows clients to | |||
access DAV-modeled resources through server-side search. | access DAV-modeled resources through server-side search. | |||
1.3. Terms | 1.3. Terms | |||
This document uses the terms defined in [RFC2616], in [RFC4918], in | This document uses the terms defined in [RFC2616], [RFC4918], | |||
[RFC3253] and in this section. | [RFC3253], and in this section. | |||
"Criteria" | "Criteria" | |||
An expression against which each resource in the search scope is | An expression against which each resource in the search scope is | |||
evaluated. | evaluated. | |||
"Query" | "Query" | |||
A query is a combination of a search scope, search criteria, | A query is a combination of a search scope, search criteria, | |||
result record definition, sort specification, and a search | result record definition, sort specification, and a search | |||
skipping to change at page 8, line 20 ¶ | skipping to change at page 7, line 20 ¶ | |||
1.4. Notational Conventions | 1.4. Notational Conventions | |||
This specification uses the Augmented Backus-Naur Form (ABNF) | This specification uses the Augmented Backus-Naur Form (ABNF) | |||
notation of [RFC5234], unless explicitly stated otherwise. | notation of [RFC5234], unless explicitly stated otherwise. | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
This document uses XML DTD fragments ([XML], Section 3.2) as a purely | This document uses XML DTD fragments ([XML], Section 3.2) as a purely | |||
notational convention. WebDAV request and response bodies can not be | notational convention. WebDAV request and response bodies cannot be | |||
validated by a DTD due to the specific extensibility rules defined in | validated by a DTD due to the specific extensibility rules defined in | |||
Section 17 of [RFC4918] and due to the fact that all XML elements | Section 17 of [RFC4918] and due to the fact that all XML elements | |||
defined by this specification use the XML namespace name "DAV:". In | defined by this specification use the XML namespace name "DAV:". In | |||
particular: | particular: | |||
1. element names use the "DAV:" namespace, | 1. element names use the "DAV:" namespace, | |||
2. element ordering is irrelevant unless explicitly stated, | 2. element ordering is irrelevant unless explicitly stated, | |||
3. extension elements (elements not already defined as valid child | 3. extension elements (elements not already defined as valid child | |||
skipping to change at page 9, line 7 ¶ | skipping to change at page 8, line 7 ¶ | |||
Similarly, when an XML element type in the namespace | Similarly, when an XML element type in the namespace | |||
"http://www.w3.org/2001/XMLSchema" is referenced in this document | "http://www.w3.org/2001/XMLSchema" is referenced in this document | |||
outside of the context of an XML fragment, the string "xs:" will be | outside of the context of an XML fragment, the string "xs:" will be | |||
prefixed to the element type. | prefixed to the element type. | |||
This document inherits, and sometimes extends, DTD productions from | This document inherits, and sometimes extends, DTD productions from | |||
Section 14 of [RFC4918]. | Section 14 of [RFC4918]. | |||
1.5. Note on Usage of 'DAV:' XML Namespace | 1.5. Note on Usage of 'DAV:' XML Namespace | |||
This specification defines elements, properties and condition names | This specification defines elements, properties, and condition names | |||
in the XML namespace "DAV:". In general, only specifications | in the XML namespace "DAV:". In general, only specifications | |||
authored by IETF working groups are supposed to do this. In this | authored by IETF working groups are supposed to do this. In this | |||
case an exception was made, because WebDAV SEARCH started its life in | case an exception was made, because WebDAV SEARCH started its life in | |||
the IETF DASL working group (<http://www.webdav.org/dasl/>, and at | the IETF DASL working group (<http://www.webdav.org/dasl/>, and at | |||
the time the working group closed down there was already significant | the time the working group closed down there was already significant | |||
deployment of this specification. | deployment of this specification. | |||
1.6. An Overview of DASL at Work | 1.6. An Overview of DASL at Work | |||
One can express the basic usage of DASL in the following steps: | One can express the basic usage of DASL in the following steps: | |||
skipping to change at page 10, line 13 ¶ | skipping to change at page 9, line 13 ¶ | |||
Request-URI. | Request-URI. | |||
2.2.1. The Request-URI | 2.2.1. The Request-URI | |||
The Request-URI identifies the search arbiter. Any HTTP resource may | The Request-URI identifies the search arbiter. Any HTTP resource may | |||
function as search arbiter. It is not a new type of resource (in the | function as search arbiter. It is not a new type of resource (in the | |||
sense of DAV:resourcetype as defined in [RFC4918], Section 15.9), nor | sense of DAV:resourcetype as defined in [RFC4918], Section 15.9), nor | |||
does it have to be a WebDAV-compliant resource. | does it have to be a WebDAV-compliant resource. | |||
The SEARCH method defines no relationship between the arbiter and the | The SEARCH method defines no relationship between the arbiter and the | |||
scope of the search, rather the particular query grammar used in the | scope of the search; rather, the particular query grammar used in the | |||
query defines the relationship. For example, a query grammar may | query defines the relationship. For example, a query grammar may | |||
force the Request-URI to correspond exactly to the search scope. | force the Request-URI to correspond exactly to the search scope. | |||
2.2.2. The Request Body | 2.2.2. The Request Body | |||
The server MUST process a text/xml or application/xml request body, | The server MUST process a text/xml or application/xml request body, | |||
and MAY process request bodies in other formats. See [RFC3023] for | and MAY process request bodies in other formats. See [RFC3023] for | |||
guidance on packaging XML in requests. | guidance on packaging XML in requests. | |||
Marshalling: | Marshalling: | |||
skipping to change at page 11, line 15 ¶ | skipping to change at page 10, line 15 ¶ | |||
(DAV:search-scope-valid): the supplied search scope must be valid. | (DAV:search-scope-valid): the supplied search scope must be valid. | |||
There can be various reasons for a search scope to be invalid, | There can be various reasons for a search scope to be invalid, | |||
including unsupported URI schemes and communication problems. | including unsupported URI schemes and communication problems. | |||
Servers MAY add [RFC4918] compliant DAV:response elements as | Servers MAY add [RFC4918] compliant DAV:response elements as | |||
content to the condition element indicating the precise reason for | content to the condition element indicating the precise reason for | |||
the failure. | the failure. | |||
2.3. The Successful 207 (Multistatus) Response | 2.3. The Successful 207 (Multistatus) Response | |||
If the server returns 207 (Multistatus), then the search proceeded | If the server returns 207 (Multistatus), then the search proceeded | |||
successfully and the response MUST use the WebDAV multistatus format | successfully, and the response MUST use the WebDAV multistatus format | |||
([RFC4918], Section 13). The results of this method SHOULD NOT be | ([RFC4918], Section 13). The results of this method SHOULD NOT be | |||
cached. | cached. | |||
There MUST be one DAV:response for each resource that matched the | There MUST be one DAV:response for each resource that matched the | |||
search criteria. For each such response, the DAV:href element | search criteria. For each such response, the DAV:href element | |||
contains the URI of the resource, and the response MUST include a | contains the URI of the resource, and the response MUST include a | |||
DAV:propstat element. | DAV:propstat element. | |||
Note: the WebDAV multistatus format requires at least one DAV: | Note: the WebDAV multistatus format requires at least one DAV: | |||
response child element. This specification relaxes that | response child element. This specification relaxes that | |||
restriction so that empty results can be represented. | restriction so that empty results can be represented. | |||
Note that for each matching resource found there may be multiple URIs | Note that for each matching resource found, there may be multiple | |||
within the search scope mapped to it. In this case, a server SHOULD | URIs within the search scope mapped to it. In this case, a server | |||
report only one of these URIs. Clients can use the live property | SHOULD report only one of these URIs. Clients can use the live | |||
DAV:resource-id defined in Section 3.1 of [draft-ietf-webdav-bind] to | property DAV:resource-id, defined in Section 3.1 of [WEBDAV-BIND] to | |||
identify possible duplicates. | identify possible duplicates. | |||
2.3.1. Result Set Truncation | 2.3.1. Result Set Truncation | |||
A server MAY limit the number of resources in a reply, for example to | A server MAY limit the number of resources in a reply, for example, | |||
limit the amount of resources expended in processing a query. If it | to limit the amount of resources expended in processing a query. If | |||
does so, the reply MUST use status code 207, return a DAV:multistatus | it does so, the reply MUST use status code 207, return a DAV: | |||
response body and indicate a status of 507 (Insufficient Storage) for | multistatus response body, and indicate a status of 507 (Insufficient | |||
the search arbiter URI. It SHOULD include the partial results. | Storage) for the search arbiter URI. It SHOULD include the partial | |||
results. | ||||
When a result set is truncated, there may be many more resources that | When a result set is truncated, there may be many more resources that | |||
satisfy the search criteria but that were not examined. | satisfy the search criteria but that were not examined. | |||
If partial results are included and the client requested an ordered | If partial results are included and the client requested an ordered | |||
result set in the original request, then any partial results that are | result set in the original request, then any partial results that are | |||
returned MUST be ordered as the client directed. | returned MUST be ordered as the client directed. | |||
Note that the partial results returned MAY be any subset of the | Note that the partial results returned MAY be any subset of the | |||
result set that would have satisfied the original query. | result set that would have satisfied the original query. | |||
2.3.2. Extending the PROPFIND Response | 2.3.2. Extending the PROPFIND Response | |||
A response MAY include more information than PROPFIND defines so long | A response MAY include more information than PROPFIND defines, so | |||
as the extra information does not invalidate the PROPFIND response. | long as the extra information does not invalidate the PROPFIND | |||
Query grammars SHOULD define how the response matches the PROPFIND | response. Query grammars SHOULD define how the response matches the | |||
response. | PROPFIND response. | |||
2.3.3. Example: A Simple Request and Response | 2.3.3. Example: A Simple Request and Response | |||
This example demonstrates the request and response framework. The | This example demonstrates the request and response framework. The | |||
following XML document shows a simple (hypothetical) natural language | following XML document shows a simple (hypothetical) natural language | |||
query. The name of the query element is natural-language-query in | query. The name of the query element is natural-language-query in | |||
the XML namespace "http://example.com/foo". The actual query is | the XML namespace "http://example.com/foo". The actual query is | |||
"Find the locations of good Thai restaurants in Los Angeles". For | "Find the locations of good Thai restaurants in Los Angeles". For | |||
this hypothetical query, the arbiter returns two properties for each | this hypothetical query, the arbiter returns two properties for each | |||
selected resource. | selected resource. | |||
skipping to change at page 14, line 35 ¶ | skipping to change at page 13, line 35 ¶ | |||
Only first two matching records were returned | Only first two matching records were returned | |||
</D:responsedescription> | </D:responsedescription> | |||
</D:response> | </D:response> | |||
</D:multistatus> | </D:multistatus> | |||
2.4. Unsuccessful Responses | 2.4. Unsuccessful Responses | |||
If a SEARCH request could not be executed or the attempt to execute | If a SEARCH request could not be executed or the attempt to execute | |||
it resulted in an error, the server MUST indicate the failure with an | it resulted in an error, the server MUST indicate the failure with an | |||
appropriate status code and SHOULD add a response body as defined in | appropriate status code and SHOULD add a response body as defined in | |||
[RFC3253], Section 1.6. Unless otherwise stated, condition elements | Section 1.6 of [RFC3253]. Unless otherwise stated, condition | |||
are empty, however specific condition elements MAY include additional | elements are empty; however, specific condition elements MAY include | |||
child elements that describe the error condition in more detail. | additional child elements that describe the error condition in more | |||
detail. | ||||
2.4.1. Example of an Invalid Scope | 2.4.1. Example of an Invalid Scope | |||
In the example below, a request failed because the scope identifies a | In the example below, a request failed because the scope identifies a | |||
HTTP resource that was not found. | HTTP resource that was not found. | |||
>> Response: | >> Response: | |||
HTTP/1.1 409 Conflict | HTTP/1.1 409 Conflict | |||
Content-Type: text/xml; charset="utf-8" | Content-Type: text/xml; charset="utf-8" | |||
skipping to change at page 15, line 32 ¶ | skipping to change at page 14, line 32 ¶ | |||
Servers MUST support discovery of the query grammars supported by a | Servers MUST support discovery of the query grammars supported by a | |||
search arbiter resource. | search arbiter resource. | |||
Clients can determine which query grammars are supported by an | Clients can determine which query grammars are supported by an | |||
arbiter by invoking OPTIONS on the search arbiter. If the resource | arbiter by invoking OPTIONS on the search arbiter. If the resource | |||
supports SEARCH, then the DASL response header will appear in the | supports SEARCH, then the DASL response header will appear in the | |||
response. The DASL response header lists the supported grammars. | response. The DASL response header lists the supported grammars. | |||
Servers supporting the WebDAV extensions [RFC3253] and/or [RFC3744] | Servers supporting the WebDAV extensions [RFC3253] and/or [RFC3744] | |||
MUST also | MUST also: | |||
o report SEARCH in the live property DAV:supported-method-set for | o report SEARCH in the live property DAV:supported-method-set for | |||
all search arbiter resources and | all search arbiter resources, and | |||
o support the live property DAV:supported-query-grammar-set as | o support the live property DAV:supported-query-grammar-set as | |||
defined in Section 3.3. | defined in Section 3.3. | |||
3.1. The OPTIONS Method | 3.1. The OPTIONS Method | |||
The OPTIONS method allows the client to discover if a resource | The OPTIONS method allows the client to discover if a resource | |||
supports the SEARCH method and to determine the list of search | supports the SEARCH method and to determine the list of search | |||
grammars supported for that resource. | grammars supported for that resource. | |||
skipping to change at page 16, line 15 ¶ | skipping to change at page 15, line 15 ¶ | |||
DASL servers MUST include the DASL header in the OPTIONS response. | DASL servers MUST include the DASL header in the OPTIONS response. | |||
This header identifies the search grammars supported by that | This header identifies the search grammars supported by that | |||
resource. | resource. | |||
3.2. The DASL Response Header | 3.2. The DASL Response Header | |||
DASLHeader = "DASL" ":" 1#Coded-URL | DASLHeader = "DASL" ":" 1#Coded-URL | |||
Coded-URL = <defined in Section 10.1 of [RFC4918]> | Coded-URL = <defined in Section 10.1 of [RFC4918]> | |||
(This grammar uses the augmented BNF format defined in Section 2.1 of | (This grammar uses the augmented BNF format defined in Section 2.1 of | |||
[RFC2616]) | [RFC2616].) | |||
The DASL response header indicates server support for query grammars | The DASL response header indicates server support for query grammars | |||
in the OPTIONS method. The value is a list of URIs that indicate the | in the OPTIONS method. The value is a list of URIs that indicate the | |||
types of supported grammars. Note that although the URIs can be used | types of supported grammars. Note that although the URIs can be used | |||
to identify each supported search grammar, there is not necessarily a | to identify each supported search grammar, there is not necessarily a | |||
direct relationship between the URI and the XML element name that can | direct relationship between the URI and the XML element name that can | |||
be used in XML based SEARCH requests (the element name itself is | be used in XML based SEARCH requests (the element name itself is | |||
identified by its namespace name (a URI reference) and the element's | identified by its namespace name (a URI reference) and the element's | |||
local name). | local name). | |||
Note: this header field value is defined as a comma-separated list | Note: this header field value is defined as a comma-separated list | |||
([RFC2616], Section 4.2), thus grammar URIs can appear in multiple | ([RFC2616], Section 4.2); thus, grammar URIs can appear in | |||
header instances, separated by commas, or both. | multiple header instances, separated by commas, or both. | |||
For example: | For example: | |||
DASL: <http://foobar.example/syntax1>, | DASL: <http://foobar.example/syntax1>, | |||
<http://akuma.example/syntax2>, <DAV:basicsearch> | <http://akuma.example/syntax2>, <DAV:basicsearch> | |||
DASL: <http://example.com/foo/natural-language-query> | DASL: <http://example.com/foo/natural-language-query> | |||
3.3. DAV:supported-query-grammar-set (protected) | 3.3. DAV:supported-query-grammar-set (Protected) | |||
This WebDAV property is required for any server supporting either | This WebDAV property is required for any server supporting either | |||
[RFC3253] and/or [RFC3744] and identifies the XML based query | [RFC3253] and/or [RFC3744] and identifies the XML-based query | |||
grammars that are supported by the search arbiter resource. | grammars that are supported by the search arbiter resource. | |||
<!ELEMENT supported-query-grammar-set (supported-query-grammar*)> | <!ELEMENT supported-query-grammar-set (supported-query-grammar*)> | |||
<!ELEMENT supported-query-grammar (grammar)> | <!ELEMENT supported-query-grammar (grammar)> | |||
<!ELEMENT grammar ANY> | <!ELEMENT grammar ANY> | |||
<!-- ANY value: a query grammar element type --> | <!-- ANY value: a query grammar element type --> | |||
3.4. Example: Grammar Discovery | 3.4. Example: Grammar Discovery | |||
This example shows that the server supports search on the /somefolder | This example shows that the server supports search on the /somefolder | |||
skipping to change at page 19, line 4 ¶ | skipping to change at page 18, line 4 ¶ | |||
<supported-method name="UNLOCK" /> | <supported-method name="UNLOCK" /> | |||
</supported-method-set> | </supported-method-set> | |||
</prop> | </prop> | |||
<status>HTTP/1.1 200 OK</status> | <status>HTTP/1.1 200 OK</status> | |||
</propstat> | </propstat> | |||
</response> | </response> | |||
</multistatus> | </multistatus> | |||
Note that the query grammar element names marshalled as part of the | Note that the query grammar element names marshalled as part of the | |||
DAV:supported-query-grammar-set can be directly used as element names | DAV:supported-query-grammar-set can be directly used as element names | |||
in an XML based query. | in an XML-based query. | |||
4. Query Schema Discovery: QSD | 4. Query Schema Discovery: QSD | |||
Servers MAY support the discovery of the schema for a query grammar. | Servers MAY support the discovery of the schema for a query grammar. | |||
The DASL response header and the DAV:supported-query-grammar-set | The DASL response header and the DAV:supported-query-grammar-set | |||
property provide means for clients to discover the set of query | property provide means for clients to discover the set of query | |||
grammars supported by a resource. This alone is not sufficient | grammars supported by a resource. This alone is not sufficient | |||
information for a client to generate a query. For example, the DAV: | information for a client to generate a query. For example, the DAV: | |||
basicsearch grammar defines a set of queries consisting of a set of | basicsearch grammar defines a set of queries consisting of a set of | |||
skipping to change at page 19, line 32 ¶ | skipping to change at page 18, line 32 ¶ | |||
optional operator that can be used to express content-based queries | optional operator that can be used to express content-based queries | |||
in a proprietary syntax. QSD allows a client to discover these | in a proprietary syntax. QSD allows a client to discover these | |||
operators and their syntax. The set of discoverable quantities will | operators and their syntax. The set of discoverable quantities will | |||
differ from grammar to grammar, but each grammar can define a means | differ from grammar to grammar, but each grammar can define a means | |||
for a client to discover what can be discovered. | for a client to discover what can be discovered. | |||
In general, the schema for a given query grammar depends on both the | In general, the schema for a given query grammar depends on both the | |||
resource (the arbiter) and the scope. A given resource might have | resource (the arbiter) and the scope. A given resource might have | |||
access to one set of properties for one potential scope, and another | access to one set of properties for one potential scope, and another | |||
set for a different scope. For example, consider a server able to | set for a different scope. For example, consider a server able to | |||
search two distinct collections, one holding cooking recipes, the | search two distinct collections: one holding cooking recipes, the | |||
other design documents for nuclear weapons. While both collections | other design documents for nuclear weapons. While both collections | |||
might support properties such as author, title, and date, the first | might support properties such as author, title, and date, the first | |||
might also define properties such as calories and preparation time, | might also define properties such as calories and preparation time, | |||
while the second defined properties such as yield and applicable | while the second defined properties such as yield and applicable | |||
patents. Two distinct arbiters indexing the same collection might | patents. Two distinct arbiters indexing the same collection might | |||
also have access to different properties. For example, the recipe | also have access to different properties. For example, the recipe | |||
collection mentioned above might also be indexed by a value-added | collection mentioned above might also be indexed by a value-added | |||
server that also stored the names of chefs who had tested the recipe. | server that also stored the names of chefs who had tested the recipe. | |||
Note also that the available query schema might also depend on other | Note also that the available query schema might also depend on other | |||
factors, such as the identity of the principal conducting the search, | factors, such as the identity of the principal conducting the search, | |||
skipping to change at page 20, line 11 ¶ | skipping to change at page 19, line 11 ¶ | |||
expressing the possible query schema. A client retrieves the schema | expressing the possible query schema. A client retrieves the schema | |||
for a given query grammar on an arbiter resource with a given scope | for a given query grammar on an arbiter resource with a given scope | |||
by invoking the SEARCH method on that arbiter with that grammar and | by invoking the SEARCH method on that arbiter with that grammar and | |||
scope and with a root element of DAV:query-schema-discovery rather | scope and with a root element of DAV:query-schema-discovery rather | |||
than DAV:searchrequest. | than DAV:searchrequest. | |||
Marshalling: | Marshalling: | |||
The request body MUST be a DAV:query-schema-discovery element. | The request body MUST be a DAV:query-schema-discovery element. | |||
<!ELEMENT query-schema-discovery ANY> | <!ELEMENT query-schema-discovery ANY> | |||
<!-- ANY value: XML element specifying the query grammar | <!-- ANY value: XML element specifying the query grammar | |||
and the scope --> | and the scope --> | |||
The response body takes the form of a DAV:multistatus element | The response body takes the form of a DAV:multistatus element | |||
([RFC4918], Section 13), where DAV:response is extended to hold | ([RFC4918], Section 13), where DAV:response is extended to hold | |||
the returned query grammar inside a DAV:query-schema container | the returned query grammar inside a DAV:query-schema container | |||
element. | element. | |||
<!ELEMENT response (href, status, query-schema?, | <!ELEMENT response (href, status, query-schema?, | |||
responsedescription?) > | responsedescription?) > | |||
<!ELEMENT query-schema ANY> | <!ELEMENT query-schema ANY> | |||
The content of this container is an XML element whose name and syntax | The content of this container is an XML element whose name and syntax | |||
depend upon the grammar, and whose value may (and likely will) vary | depend upon the grammar, and whose value may (and likely will) vary | |||
depending upon the grammar, arbiter, and scope. | depending upon the grammar, arbiter, and scope. | |||
4.1.1. Example of Query Schema Discovery | 4.1.1. Example of Query Schema Discovery | |||
In this example, the arbiter is recipes.example, the grammar is DAV: | In this example, the arbiter is recipes.example, the grammar is DAV: | |||
basicsearch, the scope is also recipes.example. | basicsearch, the scope is also recipes.example. | |||
skipping to change at page 25, line 47 ¶ | skipping to change at page 24, line 47 ¶ | |||
When the child element DAV:include-versions is present, the search | When the child element DAV:include-versions is present, the search | |||
scope will include all versions (see [RFC3253], Section 2.2.1) of all | scope will include all versions (see [RFC3253], Section 2.2.1) of all | |||
version-controlled resources in scope. Servers that do support | version-controlled resources in scope. Servers that do support | |||
versioning but do not support the DAV:include-versions feature MUST | versioning but do not support the DAV:include-versions feature MUST | |||
signal an error if it is used in a query (see Section 2.2.2, | signal an error if it is used in a query (see Section 2.2.2, | |||
precondition DAV:search-scope-valid). | precondition DAV:search-scope-valid). | |||
5.4.1. Relationship to the Request-URI | 5.4.1. Relationship to the Request-URI | |||
If the DAV:scope element is an URI ([RFC3986], Section 3), the scope | If the DAV:scope element is a URI ([RFC3986], Section 3), the scope | |||
is exactly that URI. | is exactly that URI. | |||
If the DAV:scope element is a relative reference ([RFC3986], Section | If the DAV:scope element is a relative reference ([RFC3986], Section | |||
4.2), the scope is taken to be relative to the Request-URI. | 4.2), the scope is taken to be relative to the Request-URI. | |||
5.4.2. Scope | 5.4.2. Scope | |||
A Scope can be an arbitrary URI reference. | A Scope can be an arbitrary URI reference. | |||
Servers, of course, may support only particular scopes. This may | Servers, of course, may support only particular scopes. This may | |||
include limitations for particular schemes such as "http:" or "ftp:" | include limitations for particular schemes such as "http:" or "ftp:" | |||
or certain URI namespaces. However, WebDAV compliant search arbiters | or certain URI namespaces. However, WebDAV-compliant search arbiters | |||
minimally SHOULD support scopes that match their own URI. | minimally SHOULD support scopes that match their own URI. | |||
5.5. DAV:where | 5.5. DAV:where | |||
The DAV:where element defines the search condition for inclusion of | The DAV:where element defines the search condition for inclusion of | |||
resources in the result set. The value of this element is an XML | resources in the result set. The value of this element is an XML | |||
element that defines a search operator that evaluates to one of the | element that defines a search operator that evaluates to one of the | |||
Boolean truth values TRUE, FALSE, or UNKNOWN. The search operator | Boolean truth values TRUE, FALSE, or UNKNOWN. The search operator | |||
contained by DAV:where may itself contain and evaluate additional | contained by DAV:where may itself contain and evaluate additional | |||
search operators as operands, which in turn may contain and evaluate | search operators as operands, which in turn may contain and evaluate | |||
additional search operators as operands, etc. recursively. | additional search operators as operands, etc., recursively. | |||
5.5.1. Use of Three-Valued Logic in Queries | 5.5.1. Use of Three-Valued Logic in Queries | |||
Each operator defined for use in the where clause that returns a | Each operator defined for use in the where clause that returns a | |||
Boolean value MUST evaluate to TRUE, FALSE, or UNKNOWN. The resource | Boolean value MUST evaluate to TRUE, FALSE, or UNKNOWN. The resource | |||
under scan is included as a member of the result set if and only if | under scan is included as a member of the result set if and only if | |||
the search condition evaluates to TRUE. | the search condition evaluates to TRUE. | |||
Consult Appendix A for details on the application of three-valued | Consult Appendix A for details on the application of three-valued | |||
logic in query expressions. | logic in query expressions. | |||
5.5.2. Handling Optional Operators | 5.5.2. Handling Optional Operators | |||
If a query contains an operator that is not supported by the server, | If a query contains an operator that is not supported by the server, | |||
then the server MUST respond with a 422 (Unprocessable Entity) status | then the server MUST respond with a 422 (Unprocessable Entity) status | |||
code. | code. | |||
5.5.3. Treatment of NULL Values | 5.5.3. Treatment of NULL Values | |||
If a PROPFIND for a property value would yield a non-2xx (see | If a PROPFIND for a property value would yield a non-2xx (see Section | |||
[RFC2616], Section 10.2) response for that property, then that | 10.2 of [RFC2616]) response for that property, then that property is | |||
property is considered NULL. | considered NULL. | |||
NULL values are "less than" all other values in comparisons. | NULL values are "less than" all other values in comparisons. | |||
Empty strings (zero length strings) are not NULL values. An empty | Empty strings (zero length strings) are not NULL values. An empty | |||
string is "less than" a string with length greater than zero. | string is "less than" a string with length greater than zero. | |||
The DAV:is-defined operator is defined to test if the value of a | The DAV:is-defined operator is defined to test if the value of a | |||
property is not NULL. | property is not NULL. | |||
5.5.4. Treatment of Properties with mixed/element Content | 5.5.4. Treatment of Properties with Mixed/Element Content | |||
Comparisons of properties that do not have simple types (text-only | Comparisons of properties that do not have simple types (text-only | |||
content) is out-of-scope for the standard operators defined for DAV: | content) is out of scope for the standard operators defined for DAV: | |||
basicsearch and therefore is defined to be UNKNOWN (as per | basicsearch and therefore is defined to be UNKNOWN (as per | |||
Appendix A). For querying the DAV:resourcetype property, see | Appendix A). For querying the DAV:resourcetype property, see | |||
Section 5.13. | Section 5.13. | |||
5.5.5. Example: Testing for Equality | 5.5.5. Example: Testing for Equality | |||
The example shows a single operator (DAV:eq) applied in the criteria. | The example shows a single operator (DAV:eq) applied in the criteria. | |||
<d:where xmlns:d='DAV:'> | <d:where xmlns:d='DAV:'> | |||
<d:eq> | <d:eq> | |||
skipping to change at page 28, line 21 ¶ | skipping to change at page 27, line 21 ¶ | |||
appears before another in the result set. Comparisons are applied in | appears before another in the result set. Comparisons are applied in | |||
the order they occur in the DAV:orderby element, earlier comparisons | the order they occur in the DAV:orderby element, earlier comparisons | |||
being more significant. | being more significant. | |||
The comparisons defined here use only a single property from each | The comparisons defined here use only a single property from each | |||
resource, compared using the same ordering as the DAV:lt operator | resource, compared using the same ordering as the DAV:lt operator | |||
(ascending) or DAV:gt operator (descending). If neither direction is | (ascending) or DAV:gt operator (descending). If neither direction is | |||
specified, the default is DAV:ascending. | specified, the default is DAV:ascending. | |||
In the context of the DAV:orderby element, null values are considered | In the context of the DAV:orderby element, null values are considered | |||
to collate before any actual (i.e., non null) value, including | to collate before any actual (i.e., non-null) value, including | |||
strings of zero length (this is compatible with [SQL99]). | strings of zero length (this is compatible with [SQL99]). | |||
The "caseless" attribute may be used to indicate case-sensitivity for | The "caseless" attribute may be used to indicate case-sensitivity for | |||
comparisons (Section 5.18). | comparisons (Section 5.18). | |||
5.6.1. Example of Sorting | 5.6.1. Example of Sorting | |||
This sort orders first by last name of the author, and then by size, | This sort orders first by last name of the author and then by size, | |||
in descending order, so that for each author, the largest works | in descending order, so that for each author, the largest works | |||
appear first. | appear first. | |||
<d:orderby xmlns:d='DAV:' xmlns:r='http://example.com/ns'> | <d:orderby xmlns:d='DAV:' xmlns:r='http://example.com/ns'> | |||
<d:order> | <d:order> | |||
<d:prop><r:lastname/></d:prop> | <d:prop><r:lastname/></d:prop> | |||
<d:ascending/> | <d:ascending/> | |||
</d:order> | </d:order> | |||
<d:order> | <d:order> | |||
<d:prop><d:getcontentlength/></d:prop> | <d:prop><d:getcontentlength/></d:prop> | |||
skipping to change at page 29, line 18 ¶ | skipping to change at page 28, line 18 ¶ | |||
The DAV:eq operator provides simple equality matching on property | The DAV:eq operator provides simple equality matching on property | |||
values. | values. | |||
The "caseless" attribute may be used with this element | The "caseless" attribute may be used with this element | |||
(Section 5.18). | (Section 5.18). | |||
5.9. DAV:lt, DAV:lte, DAV:gt, DAV:gte | 5.9. DAV:lt, DAV:lte, DAV:gt, DAV:gte | |||
The DAV:lt, DAV:lte, DAV:gt, and DAV:gte operators provide | The DAV:lt, DAV:lte, DAV:gt, and DAV:gte operators provide | |||
comparisons on property values, using less-than, less-than or equal, | comparisons on property values, using less-than, less-than or equal, | |||
greater-than, and greater-than or equal respectively. The "caseless" | greater-than, and greater-than or equal, respectively. The | |||
attribute may be used with these elements (Section 5.18). | "caseless" attribute may be used with these elements (Section 5.18). | |||
5.10. DAV:literal | 5.10. DAV:literal | |||
DAV:literal allows literal values to be placed in an expression. | DAV:literal allows literal values to be placed in an expression. | |||
White space in literal values is significant in comparisons. For | White space in literal values is significant in comparisons. For | |||
consistency with [RFC4918], clients SHOULD NOT specify the attribute | consistency with [RFC4918], clients SHOULD NOT specify the attribute | |||
"xml:space" (Section 2.10 of [XML]) to override this behavior. | "xml:space" (Section 2.10 of [XML]) to override this behavior. | |||
In comparisons, the contents of DAV:literal SHOULD be treated as | In comparisons, the contents of DAV:literal SHOULD be treated as | |||
string, with the following exceptions: | string, with the following exceptions: | |||
o when operand for a comparison with a DAV:getcontentlength | o when operand for a comparison with a DAV:getcontentlength | |||
property, it SHOULD be treated as an unsigned integer value (the | property, it SHOULD be treated as an unsigned integer value (the | |||
behavior for values not in this format is undefined), | behavior for values not in this format is undefined), | |||
o when operand for a comparison with a DAV:creationdate or DAV: | o when operand for a comparison with a DAV:creationdate or DAV: | |||
getlastmodified property, it SHOULD be treated as a date value in | getlastmodified property, it SHOULD be treated as a date value in | |||
the ISO-8601 subset defined for the DAV:creationdate property (see | the ISO-8601 subset defined for the DAV:creationdate property (see | |||
[RFC4918], Section 15.1; the behavior of values not in this format | Section 15.1 of [RFC4918]; the behavior of values not in this | |||
is undefined), | format is undefined), | |||
o when operand for a comparison with a property for which the type | o when operand for a comparison with a property for which the type | |||
is known and when compatible with that type, it MAY be treated | is known and when compatible with that type, it MAY be treated | |||
according to this type. | according to this type. | |||
5.11. DAV:typed-literal (optional) | 5.11. DAV:typed-literal (Optional) | |||
There are situations in which a client may want to force a comparison | There are situations in which a client may want to force a comparison | |||
not to be string-based (as defined for DAV:literal). In these cases, | not to be string-based (as defined for DAV:literal). In these cases, | |||
a typed comparison can be enforced by using DAV:typed-literal | a typed comparison can be enforced by using DAV:typed-literal | |||
instead. | instead. | |||
<!ELEMENT typed-literal (#PCDATA)> | <!ELEMENT typed-literal (#PCDATA)> | |||
The data type is specified using the xsi:type attribute defined in | The data type is specified using the xsi:type attribute defined in | |||
[XS1], Section 2.6.1. If the type is not specified, it defaults to | Section 2.6.1 of [XS1]. If the type is not specified, it defaults to | |||
"xs:string". | "xs:string". | |||
A server MUST reject a request with an unknown type with a status of | A server MUST reject a request using an unknown type with a status of | |||
422 (Unprocessable Entity). It SHOULD reject a request if the value | 422 (Unprocessable Entity). It SHOULD reject a request if the value | |||
provided in DAV:typed-literal can not be cast to the specified type. | provided in DAV:typed-literal cannot be cast to the specified type. | |||
The comparison evaluates to UNKNOWN if the property value can not be | The comparison evaluates to UNKNOWN if the property value cannot be | |||
cast to the specified datatype (see [XPATHFUNC], Section 17). | cast to the specified datatype (see [XPATHFUNC], Section 17). | |||
5.11.1. Example for Typed Numerical Comparison | 5.11.1. Example for Typed Numerical Comparison | |||
Consider a set of resources with the dead property "edits" in the | Consider a set of resources with the dead property "edits" in the | |||
namespace "http://ns.example.org": | namespace "http://ns.example.org": | |||
+-----+----------------+ | +-----+----------------+ | |||
| URI | property value | | | URI | property value | | |||
+-----+----------------+ | +-----+----------------+ | |||
skipping to change at page 30, line 45 ¶ | skipping to change at page 29, line 45 ¶ | |||
<lt xmlns="DAV:" | <lt xmlns="DAV:" | |||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
xmlns:xs="http://www.w3.org/2001/XMLSchema"> | xmlns:xs="http://www.w3.org/2001/XMLSchema"> | |||
<prop><edits xmlns="http://ns.example.org"/></prop> | <prop><edits xmlns="http://ns.example.org"/></prop> | |||
<typed-literal xsi:type="xs:integer">3</typed-literal> | <typed-literal xsi:type="xs:integer">3</typed-literal> | |||
</lt> | </lt> | |||
will evaluate to TRUE for the resources "/a" and "/b" (their property | will evaluate to TRUE for the resources "/a" and "/b" (their property | |||
values can be parsed as type xs:integer, and the numerical comparison | values can be parsed as type xs:integer, and the numerical comparison | |||
evaluates to true), to FALSE for "/c" (property value is compatible, | evaluates to true), to FALSE for "/c" (property value is compatible, | |||
but numerical comparison evaluates to false) and UNKNOWN for "/d" and | but numerical comparison evaluates to false), and UNKNOWN for "/d" | |||
"/e" (the property either is undefined, or its value can not be | and "/e" (the property either is undefined, or its value cannot be | |||
parsed as xs:integer). | parsed as xs:integer). | |||
5.12. Support for Matching xml:lang Attributes on Properties | 5.12. Support for Matching xml:lang Attributes on Properties | |||
The following two optional operators can be used to express | The following two optional operators can be used to express | |||
conditions on the language of a property value (as expressed using | conditions on the language of a property value (as expressed using | |||
the xml:lang attribute). | the xml:lang attribute). | |||
5.12.1. DAV:language-defined (optional) | 5.12.1. DAV:language-defined (Optional) | |||
<!ELEMENT language-defined (prop)> | <!ELEMENT language-defined (prop)> | |||
This operator evaluates to TRUE if the language for the value of the | This operator evaluates to TRUE if the language for the value of the | |||
given property is known, FALSE if it isn't and UNKNOWN if the | given property is known, FALSE if it isn't, and UNKNOWN if the | |||
property itself is not defined. | property itself is not defined. | |||
5.12.2. DAV:language-matches (optional) | 5.12.2. DAV:language-matches (Optional) | |||
<!ELEMENT language-matches (prop, literal)> | <!ELEMENT language-matches (prop, literal)> | |||
This operator evaluates to TRUE if the language for the value of the | This operator evaluates to TRUE if the language for the value of the | |||
given property is known and matches the language name given in the | given property is known and matches the language name given in the | |||
<literal> element, FALSE if it doesn't match and UNKNOWN if the | <literal> element, FALSE if it doesn't match, and UNKNOWN if the | |||
property itself is not defined. | property itself is not defined. | |||
Languages are considered to match if they are the same, or if the | Languages are considered to match if they are the same, or if the | |||
language of the property value is a sublanguage of the language | language of the property value is a sublanguage of the language | |||
specified in the <literal> element (see [XPATH], Section 4.3, "lang | specified in the <literal> element (see Section 4.3 of [XPATH], "lang | |||
function"). | function"). | |||
5.12.3. Example of Language-Aware Matching | 5.12.3. Example of Language-Aware Matching | |||
The expression below will evaluate to TRUE if the property "foobar" | The expression below will evaluate to TRUE if the property "foobar" | |||
exists and its language is either unknown, English or a sublanguage | exists and its language is either unknown, English, or a sublanguage | |||
of English. | of English. | |||
<or xmlns="DAV:"> | <or xmlns="DAV:"> | |||
<not> | <not> | |||
<language-defined> | <language-defined> | |||
<prop><foobar/></prop> | <prop><foobar/></prop> | |||
</language-defined> | </language-defined> | |||
</not> | </not> | |||
<language-matches> | <language-matches> | |||
<prop><foobar/></prop> | <prop><foobar/></prop> | |||
skipping to change at page 32, line 12 ¶ | skipping to change at page 31, line 12 ¶ | |||
resource is a collection (that is, whether its DAV:resourcetype | resource is a collection (that is, whether its DAV:resourcetype | |||
element contains the element DAV:collection). | element contains the element DAV:collection). | |||
Rationale: This operator is provided in lieu of defining generic | Rationale: This operator is provided in lieu of defining generic | |||
structure queries, which would suffice for this and for many more | structure queries, which would suffice for this and for many more | |||
powerful queries, but seems inappropriate to standardize at this | powerful queries, but seems inappropriate to standardize at this | |||
time. | time. | |||
5.13.1. Example of DAV:is-collection | 5.13.1. Example of DAV:is-collection | |||
This example shows a search criterion that picks out all and only the | This example shows a search criterion that picks out all, and only, | |||
resources in the scope that are collections. | the resources in the scope that are collections. | |||
<where xmlns="DAV:"> | <where xmlns="DAV:"> | |||
<is-collection/> | <is-collection/> | |||
</where> | </where> | |||
5.14. DAV:is-defined | 5.14. DAV:is-defined | |||
The DAV:is-defined operator allows clients to determine whether a | The DAV:is-defined operator allows clients to determine whether a | |||
property is defined on a resource. The meaning of "defined on a | property is defined on a resource. The meaning of "defined on a | |||
resource" is found in Section 5.5.3. | resource" is found in Section 5.5.3. | |||
skipping to change at page 33, line 23 ¶ | skipping to change at page 32, line 23 ¶ | |||
zeroormore = "%" | zeroormore = "%" | |||
escapechar = "\" | escapechar = "\" | |||
escapeseq = escapechar ( exactlyone / zeroormore / escapechar ) | escapeseq = escapechar ( exactlyone / zeroormore / escapechar ) | |||
; character: see [XML], Section 2.2, minus wildcard / escapechar | ; character: see [XML], Section 2.2, minus wildcard / escapechar | |||
character = HTAB / LF / CR ; whitespace | character = HTAB / LF / CR ; whitespace | |||
character =/ %x20-24 / %x26-5B / %x5D-5E / %x60-D7FF | character =/ %x20-24 / %x26-5B / %x5D-5E / %x60-D7FF | |||
character =/ %xE000-FFFD / %x10000-10FFFF | character =/ %xE000-FFFD / %x10000-10FFFF | |||
(Note that the ABNF above is defined in terms of Unicode code points | (Note that the ABNF above is defined in terms of Unicode code points | |||
([UNICODE5]); when an query is transmitted as XML document WebDAV, | ([UNICODE5]); when a query is transmitted as an XML document over | |||
these characters are typically encoded in UTF-8 or UTF-16.) | WebDAV, these characters are typically encoded in UTF-8 or UTF-16.) | |||
The value for the literal is composed of wildcards separated by | The value for the literal is composed of wildcards separated by | |||
segments of text. Wildcards may begin or end the literal. | segments of text. Wildcards may begin or end the literal. | |||
The "_" wildcard matches exactly one character. | The "_" wildcard matches exactly one character. | |||
The "%" wildcard matches zero or more characters | The "%" wildcard matches zero or more characters. | |||
The "\" character is an escape sequence so that the literal can | The "\" character is an escape sequence so that the literal can | |||
include "_" and "%". To include the "\" character in the pattern, | include "_" and "%". To include the "\" character in the pattern, | |||
the escape sequence "\\" is used. | the escape sequence "\\" is used. | |||
5.15.2. Example of DAV:like | 5.15.2. Example of DAV:like | |||
This example shows how a client might use DAV:like to identify those | This example shows how a client might use DAV:like to identify those | |||
resources whose content type was a subtype of image. | resources whose content type was a subtype of image. | |||
skipping to change at page 34, line 4 ¶ | skipping to change at page 33, line 4 ¶ | |||
<D:like caseless="yes"> | <D:like caseless="yes"> | |||
<D:prop><D:getcontenttype/></D:prop> | <D:prop><D:getcontenttype/></D:prop> | |||
<D:literal>image/%</D:literal> | <D:literal>image/%</D:literal> | |||
</D:like> | </D:like> | |||
</D:where> | </D:where> | |||
5.16. DAV:contains | 5.16. DAV:contains | |||
The DAV:contains operator is an optional operator that provides | The DAV:contains operator is an optional operator that provides | |||
content-based search capability. This operator implicitly searches | content-based search capability. This operator implicitly searches | |||
against the text content of a resource, not against content of | against the text content of a resource, not against the content of | |||
properties. The DAV:contains operator is intentionally not overly | properties. The DAV:contains operator is intentionally not overly | |||
constrained, in order to allow the server to do the best job it can | constrained, in order to allow the server to do the best job it can | |||
in performing the search. | in performing the search. | |||
The DAV:contains operator evaluates to a Boolean value. It evaluates | The DAV:contains operator evaluates to a Boolean value. It evaluates | |||
to TRUE if the content of the resource satisfies the search. | to TRUE if the content of the resource satisfies the search. | |||
Otherwise, it evaluates to FALSE. | Otherwise, it evaluates to FALSE. | |||
Within the DAV:contains XML element, the client provides a phrase: a | Within the DAV:contains XML element, the client provides a phrase: a | |||
single word or whitespace delimited sequence of words. Servers MAY | single word or whitespace delimited sequence of words. Servers MAY | |||
ignore punctuation in a phrase. Case-sensitivity is at the | ignore punctuation in a phrase. Case-sensitivity is at the | |||
discretion of the server implementation. | discretion of the server implementation. | |||
The following non-exhaustive list enumerate things that may or may | The following non-exhaustive list enumerates things that may or may | |||
not be done as part of the search: Phonetic methods such as "soundex" | not be done as part of the search: Phonetic methods such as "soundex" | |||
may or may not be used. Word stemming may or may not be performed. | may or may not be used. Word stemming may or may not be performed. | |||
Thesaurus expansion of words may or may not be done. Right or left | Thesaurus expansion of words may or may not be done. Right or left | |||
truncation may or may not be performed. The search may be case | truncation may or may not be performed. The search may be case | |||
insensitive or case sensitive. The word or words may or may not be | insensitive or case sensitive. The word or words may or may not be | |||
interpreted as names. Multiple words may or may not be required to | interpreted as names. Multiple words may or may not be required to | |||
be adjacent or "near" each other. Multiple words may or may not be | be adjacent or "near" each other. Multiple words may or may not be | |||
required to occur in the same order. Multiple words may or may not | required to occur in the same order. Multiple words may or may not | |||
be treated as a phrase. The search may or may not be interpreted as | be treated as a phrase. The search may or may not be interpreted as | |||
a request to find documents "similar" to the string operand. | a request to find documents "similar" to the string operand. | |||
Character canonicalization such as that done by the Unicode collation | Character canonicalization such as that done by the Unicode collation | |||
algorithm may or may not be applied. | algorithm may or may not be applied. | |||
5.16.1. Result Scoring (DAV:score Element) | 5.16.1. Result Scoring (DAV:score Element) | |||
Servers SHOULD indicate scores for the DAV:contains condition by | Servers SHOULD indicate scores for the DAV:contains condition by | |||
adding a DAV:score XML element to the DAV:response element. Its | adding a DAV:score XML element to the DAV:response element. Its | |||
value is defined only in the context of a particular query result. | value is defined only in the context of a particular query result. | |||
The value is a string representing the score, an integer from zero to | The value is a string representing the score, an integer from zero to | |||
10000 inclusive, where a higher value indicates a higher score (e.g. | 10000 inclusive, where a higher value indicates a higher score (e.g., | |||
more relevant). | more relevant). | |||
Modified DTD fragment for DAV:propstat: | Modified DTD fragment for DAV:propstat: | |||
<!ELEMENT response (href, ((href*, status)|(propstat+)), | <!ELEMENT response (href, ((href*, status)|(propstat+)), | |||
responsedescription?, score?) > | responsedescription?, score?) > | |||
<!ELEMENT score (#PCDATA) > | <!ELEMENT score (#PCDATA) > | |||
Clients should note that, in general, it is not meaningful to compare | Clients should note that, in general, it is not meaningful to compare | |||
the numeric values of scores from two different query results unless | the numeric values of scores from two different query results unless | |||
skipping to change at page 36, line 23 ¶ | skipping to change at page 35, line 23 ¶ | |||
as defined in Section 5.18 of the Unicode Standard ([UNICODE5]). | as defined in Section 5.18 of the Unicode Standard ([UNICODE5]). | |||
Support for the "caseless" attribute is optional. A server should | Support for the "caseless" attribute is optional. A server should | |||
respond with a status of 422 if it is used but cannot be supported. | respond with a status of 422 if it is used but cannot be supported. | |||
5.19. Query Schema for DAV:basicsearch | 5.19. Query Schema for DAV:basicsearch | |||
The DAV:basicsearch grammar defines a search criteria that is a | The DAV:basicsearch grammar defines a search criteria that is a | |||
Boolean-valued expression, and allows for an arbitrary set of | Boolean-valued expression, and allows for an arbitrary set of | |||
properties to be included in the result record. The result set may | properties to be included in the result record. The result set may | |||
be sorted on a set of property values. Accordingly the DTD for | be sorted on a set of property values. Accordingly, the DTD for | |||
schema discovery for this grammar allows the server to express: | schema discovery for this grammar allows the server to express: | |||
1. the set of properties that may be either searched, returned, or | 1. the set of properties that may be either searched, returned, or | |||
used to sort, and a hint about the data type of such properties | used to sort, and a hint about the data type of such properties. | |||
2. the set of optional operators defined by the resource. | 2. the set of optional operators defined by the resource. | |||
5.19.1. DTD for DAV:basicsearch QSD | 5.19.1. DTD for DAV:basicsearch QSD | |||
<!ELEMENT basicsearchschema (properties, operators)> | <!ELEMENT basicsearchschema (properties, operators)> | |||
<!ELEMENT any-other-property EMPTY> | <!ELEMENT any-other-property EMPTY> | |||
<!ELEMENT properties (propdesc*)> | <!ELEMENT properties (propdesc*)> | |||
<!ELEMENT propdesc ((prop|any-other-property), datatype?, | <!ELEMENT propdesc ((prop|any-other-property), datatype?, | |||
searchable?, selectable?, sortable?, | searchable?, selectable?, sortable?, | |||
skipping to change at page 38, line 38 ¶ | skipping to change at page 37, line 38 ¶ | |||
This element indicates that the property may appear in the DAV: | This element indicates that the property may appear in the DAV: | |||
orderby element. | orderby element. | |||
<!ELEMENT sortable EMPTY> | <!ELEMENT sortable EMPTY> | |||
5.19.7. The DAV:caseless Property Description | 5.19.7. The DAV:caseless Property Description | |||
This element only applies to properties whose data type is "xs: | This element only applies to properties whose data type is "xs: | |||
string" and derived data types as per the DAV:datatype property | string" and derived data types as per the DAV:datatype property | |||
description. Its presence indicates that compares performed for | description. Its presence indicates that comparisons performed for | |||
searches, and the comparisons for ordering results on the string | searches, and the comparisons for ordering results on the string | |||
property will be caseless (the default is character-by-character). | property will be caseless (the default is character by character). | |||
<!ELEMENT caseless EMPTY> | <!ELEMENT caseless EMPTY> | |||
5.19.8. The DAV:operators XML Element | 5.19.8. The DAV:operators XML Element | |||
The DAV:operators element describes every optional operator supported | The DAV:operators element describes every optional operator supported | |||
in a query. (Mandatory operators are not listed since they are | in a query. (Mandatory operators are not listed since they are | |||
mandatory and permit no variation in syntax.). All optional | mandatory and permit no variation in syntax.) All optional operators | |||
operators that are supported MUST be listed in the DAV:operators | that are supported MUST be listed in the DAV:operators element. | |||
element. | ||||
The listing for an operator, contained in an DAV:opdesc element, | The listing for an operator, contained in an DAV:opdesc element, | |||
consists of the operator (as an empty element), followed by one | consists of the operator (as an empty element), followed by one | |||
element for each operand. The operand MUST be either DAV:operand- | element for each operand. The operand MUST be either DAV:operand- | |||
property, DAV:operand-literal or DAV:operand-typed-literal, which | property, DAV:operand-literal, or DAV:operand-typed-literal, which | |||
indicate that the operand in the corresponding position is a | indicate that the operand in the corresponding position is a | |||
property, a literal value or a typed literal value, respectively. If | property, a literal value, or a typed literal value, respectively. | |||
an operator is polymorphic (allows more than one operand syntax) then | If an operator is polymorphic (allows more than one operand syntax) | |||
each permitted syntax MUST be listed separately. | then each permitted syntax MUST be listed separately. | |||
The DAV:opdesc element MAY have a "allow-pcdata" attribute | The DAV:opdesc element MAY have a "allow-pcdata" attribute | |||
(defaulting to "no"). A value of "yes" indicates that the operator | (defaulting to "no"). A value of "yes" indicates that the operator | |||
can contain character data, as it is the case with DAV:contains (see | can contain character data, as it is the case with DAV:contains (see | |||
Section 5.16). Definition of additional operators using this format | Section 5.16). Definition of additional operators using this format | |||
is NOT RECOMMENDED. | is NOT RECOMMENDED. | |||
<operators xmlns='DAV:'> | <operators xmlns='DAV:'> | |||
<opdesc> | <opdesc> | |||
<like/><operand-property/><operand-literal/> | <like/><operand-property/><operand-literal/> | |||
skipping to change at page 41, line 4 ¶ | skipping to change at page 40, line 4 ¶ | |||
and DAV:like are supported. | and DAV:like are supported. | |||
Note: The schema discovery defined here does not provide for | Note: The schema discovery defined here does not provide for | |||
discovery of supported values of the "caseless" attribute. This | discovery of supported values of the "caseless" attribute. This | |||
may require that the reply also list the mandatory operators. | may require that the reply also list the mandatory operators. | |||
6. Internationalization Considerations | 6. Internationalization Considerations | |||
Properties may be language-tagged using the xml:lang attribute (see | Properties may be language-tagged using the xml:lang attribute (see | |||
[RFC4918], Section 4.3). The optional operators DAV:language-defined | [RFC4918], Section 4.3). The optional operators DAV:language-defined | |||
(Section 5.12.1) and DAV:language-matches (Section 5.12.2) allow to | (Section 5.12.1) and DAV:language-matches (Section 5.12.2) allow the | |||
express conditions on the language tagging information. | expression of conditions on the language tagging information. | |||
7. Security Considerations | 7. Security Considerations | |||
This section is provided to detail issues concerning security | This section is provided to detail issues concerning security | |||
implications of which DASL applications need to be aware. All of the | implications of which DASL applications need to be aware. All of the | |||
security considerations of HTTP/1.1 ([RFC2616] and WebDAV ([RFC4918]) | security considerations of HTTP/1.1 ([RFC2616] and WebDAV ([RFC4918]) | |||
also apply to DASL. In addition, this section will include security | also apply to DASL. In addition, this section will include security | |||
risks inherent in searching and retrieval of resource properties and | risks inherent in the search and retrieval of resource properties and | |||
content. | content. | |||
A query MUST NOT allow clients to retrieve information that wouldn't | A query MUST NOT allow clients to retrieve information that wouldn't | |||
have been available through the GET or PROPFIND methods in the first | have been available through the GET or PROPFIND methods in the first | |||
place. In particular: | place. In particular: | |||
o Query constraints on WebDAV properties for which the client does | o Query constraints on WebDAV properties for which the client does | |||
not have read access need to be evaluated as if the property did | not have read access need to be evaluated as if the property did | |||
not exist (see Section 5.5.3). | not exist (see Section 5.5.3). | |||
o Query constraints on content (as with DAV:contains, defined in | o Query constraints on content (as with DAV:contains, defined in | |||
Section 5.16) for which the client does not have read access need | Section 5.16) for which the client does not have read access need | |||
to be evaluated as if a GET would return a 4xx status code. | to be evaluated as if a GET would return a 4xx status code. | |||
A server should prepare for denial of service attacks. For example a | A server should prepare for denial-of-service attacks. For example a | |||
client may issue a query for which the result set is expensive to | client may issue a query for which the result set is expensive to | |||
calculate or transmit because many resources match or must be | calculate or transmit because many resources match or must be | |||
evaluated. | evaluated. | |||
7.1. Implications of XML External Entities | 7.1. Implications of XML External Entities | |||
XML supports a facility known as "external entities", defined in | XML supports a facility known as "external entities", defined in | |||
Section 4.2.2 of [XML], which instruct an XML processor to retrieve | Section 4.2.2 of [XML], which instruct an XML processor to retrieve | |||
and perform an inline include of XML located at a particular URI. An | and perform an inline include of XML located at a particular URI. An | |||
external XML entity can be used to append or modify the document type | external XML entity can be used to append or modify the document type | |||
skipping to change at page 42, line 9 ¶ | skipping to change at page 41, line 9 ¶ | |||
External XML entities have no inherent trustworthiness and are | External XML entities have no inherent trustworthiness and are | |||
subject to all the attacks that are endemic to any HTTP GET request. | subject to all the attacks that are endemic to any HTTP GET request. | |||
Furthermore, it is possible for an external XML entity to modify the | Furthermore, it is possible for an external XML entity to modify the | |||
DTD, and hence affect the final form of an XML document, in the worst | DTD, and hence affect the final form of an XML document, in the worst | |||
case significantly modifying its semantics, or exposing the XML | case significantly modifying its semantics, or exposing the XML | |||
processor to the security risks discussed in [RFC3023]. Therefore, | processor to the security risks discussed in [RFC3023]. Therefore, | |||
implementers must be aware that external XML entities should be | implementers must be aware that external XML entities should be | |||
treated as untrustworthy. | treated as untrustworthy. | |||
There is also the scalability risk that would accompany a widely | There is also the scalability risk that would accompany a widely | |||
deployed application which made use of external XML entities. In | deployed application that made use of external XML entities. In this | |||
this situation, it is possible that there would be significant | situation, it is possible that there would be significant numbers of | |||
numbers of requests for one external XML entity, potentially | requests for one external XML entity, potentially overloading any | |||
overloading any server which fields requests for the resource | server that fields requests for the resource containing the external | |||
containing the external XML entity. | XML entity. | |||
8. Scalability | 8. Scalability | |||
Query grammars are identified by URIs. Applications SHOULD NOT | Query grammars are identified by URIs. Applications SHOULD NOT | |||
attempt to retrieve these URIs even if they appear to be retrievable | attempt to retrieve these URIs even if they appear to be retrievable | |||
(for example, those that begin with "http://") | (for example, those that begin with "http://"). | |||
9. IANA Considerations | 9. IANA Considerations | |||
This document uses the namespace defined in Section 21 of [RFC4918] | This document uses the namespace defined in Section 21 of [RFC4918] | |||
for XML elements. | for XML elements. | |||
9.1. HTTP Headers | 9.1. HTTP Headers | |||
This document specifies the HTTP header listed below, to be added to | This document specifies the HTTP header listed below, which has been | |||
the permanent HTTP header registry defined in [RFC3864]. | added to the permanent HTTP header registry defined in [RFC3864]. | |||
9.1.1. DASL | 9.1.1. DASL | |||
Header field name: DASL | Header field name: DASL | |||
Applicable protocol: http | Applicable protocol: http | |||
Status: standard | Status: standard | |||
Author/Change controller: IETF | Author/Change controller: IETF | |||
Specification document: this specification (Section 3.2) | Specification document: this specification (Section 3.2) | |||
10. Contributors | 10. Contributors | |||
This document is based on prior work on the DASL protocol done by the | This document is based on prior work on the DASL protocol done by the | |||
WebDAV DASL working group until the year 2000 -- namely by Alan | WebDAV DASL working group until the year 2000 -- namely by Alan | |||
Babich, Jim Davis, Rick Henderson, Dale Lowry, Saveen Reddy and | Babich, Jim Davis, Rick Henderson, Dale Lowry, Saveen Reddy, Surendra | |||
Surendra Reddy. | Reddy, and Judith Slein (see <http://www.webdav.org/dasl/> for the | |||
working group's web site, | ||||
<http://purl.org/NET/webdav/dasl-references/reqs> for a requirements | ||||
document, and | ||||
<http://purl.org/NET/webdav/dasl-references/dasl-protocol-00> for an | ||||
early version of the specification). | ||||
11. Acknowledgements | 11. Acknowledgements | |||
This document has benefited from thoughtful discussion by Lisa | This document has benefited from thoughtful discussion by Lisa | |||
Dusseault, Javier Godoy, Sung Kim, Chris Newman, Elias Sinderson, | Dusseault, Javier Godoy, Sung Kim, Chris Newman, Elias Sinderson, | |||
Martin Wallmer, Keith Wannamaker, Jim Whitehead and Kevin Wiggen. | Martin Wallmer, Keith Wannamaker, Jim Whitehead, and Kevin Wiggen. | |||
12. References | 12. References | |||
12.1. Normative References | 12.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., | [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., | |||
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext | |||
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999. | |||
[RFC3023] Makoto, M., St.Laurent, S., and D. Kohn, "XML Media | [RFC3023] Murata, M., St. Laurent, S., and D. Kohn, "XML Media | |||
Types", RFC 3023, January 2001. | Types", RFC 3023, January 2001. | |||
[RFC3253] Clemm, G., Amsden, J., Ellison, T., Kaler, C., and J. | [RFC3253] Clemm, G., Amsden, J., Ellison, T., Kaler, C., and J. | |||
Whitehead, "Versioning Extensions to WebDAV", RFC 3253, | Whitehead, "Versioning Extensions to WebDAV (Web | |||
Distributed Authoring and Versioning)", RFC 3253, | ||||
March 2002. | March 2002. | |||
[RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web | [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web | |||
Distributed Authoring and Versioning (WebDAV) Access | Distributed Authoring and Versioning (WebDAV) Access | |||
Control Protocol", RFC 3744, May 2004. | Control Protocol", RFC 3744, May 2004. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
RFC 3986, January 2005. | RFC 3986, January 2005. | |||
skipping to change at page 44, line 21 ¶ | skipping to change at page 43, line 28 ¶ | |||
[XS1] Thompson, H., Beech, D., Maloney, M., Mendelsohn, N., and | [XS1] Thompson, H., Beech, D., Maloney, M., Mendelsohn, N., and | |||
World Wide Web Consortium, "XML Schema Part 1: | World Wide Web Consortium, "XML Schema Part 1: | |||
Structures", W3C REC-xmlschema-1-20041028, October 2004, | Structures", W3C REC-xmlschema-1-20041028, October 2004, | |||
<http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/>. | <http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/>. | |||
[XS2] Biron, P., Malhotra, A., and World Wide Web Consortium, | [XS2] Biron, P., Malhotra, A., and World Wide Web Consortium, | |||
"XML Schema Part 2: Datatypes Second Edition", W3C REC- | "XML Schema Part 2: Datatypes Second Edition", W3C REC- | |||
xmlschema-2-20041028, October 2004, | xmlschema-2-20041028, October 2004, | |||
<http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/>. | <http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/>. | |||
12.2. Informative References | 12.2. Informative References | |||
[BCP47] Phillips, A. and M. Davis, "Matching of Language Tags", | [BCP47] Phillips, A. and M. Davis, "Matching of Language Tags", | |||
BCP 47, RFC 4647, September 2006. | BCP 47, RFC 4647, September 2006. | |||
[DASL] Reddy, S., Lowry, D., Reddy, S., Henderson, R., Davis, J., | [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
and A. Babich, "DAV Searching & Locating", | ||||
draft-ietf-dasl-protocol-00 (work in progress), July 1999. | ||||
[DASLREQ] Davis, J., Reddy, S., and J. Slein, "Requirements for DAV | ||||
Searching and Locating", February 1999, <http:// | ||||
www.webdav.org/dasl/requirements/ | ||||
draft-dasl-requirements-01.html>. | ||||
This is an updated version of the Internet Draft | ||||
"draft-ietf-dasl-requirements-00", but obviously never was | ||||
submitted to the IETF. | ||||
[RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | ||||
Procedures for Message Header Fields", BCP 90, RFC 3864, | Procedures for Message Header Fields", BCP 90, RFC 3864, | |||
September 2004. | September 2004. | |||
[RFC4437] Whitehead, J., Clemm, G., and J. Reschke, Ed., "Web | [RFC4437] Whitehead, J., Clemm, G., and J. Reschke, Ed., "Web | |||
Distributed Authoring and Versioning (WebDAV) | Distributed Authoring and Versioning (WebDAV) | |||
Redirect Reference Resources", RFC 4437, March 2006. | Redirect Reference Resources", RFC 4437, March 2006. | |||
[RFC4790] Newman, C., Duerst, M., and A. Gulbrandsen, "Internet | [RFC4790] Newman, C., Duerst, M., and A. Gulbrandsen, "Internet | |||
Application Protocol Collation Registry", RFC 4790, | Application Protocol Collation Registry", RFC 4790, | |||
March 2007. | March 2007. | |||
[SQL99] Milton, J., "Database Language SQL Part 2: Foundation | [SQL99] Milton, J., "Database Language SQL Part 2: Foundation | |||
(SQL/Foundation)", ISO ISO/IEC 9075-2:1999 (E), July 1999. | (SQL/Foundation)", ISO ISO/IEC 9075-2:1999 (E), July 1999. | |||
[UNICODE5] | [UNICODE5] | |||
The Unicode Consortium, "The Unicode Standard - Version | The Unicode Consortium, "The Unicode Standard - Version | |||
5.0", Addison-Wesley , November 2006, | 5.0", Addison-Wesley , November 2006, | |||
<http://www.unicode.org/versions/Unicode5.0.0/>. | <http://www.unicode.org/versions/Unicode5.0.0/>. | |||
ISBN 0321480910 [1] | ISBN 0321480910 [1] | |||
[draft-ietf-webdav-bind] | [WEBDAV-BIND] | |||
Clemm, G., Crawford, J., Reschke, J., Ed., and J. | Clemm, G., Crawford, J., Reschke, J., Ed., and J. | |||
Whitehead, "Binding Extensions to Web Distributed | Whitehead, "Binding Extensions to Web Distributed | |||
Authoring and Versioning (WebDAV)", | Authoring and Versioning (WebDAV)", October 2008. | |||
draft-ietf-webdav-bind-20 (work in progress), | ||||
November 2007. | ||||
URIs | URIs | |||
[1] <urn:isbn:0321480910> | [1] <urn:isbn:0321480910> | |||
Appendix A. Three-Valued Logic in DAV:basicsearch | Appendix A. Three-Valued Logic in DAV:basicsearch | |||
ANSI standard three valued logic is used when evaluating the search | ANSI standard three-valued logic is used when evaluating the search | |||
condition (as defined in the ANSI standard SQL specifications, for | condition (as defined in the ANSI standard SQL specifications, for | |||
example in ANSI X3.135-1992, section 8.12, pp. 188-189, section 8.2, | example, in ANSI X3.135-1992, Section 8.12, pp. 188-189, Section 8.2, | |||
p. 169, General Rule 1)a), etc.). | p. 169, General Rule 1)a), etc.). | |||
ANSI standard three valued logic is undoubtedly the most widely | ANSI standard three-valued logic is undoubtedly the most widely | |||
practiced method of dealing with the issues of properties in the | practiced method of dealing with the issues of properties in the | |||
search condition not having a value (e.g., being null or not defined) | search condition not having a value (e.g., being null or not defined) | |||
for the resource under scan, and with undefined expressions in the | for the resource under scan, and with undefined expressions in the | |||
search condition (e.g., division by zero, etc.). Three valued logic | search condition (e.g., division by zero, etc.). Three valued logic | |||
works as follows. | works as follows. | |||
Undefined expressions are expressions for which the value of the | Undefined expressions are expressions for which the value of the | |||
expression is not defined. Undefined expressions are a completely | expression is not defined. Undefined expressions are a completely | |||
separate concept from the truth value UNKNOWN, which is, in fact, | separate concept from the truth value UNKNOWN, which is, in fact, | |||
well defined. Property names and literal constants are considered | well defined. Property names and literal constants are considered | |||
skipping to change at page 46, line 11 ¶ | skipping to change at page 45, line 4 ¶ | |||
undefined. | undefined. | |||
There are no manifest constants to explicitly represent undefined | There are no manifest constants to explicitly represent undefined | |||
number, string, or datetime values. | number, string, or datetime values. | |||
Since a Boolean value is ultimately returned by the search condition, | Since a Boolean value is ultimately returned by the search condition, | |||
arithmetic, string, and datetime expressions are always arguments to | arithmetic, string, and datetime expressions are always arguments to | |||
other operators. Examples of operators that convert arithmetic, | other operators. Examples of operators that convert arithmetic, | |||
string, and datetime expressions to Boolean values are the six | string, and datetime expressions to Boolean values are the six | |||
relational operators ("greater than", "less than", "equals", etc.). | relational operators ("greater than", "less than", "equals", etc.). | |||
If either or both operands of a relational operator have undefined | If either or both operands of a relational operator have undefined | |||
values, then the relational operator evaluates to UNKNOWN. | values, then the relational operator evaluates to UNKNOWN. | |||
Otherwise, the relational operator evaluates to TRUE or FALSE, | Otherwise, the relational operator evaluates to TRUE or FALSE, | |||
depending upon the outcome of the comparison. | depending upon the outcome of the comparison. | |||
The Boolean operators DAV:and, DAV:or and DAV:not are evaluated | The Boolean operators DAV:and, DAV:or, and DAV:not are evaluated | |||
according to the following rules: | according to the following rules: | |||
not UNKNOWN = UNKNOWN | not UNKNOWN = UNKNOWN | |||
UNKNOWN and TRUE = UNKNOWN | UNKNOWN and TRUE = UNKNOWN | |||
UNKNOWN and FALSE = FALSE | UNKNOWN and FALSE = FALSE | |||
UNKNOWN and UNKNOWN = UNKNOWN | UNKNOWN and UNKNOWN = UNKNOWN | |||
UNKNOWN or TRUE = TRUE | UNKNOWN or TRUE = TRUE | |||
UNKNOWN or FALSE = UNKNOWN | UNKNOWN or FALSE = UNKNOWN | |||
UNKNOWN or UNKNOWN = UNKNOWN | UNKNOWN or UNKNOWN = UNKNOWN | |||
Appendix B. Candidates for Future Protocol Extensions | Appendix B. Candidates for Future Protocol Extensions | |||
This Section summarizes issues which have been raised during the | This section summarizes issues that have been raised during the | |||
development of this specification, but for which no resolution could | development of this specification, but for which no resolution could | |||
be found with the constraints in place. Future revisions of this | be found with the constraints in place. Future revisions of this | |||
specification should revisit these issues, though. | specification should revisit these issues, though. | |||
B.1. Collation Support | B.1. Collation Support | |||
Matching and sorting of textual data relies on collations. With | Matching and sorting of textual data relies on collations. With | |||
respect to WebDAV SEARCH, a combination of various design approaches | respect to WebDAV SEARCH, a combination of various design approaches | |||
could be used: | could be used: | |||
skipping to change at page 48, line 36 ¶ | skipping to change at page 47, line 33 ¶ | |||
requests, and remove the result through a DELETE request. | requests, and remove the result through a DELETE request. | |||
B.8. Search Scope Discovery | B.8. Search Scope Discovery | |||
Given a Search Arbiter resource, there's currently no way to discover | Given a Search Arbiter resource, there's currently no way to discover | |||
programmatically the supported sets of search scopes. Future | programmatically the supported sets of search scopes. Future | |||
revisions of this specification could specify a scope discovery | revisions of this specification could specify a scope discovery | |||
mechanism, similar to the Query Schema Discovery defined in | mechanism, similar to the Query Schema Discovery defined in | |||
Section 4. | Section 4. | |||
Appendix C. Change Log (to be removed by RFC Editor before publication) | Appendix C. Open issues (to be removed by RFC Editor prior to | |||
C.1. From draft-davis-dasl-protocol-xxx | ||||
Feb 14, 1998 Initial Draft | ||||
Feb 28, 1998 Referring to DASL as an extension to HTTP/1.1 rather | ||||
than DAV. | ||||
Added new sections "Notational Conventions", "Protocol Model", | ||||
"Security Considerations". | ||||
Changed section 3 to "Elements of Protocol". | ||||
Added some stuff to introduction. | ||||
Added "result set" terminology. | ||||
Added "IANA Considerations". | ||||
Mar 9, 1998 Moved sub-headings of "Elements of Protocol" to first | ||||
level and removed "Elements of Protocol" Heading. | ||||
Added an sentence in introduction explaining that this is a | ||||
"sketch" of a protocol. | ||||
Mar 11, 1998 Added orderby, data typing, three valued logic, query | ||||
schema property, and element definitions for schema for | ||||
basicsearch. | ||||
April 8, 1998 - made changes based on last week's DASL BOF. | ||||
May 8, 1998 Removed most of DAV:searcherror; converted to DAV: | ||||
searchredirect | ||||
Altered DAV:basicsearch grammar to use avoid use of ANY in DTD | ||||
June 17, 1998 -Added details on Query Schema Discovery | ||||
-Shortened list of data types | ||||
June 23, 1998 moved data types before change history | ||||
rewrote the data types section | ||||
removed the casesensitive element and replace with the | ||||
casesensitive attribute | ||||
added the casesensitive attribute to the DTD for all operations | ||||
that might work on a string | ||||
Jul 20, 1998 A series of changes. See Author's meeting minutes for | ||||
details. | ||||
July 28, 1998 Changes as per author's meeting. QSD uses SEARCH, not | ||||
PROPFIND. | ||||
Moved text around to keep concepts nearby. | ||||
Boolean literals are 1 and 0, not T and F. | ||||
contains changed to contentspassthrough. | ||||
Renamed rank to score. | ||||
July 28, 1998 Added Dale Lowry as Author | ||||
September 4, 1998 Added 422 as response when query lists | ||||
unimplemented operators. | ||||
DAV:literal declares a default value for xml:space, 'preserve' | ||||
(see XML spec, section 2.10) | ||||
moved to new XML namespace syntax | ||||
September 22, 1998 Changed "simplesearch" to "basicsearch" | ||||
Changed isnull to isdefined | ||||
Defined NULLness as having a 404 or 403 response | ||||
used ENTITY syntax in DTD | ||||
Added redirect | ||||
October 9, 1998 Fixed a series of typographical and formatting | ||||
errors. | ||||
Modified the section of three-valued logic to use a table rather | ||||
than a text description of the role of UNKNOWN in expressions. | ||||
November 2, 1998 Added the DAV:contains operator. | ||||
Removed the DAV:contentpassthrough operator. | ||||
November 18, 1998 Various author comments for submission | ||||
June 3, 1999 Cosmetic and minor editorial changes only. Fix nits | ||||
reported by Jim Whitehead in email of April 26, 1999. Converted | ||||
to HTML from Word 97, manually. | ||||
April 20, 2000 Removed redirection feature, since 301/302 suffices. | ||||
Removed Query Schema Discovery (former chapter 4). Everyone | ||||
agrees this is a useful feature, but it is apparently too | ||||
difficult to define at this time, and it is not essential for | ||||
DASL. | ||||
C.2. since start of draft-reschke-webdav-search | ||||
October 09, 2001 Added Julian Reschke as author. | ||||
Chapter about QSD re-added. | ||||
Formatted into RFC2629-compliant XML document. | ||||
Added first comments. | ||||
ID version number kicked up to draft-dasl-protocol-03. | ||||
October 17, 2001 Updated address information for Jim Davis. | ||||
Added issue of datatype vocabularies. | ||||
Updated issue descriptions for grammar discovery, added issues on | ||||
query schema DTD. | ||||
Fixed typos in XML examples. | ||||
December 17, 2001 Re-introduced split between normative and non- | ||||
normative references. | ||||
January 05, 2002 Version bumped up to 04. Started work on resolving | ||||
the issues identified in the previous version. | ||||
January 14, 2002 Fixed some XML typos. | ||||
January 22, 2002 Closed issues naming-of-elements. Fixed query | ||||
search DTD and added option to discover properties of "other" | ||||
(non-listed) properties. | ||||
January 25, 2002 Changed into private submission and added reference | ||||
to historic DASL draft. Marked reference to DASL requirements | ||||
non-normative. | ||||
Updated reference to latest deltav spec. | ||||
January 29, 2002 Added feedback from and updated contact info for | ||||
Alan Babich. | ||||
Included open issues collected in | ||||
http://www.webdav.org/dasl/protocol/issues.html. | ||||
February 8, 2002 Made sure that all artwork fits into 72 characters | ||||
wide text. | ||||
February 18, 2002 Changed Insufficient storage handling | ||||
(multistatus). Moved is-collection to operators and added to DTD. | ||||
Made scope/depth mandatory. | ||||
February 20, 2002 Updated reference to SQL99. | ||||
February 28, 2002 "Non-normative References" -> "Informative | ||||
References". Abstract updated. Consistently specify a charset | ||||
when using text/xml (no change bars). Do not attempt to define | ||||
PROPFIND's entity encoding (take out specific references to text/ | ||||
xml). Remove irrelevant headers (Connection:) from examples (no | ||||
change bars). Added issue on querying based on DAV:href. Updated | ||||
introduction to indicate relationship to DASL draft. Updated HTTP | ||||
reference from RFC2068 to RFC2616. Updated XML reference to XML | ||||
1.0 2nd edition. | ||||
March 1, 2002 Removed superfluous namespace decl in 2.4.2. Reopened | ||||
JW14 and suggest to drop xml:space support. | ||||
March 3, 2002 Removed "xml:space" feature on DAV:literal. Added | ||||
issue about string comparison vs. collations vs. xml:lang. | ||||
Updated some of the open issues with details from JimW's original | ||||
mail in April 1999. Resolved scope vs relative URI references. | ||||
Resolved issues about DAV:ascending (added to index) and the BNF | ||||
for DAV:like (changed "octets" to "characters"). | ||||
March 8, 2002 Updated reference to DeltaV (now RFC3253). Added | ||||
Martin Wallmer's comments, moved JW5 into DAV:basicsearch section. | ||||
March 11, 2002 Closed open issues regaring the type of search | ||||
arbiters (JW3) and their discovery (JW9). Rephrased requirements | ||||
on multistatus response bodies (propstat only if properties were | ||||
selected, removed requirement for responsedescription). | ||||
March 23, 2002 RFC2376 -> RFC3023. Added missing first names of | ||||
authors. OPTIONS added to example for DAV:supported-method-set. | ||||
C.3. since draft-reschke-webdav-search-00 | ||||
March 29, 2002 Abstract doesn't refer to DASL WG anymore. | ||||
April 7, 2002 Fixed section title (wrong property name supported- | ||||
search-grammar-set. Changed DAV:casesensitve to "casesensitive" | ||||
(it wasn't in the DAV: namespace after all). | ||||
May 28, 2002 Updated some issues with Jim Davis's comments. | ||||
June 10, 2002 Added proposal for different method for query schema | ||||
discovery, not using pseudo-properties. | ||||
June 25, 2002 QSD marshalling rewritten. Added issue "isdefined- | ||||
optional". | ||||
C.4. since draft-reschke-webdav-search-01 | ||||
July 04, 2002 Added issue "scope-collection". | ||||
July 08, 2002 Closed issue "scope-collection". | ||||
August 12, 2002 Added issues "results-vs-binds" and "select- | ||||
allprop". | ||||
October 22, 2002 Added issue "undefined-expressions". | ||||
November 18, 2002 Changed example host names (no change tracking). | ||||
November 25, 2002 Updated issue "DB2/DB7". Closed issues "undefined | ||||
expressions", "isdefined-optional" and "select-allprop". | ||||
C.5. since draft-reschke-webdav-search-02 | ||||
November 27, 2002 Added issues "undefined-properties", "like- | ||||
exactlyone" and "like-wildcard-adjacent". Closed issue "query-on- | ||||
href". Added acknowledgments section. | ||||
November 28, 2002 Closed issue "like-exactlyone". Added issue | ||||
"mixed-content-properties". | ||||
December 14, 2002 Closed issues "undefined-properties", "results-vs- | ||||
binds", "mixed-content-properties". Updated issue "like-wildcard- | ||||
adjacent". Added informative reference to BIND draft. Updated | ||||
reference to ACL draft. | ||||
January 9, 2003 Removed duplicate section on invalid scopes. Added | ||||
comments to some open issues. Closed issues JW25/26, score- | ||||
pseudo-property and null-ordering. | ||||
January 10, 2003 Issue limit-vs-ordering plus resolution. Closed | ||||
issue JW17/JW24b. | ||||
January 14, 2003 New issue order-precedence. Started resolution of | ||||
DB2/DB7. | ||||
January 15, 2003 Started spec of DAV:typed-literal. | ||||
January 17, 2003 Fix one DAV:like/DAV:getcontenttype example (add / | ||||
to like expression, make case-insensitive). | ||||
January 28, 2003 Update issue(s) result-truncation, JW24d. Fixed | ||||
response headers in OPTIONS example. Added issue qsd-optional. | ||||
Closed issue(s) order-precedence, case-insensitivity-name. | ||||
February 07, 2003 Added issue scope-vs-versions. score-pseudo- | ||||
property: allow DAV:orderby to explicitly specify DAV:score. | ||||
C.6. since draft-reschke-webdav-search-03 | ||||
April 24, 2003 Fixed two "?" vs "_" issues (not updated in last | ||||
draft). | ||||
June 13, 2003 Improve index. | ||||
C.7. since draft-reschke-webdav-search-04 | ||||
July 7, 2003 Typo fixed (propstat without status element). | ||||
August 11, 2003 Remove superfluous IP and copyright sections. | ||||
September 09, 2003 Added issues "2.4-multiple-uris" and "5.1-name- | ||||
filtering". | ||||
October 06, 2003 Fix misplaced section end in 5.11, add table | ||||
formatting. Enhance table formatting in 5.18.3. Updated ACL and | ||||
BIND references. Added XPATH reference. Closed issue JW24d by | ||||
adding new optional operators. Updated more open issues, added | ||||
issues from January meeting. Add K. Wiggen to Acknowledgements. | ||||
Add Contributors section for the authors of the original draft. | ||||
Close issue "scope-vs-versions" (optional feature added). Close | ||||
(new) issue "1.3-import-DTD-terminology". Add issue "1.3-import- | ||||
requirements-terminology". | ||||
October 07, 2003 Typos fixed. Moved statement about DAV: namespace | ||||
usage into separate (sub-)section. Closed "1.3-import- | ||||
requirements-terminology". Update I18N Considerations with new | ||||
xml:lang support info (see issue JW24d). Close issue "DB2/DB7" | ||||
(remaining typing issues are now summarized in issue "typed- | ||||
literal"). Fix misplaced section end in section 7. Started | ||||
change to use RFC3253-style method definitions and error | ||||
marshalling. | ||||
October 08, 2003 Remove obsolete language that allowed reporting | ||||
invalid scopes and such inside multistatus. Add new issue "5.4.2- | ||||
scope-vs-redirects". | ||||
C.8. since draft-reschke-webdav-search-05 | ||||
October 11, 2003 Separate DAV:basicsearch DTD into separate figures | ||||
for better maintainability. Update DTD with language-* operators | ||||
and typed-literal element (optional). | ||||
October 14, 2003 Close issue "5.4.2-multiple-scope". | ||||
November 04, 2003 Update reference from CaseMap to UNICODE4, section | ||||
5.18. | ||||
November 16, 2003 Updated issue "5.1-name-filtering". | ||||
November 24, 2003 Reformatted scope description (collection vs. non- | ||||
collection). | ||||
November 30, 2003 Add issue "5_media_type_match". | ||||
February 6, 2004 Updated all references. | ||||
C.9. since draft-reschke-webdav-search-06 | ||||
July 05, 2004 Fix table in Appendix "Three-Valued Logic in DAV: | ||||
basicsearch". | ||||
September 14, 2004 Fix inconsistent DTD in section 5.2 and 5.4 for | ||||
scope element. | ||||
September 30, 2004 Rewrite editorial note and abstract. Update | ||||
references (remove unneeded XMLNS, update ref to ACL and BIND | ||||
specs). | ||||
C.10. since draft-reschke-webdav-search-07 | ||||
October 01, 2004 Fix previous section heading (no change tracking). | ||||
October 13, 2004 Fix DTD entry for is-collection. | ||||
November 1, 2004 Fix DTD fragment query-schema-discovery. | ||||
December 11, 2004 Update BIND reference. | ||||
January 01, 2005 Fix DASL and DASLREQ references. | ||||
February 06, 2005 Update XS2 reference. | ||||
February 11, 2005 Rewrite "like" and "DASL" (response header) | ||||
grammar in ABNF. | ||||
May 5, 2005 Update references. Close issue "abnf" (only use ABNF | ||||
when applicable). | ||||
C.11. since draft-reschke-webdav-search-08 | ||||
May 06, 2005 Fix document title. | ||||
September 25, 2005 Update BIND reference. | ||||
October 05, 2005 Update RFC4234 reference. | ||||
October 22, 2005 Author's address update. | ||||
February 12, 2006 Update BIND reference. | ||||
March 16, 2006 Add typed literals to QSD. | ||||
August 20, 2006 Update XML reference. | ||||
August 28, 2006 Add issues "5.3-select-count" (open) and "5.4- | ||||
clarify-depth" (resolved). Update BIND reference (again). | ||||
C.12. since draft-reschke-webdav-search-09 | ||||
December 1, 2006 Fix ABNF for DASL header. | ||||
December 16, 2006 Close issue "qsd-optional", leave QSD optional. | ||||
Close issue "2.4-multiple-uris", suggesting that servers should | ||||
only return one response element per resource in case of multiple | ||||
bindings. Add and resolve issues "authentication" and "cleanup- | ||||
iana" (adding the header registration for "DASL"). Re-write | ||||
rational for using the DAV: namespace, although this is a non-WG | ||||
submission. | ||||
January 4, 2007 Close issue "JW16b/JW24a", being related to | ||||
"language-comparison". Add Appendix B. Close issues "language- | ||||
comparison", "5_media_type_match", "5.1-name-filtering" and "5.3- | ||||
select-count" as "won't fix", and add appendices accordingly. | ||||
January 24, 2007 Update BIND reference. Close issue "5.4.2-scope- | ||||
vs-redirects". Close issue "typed-literal": specify in terms of | ||||
the XPATH 2.9 casting mechanism. Close issue "1.3-apply- | ||||
condition-code-terminology" (no changes). | ||||
C.13. since draft-reschke-webdav-search-10 | ||||
January 29, 2007 Issue "result-truncation": Add appendix describing | ||||
the open issue of Result Paging. Describe the mechanism of | ||||
marshalling truncated results in a new normative subsection (leave | ||||
the actual example where it was). Add and resolve issues | ||||
"rfc2606-compliance" and "response-format". Update contact | ||||
information for Alan Babich, Jim Davis and Surendra Reddy (no | ||||
change tracking). | ||||
February 8, 2007 Update BIND reference. | ||||
C.14. since draft-reschke-webdav-search-11 | ||||
Update: draft-newman-i18n-comparator-14 is RFC4790. Update: RFC2518 | ||||
replaced by draft-ietf-webdav-rfc2518bis. Updated BIND reference. | ||||
Minor tweaks to intro (document organization and relation to DASL). | ||||
C.15. since draft-reschke-webdav-search-12 | ||||
Update: draft-ietf-webdav-rfc2518bis replaced by RFC4918. Updated | ||||
BIND reference. | ||||
C.16. since draft-reschke-webdav-search-13 | ||||
Open and close issue "qsd-req-validity". Updated BIND reference. | ||||
C.17. since draft-reschke-webdav-search-14 | ||||
RFC4234 obsoleted by RFC5234. | ||||
Add and resolve issues "5.19.8-opdesc-vs-contains" and "dtd". | ||||
Add clarifications about the behaviour when literal values are not | ||||
compatible with the type of a comparison. | ||||
C.18. since draft-reschke-webdav-search-15 | ||||
Minor editorial improvements. | ||||
Fix description of DAV:scope/DAV:href to use proper URI terminology, | ||||
add reference to RFC 3986. | ||||
Clarify list nature of DASL header. | ||||
Clarify that the DAV:like pattern ABNF is defined in terms of Unicode | ||||
code points. | ||||
Update to UNICODE5. | ||||
Aim for standards track (affects introduction to Appendix B). Thus, | ||||
make the dependency on [RFC4437] clearly optional, and make the | ||||
reference informative. Also, mention BCP 47 as candidate for future | ||||
changes to language matching. | ||||
Mention definition of additional condition codes as candidate for | ||||
future changes. | ||||
Consider DAV:contains in Security Considerations. | ||||
Update Surendra's and Alan's contact information. | ||||
Mention search scope discovery as future extensions. Add a SHOULD | ||||
level requirement for DAV:basicsearch search arbiters to support | ||||
their own URI as search scope. | ||||
C.19. since draft-reschke-webdav-search-16 | ||||
In DASL header registration tepmplate, set "Status" to "standard". | ||||
Add missing bracket in DTD (Section 4.1). Fix broken and missing XML | ||||
namespace declarations in examples. | ||||
C.20. since draft-reschke-webdav-search-17 | ||||
Typo fixed ("SHOULD not" -> "SHOULD NOT"). Fixed namespace name | ||||
"http://jennicam.org" to use a RFC 2606 compliant domain. | ||||
State that SEARCH is a safe method. | ||||
Clarify that the DASL header should be added to the permanent | ||||
registry. | ||||
Add and resolve issue "ordering-vs-limiting". | ||||
Appendix D. Resolved issues (to be removed by RFC Editor before | ||||
publication) | publication) | |||
Issues that were either rejected or resolved in this version of this | C.1. edit | |||
document. | ||||
D.1. safeness | ||||
In Section 2: | ||||
Type: edit | Type: edit | |||
<http://www.w3.org/mid/4894155E.2000807@gmx.de> | julian.reschke@greenbytes.de (2004-07-05): Umbrella issue for | |||
editorial fixes/enhancements. | ||||
julian.reschke@greenbytes.de (2008-08-02): State that the SEARCH | ||||
method is safe. | ||||
Resolution (2008-08-03): Done. | ||||
D.2. ordering-vs-limiting | ||||
In Section 5.17.1: | ||||
Type: change | ||||
jbarone@xythos.com (2008-08-04): I read this to mean that the full | ||||
results should first be ordered by the server, and then send back the | ||||
requested limit. This seems to contradict what's specified in | ||||
section 2.3.1, where the results are limited and then ordered (if I'm | ||||
reading it correctly). I think these 2 sections should be consistent | ||||
with each other. | ||||
Resolution (2008-08-17): Relax requirement to SHOULD. | ||||
Appendix E. Open issues (to be removed by RFC Editor prior to | ||||
publication) | ||||
E.1. edit | C.2. auth48 | |||
Type: edit | Type: edit | |||
julian.reschke@greenbytes.de (2004-07-05): Umbrella issue for | julian.reschke@greenbytes.de (2008-10-10): Umbrella issue for changes | |||
editorial fixes/enhancements. | made during the RFC Editor's AUTH48 period. | |||
Index | Index | |||
C | C | |||
caseless attribute 28-29, 36 | caseless attribute 27-28, 35 | |||
Condition Names | Condition Names | |||
DAV:search-grammar-discovery-supported (pre) 10 | DAV:search-grammar-discovery-supported (pre) 9 | |||
DAV:search-grammar-supported (pre) 10 | DAV:search-grammar-supported (pre) 9 | |||
DAV:search-multiple-scope-supported (pre) 10 | DAV:search-multiple-scope-supported (pre) 9 | |||
DAV:search-scope-valid (pre) 11 | DAV:search-scope-valid (pre) 10 | |||
Criteria 6 | Criteria 5 | |||
D | D | |||
DAV:and 28 | DAV:and 27 | |||
DAV:ascending 28 | DAV:ascending 27 | |||
DAV:contains 33 | DAV:contains 32 | |||
DAV:depth 25 | DAV:depth 24 | |||
DAV:descending 28 | DAV:descending 27 | |||
DAV:eq 29 | DAV:eq 28 | |||
caseless attribute 29 | caseless attribute 28 | |||
DAV:from 25 | DAV:from 24 | |||
DAV:gt 29 | DAV:gt 28 | |||
DAV:gte 29 | DAV:gte 28 | |||
DAV:include-versions 25 | DAV:include-versions 24 | |||
DAV:is-collection 31 | DAV:is-collection 30 | |||
DAV:is-defined 32 | DAV:is-defined 31 | |||
DAV:language-defined 31 | DAV:language-defined 30 | |||
DAV:language-matches 31 | DAV:language-matches 30 | |||
DAV:like 32 | DAV:like 31 | |||
DAV:limit 35 | DAV:limit 34 | |||
DAV:literal 29 | DAV:literal 28 | |||
DAV:lt 29 | DAV:lt 28 | |||
DAV:lte 29 | DAV:lte 28 | |||
DAV:not 28 | DAV:not 27 | |||
DAV:nresults 35 | DAV:nresults 34 | |||
DAV:or 28 | DAV:or 27 | |||
DAV:orderby 28 | DAV:orderby 27 | |||
DAV:scope 25 | DAV:scope 24 | |||
DAV:score 34 | DAV:score 33 | |||
relationship to DAV:orderby 35 | relationship to DAV:orderby 34 | |||
DAV:search-grammar-discovery-supported precondition 10 | DAV:search-grammar-discovery-supported precondition 9 | |||
DAV:search-grammar-supported precondition 10 | DAV:search-grammar-supported precondition 9 | |||
DAV:search-multiple-scope-supported precondition 10 | DAV:search-multiple-scope-supported precondition 9 | |||
DAV:search-scope-valid precondition 11 | DAV:search-scope-valid precondition 10 | |||
DAV:select 25 | DAV:select 24 | |||
DAV:supported-query-grammar-set property 16 | DAV:supported-query-grammar-set property 15 | |||
DAV:typed-literal 29 | DAV:typed-literal 28 | |||
DAV:where 26 | DAV:where 25 | |||
M | M | |||
Methods | Methods | |||
SEARCH 9 | SEARCH 8 | |||
O | O | |||
OPTIONS method 15 | OPTIONS method 14 | |||
DASL response header 16 | DASL response header 15 | |||
P | P | |||
Properties | Properties | |||
DAV:supported-query-grammar-set 16 | DAV:supported-query-grammar-set 15 | |||
Q | Q | |||
Query 6 | Query 5 | |||
Query Grammar 7 | Query Grammar 6 | |||
Query Grammar Discovery 15 | Query Grammar Discovery 14 | |||
using live property 16 | using live property 15 | |||
using OPTIONS 15 | using OPTIONS 14 | |||
Query Schema 7 | Query Schema 6 | |||
R | R | |||
Result 7 | Result 6 | |||
Result Record 7 | Result Record 6 | |||
Result Record Definition 7 | Result Record Definition 6 | |||
Result Set 7 | Result Set 6 | |||
Result Set Truncation | Result Set Truncation | |||
Example 11 | Example 10 | |||
S | S | |||
Scope 7 | Scope 6 | |||
Search Arbiter 7 | Search Arbiter 6 | |||
SEARCH method 9 | SEARCH method 8 | |||
Search Modifier 7 | Search Modifier 6 | |||
Sort Specification 8 | Sort Specification 7 | |||
Authors' Addresses | Authors' Addresses | |||
Julian F. Reschke (editor) | Julian F. Reschke (editor) | |||
greenbytes GmbH | greenbytes GmbH | |||
Hafenweg 16 | Hafenweg 16 | |||
Muenster, NW 48155 | Muenster, NW 48155 | |||
Germany | Germany | |||
Phone: +49 251 2807760 | Phone: +49 251 2807760 | |||
End of changes. 104 change blocks. | ||||
826 lines changed or deleted | 311 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |