2009/dap/contacts Overview.html,1.50,1.51

Update of /sources/public/2009/dap/contacts
In directory hutz:/tmp/cvs-serv7564

Modified Files:
	Overview.html 
Log Message:
Added 'Design Considerations' (work in progress).
Started to roll in changes from F2F (Prague Mar 2010)

Index: Overview.html
===================================================================
RCS file: /sources/public/2009/dap/contacts/Overview.html,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- Overview.html	24 Mar 2010 14:31:40 -0000	1.50
+++ Overview.html	7 Apr 2010 13:44:15 -0000	1.51
@@ -18,7 +18,6 @@
         </script>
         <script src='../common/config.js' class='remove'>
         </script>
-		<link rel="stylesheet" href="../ReSpec.js/css/respec.css" type="text/css" media="screen" />
     </head>
     <body>
         <section id='abstract'>
@@ -76,7 +75,7 @@
                                 successContactFindCallback, 
                                 generalErrorCB,
                                 {filter:
-                                    {'name': 'Bob'}
+                                    {name: 'Bob'}
                                 } );</pre>
                 </div>
                 <div>
@@ -134,6 +133,134 @@
             </section>
 
         </section>
+		
+        <section class="informative">
+            <h2>Design Considerations</h2>
+			
+			<section>
+				<h2>Privacy by Design</h2>
+				
+				<p>
+					The Contacts API has been designed with	the intention of putting the user in control of their data and allowing user's 
+					to control the flow of their information to 3rd party sites and services.
+				</p>
+				
+				<p>
+					The <a href="#security-and-privacy-considerations">Security and Privacy Considerations</a> section provides both normative 
+					and non-normative recommendations for both implementors and consumers of the Contacts API - it recommends that user's 
+					should be able to review the information that is being requested by a web application and allow a user to override, modify 
+					or supplement the requested information as they may require.
+				</p>
+				
+				<p>
+					In addition to the included Security and Privacy Considerations additional features have been directly embedded within the Contacts API 
+					that are intended to further ensure the privacy of a user's Contacts information. The Contacts API is built on the premise 
+					that a user should be able to share the least information possible with a 3rd party service while still allowing the 3rd party service to 
+					fulfill its intended function. 
+				</p>
+
+				<section>
+					<h2>Data Minimization</h2>
+					
+					<p>
+						<dfn>Data minimization</dfn> is the principle that a consumer is required to request the specific fields of Contact information 
+						that it requires in order to fulfill its operation and that an implementation is required to return only the specific 
+						fields granted by the user as a result of that request. 
+					</p>
+					
+					<p>
+						For example, a web application that requires email addresses to send information via email on to a selection of a user's contacts
+						should only need to request the <a href="#widl-ContactProperties-emails"><code>emails</code></a> attribute in the 
+						<a href="#widl-Contacts-find"><code>fields</code></a> parameter of the associated <a href="#contacts-interface"><code>Contacts</code></a> 
+						<a href='#widl-Contacts-find'>find()</a> operation. The web application may request additional fields as required.
+					</p>
+					
+					<p>
+						An implementation should collect the Contact object(s) to be returned to a consumer request according to the 
+						<a>rules for processing filter combinations</a> and then return the corresponding subset of 
+						<a href="#contactproperties-interface"><code>ContactProperties</code></a> requested from the original consumer only after they have 
+						been approved by the user. 
+					</p>
+					
+					<p>
+						The <dfn>data minimization process</dfn> is therefore defined as follows:
+						
+						<ol>
+							<li>Let a <em>consumer</em> (e.g. a web application) request the specific contact properties (fields) required for its operation.</li>
+							<li>Let the <em>consumer</em> make a request for the requested fields to an <em>implementation</em> at run time.</li>
+							<li>Let the <em>user</em> review the requested fields and override, modify and/or supplement the resulting data as required.</li>
+							<li>Let the <em>implementation</em> return the data resulting from this process to the original <em>consumer</em> in step 1.</li>
+						</ol>
+					</p>
+				</section>
+
+				<section>
+					<h2>Object Minimization</h2>
+					
+					<p>
+						<dfn>Object minimization</dfn> is the principle that by default an implementation of the Contacts API MUST return only a single 
+						<a href="#contact-interface"><code>Contact</code></a> object as the result of a <a href="#contacts-interface"><code>Contacts</code></a> 
+						<a href='#widl-Contacts-find'>find()</a> operation.
+					</p>
+					
+					<p>
+						If a consumer wishes to indicate that it can accept more than one <a href="#contact-interface"><code>Contact</code></a> object, the consumer MUST 
+						set the <a href="#contactfindoptions-interface">ContactFindOptions</a> 
+						<a href="#widl-ContactFindOptions-multiple"><code>multiple</code></a> attribute to <code>true</code>.
+					</p>
+					
+					<p>
+						The consumer MAY also set the <a href="#contactfindoptions-interface">ContactFindOptions</a>
+						<a href="#widl-ContactFindOptions-limit"><code>limit</code></a> attribute to a non-negative integer value. If this attribute is provided 
+						the implementation MUST allow multiple Contact objects to be returned up to the value of the <a href="#widl-ContactFindOptions-limit"><code>limit</code></a>
+						provided. 
+					</p>
+				</section>	
+
+			</section>
+
+			<section>
+				<h2>Multiple Data Sources</h2>
+				
+				<p class="note">
+					Data is sourced from multiple locations. No specific requirement on having a single central repository for contact information.					
+				</p>
+			</section>
+						
+			<section>
+				<h2>Asychronous Communications</h2>
+				
+				<p class="note">
+					Avoid any potential for blocking communication calls (cross-domain, cross-service, between UA and device, etc) with asynchronous design pattern (except for sync helper functions).
+				</p>
+				
+				<section>
+					<h2>Pending Operations</h2>
+					
+					<p class="note">
+						A way to cancel existing asynchronous operations. 
+					</p>
+				</section>
+				
+				<section>
+					<h2>Operation Timeouts</h2>
+					
+					<p class="note">
+						Default behaviour for request timeouts.
+					</p>
+				</section>
+			</section>
+			
+			<section>
+				<h2>Interoperability with Existing Formats</h2>
+				
+				<p class="note">
+					Homogenous design with vCard, hCard, Portable Contacts, etc... objectives, scope...
+				</p>
+			</section>
+		
+		</section>
+		
         <section>
             <h2>Security and Privacy Considerations</h2>
 			
