idnits 2.17.1 draft-reddy-dasl-protocol-03.txt: -(1104): Line appears to be too long, but this could be caused by non-ascii characters in UTF-8 encoding -(1121): Line appears to be too long, but this could be caused by non-ascii characters in UTF-8 encoding -(1641): Line appears to be too long, but this could be caused by non-ascii characters in UTF-8 encoding Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** Cannot find the required boilerplate sections (Copyright, IPR, etc.) in this document. Expected boilerplate is as follows today (2024-04-24) according to https://trustee.ietf.org/license-info : IETF Trust Legal Provisions of 28-dec-2009, Section 6.a: This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. IETF Trust Legal Provisions of 28-dec-2009, Section 6.b(i), paragraph 2: Copyright (c) 2024 IETF Trust and the persons identified as the document authors. All rights reserved. IETF Trust Legal Provisions of 28-dec-2009, Section 6.b(i), paragraph 3: This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- ** Missing document type: Expected "INTERNET-DRAFT" in the upper left hand corner of the first page ** Missing expiration date. The document expiration date should appear on the first and last page. ** The document seems to lack a 1id_guidelines paragraph about Internet-Drafts being working documents. ** The document seems to lack a 1id_guidelines paragraph about 6 months document validity. ** The document seems to lack a 1id_guidelines paragraph about the list of current Internet-Drafts. ** The document seems to lack a 1id_guidelines paragraph about the list of Shadow Directories. ** Missing revision: the document name given in the document, 'draft-reddy-dasl-protocol-', does not give the document revision number ~~ Missing draftname component: the document name given in the document, 'draft-reddy-dasl-protocol-', does not seem to contain all the document name components required ('draft' prefix, document source, document name, and revision) -- see https://www.ietf.org/id-info/guidelines#naming for more information. == Mismatching filename: the document gives the document name as 'draft-reddy-dasl-protocol-', but the file name used is 'draft-reddy-dasl-protocol-03' == There are 7 instances of lines with non-ascii characters in the document. == No 'Intended status' indicated for this document; assuming Proposed Standard == The page length should not exceed 58 lines per page, but there was 32 longer pages, the longest (page 30) being 73 lines Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack an Introduction section. (A line matching the expected section header was found, but with an unexpected indentation: ' scope, it only indicates the server's willingness to check.' ) ** The document seems to lack a Security Considerations section. (A line matching the expected section header was found, but with an unexpected indentation: ' 7. SECURITY CONSIDERATIONS' ) ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) (A line matching the expected section header was found, but with an unexpected indentation: ' 10. IANA CONSIDERATIONS' ) ** The document seems to lack an Authors' Addresses Section. ** There are 224 instances of too long lines in the document, the longest one being 3 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == Line 1099 has weird spacing: '...ence of words...' == Line 1197 has weird spacing: '... The prope...' == Line 1329 has weird spacing: '...ta type is...' == Line 1685 has weird spacing: '...tion of the r...' == Using lowercase 'not' together with uppercase 'MUST', 'SHALL', 'SHOULD', or 'RECOMMENDED' is not an accepted usage according to RFC 2119. Please use uppercase 'NOT' together with RFC 2119 keywords (if that is what you mean). Found 'SHOULD not' in this paragraph: Each query grammar supported by DASL defines its own syntax for expressing the possible query schema. A client retrieves the schema 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 scope, with a query whose DAV:select element includes the DAV:queryschema property. This property is defined only in the context of such a search, a server SHOULD not treat it as defined in the context of a PROPFIND on the scope. The content of this property is an XML element whose name and syntax depend upon the grammar, and whose value may (and likely will) vary depending upon the grammar, arbiter, and scope. == Using lowercase 'not' together with uppercase 'MUST', 'SHALL', 'SHOULD', or 'RECOMMENDED' is not an accepted usage according to RFC 2119. Please use uppercase 'NOT' together with RFC 2119 keywords (if that is what you mean). Found 'SHOULD not' in this paragraph: Query grammars are identified by URIs. Applications SHOULD not attempt to retrieve these URIs even if they appear to be retrievable (for example, those that begin with "http://") == Couldn't figure out when the document was first submitted -- there may comments or warnings related to the use of a disclaimer for pre-RFC5378 work that could not be issued because of this. Please check the Legal Provisions document at https://trustee.ietf.org/license-info to determine if you need the pre-RFC5378 disclaimer. -- The document date (May 11, 1999) is 9115 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) -- Missing reference section? 'DASLREQ' on line 1449 looks like a reference -- Missing reference section? 'WebDAV' on line 1461 looks like a reference -- Missing reference section? 'RFC2068' on line 1453 looks like a reference -- Missing reference section? 'RFC2119' on line 1457 looks like a reference -- Missing reference section? 'WEBDAV' on line 539 looks like a reference -- Missing reference section? 'XML' on line 1466 looks like a reference -- Missing reference section? 'XMLNS' on line 1469 looks like a reference Summary: 13 errors (**), 1 flaw (~~), 11 warnings (==), 8 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 INTERNET-DRAFT Saveen Reddy, 3 draft-reddy-dasl-protocol- Microsoft 4 03.txt Dale Lowry, Novell 5 Surendra Reddy, Oracle 6 Rick Henderson, 7 Netscape 8 Jim Davis, Xerox 9 Alan Babich, Filenet 10 Expires May 11, 1999 11 November 11, 1998 13 DAV Searching & Locating 15 Status of this Memo 17 This document is an Internet draft. Internet drafts are working 18 documents of the Internet Engineering Task Force (IETF), its 19 areas and its working groups. Note that other groups may also 20 distribute working information as Internet drafts. 22 Internet Drafts are draft documents valid for a maximum of six 23 months and can be updated, replaced or obsoleted by other 24 documents at any time. It is inappropriate to use Internet 25 drafts as reference material or to cite them as other than as 26 "work in progress". 28 To view the entire list of current Internet-Drafts, please check 29 the "1id-abstracts.txt" listing contained in the Internet-Drafts 30 Shadow Directories on ftp.is.co.za (Africa), ftp.nordu.net 31 (Northern Europe), ftp.nis.garr.it (Southern Europe), 32 munnari.oz.au (Pacific Rim), ftp.ietf.org (US East Coast), or 33 ftp.isi.edu (US West Coast). 35 Distribution of this document is unlimited. Please send comments 36 to the mailing list at , which may be 37 joined by sending a message with subject "subscribe" to . 40 Discussions of the list are archived at 41 . 43 Abstract 45 This document specifies a set of methods, headers, and content- 46 types composing DASL, an application of the HTTP/1.1 protocol to 47 efficiently search for DAV resources based upon a set of client- 48 supplied criteria. 50 Table of Contents 52 DAV SEARCHING & LOCATING..................................1 54 TABLE OF CONTENTS.........................................2 56 1. INTRODUCTION..........................................4 57 1.1. DASL 4 58 1.2. Relationship to DAV.................................5 59 1.3. Terms...............................................5 60 1.4. Notational Conventions..............................5 61 1.5. An Overview of DASL at Work.........................5 63 2. THE SEARCH METHOD.....................................5 64 2.1. Overview............................................5 65 2.2. The Request.........................................6 66 2.2.1. The Request-URI...................................6 67 2.2.2. The Request Body..................................6 68 2.3. The DAV:searchrequest XML Element...................6 69 2.4. The Successful 207 (Multistatus) Response...........6 70 2.4.1. Extending the PROPFIND Response...................7 71 2.4.2. Example: A Simple Request and Response............7 72 2.5. Unsuccessful Responses..............................7 73 2.5.1. Example: Result Set Truncation....................8 74 2.6. Invalid Scopes & Search Redirections................9 75 2.6.1. Indicating an Invalid Scope.......................9 76 2.6.2. Example of an Invalid Scope.......................9 77 2.6.3. Redirections.....................................10 78 2.6.4. Example of a Search Redirection..................10 79 2.6.5. Syntax for DAV:scoperror.........................10 80 2.6.6. Syntax for DAV:redirectarbiter...................10 82 3. DISCOVERY OF SUPPORTED QUERY GRAMMARS................10 83 3.1. The OPTIONS Method.................................11 84 3.2. The DASL Response Header...........................11 85 3.3. Example: Grammar Discovery.........................11 87 4. QUERY SCHEMA DISCOVERY: QSD..........................12 88 4.1. The DAV:queryschema Property.......................13 89 4.1.1. Example of query schema discovery................13 91 5. THE DAV:BASICSEARCH GRAMMAR..........................14 92 5.1. Introduction.......................................14 93 5.2. The DAV:basicsearch DTD............................14 94 5.2.1. Example Query....................................15 95 5.3. DAV:select.........................................16 96 5.4. DAV:from...........................................16 97 5.4.1. Relationship to the Request-URI..................16 98 5.4.2. Scope............................................16 99 5.5. DAV:where..........................................17 100 5.5.1. Use of Three-Valued Logic in Queries.............17 101 5.5.2. Handling Optional operators......................17 102 5.5.3. Treatment of NULL Values.........................18 103 5.5.4. Example: Testing for Equality....................18 104 5.5.5. Example: Relative Comparisons....................18 105 5.6. DAV:sortby.........................................18 106 5.6.1. Comparing Natural Language Strings...............19 107 5.6.2. Example of Sorting...............................19 108 5.7. Boolean Operators: DAV:and, DAV:or, and DAV:not....19 109 5.8. DAV:eq.............................................19 110 5.9. DAV:lt, DAV:lte, DAV:gt, DAV:gte...................20 111 5.10. DAV:literal........................................20 112 5.11. DAV:isdefined......................................20 113 5.12. DAV:like...........................................20 114 5.12.1. Syntax for the Literal Pattern.................20 115 5.12.2. Example of DAV:like............................21 116 5.13. DAV:contains.......................................21 117 5.13.1. Example........................................22 118 5.13.2. Example........................................22 119 5.14. The DAV:limit XML Element..........................22 120 5.15. The DAV:nresults XML Element.......................22 121 5.16. The DAV:casesensitive XML attribute................22 122 5.17. The DAV:score Property.............................23 123 5.18. The DAV:iscollection Property......................23 124 5.18.1. Exampe of DAV:iscollection.....................23 125 5.19. Query Schema for DAV:basicsearch...................23 126 5.19.1. DTD for DAV:basicsearch QSD....................24 127 5.19.2. DAV:propdesc Element...........................24 128 5.19.3. The DAV:datatype Property Description..........24 129 5.19.4. The DAV:searchable Property Description........25 130 5.19.5. The DAV:selectable Property Description........25 131 5.19.6. The DAV:sortable Property Description..........25 132 5.19.7. The DAV:casesensitive Property Description.....26 133 5.19.8. The DAV:operators XML Element..................26 134 5.19.9. Example of Query Schema for DAV:basicsearch....26 136 6. INTERNATIONALIZATION CONSIDERATIONS..................27 138 7. SECURITY CONSIDERATIONS..............................27 140 8. SCALABILITY..........................................27 142 9. AUTHENTICATION.......................................27 144 10. IANA CONSIDERATIONS................................28 146 11. COPYRIGHT..........................................28 148 12. INTELLECTUAL PROPERTY..............................28 149 13. REFERENCES.........................................28 151 14. AUTHOR'S ADDRESSES.................................28 153 15. APPENDICES.........................................29 154 Appendix A Three-Valued Logic in DAV:basicsearch........29 156 16. CHANGE HISTORY.....................................30 157 Feb 14, 1998............................................30 158 Feb 28, 1998............................................30 159 Mar 9, 1998.............................................31 160 Mar 11, 1998............................................31 161 April 8, 1998...........................................31 162 May 8, 1998.............................................31 163 June 17, 1998...........................................31 164 June 23, 1998...........................................31 165 Jul 20, 1998............................................31 166 July 28, 1998...........................................31 167 July 28, 1998...........................................32 168 September 4, 1998.......................................32 169 September 22, 1998......................................32 170 October 9, 1998.........................................32 171 November 2, 1998........................................32 173 1. INTRODUCTION 175 1.1. DASL 177 This document defines DAV Searching & Locating (DASL), an 178 application of HTTP/1.1 forming a lightweight search protocol to 179 transport queries and result sets and allows clients to make use 180 of server-side search facilities. [DASLREQ] describes the 181 motivation for DASL. 183 DASL will minimize the complexity of clients so as to facilitate 184 widespread deployment of applications capable of utilizing the 185 DASL search mechanisms. 187 DASL consists of: 189 - the SEARCH method, 191 - the DASL response header, 193 - the DAV:searchrequest XML element, 195 - the DAV:queryschema property, 197 - the DAV:basicsearch XML element and query grammar, and 199 - the DAV:basicsearchschema XML element. 201 1.2. Relationship to DAV 203 DASL relies on the resource and property model defined by 204 [WebDAV]. DASL does not alter this model. Instead, DASL allows 205 clients to access DAV-modeled resources through server-side 206 search. 208 1.3. Terms 210 This draft uses the terms defined in [RFC2068], [WebDAV], and 211 [DASLREQ]. 213 1.4. Notational Conventions 215 The augmented BNF used by this document to describe protocol 216 elements is exactly the same as the one described in Section 2.1 217 of [RFC2068]. Because this augmented BNF uses the basic 218 production rules provided in Section 2.2 of [RFC2068], those 219 rules apply to this document as well. 221 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL 222 NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and 223 "OPTIONAL" in this document are to be interpreted as described in 224 [RFC2119]. 226 1.5. An Overview of DASL at Work 228 One can express the basic usage of DASL in the following steps: 230 - The client constructs a query using the DAV:basicsearch grammar. 232 - The client invokes the SEARCH method on a resource that will 233 perform the search (the search arbiter) and includes a text/xml 234 request entity that contains the query. 236 - The search arbiter performs the query. 238 - The search arbiter sends the results of the query back to the 239 client in the response. The server MUST send a text/xml entity 240 that matches the [WebDAV] PROPFIND response. 242 2. THE SEARCH METHOD 244 2.1. Overview 246 The client invokes the SEARCH method to initiate a server-side 247 search. The body of the request defines the query. The server 248 MUST emit text/xml entity matching the [WebDAV] PROPFIND 249 response. 251 The SEARCH method plays the role of transport mechanism for the 252 query and the result set. It does not define the semantics of 253 the query. The type of the query defines the semantics. 255 2.2. The Request 257 The client invokes the SEARCH method on the resource named by the 258 Request-URI. 260 2.2.1. The Request-URI 262 The Request-URI identifies the search arbiter. 264 The SEARCH method per se defines no relationship between the 265 arbiter and the scope of the search, rather the particular query 266 grammar used in the query defines the relationship. For example, 267 the FOO query grammar may force the request-URI to correspond 268 exactly to the search scope. 270 2.2.2. The Request Body 272 The server MUST process a text/xml request body, and MAY process 273 request bodies in other formats. 275 If the client sends a text/xml body, it MUST include the 276 DAV:searchrequest XML element. The DAV:searchrequest XML element 277 identifies the query grammar, defines the criteria, the result 278 record, and any other details needed to perform the search. 280 2.3. The DAV:searchrequest XML Element 282 284 The DAV:searchrequest XML element contains a single XML element 285 that defines the query. The name of the query element defines 286 the type of the query. The value of that element defines the 287 query itself. 289 2.4. The Successful 207 (Multistatus) Response 291 If the server returns 207 (Multistatus), then the search 292 proceeded successfully and the response MUST match that of a 293 PROPFIND. 295 There MUST be one DAV:response for each resource that matched the 296 search criteria. For each such response, the DAV:href element 297 contains the URI of the resource, and the response MUST include a 298 DAV:propstat element. 300 In addition, the server MAY include DAV:response items in the 301 reply where the DAV:href element contains a URI that is not a 302 matching resource, e.g. that of a scope or the query arbiter. 303 Each such response item MUST NOT contain a DAV:propstat element, 304 and MUST contain a DAV:status. It SHOULD contain a 305 DAV:responsedescription. 307 2.4.1. Extending the PROPFIND Response 309 A response MAY include more information than PROPFIND defines so 310 long as the extra information does not invalidate the PROPFIND 311 response. Query grammars SHOULD define how the response matches 312 the PROPFIND response. 314 2.4.2. Example: A Simple Request and Response 316 This example demonstrates the request and response framework. 317 The following XML document shows a simple (hypothetical) natural 318 language query. The name of the query element is FOO:natural- 319 language-query, thus the type of the query is FOO:natural- 320 language-query. The actual query is "Find the locations of good 321 Thai restaurants in Los Angeles". For this hypothetical query, 322 the arbiter returns two properties for each selected resource. 324 SEARCH / HTTP/1.1 325 Host: ryu.com 326 Content-Type: text/xml 327 Connection: Close 328 Content-Length: 243 330 331 332 333 Find the locations of good Thai restaurants in Los Angeles 334 335 337 >> Response 339 HTTP/1.1 207 Multi-Status 340 Content-Type: text/xml 341 Content-Length: 333 343 344 346 347 http://siamiam.com 348 349 350 259 W. Hollywood 351 4 352 353 354 355 357 2.5. Unsuccessful Responses 359 If an error occurred that prevented execution of the query, the 360 server MUST indicate the failure with the appropriate status code 361 and SHOULD include a DAV:multistatus element to point out errors 362 associated with scopes. 364 400 Bad Request. The query could not be executed. The request may 365 be malformed (not valid XML for example). Additionally, this can 366 be used for invalid scopes and search redirections. 368 422 Unprocessable entity. The query could not be executed. If a 369 text/xml request entity was provided, then it may have been valid 370 (well-formed) but may have contained an unsupported or 371 unimplemented query operator. 373 507 (Insufficient Storage). The query produced more results 374 than the server was willing to transmit. Partial results have 375 been transmitted. The server MUST send a body that matches that 376 for 207, except that there MAY exist resources that matched the 377 search criteria for which no corresponding DAV:response exists in 378 the reply. 380 2.5.1. Example: Result Set Truncation 382 A server MAY limit the number of resources in a reply, for 383 example to limit the amount of resources expended in processing a 384 query. If it does so, the reply MUST use status code 507. It 385 SHOULD include the partial results. 387 SEARCH / HTTP/1.1 388 Host: gdr.com 389 Content-Type: text/xml 390 Connection: Close 391 Content-Length: xxxxx 393 394 407 408 409 http://www.gdr.com/sounds/unbrokenchain.au 410 411 412 HTTP/1.1 200 OK 413 414 415 416 http://tech.mit.edu/archive96/photos/Lesh1.jpg 417 418 419 HTTP/1.1 200 OK 420 421 422 423 http://gdr.com 424 HTTP/1.1 507 Insufficient Storage 425 426 Only first two matching records were returned 427 428 429 431 2.6. Invalid Scopes & Search Redirections 433 2.6.1. Indicating an Invalid Scope 435 A client may submit a scope that the arbiter may be unable to 436 query. The inability to query may be due to network failure, 437 administrative policy, security, etc. This raises the condition 438 described as an "invalid scope". 440 To indicate an invalid scope, the server MUST respond with a 400 441 (Bad Request). 443 The response includes a text/xml body with a DAV:multistatus 444 element. Each DAV:resource in the DAV:multistatus identifies a 445 scope. To indicate that this scope is the source of the error, 446 the server MUST include the DAV:scoperror element. 448 2.6.2. Example of an Invalid Scope 450 HTTP/1.1 400 Bad-Request 451 Content-Type: text/xml 452 Content-Length: xxxxx 454 456 457 458 http://www.foo.com/X 459 HTTP/1.1 404 Object Not Found 460 461 462 463 2.6.3. Redirections 465 As described above, a server can indicate only that the scope is 466 invalid. Some search arbiters may be able to indicate that other 467 search arbiters exist for that scope. 469 In this case, the server MUST: 471 (1) include the DAV:scoperror element 473 (2) include the DAV:status element for that scope. The value of 474 this element MUST be a 303 (See Other) response. 476 (3) include the DAV:redirectarbiter element for each arbiter the 477 client should use for the redirect. The value of this element is 478 the URI of the arbiter to use. Multiple DAV:redirectarbiter 479 elements are allowed. 481 2.6.4. Example of a Search Redirection 483 HTTP/1.1 400 Bad-Request 484 Content-Type: text/xml 485 Content-Length: xxxxx 487 488 490 491 492 http://www.foo.com/X 493 HTTP/1.1 303 See Other 494 495 http://bar.com/B 496 http://baz.com/B 497 498 500 2.6.5. Syntax for DAV:scoperror 502 504 2.6.6. Syntax for DAV:redirectarbiter 506 508 3. DISCOVERY OF SUPPORTED QUERY GRAMMARS 510 Servers MUST support discovery of the query grammars supported by 511 a resource. 513 Clients can determine which query grammars are supported by an 514 arbiter by invoking OPTIONS on the search arbiter. If the 515 resource supports SEARCH, then the DASL response header will 516 appear in the response. The DASL response header lists the 517 supported grammars. 519 3.1. The OPTIONS Method 521 The OPTIONS method allows the client to discover if a resource 522 supports the SEARCH method and to determine the list of search 523 grammars supported for that resource. 525 The client issues the OPTIONS method against a resource named by 526 the Request-URI. This is a normal invocation of OPTIONS defined 527 in [RFC2068]. 529 If a resource supports the SEARCH method, then the server MUST 530 list SEARCH in the OPTIONS response as defined by [RFC2068]. 532 DASL servers MUST include the DASL header in the OPTIONS 533 response. This header identifies the search grammars supported by 534 that resource. 536 3.2. The DASL Response Header 538 DASLHeader = "DASL" ":" Coded-URL ; defined in section 8.4 of 539 [WEBDAV] 541 The DASL response header indicates server support for a query 542 grammar in the OPTIONS method. The value is a URI that indicates 543 the type of grammar. This header MAY be repeated 545 For example: 547 DASL: 548 DASL: 549 DASL: 551 3.3. Example: Grammar Discovery 553 This example shows that the server supports search on the 554 /somefolder resource with the following query grammars: 555 http://foo.bar.com/syntax1 and http://akuma.com/syntax2. 557 >> Request 559 OPTIONS /somefolder HTTP/1.1 560 Connection: Close 561 Host: ryu.com 563 >> Response 565 HTTP/1.1 200 OK 566 Date: Tue, 20 Jan 1998 20:52:29 GMT 567 Connection: close 568 Accept-Ranges: none 569 Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, 570 MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH 571 Public: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE, 572 MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH 573 DASL: 574 DASL: 576 4. QUERY SCHEMA DISCOVERY: QSD 578 Servers MAY support the discovery of the schema for a query 579 grammar. 581 The DASL response header provides means for clients to discover 582 the set of query grammars supported by a resource. This alone is 583 not sufficient information for a client to generate a query. For 584 example, the DAV:basicsearch grammar defines a set of queries 585 consisting of a set of operators applied to a set of properties 586 and values, but the grammar itself does not specify which 587 properties may be used in the query. QSD for the 588 DAV:basicsearch grammar allows a client to discover the set of 589 properties that are searchable, selectable, and sortable. 590 Moreover, although the DAV:basicsearch grammar defines a minimal 591 set of operators, it is possible that a resource might support 592 additional operators in a query. For example, a resource might 593 support a optional operator that can be used to express content- 594 based queries in a proprietary syntax. QSD allows a client to 595 discover these operators and their syntax. The set of 596 discoverable quantities will differ from grammar to grammar, but 597 each grammar can define a means for a client to discover what can 598 be discovered. 600 In general, the schema for a given query grammar depends on both 601 the resource (the arbiter) and the scope. A given resource might 602 have access to one set of properties for one potential scope, and 603 another set for a different scope. For example, consider a 604 server able to search two distinct collections, one holding 605 cooking recipes, the other design documents for nuclear weapons. 606 While both collections might support properties such as author, 607 title, and date, the first might also define properties such as 608 calories and preparation time, while the second defined 609 properties such as yield and applicable patents. Two distinct 610 arbiters indexing the same collection might also have access to 611 different properties. For example, the recipe collection 612 mentioned above might also indexed by a value-added server that 613 also stored the names of chefs who had tested the recipe. Note 614 also that the available query schema might also depend on other 615 factors, such as the identity of the principal conducting the 616 search, but these factors are not exposed in this protocol. 618 Each query grammar supported by DASL defines its own syntax for 619 expressing the possible query schema. A client retrieves the 620 schema for a given query grammar on an arbiter resource with a 621 given scope by invoking the SEARCH method on that arbiter, with 622 that grammar and scope, with a query whose DAV:select element 623 includes the DAV:queryschema property. This property is defined 624 only in the context of such a search, a server SHOULD not treat 625 it as defined in the context of a PROPFIND on the scope. The 626 content of this property is an XML element whose name and syntax 627 depend upon the grammar, and whose value may (and likely will) 628 vary depending upon the grammar, arbiter, and scope. 630 The query schema for DAV:basicsearch is defined in section 5.19. 632 4.1. The DAV:queryschema Property 634 636 4.1.1. Example of query schema discovery 638 In this example, the arbiter is recipes.com, the grammar is 639 DAV:basicsearch, the scope is also recipes.com. 641 SEARCH / HTTP/1.1 642 Host: recipes.com 643 Content-Type: application/xml 644 Connection: Close 645 Content-Length: 257 647 648 649 650 651 652 654 http://recipes.com 656 657 659 Response: 661 HTTP/1.1 207 Multistatus 662 Content-Type: application/xml 663 Content-Length: 428 665 666 667 668 http://recipes.com 669 670 671 672 673 See section 5.19.9 for actual contents 674 675 676 677 HTTP/1.1 200 Okay 678 679 680 682 5. THE DAV:BASICSEARCH GRAMMAR 684 5.1. Introduction 686 DAV:basicsearch uses an extensible XML syntax that allows clients 687 to express search requests that are generally useful for WebDAV 688 scenarios. DASL-extended servers MUST accept this grammar, and 689 MAY accept others grammars. 691 DAV:basicsearch has several major components: DAV:select, 692 DAV:from, DAV:where, DAV:sortby, and DAV:limit. DAV:select 693 provides the result record definition. DAV:from defines the 694 scope. DAV:where defines the criteria. DAV:sortby defines the 695 sort order of the result set. DAV:limit provides constraints on 696 the query as a whole. 698 5.2. The DAV:basicsearch DTD 700 703 705 706 708 709 710 711 712 714 718 720 722 724 726 727 730 731 734 735 738 739 742 743 746 747 749 750 751 753 754 757 758 760 761 763 5.2.1. Example Query 765 This query retrieves the content length values for all resources 766 located under the server's "/container1/" URI namespace whose 767 length exceeds 10000. 769 770 771 772 773 774 775 776 /container1/ 777 infinity 778 779 780 781 782 783 10000 784 785 786 787 788 789 790 791 792 793 795 5.3. DAV:select 797 DAV:select defines the result record. This document defines two 798 possible values: DAV:allprop and DAV:prop, both defined in 799 [WebDAV]. 801 If the value is DAV:allprop, the result record for a given 802 resource includes all the properties for that resource. 804 If the value is DAV:prop, then the result record for a given 805 resource includes only those properties named by the DAV:prop 806 element. Each property named by the DAV:prop element must be 807 referenced in the Multistatus response. 809 The rules governing the status codes for each property match 810 those of the PROPFIND method defined in [WebDAV]. 812 5.4. DAV:from 814 DAV:from defines the query scope. This contains exactly one 815 DAV:scope element. The scope element contains a mandatory 816 DAV:href element and an optional DAV:depth element. 818 DAV:href indicates the URI for a collection to use as a scope. 820 When the scope is a collection, if DAV:depth is "1", the search 821 includes the members of the collection. When it is "infinity", 822 the search includes all recursive members of the 823 collection.8.5.1. 825 5.4.1. Relationship to the Request-URI 827 If the DAV:scope element is an absolute URI, the scope is exactly 828 that URI. 830 If the DAV:scope element is a relative URI, the scope is taken to 831 be relative to the request-URI. 833 5.4.2. Scope 835 A Scope can be an arbitrary URI. 837 Servers, of course, may support only particular scopes. This may 838 include limitations for particular schemes such as "http:" or 839 "ftp:" or certain URI namespaces. 841 If a scope is given that is not supported the server MUST respond 842 with a 400 status code that includes a Multistatus error. A 843 scope in the query appears as a resource in the response and must 844 include an appropriate status code indicating its validity with 845 respect to the search arbiter. 847 Example: 849 HTTP/1.1 400 Multi-Status 850 Content-Type: text/xml 851 Content-Length: 428 853 854 855 856 http://www.foo.com/scope1 857 HTTP/1.1 502 Bad Gateway 858 860 861 863 This example shows the response if there is a scope error. The 864 response provides a Multistatus with a status for the scope. In 865 this case, the scope cannot be reached because the server cannot 866 search another server (502). 868 5.5. DAV:where 870 DAV:where element defines the search condition for inclusion of 871 resources in the result set. The value of this element is an XML 872 element that defines a search operator that evaluates to one of 873 the Boolean truth values TRUE, FALSE, or UNKNOWN. The search 874 operator contained by DAV:where may itself contain and evaluate 875 additional search operators as operands, which in turn may 876 contain and evaluate additional search operators as operands, 877 etc. recursively. 879 5.5.1. Use of Three-Valued Logic in Queries 881 Each operator defined for use in the where clause that returns a 882 Boolean value MUST evaluate to TRUE, FALSE, or UNKNOWN. The 883 resource under scan is included as a member of the result set if 884 and only if the search condition evaluates to TRUE. 886 Consult Appendix A for details on the application of three-valued 887 logic in query expressions. 889 5.5.2. Handling Optional operators 891 If a query provides an operator that is not supported by the 892 server, then the server MUST respond with a 422 (Unprocessable 893 Entity) status code. 895 5.5.3. Treatment of NULL Values 897 If a SEARCH PROPFIND for a property value would yield a 404 or 898 403 response for that property, then that property is considered 899 NULL. 901 NULL values are "less than" all other values in comparisons. 903 Empty strings (zero length strings) are not NULL values. An 904 empty string is "less then" a string with length greater than 905 zero. 907 The DAV:isdefined operator is defined to test if the value of a 908 property is NULL. 910 5.5.4. Example: Testing for Equality 912 The example shows a single operator (DAV:eq) applied in the 913 criteria. 915 916 917 918 100 919 920 922 5.5.5. Example: Relative Comparisons 924 The example shows a more complex operation involving several 925 operators (DAV:and, DAV:eq, DAV:gt) applied in the criteria. This 926 DAV:where expression matches those resources that are 927 "image/gifs" over 4K in size. 929 930 931 932 933 image/gif 934 935 936 937 4096 938 939 940 942 5.6. DAV:sortby 944 The DAV:sortby element specifies the ordering of the result set. 945 It contains one or more DAV:order elements, each of which 946 specifies a comparison between two items in the result set. 947 Informally, a comparison specifies a test that determines whether 948 one resource appears before another in the result set. 949 Comparisons are applied in the order they occur in the DAV:sortby 950 element, earlier comparisons being more significant. 952 The comparisons defined here use only a single property from each 953 resource, compared using the same ordering as the DAV:lt operator 954 (ascending) or DAV:gt operator (descending). If neither direction 955 is specified, the default is DAV:ascending. 957 In the context of the DAV:sortby element, null values are 958 considered to collate before any actual (i.e., non null) value, 959 including strings of zero length (as in ANSI standard SQL, c.f., 960 ANSI X3.135-1992). 962 5.6.1. Comparing Natural Language Strings. 964 Comparisons on strings take into account the language defined for 965 that property. Clients MAY specify the language using the 966 xml:lang attribute. If no language is specified either by the 967 client or defined for that property by the server or if a 968 comparison is performed on strings of two different languages, 969 the results are undefined. 971 The DAV:casesensitive attribute may be used to indicate case- 972 sensitivity for comparisons. 974 5.6.2. Example of Sorting 976 This sort orders first by last name of the author, and then by 977 size, in descending order, so that the largest works appear 978 first. 980 981 982 983 984 985 986 987 988 989 991 5.7. Boolean Operators: DAV:and, DAV:or, and DAV:not 993 The DAV:and operator performs a logical AND operation on the 994 expressions it contains. 996 The DAV:or operator performs a logical OR operation on the values 997 it contains. 999 The DAV:not operator performs a logical NOT operation on the 1000 values it contains. 1002 5.8. DAV:eq 1004 The DAV:eq operator provides simple equality matching on property 1005 values. 1007 The DAV:casesensitive attribute may be used with this element. 1009 5.9. DAV:lt, DAV:lte, DAV:gt, DAV:gte 1011 The DAV:lt, DAV:lte, DAV:gt, and DAV:gte operators provide 1012 comparisons on property values. The DAV:casesensitive attribute 1013 may be used with these elements. 1015 5.10. DAV:literal 1017 DAV:literal allows literal values to be placed in an expression. 1019 Because white space in literal values is significant to in 1020 comparisons, DAV:literal makes use of the xml:space attribute to 1021 identify this significance. The default value of this attribute 1022 for DAV:literal is preserve. Consult section 2.10 of [XML] for 1023 more information on the use of this attribute. 1025 5.11. DAV:isdefined 1027 The DAV:isdefined operator allows clients to determine whether a 1028 property is defined on a resource on a resource. The meaning of 1029 "defined on a resource" is found in section 5.5.3. 1031 Example: 1033 1034 1035 1037 The DAV:isdefined operator is optional. 1039 5.12. DAV:like 1041 The DAV:like is an optional operator intended to give simple 1042 wildcard-based pattern matching ability to clients. 1044 The operator takes two arguments. 1046 The first argument is a DAV:prop element identifying a single 1047 property to evaluate. 1049 The second argument is a DAV:literal element that gives the 1050 pattern matching string. 1052 5.12.1. Syntax for the Literal Pattern 1054 Pattern := [wildcard] 0*( text [wildcard] ) 1055 wildcard := exactlyone | zeroormore 1056 text := 1*( | escapesequence ) 1057 exactlyone : = "?" 1058 zeroormore := "%" 1059 escapechar := "\" 1060 escapesequence := "\" ( exactlyone | zeroormore | escapechar ) 1061 The value for the literal is composed of wildcards separated by 1062 segments of text. Wildcards may begin or end the literal. 1063 Wildcards may not be adjacent. 1065 The "?" wildcard matches exactly one character. 1067 The "%" wildcard matches zero or more characters 1069 The "\" character is an escape sequence so that the literal can 1070 include "?" and "%". To include the "\" character in the 1071 pattern, the escape sequence "\\" is used.. 1073 5.12.2. Example of DAV:like 1075 This example shows how a client might use DAV:like to identify 1076 those resources whose content type was a subtype of image. 1078 1079 1080 1081 image% 1082 1083 1085 5.13. DAV:contains 1087 The DAV:contains operator provides content based search 1088 capability. This operator implicitly searches against the text 1089 content of a resource, not against content of properties. The 1090 DAV:contains operator is intentionally not overly constrained, in 1091 order to allow the server to do the best job it can in performing 1092 the search. 1094 The DAV:contains operator evaluates to a Boolean value. It 1095 evaluates to TRUE if the content of the resource satisfies the 1096 search. Otherwise, It evaluates to FALSE. 1098 Within the DAV:contains XML element, the client provides a 1099 phrase: a single word or whitespace delimited sequence of words. 1100 Servers MAY ignore punctuation in a phrase. Case-sensitivity is 1101 left to the server. 1103 The following things may or may not be done as part of the 1104 search: Phonetic methods such as �soundex� may or may not be 1105 used. Word stemming may or may not be performed. Thesaurus 1106 expansion of words may or may not be done. Right or left 1107 truncation may or may not be performed. The search may be case 1108 insensitive or case sensitive. The word or words may or may not 1109 be interpreted as names. Multiple words may or may not be 1110 required to be adjacent or "near" each other. Multiple words may 1111 or may not be required to occur in the same order. Multiple words 1112 may or may not be treated as a phrase. The search may or may not 1113 be interpreted as a request to find documents "similar" to the 1114 string operand. 1116 The DAV:score property is intended to be useful to rank documents 1117 satisfying the DAV:Contains operator. 1119 5.13.1. Example 1121 The example below shows a search for the phrase �Peter Forsberg�. 1123 Depending on its support for content-based searching, a server 1124 MAY treat this as a search for documents that contain the words 1125 �Peter� and �Forsberg�. 1127 1128 Peter Forsberg 1129 1131 5.13.2. Example 1133 The example below shows a search for resources that contain 1134 �Peter� and �Forsberg�. 1136 1137 1138 Peter 1139 Forsberg 1140 1141 1143 5.14. The DAV:limit XML Element 1145 1147 The DAV:limit XML element contains requested limits from the 1148 client to limit the size of the reply or amount of effort 1149 expended by the server. 1151 5.15. The DAV:nresults XML Element 1153 ;only digits 1155 The DAV:nresults XML element contains a requested maximum number 1156 of records to be returned in a reply. The server MAY disregard 1157 this limit. The value of this element is an integer. 1159 5.16. The DAV:casesensitive XML attribute 1161 The DAV:casesensitive attribute allows clients to specify case- 1162 sensitive or case-insensitive behavior for DAV:basicsearch 1163 operators. 1165 The possible values for DAV:casesensitive are "1" or "0". The "1" 1166 value indicates case-sensitivity. The "0" value indicates case- 1167 insensitivity. The default value is server-specified. 1169 Support for the DAV:casesensitive is optional. A server should 1170 respond with an error 422 if the DAV:casesensitive attribute is 1171 used but cannot be supported. 1173 5.17. The DAV:score Property 1175 1177 The DAV:score XML element is a synthetic property whose value is 1178 defined only in the context of a query result where the server 1179 computes a score, e.g. based on relevance. It may be used in 1180 DAV:select or DAV:sortby elements. Servers SHOULD support this 1181 property. The value is a string representing the score, an 1182 integer from zero to 10000 inclusive, where a higher value 1183 indicates a higher score (e.g. more relevant). 1185 Clients should note that, in general, it is not meaningful to 1186 compare the numeric values of scores from two different queries 1187 unless both were executed by the same underlying search system on 1188 the same collection of resources. 1190 5.18. The DAV:iscollection Property 1192 1194 The DAV:iscollection XML element is a synthetic property whose 1195 value is defined only in the context of a query. 1197 The property is TRUE (the literal string "1") of a resource if 1198 and only if a PROPFIND of the DAV:resourcetype property for that 1199 resource would contain the DAV:collection XML element. The 1200 property is FALSE (the literal string "0") otherwise. 1202 Rationale: This property is provided in lieu of defining generic 1203 structure queries, which would suffice for this and for many more 1204 powerful queries, but seems inappropriate to standardize at this 1205 time. 1207 5.18.1. Exampe of DAV:iscollection 1209 This example shows a search criterion that picks out all and only 1210 the resources in the scope that are collections. 1212 1213 1214 1215 1 1216 1217 1219 5.19. Query Schema for DAV:basicsearch 1221 The DAV:basicsearch grammar defines a search criteria that is a 1222 Boolean-valued expression, and allows for an arbitrary set of 1223 properties to be included in the result record. The result set 1224 may be sorted on a set of property values. Accordingly the DTD 1225 for schema discovery for this grammar allows the server to 1226 express: 1228 @ the set of properties that may be either searched, returned, 1229 or used to sort, and a hint about the data type of such 1230 properties 1232 @ the set of optional operators defined by the resource. 1234 5.19.1. DTD for DAV:basicsearch QSD 1236 1237 1238 1239 1240 1241 1242 1244 The DAV:properties element holds a list of descriptions of 1245 properties. 1247 The DAV:operators element describes the optional operators that 1248 may be used in a DAV:where element. 1250 5.19.2. DAV:propdesc Element 1252 Each instance of a DAV:propdesc element describes the property or 1253 properties in the DAV:prop element it contains. All subsequent 1254 elements are descriptions that apply to those properties. All 1255 descriptions are optional and may appear in any order. Servers 1256 SHOULD support all the descriptions defined here, and MAY define 1257 others. 1259 DASL defines four descriptions. The first, DAV:datatype, 1260 provides a hint about the type of the property value, and may be 1261 useful to a user interface prompting for a value. The remaining 1262 three (DAV:searchable, DAV:selectable, and DAV:sortable) identify 1263 portions of the query (DAV:where, DAV:select, and DAV:sortby, 1264 respectively). If a property has a description for a section, 1265 then the server MUST allow the property to be used in that 1266 section. These descriptions are optional. If a property does not 1267 have such a description, or is not described at all, then the 1268 server MAY still allow the property to be used in the 1269 corresponding section. 1271 5.19.3. The DAV:datatype Property Description 1273 The DAV:datatype element contains a single XML element that 1274 provides a hint about the domain of the property, which may be 1275 useful to a user interface prompting for a value to be used in a 1276 query. The namespace for expressing a DASL defined data type is 1277 "urn:uuid:C2F41010-65B3-11d1-A29F-00AA00C14882/". 1279 1281 DASL defines the following data type elements: 1283 name contents 1284 example 1286 Boolean 1 1287 0 1289 string Foobar 1291 int -259 1292 23 1294 float .3141592653589 1295 79E+1 1296 5.33 1298 dateTime.is 1994-11- 1299 o8601tz 05T08:15:5Z 1301 If the data type of a property is not given, then the data type 1302 defaults to string. 1304 5.19.4. The DAV:searchable Property Description 1306 1308 If this element is present, then the server MUST allow this 1309 property to appear within a DAV:where element where an operator 1310 allows a property. Allowing a search does not mean that the 1311 property is guaranteed to be defined on every resource in the 1312 scope, it only indicates the server's willingness to check. 1314 5.19.5. The DAV:selectable Property Description 1316 1318 This element indicates that the property may appear in the 1319 DAV:select element. 1321 5.19.6. The DAV:sortable Property Description 1323 This element indicates that the property may appear in the 1324 DAV:sortby element 1326 1327 5.19.7. The DAV:casesensitive Property Description 1329 This element only applies to properties whose data type is 1330 "string" as per the DAV:datatype property description. Its 1331 presence indicates that compares performed for searches, and the 1332 comparisons for ordering results on the string property will be 1333 case sensitive. (The default is case insensitive.) 1335 1337 5.19.8. The DAV:operators XML Element 1339 The DAV:operators element describes every optional operator 1340 supported in a query. (Mandatory operators are not listed since 1341 they are mandatory and permit no variation in syntax.). All 1342 optional operators that are supported MUST be listed in the 1343 DAV:operators element. The listing for an operator consists of 1344 the operator (as an empty element), followed by one element for 1345 each operand. The operand MUST be either DAV:operand_property or 1346 DAV:operand_literal, which indicate that the operand in the 1347 corresponding position is a property or a literal value, 1348 respectively. If an operator is polymorphic (allows more than 1349 one operand syntax) then each permitted syntax MUST be listed 1350 separately. 1352 1355 5.19.9. Example of Query Schema for DAV:basicsearch 1357 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1377 1379 1380 1381 This response lists four properties. The datatype of the last 1382 three properties is not given, so it defaults to string. All are 1383 selectable, and the first three may be searched. All but the 1384 last may be used in a sort. Of the optional DAV operators, 1385 DAV:isdefined and DAV:like are supported. 1387 Note: The schema discovery defined here does not provide for 1388 discovery of supported values of the DAV:casesensitive attribute. 1389 This may require that the reply also list the mandatory 1390 operators. 1392 6. INTERNATIONALIZATION CONSIDERATIONS 1394 Clients have the opportunity to tag properties when they are 1395 stored in a language. The server SHOULD read this language- 1396 tagging by examining the xml:lang attribute on any properties 1397 stored on a resource. 1399 The xml:lang attribute specifies a nationalized collation 1400 sequence when properties are compared. 1402 Comparisons when this attribute differs have undefined order. 1404 7. SECURITY CONSIDERATIONS 1406 This section is provided to detail issues concerning security 1407 implications of which DASL applications need to be aware. All of 1408 the security considerations of HTTP/1.1 also apply to DASL. In 1409 addition, this section will include security risks inherent in 1410 searching and retrieval of resource properties and content. 1412 A query must not allow one to retrieve information about values 1413 or existence of properties that one could not obtain via 1414 PROPFIND. (e.g. by use in DAV:sortby, or in expressions on 1415 properties.) 1417 Server should prepare for denial of service attacks. For example 1418 a client may issue a query for which the result set is expensive 1419 to calculate or transmit because many resources match or must be 1420 evaluated. 1422 8. SCALABILITY 1424 Query grammars are identified by URIs. Applications SHOULD not 1425 attempt to retrieve these URIs even if they appear to be 1426 retrievable (for example, those that begin with "http://") 1428 9. AUTHENTICATION 1430 Authentication mechanisms defined in WebDAV will also apply to 1431 DASL. 1433 10. IANA CONSIDERATIONS 1435 This document uses the namespace defined by [WebDAV] for XML 1436 elements. All other IANA considerations mentioned in [WebDAV] 1437 also applicable to DASL 1439 11. COPYRIGHT 1441 To be supplied. 1443 12. INTELLECTUAL PROPERTY 1445 To be supplied. 1447 13. REFERENCES 1449 [DASLREQ] S. Reddy, J.Slein, "Requirements for DAV Searching and 1450 Locating", March 1998, internet-draft, work-in-progress, draft- 1451 davis-dasl-requirements-00.txt 1453 [RFC2068] R. Fielding, J. Gettys, J. C. Mogul, H. Frystyk, and T. 1454 Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1", RFC 2068, 1455 U.C. Irvine, DEC, MIT/LCS, January 1997. 1457 [RFC2119] S. Bradner, "Key words for use in RFCs to Indicate 1458 Requirement Levels." RFC 2119, BCP 14. Harvard University. March, 1459 1997. 1461 [WebDAV] Y. Goland, E.J. Whitehead, A. Faizi, S.R. Carter, D. 1462 Jenson, "Extensions for Distributed Authoring on the World Wide 1463 Web", April. 1998, internet-draft, work-in-progress, draft-ietf- 1464 webdav-protocol-08. 1466 [XML] T. Bray, J. Paoli, C. M. Sperberg-McQueen, "Extensible 1467 Markup Language (XML) 1.0", February, 1998, W3C Recommendation. 1469 [XMLNS] T. Bray, D. Hollander, A. Layman, "Namespaces in XML", 1470 August, 1998, W3C Working Draft. 1472 14. AUTHOR'S ADDRESSES 1474 Saveen Reddy 1475 Microsoft 1476 One Microsoft Way 1477 Redmond WA, 9085-6933 1478 Email:saveenr@microsoft.com 1480 Dale Lowry 1481 Novell 1482 1555 N. Technology Way 1483 M/S ORM-M-314 1484 Orem, UT 84097 1485 Email: dlowry@novell.com 1486 Surendra Reddy 1487 Oracle Corporation 1488 600 Oracle Parkway, M/S 6op3, 1489 Redwoodshores, CA 94065 1490 Email: skreddy@us.oracle.com 1491 Phone:(650) 506 5441 1493 Rick Henderson 1494 Netscape 1495 Email: rickh@netscape.com 1497 Jim Davis 1498 Xerox PARC 1499 3333 Coyote Hill Road 1500 Palo Alto CA 94304 1501 650-812-4301 1502 Email: jdavis@parc.xerox.com 1504 Alan Babich 1505 Filenet 1506 3565 Harbor Blvd. 1507 Costa Mesa, CA 92626 1508 714-966-3403 1509 Email: ababich@filenet.com 1511 15. APPENDICES 1513 Appendix A Three-Valued Logic in DAV:basicsearch 1515 ANSI standard three valued logic is used when evaluating the 1516 search condition (as defined in the ANSI standard SQL 1517 specifications, for example in ANSI X3.135-1992, section 8.12, 1518 pp. 188-189, section 8.2, p. 169, General Rule 1)a), etc.). 1520 ANSI standard three valued logic is undoubtedly the most widely 1521 practiced method of dealing with the issues of properties in the 1522 search condition not having a value (e.g., being null or not 1523 defined) for the resource under scan, and with undefined 1524 expressions in the search condition (e.g., division by zero, 1525 etc.). Three valued logic works as follows. 1527 Undefined expressions are expressions for which the value of the 1528 expression is not defined. Undefined expressions are a completely 1529 separate concept from the truth value UNKNOWN, which is, in fact, 1530 well defined. Property names and literal constants are considered 1531 expressions for purposes of this section. If a property in the 1532 current resource under scan has not been set to a value (either 1533 because the property is not defined for the current resource, or 1534 because it is null for the current resource), then the value of 1535 that property is undefined for the resource under scan. DASL 1.0 1536 has no arithmetic division operator, but if it did, division by 1537 zero would be an undefined arithmetic expression. 1539 If any subpart of an arithmetic, string, or datetime 1540 subexpression is undefined, the whole arithmetic, string, or 1541 datetime subexpression is undefined. 1543 There are no manifest constants to explicitly represent undefined 1544 number, string, or datetime values. 1546 Since a Boolean value is ultimately returned by the search 1547 condition, arithmetic, string, and datetime expressions are 1548 always arguments to other operators. Examples of operators that 1549 convert arithmetic, string, and datetime expressions to Boolean 1550 values are the six relational operators ("greater than", "less 1551 than", "equals", etc.). If either or both operands of a 1552 relational operator have undefined values, then the relational 1553 operator evaluates to UNKNOWN. Otherwise, the relational operator 1554 evaluates to TRUE or FALSE, depending upon the outcome of the 1555 comparison. 1557 The Boolean operators DAV:and, DAV:or and DAV:not are evaluated 1558 according to the following rules: 1560 UNKNOWN and UNKNOWN = UNKNOWN 1562 UNKNOWN or UNKKNOWN = UNKNOWN 1564 not UNKNOWN = UNKNOWN 1566 UNKNOWN and TRUE = UNKNOWN 1568 UNKNOWN and FALSE = FALSE 1570 UNKNOWN and UNKNOWN = UNKNOWN 1572 UNKNOWN or TRUE = TRUE 1574 UNKNOWN or FALSE = UNKNOWN 1576 UNKNOWN or UNKNOWN = UNKNOWN 1578 16. CHANGE HISTORY 1580 Feb 14, 1998 1582 Initial Draft 1584 Feb 28, 1998 1586 Referring to DASL as an extension to HTTP/1.1 rather than DAV 1588 Added new sections "Notational Conventions", "Protocol Model", 1589 "Security Considerations" 1591 Changed section 3 to "Elements of Protocol" 1593 Added some stuff to introduction 1595 Added "result set" terminology 1596 Added "IANA Considerations". 1598 Mar 9, 1998 1600 Moved sub-headings of "Elements of Protocol" to first level and 1601 removed "Elements of Protocol" Heading. 1603 Added an sentence in introduction explaining that this is a 1604 "sketch" of a protocol. 1606 Mar 11, 1998 1608 Added sortby, data typing, three valued logic, query schema 1609 property, and element definitions for schema for basicsearch. 1611 April 8, 1998 1613 - made changes based on last week�s DASL BOF. 1615 May 8, 1998 1617 Removed most of DAV:searcherror; converted to DAV:searchredirect 1619 Altered DAV:basicsearch grammar to use avoid use of ANY in DTD 1621 June 17, 1998 1623 -Added details on Query Schema Discovery 1625 -Shortened list of data types 1627 June 23, 1998 1629 moved data types before change history 1631 rewrote the data types section 1633 removed the casesensitive element and replace with the 1634 casesensitive attribute 1636 added the casesensitive attribute to the DTD for all operations 1637 that might work on a string 1639 Jul 20, 1998 1641 A series of changes. See Author�s meeting minutes for details. 1643 July 28, 1998 1645 Changes as per author's meeting. QSD uses SEARCH, not PROPFIND. 1647 Moved text around to keep concepts nearby. 1649 Boolean literals are 1 and 0, not T and F. 1651 contains changed to contentspassthrough. 1653 Renamed rank to score. 1655 July 28, 1998 1657 Added Dale Lowry as Author 1659 September 4, 1998 1661 Added 422 as response when query lists unimplemented operators. 1663 dav:literal declares a default value for xml:space, 'preserve' 1664 (see XML spec, section 2.10) 1666 moved to new XML namespace syntax 1668 September 22, 1998 1670 Changed "simplesearch" to "basicsearch" 1672 Changed isnull to isdefined 1674 Defined NULLness as having a 404 or 403 response 1676 used ENTITY syntax in DTD 1678 Added redirect 1680 October 9, 1998 1682 Fixed a series of typographical and formatting errors. 1684 Modified the section of three-valued logic to use a table rather 1685 than a text description of the role of UNKNOWN in expressions. 1687 November 2, 1998 1689 Added the DAV:contains operator. 1691 Removed the DAV:contentpassthrough operator.