Changes: Separately test garbage collection query.
[qtcontacts-tracker:hasselmms-qtcontacts-tracker.git] / tests / ut_qtcontacts_trackerplugin_querybuilder / data / 202-save-request-1.rq
1 # Delete related objects so that we can update them.
2 # Don't restrict the graph as we really must to get rid of all properties
3 # =================================================================================================
4
5 DELETE
6 {
7   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
8   {
9     ?subject nco:hasPostalAddress ?object .
10   }
11 }
12 WHERE
13 {
14   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
15   {
16     <contact:225543300> nco:hasAffiliation ?subject .
17     ?subject nco:hasPostalAddress ?object .
18   }
19 }
20
21 DELETE
22 {
23   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
24   {
25     ?subject ncal:dtstart ?object
26   }
27 }
28 WHERE
29 {
30   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
31   {
32     <contact:225543300> ncal:anniversary ?subject .
33     ?subject ncal:dtstart ?object
34   }
35 }
36
37 DELETE
38 {
39   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
40   {
41     ?subject nco:hasPostalAddress ?object .
42   }
43 }
44 WHERE
45 {
46   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
47   {
48     <contact:225543300> nco:hasAffiliation [ nco:org ?subject ] .
49     ?subject nco:hasPostalAddress ?object .
50   }
51 }
52
53 DELETE
54 {
55   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
56   {
57     ?subject nco:org ?object .
58   }
59 }
60 WHERE
61 {
62   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
63   {
64     <contact:225543300> nco:hasAffiliation ?subject .
65     ?subject nco:org ?object .
66   }
67 }
68
69 DELETE
70 {
71   <mailto:andre@andrews.com> ?predicate ?object .
72 }
73 WHERE
74 {
75   <mailto:andre@andrews.com> ?predicate ?object .
76   FILTER(?predicate IN (nco:emailAddress)) .
77 }
78
79 DELETE
80 {
81   <mailto:andre.andrews@meego.com> ?predicate ?object .
82 }
83 WHERE
84 {
85   <mailto:andre.andrews@meego.com> ?predicate ?object .
86   FILTER(?predicate IN (nco:emailAddress)) .
87 }
88
89 DELETE
90 {
91   <urn:x-maemo-phone:voice:+4917212345> ?predicate ?object .
92 }
93 WHERE
94 {
95   <urn:x-maemo-phone:voice:+4917212345> ?predicate ?object .
96   FILTER(?predicate IN (nao:hasProperty, nco:phoneNumber, maemo:localPhoneNumber)) .
97 }
98
99 DELETE
100 {
101   <urn:x-maemo-phone:messagingcapable,mobile,voice:+4916134567> ?predicate ?object .
102 }
103 WHERE
104 {
105   <urn:x-maemo-phone:messagingcapable,mobile,voice:+4916134567> ?predicate ?object .
106   FILTER(?predicate IN (nao:hasProperty, nco:phoneNumber, maemo:localPhoneNumber)) .
107 }
108
109 # FIXME: this delete seems redundant for urn:x-maemo-phone:
110 DELETE
111 {
112   ?resource a nco:CarPhoneNumber, nco:BbsNumber, nco:PagerNumber, nco:VideoTelephoneNumber,
113               nco:MessagingNumber, nco:VoicePhoneNumber, nco:CellPhoneNumber, nco:FaxNumber,
114               nco:ModemNumber .
115 }
116 WHERE
117 {
118   ?resource a nco:PhoneNumber .
119   FILTER(?resource IN (<urn:x-maemo-phone:voice:+4917212345>,
120                        <urn:x-maemo-phone:messagingcapable,mobile,voice:+4916134567>)) .
121 }
122
123 # Delete the contact's properties so that we can update them nicely.
124 # Only nco:contactUID, nco:contactLocalUID and rdf:type must be preserved.
125 # =================================================================================================
126 DELETE
127 {
128   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
129   {
130     <contact:225543300> ?predicate ?object .
131   }
132 }
133 WHERE
134 {
135   # Restrict the graph to only remove our properties. It is an error if write contact properties
136   # that are handled by qtcontacts-tracker without putting them into our graph. Still other
137   # applications might want to attach properties we are not aware of.
138   # -----------------------------------------------------------------------------------------------
139   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
140   {
141     <contact:225543300> ?predicate ?object .
142     FILTER(?predicate NOT IN (rdf:type, nco:belongsToGroup, nco:contactUID)) .
143   }
144 }
145
146 # Ensure shared resources referenced by foreign key exist.
147 # =================================================================================================
148
149 INSERT
150 {
151   _:_ a nfo:FileDataObject, nie:InformationElement
152   ; nie:url "file:///home/user/.contacts/avatars/sleeping-bonobo.png"
153   .
154 }
155 WHERE
156 {
157   # FIXME: why do we still have an OPTIONAL here?
158   OPTIONAL
159   {
160     ?resource nie:url "file:///home/user/.contacts/avatars/sleeping-bonobo.png"
161     .
162   }
163
164   FILTER(!bound(?resource)) .
165 }
166
167 INSERT
168 {
169   _:_ a nfo:FileDataObject, nie:InformationElement
170   ; nie:url "file:///home/user/.contacts/avatars/crazy-banana.ogv"
171   .
172 }
173 WHERE
174 {
175   OPTIONAL
176   {
177     ?resource nie:url "file:///home/user/.contacts/avatars/crazy-banana.ogv"
178     .
179   }
180
181   FILTER(!bound(?resource)) .
182 }
183
184 INSERT
185 {
186   _:_ a nfo:FileDataObject, nie:DataObject
187   ; nie:url "file:///home/user/.contacts/avatars/boring-cube.png"
188   .
189 }
190 WHERE
191 {
192   OPTIONAL
193   {
194     ?resource nie:url "file:///home/user/.contacts/avatars/boring-cube.png"
195     .
196   }
197
198   FILTER(!bound(?resource)) .
199 }
200
201 INSERT
202 {
203   _:_ a nao:Tag, rdfs:Resource ;
204   nao:prefLabel "Knorke" .
205 }
206 WHERE
207 {
208   OPTIONAL
209   {
210     ?resource nao:prefLabel ?value .
211     FILTER(fn:lower-case("Knorke") = fn:lower-case(?value)) .
212   }
213
214   FILTER(!bound(?resource)) .
215 }
216
217 # Write new contact data
218 # =================================================================================================
219 INSERT
220 {
221   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
222   {
223     <contact:225543300>
224         rdf:type nco:PersonContact ;
225         nco:gender nco:gender-male ;
226         nco:photo ?personalAvatarImage ;
227         nco:video ?personalAvatarVideo ;
228         nco:nameHonorificPrefix "Sir" ;
229         nco:nameGiven "Andre" ;
230         nco:nameFamily "Andrews" ;
231         nco:hasAffiliation _:organization, _:homeAffiliation, _:workAffiliation ;
232         ncal:anniversary _:wedding ;
233         nco:hobby "fishing" ;
234         nao:hasTag ?knorkeTag ;
235         nao:hasProperty _:preferencesDetail ;
236         nie:contentLastModified "2010-05-04T09:30:00Z" ;
237         nie:contentCreated "2010-04-22T01:00:00Z" .
238
239     ?personalAvatarImage
240         rdf:type nie:InformationElement, nfo:FileDataObject ;
241         nie:url "file:///home/user/.contacts/avatars/sleeping-bonobo.png" .
242
243     ?personalAvatarVideo
244         rdf:type nie:InformationElement, nfo:FileDataObject ;
245         nie:url "file:///home/user/.contacts/avatars/crazy-banana.ogv" .
246
247     _:organization
248         rdf:type nco:Affiliation ;
249         nco:org _:organizationContact .
250
251     _:organizationContact
252         rdf:type nco:OrganizationContact, nco:Contact, nco:Role ;
253         nco:logo ?organizationLogo .
254
255     ?organizationLogo
256         rdf:type nie:DataObject, nfo:FileDataObject ;
257         nie:url "file:///home/user/.contacts/avatars/boring-cube.png" .
258
259     _:homeAffiliation
260         rdf:type nco:Affiliation ;
261         rdfs:label "Home" ;
262         nco:hasEmailAddress <mailto:andre@andrews.com> ;
263         nco:hasPhoneNumber <urn:x-maemo-phone:voice:+4917212345>,
264                            <urn:x-maemo-phone:messagingcapable,mobile,voice:+4916134567> ;
265         nco:url "http://andrews.com/" ;
266         nco:hasPostalAddress _:homeAddress .
267
268     <mailto:andre@andrews.com>
269         rdf:type nco:EmailAddress ;
270         nco:emailAddress "andre@andrews.com" .
271
272     _:workAffiliation
273         rdf:type nco:Affiliation ;
274         rdfs:label "Work" ;
275         nco:hasEmailAddress <mailto:andre.andrews@meego.com> ;
276         nco:hasPostalAddress _:workAddress .
277
278     <mailto:andre.andrews@meego.com>
279         rdf:type nco:EmailAddress ;
280         nco:emailAddress "andre.andrews@meego.com" .
281
282     <urn:x-maemo-phone:voice:+4917212345>
283         rdf:type nco:VoicePhoneNumber, nco:PhoneNumber ;
284         nco:phoneNumber "+4917212345" ;
285         maemo:localPhoneNumber "7212345" .
286
287     <urn:x-maemo-phone:messagingcapable,mobile,voice:+4916134567>
288         rdf:type nco:VoicePhoneNumber, nco:CellPhoneNumber, nco:MessagingNumber, nco:PhoneNumber ;
289         nco:phoneNumber "+4916134567" ;
290         maemo:localPhoneNumber "6134567" .
291
292     _:homeAddress
293         rdf:type maemo:PostalAddress, nco:DomesticDeliveryAddress, nco:PostalAddress ;
294         nco:country "Germany" ;
295         nco:locality "Berlin" ;
296         nco:streetAddress "Alexanderplatz 1" .
297
298     _:workAddress
299         rdf:type nco:ParcelDeliveryAddress, nco:PostalAddress ;
300         nco:country "Germany" ;
301         nco:locality "Berlin" ;
302         nco:streetAddress "Friedrichstrasse 105" .
303
304     _:wedding
305         rdf:type ncal:Event, ncal:UnionParentClass ;
306         ncal:uid "11223344" ;
307         ncal:dtstart _:weddingDate ;
308         ncal:description "Hochzeit" ;
309         ncal:categories "Wedding" .
310
311     _:weddingDate
312         rdf:type ncal:NcalDateTime ;
313         ncal:dateTime "2007-05-05T00:00:00Z" .
314
315     ?knorkeTag
316         rdf:type rdfs:Resource, nao:Tag ;
317         nao:prefLabel "Knorke" .
318
319     _:preferencesDetail
320         rdf:type nao:Property, nie:InformationElement ;
321         nao:propertyName "Preferences" ;
322         nao:hasProperty _:preferencesDetailFieldCar, _:preferencesDetailFieldColor .
323
324     _:preferencesDetailFieldCar
325         rdf:type nao:Property ;
326         nao:propertyName "Car" ;
327         nao:propertyValue "Tesla" .
328
329     _:preferencesDetailFieldColor
330         rdf:type nao:Property ;
331         nao:propertyName "Color" ;
332         nao:propertyValue "Blue" .
333   }
334 }
335 WHERE
336 {
337   ?personalAvatarImage nie:url "file:///home/user/.contacts/avatars/sleeping-bonobo.png" .
338   ?personalAvatarVideo nie:url "file:///home/user/.contacts/avatars/crazy-banana.ogv" .
339   ?organizationLogo nie:url "file:///home/user/.contacts/avatars/boring-cube.png" .
340
341   ?knorkeTag nao:prefLabel ?__1
342   FILTER((fn:lower-case(?__1) = fn:lower-case("Knorke"))) .
343 }
344
345 # Create a new UUID if he contact doesn't have one yet.
346 # =================================================================================================
347 INSERT
348 {
349     GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
350     {
351         <contact:225543300> nco:contactUID "<placeholder:guid>"
352     }
353 }
354 WHERE
355 {
356   FILTER(!(EXISTS
357     {
358       GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
359       {
360         <contact:225543300> nco:contactUID ?guid
361       }
362     }))
363 }
364
365 # Enforce proper sync target
366 # =================================================================================================
367 INSERT OR REPLACE
368 {
369   GRAPH <urn:uuid:08070f5c-a334-4d19-a8b0-12a3071bfab9>
370   {
371     <contact:225543300> nie:generator "addressbook"
372   }
373 }