@@ -225,9 +352,7 @@
             <h2>API Description</h2>
 			<section>
 				<h2><a>ServiceContacts</a> interface</h2>
-
-<p class='issue'>The actual object of which the API will be hanging off is still under discussion (e.g. <code>navigator.service</code> vs from <code>navigator.device</code>); see <a href="http://www.w3.org/2009/dap/track/issues/67">ISSUE-67</a></p>
-				
+	
 				<p>
 					The <a href='#servicecontacts-interface'><code>ServiceContacts</code></a> interface is exposed on the <code>navigator.service</code> object, as defined in [[!CORE-DEVICE]]. 
 				</p>
@@ -276,6 +401,10 @@
 						<p>This method takes one argument. When called, it returns 
 						a <a href='#contact-interface'><code>Contact</code></a> object.</p>
 						
+						<p>The newly created <a href='#contact-interface'><code>Contact</code></a> object MUST NOT be stored stored in the user's address book as a result 
+						of calling this method. The <a href='#contact-interface'><code>Contact</code></a> <a href='#widl-Contact-save'>save()</a> method MUST be called on the 
+						response of this method to store the new <a href='#contact-interface'><code>Contact</code></a> object in the user's address book.</p>
+						
                         <dl class='parameters'>
                             <dt>
                                 ContactProperties attributes
@@ -290,7 +419,7 @@
                         PendingOp find ()
                     </dt>
                     <dd>
-                    	<p>Find contacts in the address book based on a <a href='#contactproperties-interface'><code>ContactProperties</code></a> object acting as a filter.</p>
+                    	<p>Find contacts in the address book according to the <a>find contacts process</a> detailed below.</p>
 						
 						<p>This method takes two, three or four arguments. When called, it immediately returns 
 						a <code>PendingOp</code> object , as defined in [[!CORE-DEVICE]], and then asynchronously starts a <dfn>find contacts process</dfn> defined as follows:</p> 
@@ -313,7 +442,8 @@
 								requested to be returned as part of the associated <a href='#contactfindsuccesscb-interface'><code>ContactFindSuccessCB</code></a>.
 								
 								<p>
