Re: CAP 13: Bad CAL-QUERY example / description?
[email protected] Mon, 7 Jun 2004 16:59:54 -0400
| Newsgroups | gmane.ietf.calendar |
|---|---|
| Message-ID | <OF6AFA74C3.5CC2821A-ON85256EAC.0064F71A-85256EAC.00733BA5@notesdev.ibm.com> |
Doug replied on 06/07/2004 11:44:34 AM:
> I did not see any new questions that had not already been answered.
There was 1 question and one non-direct question that have not been
answered yet. First the non-direct question:
> Having the CS strip off the BEGIN/END markers has 2 effects:
>
> 1: It saves a mere 22 octets of data per subcomponent being returned and
> 2: Causes the data belonging to all subcomponents to bleed together
> into a mush that makes separate subcomponent identification and use
impossible
>
> Please show me how this is useful.
To make it a formal question then; Can anyone please show me how this is
really useful?
The undiscussed/unanswered question:
> If the "component.*" concept was removed from 6.1.1, you can _still_
> get all your data from all the unknown sources you want. It would
> just be a few octets longer AND all subcomponents would be fully
> parsable, separatable and usable. How would that be bad??
In the interest of saving time and merging this thread with the other one
about "*.*" I have a proposal that will:
A: Resolve any ambiguity related to the usefulness of "component.*" vs
"component" on searches
B: Allow for property discovery without the need for full contained
component retrieval.
C: Remove the undefined "*.*" special case need for some containers that
matches the (semi) defintiion of "*" in Section 6.1.1
D: Remove the useless case of returning subcomponent data without the
BEGIN/END wrappers.
Given:
1: There are times when a CUA wants to perform property _discovery_
instead of actual property _processing_ (implicitly described by Doug
although never actually addressed in CAP text) and
2: The lack of subcomponent BEGIN/END wrappers saves a mere 22 octets BUT
results in an unprocessable mush of subcomponents and properties and
3: There is at least one ambiguity/conflict between the use of "*" and
"*.*" in the current text
I propose we make the following simple changes to CAP that will address
and resolve all the questions/issues found to date:
(A) We remove any concept of "component.*" vs "component" in CAP
(essentially bullet item 7 in Section 6.1.1). Whenever a subcomponent is
requested, it will ALWAYS result in that entire subcomponent being
returned intact (wrappers NOT removed). In the SELECT clause, there never
should be a "component.*" or "*.*" usage necessary.
(B) To simplify things, we define the use of "*" in the SELECT
clause to only refer to properties or entire containers. We change bullet
7 to Section 6.1.1 that says:
7. When the "SELECT" clause of the query contains an "*" value,
contained
components are not automatically included in the returned
results. Only
those properties found in the component in the FROM clause (or
the
implicit container in the case of VCALSTOREs and VAGENDAs) are
returned.
If the requestor wants contained components to be included in
the returned results, they need to expressly request the
desired
contained component(s) (or all of them) using the proper
"INCLUDE"
clause. Contained components are always returned with their
BEGIN/END markers intact so that component integrity is
maintained
and no mismatching of properties will accidentally occur. To
indicate
all contained components should be included, the value of "*"
should
be used in the "INCLUDE" clause of the query. To indicate all
properties
but no contained components should be returned, no "INCLUDE"
clause would
be used in the query.
8. When the "SELECT" clause of the query contains a contained
component,
the entire contained component is returned along with its
BEGIN/END
markers so that component integrity is maintained and no
mismatching of
properties will accidentally occur.
(C) We slightly change the cal-query ABNF to allow the requestor
to simply and direclty indicate which subcontainers they want, if any. We
also remove the questionable ability to SELECT subcomponet values only.
We change the ABNF to:
cal-query = "SELECT" SP cap-val SP
[ "INCLUDE" SP cal-include SP ] ; ONLY occurs when the
"SELECT" cap-val contains an "*" value
"FROM" SP comp-name SP
"WHERE" SP cap-expr
/ "SELECT" SP cap-cols SP
[ "INCLUDE" SP cal-include SP ] ; ONLY occurs when the
"SELECT" cap-val contains an "*" value
"FROM" SP comp-name
cap-val = cap-cols
/ param
/ ( cap-val "," cap-val )
cap-cols = cap-col-select
/ ( cap-cols "," cap-col-select)
/ "*"
cap-col-select = comp-name
/ cap-prop
cal-include = all ; This value indicates ALL subcomponents are
desired
/ comp-name ; This value indicates a particular desired
subcomponent
/ ( cal-include "," comp-name) ; This value indicates a list
of desired subcomponents
to reflect that the CUA now clearly indicates if they want any
subcomponents or not and which ones even (so its not an "all or nothing"
deal).
"all" is already defined elsewhere in CAP ABNF.
Also, the ability to use subcomponent properties in "WHERE"
clauses is still intact. This means that you can still use queries like
that of (e) in Section 6.1.1 without actually having to retreive the
VALARM too.
(D) We remove the text in CAP that special cases "*.*" for
VCALSTORE and VAGENDA since it is no longer necessary with the above
changes.
Thoughts / comments / feedback?
Bruce
===========================================================================
Bruce Kahn INet:
[email protected]
Messaging & Collaboration Phone: 978.399.6496
IBM Software Group FAX: and nothing but the FAX...
Standard disclaimers apply, even where prohibited by law...