-									This method returns no ContactProperties by default. Therefore the requested <a href='#contact-interface'><code>Contact</code></a> fields MUST be specified as part of this operation. 
+									This method returns no <a href='#contactproperties-interface'><code>ContactProperties</code></a> by default. Therefore the 
+									requested <a href='#contact-interface'><code>Contact</code></a> fields MUST be specified as part of this operation. 
 								</p>
                             </dd>
                             <dt>
@@ -754,7 +884,11 @@
                                 Contact contactObj
                             </dt>
                             <dd>
+<<<<<<< Overview.html
+                                The Contact object resulting from the given <a href='#contact-interface'><code>Contact</code></a> <a href='#widl-Contact-save'>save()</a> or <a href='#contact-interface'><code>Contact</code></a> <a href='#widl-Contact-remove'>remove()</a> method.
+=======
                                 The Contact object resulting from the given <a href="#widl-Contact-save"><code>Contact.save()</code></a> or <a href="#widl-Contact-remove"><code>Contact.remove()</code></a> method.
+>>>>>>> 1.50
                             </dd>
                         </dl>			
 					</dd>
@@ -878,13 +1012,13 @@
                                  successContactFindCallback, 
                                  generalErrorCB,
                                  {
-                                   'filter':
+                                   filter:
                                      {
-                                        'name': 'Robert',
-                                        'nicknames': 'Bob'
+                                        name: 'Robert',
+                                        nicknames: 'Bob'
                                      },
-                                   'multiple': true,
-                                   'limit': 3
+                                   multiple: true,
+                                   limit: 3
                                  }
                                 );</pre>
 					
@@ -893,14 +1027,17 @@
 2. Return the 'name', 'addresses', 'phones' and 'emails' attributes of the resulting Contact objects.</pre>
 				</p>
 
-				<p class='note'>
-					We need to be a lot clearer about partial matching included below. It might just be simpler to use pass RegExp objects around. Then again it might not...
-				</p>
 				<p>
 					All contact searching SHOULD apply a loose-matching policy. If a <a href='#contactproperties-interface'><code>ContactProperties</code></a> attribute being searched in <a href='#contacts-interface'><code>Contacts</code></a> 
-					<em>partially matches</em> the input filter value, a <a href='#contact-interface'><code>Contact</code></a> object representing the contact 
+					is a <a>partial value match</a> of the input filter value, a <a href='#contact-interface'><code>Contact</code></a> object representing the contact 
 					SHOULD be returned as part of the resulting <a href='#contactfindsuccesscb-interface'><code>ContactFindSuccessCB</code></a>.
 				</p>
+				
+				<p>
+					A <dfn>partial value match</dfn> refers to both syntactic and semantic partial matching of an input filter value with 
+					a corresponding value in the address book. A <a>partial value match</a> is case-insensitive and MUST be considered to match when the value in the 
+					address book begins with, contains and/or ends with the value of the the input filter value.
+				</p>
 			
 	    <p>The <dfn id='rules-for-processing-filter-combinations'>rules for processing filter combinations</dfn> is defined below and is always provided with an <var title="">input</var> parameter and, an optional <var title="">options</var> parameter. Its behaviour depends on the type of <var title="">input</var>:</p>
 
@@ -930,109 +1067,14 @@
 		    </dl>
 		
 		</p>
-		
-		<p>&nbsp;</p>
 				
 	</section>
 
-	<section>
-		<h2>Use Cases and Requirements</h2>
-
-		<section>
-			<h2>Use Cases</h2>
-			
-			<p>
-				<h4 id='uc1'>Use Case 1: Upload a set of contact details to a user's social network</h4>
-				A user is registered on a number of different social networking sites and would like to upload some or all of their 
-				address book contacts to the service. Using the Contacts API, the Web application has access to the user's address book, 
-				subject to user opt-in, and it is therefore able to import the user's selected contacts in to their service.				
-			</p>
-			
-			<p>
-				<h4 id='uc2'>Use Case 2: Download a set of contact details from a user's social network</h4>
-				A social networking user would like to download some or all of their social network contacts to their native address book, in to their native
-				phone dialling application or in to another application for offline / non-web use. Using the Contacts API, the Web application provides the user with an export 
-				function and, subject to user opt-in, the selected contacts can be downloaded and imported in to the user's address book.
-			</p>
-
-			<p>
-				<h4 id='uc3'>Use Case 3: A user would like to keep their work address book and personal address book seperate</h4>
-				The Contacts API will provide all address book contacts in a unified way but the user would like to associate individual contacts 
-				to individual address books - keeping their work and social address books seperated. The Contacts API must allow Web Applications to
-				distinguish between multiple address book stores and allow the user to manage different address books according to their needs.
-			</p>
-		
-			<p>
-				<h4 id='uc4'>Use Case 4: A user maintains a single unified address book but would like to maintain groups of contacts within that address book</h4>
-				A user has a number of friends, family, colleagues and other contacts in their address book. They would like to create groups and assign 
-				existing contacts to these groups. The user can create, update or remove as many groups as they like and equally they would like to be able to
-				 add, remove and update the members assigned to those groups whenever they need to. The user's contacts can belong to multiple groups at the 
-				 any one time.
-			</p>
-							
-			<p>
-				<h4 id='uc5'>Use Case 5: Use a web interface to manage contact details on both the user's device and the web</h4>
-				A Web Application is built that allows users to add, update and remove friend's contact details stored in their native address book.
-				The Web Application can add, remove and update contact details, subject to user opt-in, and these details are automatically propagated 
-				from the web interface to the user's address book.
-			</p>
-			
-			<p>
-				<h4 id='uc6'>Use Case 6: A user would like to export contacts from the one address book store and import them to another address book store</h4>
-				The user maintains multiple address books that are stored on both the web and on their device(s). The user would like to move some or all of 
-				their contacts from one address book store to another. Using the Contacts API, the user can assign contact details to different address book 
-				stores. The underlying implementation will action the import/export process when the user changes to which address book store a contact is 
-				associated and the user makes an active request, via the Contacts API, to update the modified contacts.
-			</p>
-			
-			<p>
-				<h4 id='uc7'>Use Case 7: A user would like to be notified when friends have a birthday coming up</h4>
-				A user would like their favorite Web Application to inform them when all their friend's birthdays are coming up. The user imports some or all 
-				of their address book contacts to the Web Application. The web application can read in the contacts' birthdays as well as other useful identifying 
-				information (e.g. the contacts' names). The Web Application can then email, SMS or otherwise notify the user when a contact's birthday is coming 
-				up.
-			</p>
-			
-			<p>
-				<h4 id='uc8'>Use Case 8: A user would like his/her contacts to update their own contact details via a mediating Web Application and sync any changes to their 
-				current address book</h4>
-				User's contact details are constantly changing and being updated. A user has uploaded their address book to a Web Application which has then allowed 
-				the user's contacts to update the details contained therein in a collaborative way. The user can then synchronise any changes made by his/her contacts 
-				when they e.g. visit that Web Application at any point in the future.
-			</p>
-		</section>
-
-		<section>
-			<h2>Requirements</h2>
-
-			  <ul>
-				<li>The Contacts API <em title="must" class="rfc2119">must</em> enable listing all available address books on the device;</li>
-				<li>The Contacts API <em title="must" class="rfc2119">must</em> enable listing all contacts in the address book(s);</li>
-				<li>The Contacts API <em title="must" class="rfc2119">must</em> enable reading the details for a contact;</li>
-				<li>The Contacts API <em title="should" class="rfc2119">should</em> enable creating a new contact;</li>
-				<li>The Contacts API <em title="should" class="rfc2119">should</em> enable updating a contact;</li>
-				<li>The Contacts API <em title="should" class="rfc2119">should</em> enable deleting a contact;</li>
-
-				<li>The Contacts API <em title="should" class="rfc2119">should</em> enable filtering the list of contacts to search for a subset.</li>
-			  </ul>
-
-
-		</section>
-
-	</section>
-
-    <section class='appendix'>
-      <h2>Features for Future Consideration</h2>
-      <p>
-        The requirements document contains a list of features that were considered for this version
-        but deferred to future work [[DAP-REQS]].
-      </p>
-    </section>
-
     <section class='appendix'>
       <h2>Acknowledgements</h2>
       <p>
-        The editor would like to thank the input from the PhoneGap, Nokia, and OMTP BONDI groups and the feedback received from W3C DAP members to date ... 
+        Robin Berjon, Dominique Hazaƫl-Massieux, Suresh Chitturi, Alissa Cooper, Max Froumentin, Frederick Hirsch, Anssi Kostainen, Brian LeRoux, Ilkka Oksanen 
+		and other members of the W3C DAP WG ... 
       </p>
     </section>
   </body>

Received on Wednesday, 7 April 2010 13:44:19 UTC