index.html
83.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="EN" xml:lang="EN"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SPARQL 1.1 Protocol</title><style type="text/css">
@import url("local.css");
code { font-family: monospace; }
div.constraint,
div.issue,
div.note,
div.notice { margin-left: 2em; }
ol.enumar { list-style-type: decimal; }
ol.enumla { list-style-type: lower-alpha; }
ol.enumlr { list-style-type: lower-roman; }
ol.enumua { list-style-type: upper-alpha; }
ol.enumur { list-style-type: upper-roman; }
div.exampleInner pre { margin-left: 1em;
margin-top: 0em; margin-bottom: 0em}
div.exampleOuter {border: 4px double gray;
margin: 0em; padding: 0em}
div.exampleInner { background-color: #d5dee3;
border-top-width: 4px;
border-top-style: double;
border-top-color: #d3d3d3;
border-bottom-width: 4px;
border-bottom-style: double;
border-bottom-color: #d3d3d3;
padding: 4px; margin: 0em }
div.exampleWrapper { margin: 4px }
div.exampleHeader { font-weight: bold;
margin: 4px}
em.rfc2119 { text-transform: lowercase;
font-variant: small-caps;
font-style: normal; }
</style><link rel="stylesheet" type="text/css" href="http://www.w3.org/StyleSheets/TR/W3C-WD.css" /></head><body><div class="head"><p><a href="http://www.w3.org/"><img src="http://www.w3.org/Icons/w3c_home" alt="W3C" height="48" width="72" /></a></p>
<h1><a name="title" id="title"></a>SPARQL 1.1 Protocol</h1>
<h2><a name="w3c-doctype" id="w3c-doctype"></a>W3C Working Draft 05 January 2012</h2><dl><dt>This version:</dt><dd>
<a href="http://www.w3.org/TR/2012/WD-sparql11-protocol-20120105/">http://www.w3.org/TR/2012/WD-sparql11-protocol-20120105/</a>
</dd><dt>Latest version:</dt><dd>
<a href="http://www.w3.org/TR/sparql11-protocol/">http://www.w3.org/TR/sparql11-protocol/</a>
</dd><dt>Previous version:</dt><dd>
<a href="http://www.w3.org/TR/2010/WD-sparql11-protocol-20100126/">http://www.w3.org/TR/2010/WD-sparql11-protocol-20100126/</a>
</dd><dt>Editors:</dt><dd>Lee Feigenbaum, Cambridge Semantics <a href="mailto:lee@thefigtrees.net"><lee@thefigtrees.net></a></dd><dd>Gregory Todd Williams, Rensselaer Polytechnic Institute <a href="mailto:greg@evilfunhouse.com"><greg@evilfunhouse.com></a></dd><dd>Kendall Grant Clark, 1st Edition, Clark & Parsia LLC <a href="mailto:kendall@clarkparsia.com"><kendall@clarkparsia.com></a></dd><dd>Elias Torres, 1st Edition, IBM Corporation <a href="mailto:eliast@us.ibm.com"><eliast@us.ibm.com></a></dd></dl><p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> © 2012 <a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>®</sup> (<a href="http://www.csail.mit.edu/"><acronym title="Massachusetts Institute of Technology">MIT</acronym></a>, <a href="http://www.ercim.eu/"><acronym title="European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>, <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>, <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.</p></div><hr /><div>
<h2><a name="abstract" id="abstract"></a>Abstract</h2><p>
The SPARQL Protocol and RDF Query Language (<acronym title="SPARQL Protocol And RDF Query Language">SPARQL</acronym>) is a
query language and protocol for <a href="http://www.w3.org/RDF/">RDF</a>. This document specifies the SPARQL Protocol; it
describes a means for conveying SPARQL queries and updates to a SPARQL
processing service and returning the results via HTTP to the entity that requested them. This protocol was developed by
the <a href="http://www.w3.org/2009/sparql/wiki/Main_Page">W3C SPARQL Working Group</a>, part of
the <a href="http://www.w3.org/2001/sw/">Semantic Web Activity</a> as described in
the <a href="http://www.w3.org/2001/sw/Activity">activity statement</a> .
</p></div><div>
<h2><a name="status" id="status"></a>Status of this Document</h2><p>
<em>This section describes the status of this document at the time of its publication. Other documents may supersede this
document. A list of current W3C publications and the latest revision of this technical report can be found in
the <a href="http://www.w3.org/TR/">W3C technical reports index</a> at http://www.w3.org/TR/.</em>
</p>
<p>This document is a <a href="http://www.w3.org/2005/10/Process-20051014/tr.html#RecsWD">Last Call Working Draft</a>. Publication as a Last Call Working Draft indicates that the <a href="http://www.w3.org/2001/sw/DataAccess/">SPARQL Working Group</a> believes it has addressed all substantive issues and that the document is stable. The Working Group expects to advance this specification to <a href="http://www.w3.org/2004/02/Process-20040205/tr.html#RecsW3C">Recommendation Status</a>.</p><p>The end date of the Last Call review period is <strong>06 February 2012</strong>, i.e., comments on this working draft are due on or before this date.</p>
<p>Comments on this document should be sent to <a href="mailto:public-rdf-dawg-comments@w3.org">public-rdf-dawg-comments@w3.org</a>, a mailing list with a <a href="http://lists.w3.org/Archives/Public/public-rdf-dawg-comments">public archive</a>. Questions and comments about SPARQL that are not related to this specification, including extensions and features, can be discussed on the mailing list <a href="mailto:public-sparql-dev@w3.org">public-sparql-dev@w3.org</a>, (<a href="http://lists.w3.org/Archives/Public/public-sparql-dev">public archive</a>).</p>
<div class="wgNote">
The SPARQL WG welcomes reports of implementations, sent to the
comments address. If we gather sufficient evidence of
interoperable implementations, the group may request to skip its
<a href="http://www.w3.org/2005/10/Process-20051014/tr#cfi">Call
for Implementations (Candidate Recommendation)</a> drafts and
have the next round of publications be <a href="http://www.w3.org/2005/10/Process-20051014/tr#cfr">Proposed Recommendations</a>.
</div>
<p>Publication as a Working Draft does not imply endorsement by the W3C Membership.
This is a draft document and may be updated, replaced or obsoleted by other documents at any time.
It is inappropriate to cite this document as other than work in progress.</p>
<p>The set of SPARQL documents comprises:</p><ul><li><a href="http://www.w3.org/TR/sparql11-query/">SPARQL 1.1 Query</a></li><li><a href="http://www.w3.org/TR/sparql11-update/">SPARQL 1.1 Update</a></li><li>SPARQL 1.1 Protocol for RDF (this document)</li><li><a href="http://www.w3.org/TR/sparql11-http-rdf-update/">SPARQL 1.1 Graph Store HTTP Protocol</a></li><li><a href="http://www.w3.org/TR/sparql11-entailment/">SPARQL 1.1 Entailment Regimes</a></li><li><a href="http://www.w3.org/TR/sparql11-service-description/">SPARQL 1.1 Service Description</a></li><li><a href="http://www.w3.org/TR/sparql11-federated-query/">SPARQL 1.1 Federated Query</a></li><li><a href="http://www.w3.org/2009/sparql/docs/tests/">SPARQL 1.1 Conformance Tests</a></li>
<li><a href="http://www.w3.org/TR/sparql11-results-json/">SPARQL 1.1 Query Results JSON Format</a></li><li><a href="http://www.w3.org/TR/rdf-sparql-XMLres/">SPARQL Query Results XML Format</a></li></ul>
<p>This document was produced by the <a href="http://www.w3.org/2001/sw/DataAccess/">SPARQL Working Group</a>, which is part of the <a href="http://www.w3.org/2001/sw/Activity">W3C Semantic Web Activity</a>.</p>
<p>This document was produced by a group operating under the <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 W3C Patent Policy</a>. W3C maintains a <a rel="disclosure" href="http://www.w3.org/2004/01/pp-impl/35463/status">public list of any patent disclosures</a> made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section 6 of the W3C Patent Policy</a>.</p><p>Significant changes since the previously published Working Draft are:</p><ul><li>Defined the SPARQL Protocol as an HTTP-only protocol, without reference to WSDL</li><li>Added definitions for the Update operation.</li><li>Added faults for the Update operation.</li></ul>
<div class="wgNote">
At Risk: The SPARQL Working Group is requiring conformant SPARQL Protocol services to implement all forms of any operations implemented. The Working Gr
oup has agreed to mark this requirement "at risk", and the conformance requirement may be changed based on implementation experience.
</div>
</div><div class="toc">
<h2><a name="contents" id="contents"></a>Table of Contents</h2><p class="toc">1 <a href="#intro">Introduction</a><br />
1.1 <a href="#conventions">Document Conventions</a><br />
1.2 <a href="#terminology">Terminology</a><br />
2 <a href="#protocol">SPARQL Protocol Operations</a><br />
2.1 <a href="#query-operation">query operation</a><br />
2.1.1 <a href="#query-via-get">query via GET</a><br />
2.1.2 <a href="#query-via-post-urlencoded">query via POST with URL-encoded parameters</a><br />
2.1.3 <a href="#query-via-post-direct">query via POST directly</a><br />
2.1.4 <a href="#dataset">Specifying an RDF Dataset</a><br />
2.1.5 <a href="#conneg">Accepted Response Formats</a><br />
2.1.6 <a href="#query-success">Success Responses</a><br />
2.1.7 <a href="#query-failure">Failure Responses</a><br />
2.2 <a href="#update-operation">update operation</a><br />
2.2.1 <a href="#update-via-post-urlencoded">update via POST with URL-encoded parameters</a><br />
2.2.2 <a href="#update-via-post-direct">update via POST directly</a><br />
2.2.3 <a href="#update-dataset">Specifying an RDF Dataset</a><br />
2.2.4 <a href="#update-success">Success Responses</a><br />
2.2.5 <a href="#update-failure">Failure Responses</a><br />
2.3 <a href="#base-iri">Determining the Base IRI</a><br />
3 <a href="#examples">Example SPARQL Protocol Requests (informative)</a><br />
3.1 <a href="#query-bindings-http-examples">Examples of SPARQL Query</a><br />
3.1.1 <a href="#select-svcsupplied">SELECT with service-supplied RDF Dataset</a><br />
3.1.2 <a href="#select-simple">SELECT with simple RDF Dataset</a><br />
3.1.3 <a href="#construct-simple">CONSTRUCT with simple RDF
dataset and HTTP content negotiation</a><br />
3.1.4 <a href="#ask-simple">ASK with simple RDF Dataset</a><br />
3.1.5 <a href="#describe-simple">DESCRIBE with simple RDF Dataset</a><br />
3.1.6 <a href="#select-complex">SELECT with complex RDF Dataset</a><br />
3.1.7 <a href="#select-queryonly"> SELECT with query-only RDF Dataset</a><br />
3.1.8 <a href="#select-ambiguous">SELECT with ambiguous RDF Dataset</a><br />
3.1.9 <a href="#select-malformed"> SELECT with malformed query fault</a><br />
3.1.10 <a href="#select-refused"> SELECT with query request refused fault</a><br />
3.1.11 <a href="#select-longpost">Long SELECT query using POST with URL encoding</a><br />
3.1.12 <a href="#select-longpost-direct">Long SELECT query using direct POST</a><br />
3.1.13 <a href="#select-kanji">SELECT with internationalization</a><br />
3.2 <a href="#update-bindings-http-examples">Examples of SPARQL Update</a><br />
3.2.1 <a href="#update-urlencoded-simple">UPDATE using URL-encoded parameters</a><br />
3.2.2 <a href="#update-direct-simple">UPDATE using POST directly</a><br />
3.2.3 <a href="#update-direct-simple-dataset">UPDATE specifying dataset and using POST directly</a><br />
3.2.4 <a href="#update-urlencoded-multi">Multi-operation UPDATE using URL-encoded parameters</a><br />
3.2.5 <a href="#update-urlencoded-multi-dataset">Multi-operation UPDATE specifying dataset and using URL-encoded parameters</a><br />
3.2.6 <a href="#update-direct-multi-dataset">Multi-operation UPDATE specifying dataset and using POST directly</a><br />
4 <a href="#policy">Policy Considerations</a><br />
4.1 <a href="#policy-security">Security</a><br />
5 <a href="#conformance">Conformance</a><br />
6 <a href="#changes">Changes Since Previous Recommendation (Informative)</a><br />
</p>
<h3><a name="appendices" id="appendices"></a>Appendices</h3><p class="toc">A <a href="#sec-bibliography">References</a><br />
A.1 <a href="#sec-existing-stds">Normative References</a><br />
A.2 <a href="#sec-other-references">Other References</a><br />
B <a href="#sec-cvsLog">CVS History</a><br />
</p></div><hr /><div class="body"><div class="div1">
<h2><a name="intro" id="intro"></a>1 Introduction</h2><p>
This document describes the SPARQL 1.1 Protocol, a means of
conveying SPARQL queries and updates from clients to SPARQL processors.
The SPARQL Protocol has been designed for compatibility with the <a href="http://www.w3.org/TR/sparql11-query/">SPARQL 1.1 Query
Language</a> [<a href="#sparql">SPARQL</a>] and with the <a href="http://www.w3.org/TR/sparql11-update/">SPARQL 1.1
Update</a> language for RDF. This document is
primarily intended for software developers interested in implementing
SPARQL query and update services and clients.
</p><p>
The SPARQL Protocol consists of two HTTP
operations: a <a href="#query-operation">query operation</a> for performing SPARQL Query
Language queries and an <a href="#update-operation">update operation</a> for performing
SPARQL Update Language requests. SPARQL Protocol clients send HTTP
requests to SPARQL Protocol services that handle the request and send
HTTP responses back to the originating client.
</p><p>
A separate document describes the <a href="http://www.w3.org/TR/sparql11-http-rdf-update/">SPARQL 1.1 Graph Store HTTP Protocol</a>
which describes the use of HTTP operations for the purpose of managing a collection of graphs in the REST architectural style.
</p><div class="div2">
<h3><a name="conventions" id="conventions"></a>1.1 Document Conventions</h3><p>
When this document uses the words <strong>must</strong>,
<strong>must not</strong>, <strong>should</strong>, <strong>should not</strong>,
<strong>may</strong> and <strong>recommended</strong>, and the words appear as
emphasized text, they must be interpreted as described in
<a href="http://www.faqs.org/rfcs/rfc2119.html">RFC 2119</a> [<a href="#rfc2119">RFC2119</a>].
</p></div><div class="div2">
<h3><a name="terminology" id="terminology"></a>1.2 Terminology</h3><dl>
<dt>SPARQL Protocol client</dt>
<dd>An HTTP client (as defined by <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec1.html#sec1.3">RFC 2616</a> [<a href="#rfc2616">RFC2616</a>]) that sends HTTP requests for SPARQL
Protocol operations. (Also known as: <em>client</em>)</dd>
<dt>SPARQL Protocol service</dt>
<dd>An HTTP server that services HTTP requests and sends back HTTP
responses for SPARQL Protocol operations. The URI at which a SPARQL Protocol
service listens for requests is generally known as a SPARQL endpoint.
(Also known as: <em>service</em>)</dd>
<dt>SPARQL endpoint</dt>
<dd>The URI at which a SPARQL Protocol service listens for requests
from SPARQL Protocol clients.</dd>
<dt>SPARQL Protocol operation</dt>
<dd>An HTTP request and response that conform to the protocol defined
in this document.</dd>
<dt>RDF Dataset</dt>
<dd>A collection of a default graph and zero or more named graphs, as
defined by the <a href="http://www.w3.org/TR/sparql11-query/#rdfDataset">SPARQL 1.1 Query Language</a>.</dd>
</dl></div></div><div class="div1">
<h2><a name="protocol" id="protocol"></a>2 SPARQL Protocol Operations</h2><p>
The SPARQL Protocol consists of two operations: query and update.
A protocol operation defines combinations of:
</p><ul><li>The HTTP method by which the request is sent.</li><li>The HTTP query string parameters included in the HTTP request URI.</li><li>The message content included in the HTTP request body.</li><li>The message content included in the HTTP response body.</li></ul><p> The SPARQL 1.1 Protocol is built on top of HTTP. All HTTP requirements
for requests and responses <strong>must</strong> be followed.</p><div class="div2">
<h3><a name="query-operation" id="query-operation"></a>2.1 <code>query</code> operation</h3><p>
The <code>query</code> operation is used to send a SPARQL query
to a service and receive the results of the query. The query
operation <strong>MUST</strong> be invoked with either the HTTP
GET or HTTP POST method. Client requests for this operation <strong>must</strong> include
exactly one SPARQL query string (parameter name:
<code>query</code>) and <strong>may</strong> include
zero or more default graph URIs (parameter name:
<code>default-graph-uri</code>) and named graph URIs (parameter
name: <code>named-graph-uri</code>). The
response to a query request is either the <a href="http://www.w3.org/TR/rdf-sparql-XMLres/">SPARQL XML Results
Format</a>, the <a href="http://www.w3.org/TR/sparql11-results-json/">SPARQL JSON Results Format</a>, the <a href="http://www.w3.org/TR/sparql11-results-csv-tsv/">SPARQL CSV/TSV Results Format</a>, or an RDF
serialization, depending on the <a href="http://www.w3.org/TR/sparql11-query/#QueryForms">query form</a> [<a href="#sparql">SPARQL</a>] and <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html">content
negotiation</a> [<a href="#rfc2616">RFC2616</a>].
</p><a name="query-summary" id="query-summary"></a><table style="margin-left: auto; margin-right: auto; border-color: rgb(0, 0, 0); border-collapse: collapse;" border="1" cellpadding="5"><tr><th> </th><th>HTTP Method</th><th>Query String Parameters</th><th>Request Content Type</th><th>Request Message Body</th></tr><tr><th>query via GET</th><td>GET</td><td><code>query</code> (exactly 1)<br />
<code>default-graph-uri</code> (0 or more)<br />
<code>named-graph-uri</code> (0 or more)</td><td>None</td><td>None</td></tr><tr><th>query via URL-encoded POST</th><td>POST</td><td>None</td><td><code>application/x-www-url-form-urlencoded</code></td><td>URL-encoded, ampersand-separated query parameters.<br />
<code>query</code> (exactly 1)<br />
<code>default-graph-uri</code> (0 or more)<br />
<code>named-graph-uri</code> (0 or more)</td></tr><tr><th>query via POST directly</th><td>POST</td><td><code>default-graph-uri</code> (0 or more)<br />
<code>named-graph-uri</code> (0 or more)</td><td><code>application/sparql-query</code></td><td>Unencoded SPARQL query string</td></tr></table><p>
The <code>query</code> request's parameters <strong>must</strong> be sent
according to one of these three options:
</p><div class="div3">
<h4><a name="query-via-get" id="query-via-get"></a>2.1.1 <code>query</code> via GET</h4><p>Protocol clients <strong>may</strong> send protocol requests via
the HTTP GET method. When using the GET method, clients <strong>must</strong> URL <a href="http://www.ietf.org/rfc/rfc3986.txt">percent encode</a> all parameters and include them as <a href="http://www.ietf.org/rfc/rfc3986.txt">query parameter</a> strings with the names given above [<a href="#rfc3986">RFC3986</a>].</p><p>
HTTP query string parameters <strong>must</strong> be separated with
the ampersand (<code>&</code>) character. Clients may include
the query string parameters in any order.
</p><p>The HTTP request <strong>MUST NOT</strong> include a message body.</p></div><div class="div3">
<h4><a name="query-via-post-urlencoded" id="query-via-post-urlencoded"></a>2.1.2 <code>query</code> via POST with URL-encoded parameters</h4><p>
Protocol clients <strong>may</strong> send protocol requests via
the HTTP POST method by URL encoding the parameters. When using
this method, clients <strong>must</strong> URL <a href="http://www.ietf.org/rfc/rfc3986.txt">percent encode</a> [<a href="#rfc3986">RFC3986</a>] all
parameters and include them as parameters within the request body
via the <code>application/x-www-form-urlencoded</code> media type
with the name given above.
Parameters <strong>must</strong> be separated with
the ampersand (<code>&</code>) character. Clients may include
the parameters in any order. The content type header of the HTTP
request <strong>must</strong> be set to
<code>application/x-www-url-form-urlencoded</code>.
</p></div><div class="div3">
<h4><a name="query-via-post-direct" id="query-via-post-direct"></a>2.1.3 <code>query</code> via POST directly</h4><p>
Protocol clients <strong>may</strong> send protocol requests via
the HTTP POST method by including the query directly and unencoded
as the HTTP request message body. When using this approach, clients
<strong>must</strong> include the SPARQL query string, unencoded,
and nothing else as the message body of the request. Clients
<strong>must</strong> set the content type header of the HTTP
request to <code>application/sparql-query</code>. Clients
<strong>may</strong> include the optional
<code>default-graph-uri</code> and <code>named-graph-uri</code>
parameters as HTTP query string parameters in the request URI. Note that UTF-8 is the only valid charset here.
</p></div><div class="div3">
<h4><a name="dataset" id="dataset"></a>2.1.4 Specifying an RDF Dataset</h4><p>A SPARQL query is executed against an <a href="http://www.w3.org/TR/sparql11-query/#rdfDataset">RDF
Dataset</a>. The RDF Dataset for a query may be specified either via the
<code>default-graph-uri</code> and <code>named-graph-uri</code>
parameters in the SPARQL Protocol or in the SPARQL query string using
the <code>FROM</code> and <code>FROM NAMED</code>
keywords.
If different RDF Datasets are specified in both the protocol request and the
SPARQL query string, then the SPARQL service <strong>must</strong>
execute the query using the RDF Dataset given in the protocol request.</p><p>Note that a service <strong>may</strong> reject a query with HTTP response code
400 if the service does not allow protocol clients to specify the RDF Dataset.</p><p>If an RDF Dataset is not specified in either the protocol request
or the SPARQL query string, then implementations <strong>may</strong>
execute the query against an implementation-defined default RDF
dataset.</p></div><div class="div3">
<h4><a name="conneg" id="conneg"></a>2.1.5 Accepted Response Formats</h4><p>Protocol clients <strong>should</strong> use HTTP <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html">content
negotiation</a> [<a href="#rfc2616">RFC2616</a>] to request response formats that the client can
consume. See below for more on potential response formats.</p></div><div class="div3">
<h4><a name="query-success" id="query-success"></a>2.1.6 Success Responses</h4><p>
The SPARQL Protocol uses the response status codes defined in HTTP to
indicate the success or failure of an operation. Consult the <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">HTTP
specification</a> [<a href="#rfc2616">RFC2616</a>] for detailed definitions of each status code.
While a protocol service <strong>should</strong> use a 2XX HTTP
response code for a successful query, it <strong>may</strong>
choose instead to use a 3XX response code as per HTTP.
</p><p>The response body of a successful query operation with a 2XX response is either:</p><ul><li>a SPARQL Results Document in <a href="http://www.w3.org/TR/rdf-sparql-XMLres/">XML</a>, <a href="http://www.w3.org/TR/sparql11-results-json/">JSON</a>, or <a href="http://www.w3.org/TR/sparql11-results-csv-tsv/">CSV/TSV</a> format (for SPARQL
Query forms <a href="http://www.w3.org/2001/sw/DataAccess/rq23/#select">SELECT</a>
and <a href="http://www.w3.org/2001/sw/DataAccess/rq23/#ask">ASK</a>); or,</li><li>an RDF graph [<a href="#rdf-concepts">RDF-CONCEPTS</a>] serialized, for example, in the <a href="http://www.w3.org/TR/rdf-syntax-grammar/">RDF/XML syntax</a> [<a href="#rdf-xml">RDF-XML</a>], or an equivalent RDF graph serialization, for SPARQL Query forms <a href="http://www.w3.org/2001/sw/DataAccess/rq23/#describe">DESCRIBE</a> and <a href="http://www.w3.org/2001/sw/DataAccess/rq23/#construct">CONSTRUCT</a>).</li></ul><p>The content type of the response to a successful query operation must be the media type defined for the format of the response body.</p></div><div class="div3">
<h4><a name="query-failure" id="query-failure"></a>2.1.7 Failure Responses</h4><p>The HTTP response codes applicable to an unsuccessful query operation include:</p><ul><li>400 if the SPARQL query supplied in the request is not a legal sequence of characters in the language defined by the SPARQL grammar; or,</li><li>500 if the service fails to execute the query. SPARQL
Protocol services may also return a 500 response code if they
refuse to execute a query. This
response does not indicate whether the server may or may not
process a subsequent, identical request or requests. </li></ul><p>A protocol service <strong>may</strong> use other 4XX or 5XX HTTP response codes for other failure conditions, as per HTTP.</p></div></div><div class="div2">
<h3><a name="update-operation" id="update-operation"></a>2.2 <code>update</code> operation</h3><p>
The <code>update</code> operation is used to send a SPARQL update
request to a service. The
update operation <strong>must</strong> be invoked using the HTTP POST
method.
Client requests for this operation <strong>must</strong> include
exactly one SPARQL update request string (parameter name:
<code>update</code>) and <strong>may</strong> include
zero or more default graph URIs (parameter name:
<code>using-graph-uri</code>) and named graph URIs (parameter
name: <code>using-named-graph-uri</code>). The
response to an update request indicates success or failure of the
request via HTTP response status code.
</p><a name="update-summary" id="update-summary"></a><table style="margin-left: auto; margin-right: auto; border-color: rgb(0, 0, 0); border-collapse: collapse;" border="1" cellpadding="5"><tr><th> </th><th>HTTP Method</th><th>Query String Parameters</th><th>Request Content Type</th><th>Request Message Body</th></tr><tr><th>update via URL-encoded POST</th><td>POST</td><td>None</td><td><code>application/x-www-url-form-urlencoded</code></td><td>URL-encoded, ampersand-separated query parameters.<br />
<code>update</code> (exactly 1)<br />
<code>using-graph-uri</code> (0 or more)<br />
<code>using-named-graph-uri</code> (0 or more)</td></tr><tr><th>update via POST directly</th><td>POST</td><td><code>using-graph-uri</code> (0 or more)<br />
<code>using-named-graph-uri</code> (0 or more)</td><td><code>application/sparql-update</code></td><td>Unencoded SPARQL update request string</td></tr></table><p>
The <code>update</code> request's parameters <strong>must</strong> be sent
according to one of these two options:
</p><div class="div3">
<h4><a name="update-via-post-urlencoded" id="update-via-post-urlencoded"></a>2.2.1 <code>update</code> via POST with URL-encoded parameters</h4><p>
Protocol clients <strong>may</strong> send update protocol requests via
the HTTP POST method by URL encoding the parameters. When using
this approach, clients <strong>must</strong> URL <a href="http://www.ietf.org/rfc/rfc3986.txt">percent encode</a> [<a href="#rfc3986">RFC3986</a>] all
parameters and include them as parameters within the request body
via the <code>application/x-www-form-urlencoded</code> media type
with the name given above.
Parameters <strong>must</strong> be separated with
the ampersand (<code>&</code>) character. Clients may include
the parameters in any order. The content type header of the HTTP
request <strong>must</strong> be set to
<code>application/x-www-url-form-urlencoded</code>.
</p></div><div class="div3">
<h4><a name="update-via-post-direct" id="update-via-post-direct"></a>2.2.2 <code>update</code> via POST directly</h4><p>
Protocol clients <strong>may</strong> send update protocol requests via
the HTTP POST method by including the update request directly and unencoded
as the HTTP request message body. When using this approach, clients
<strong>must</strong> include the SPARQL update request string, unencoded,
and nothing else as the message body of the request. Clients
<strong>must</strong> set the content type header of the HTTP
request to <code>application/sparql-update</code>. Clients
<strong>may</strong> include the optional
<code>using-graph-uri</code> and <code>using-named-graph-uri</code>
parameters as HTTP query string parameters in the request URI.
</p></div><div class="div3">
<h4><a name="update-dataset" id="update-dataset"></a>2.2.3 Specifying an RDF Dataset</h4><p>SPARQL Update requests are executed against a Graph Store, a mutable container of RDF graphs managed by a SPARQL service. The <code>WHERE</code> clause of a SPARQL update <a href="http://www.w3.org/TR/sparql11-update/#deleteInsert">DELETE/INSERT operation</a> [<a href="#update">UPDATE</a>]
matches against data in an <a href="http://www.w3.org/TR/sparql11-query/#rdfDataset">RDF
Dataset</a>, which is a subset of the Graph Store. The RDF Dataset for an update operation may be specified
either in the operation string itself
using the <code>USING</code>, <code>USING NAMED</code>, and/or <code>WITH</code>
keywords, or it may be specified via the
<code>using-graph-uri</code> and <code>using-named-graph-uri</code>
parameters.</p><p>It is an error to supply the <code>using-graph-uri</code> or <code>using-named-graph-uri</code> parameters
when using this protocol to convey a SPARQL 1.1 Update request that contains an operation that uses the
<code>USING</code>, <code>USING NAMED</code>, or <code>WITH</code> clause.</p><p>A SPARQL Update processor should treat each occurrence of the <code>using-graph-uri=g</code> parameter in an
update protocol operation as if a <code>USING <g></code> clause were included for every operation in the SPARQL 1.1
Update request. Similarly, a SPARQL Update processor should treat each occurrence of the <code>using-named-graph-uri=g</code>
parameter in an update protocol operation as if a <code>USING NAMED <g></code> clause were included for every operation in
the SPARQL 1.1 Update request.</p></div><div class="div3">
<h4><a name="update-success" id="update-success"></a>2.2.4 Success Responses</h4><p>
The SPARQL Protocol uses the response status codes defined in HTTP to
indicate the success or failure of an operation. Consult the <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">HTTP
specification</a> [<a href="#rfc2616">RFC2616</a>] for detailed definitions of each status code.
While a protocol service <strong>should</strong> use a 2XX HTTP
response code for an update request that is successfully processed,
it <strong>may</strong>
choose instead to use a 3XX response code as per HTTP.
</p><p>The response body of a successful update request is
implementation defined. Implementations <strong>may</strong> use
HTTP content negotiation to provide both human-readable and
machine-processable information about the completed update
request.</p></div><div class="div3">
<h4><a name="update-failure" id="update-failure"></a>2.2.5 Failure Responses</h4><p>The HTTP response code for an unsuccessful update request should be:</p><ul><li>400 if the SPARQL update request string is not a legal sequence of
characters in the language defined by the SPARQL Update grammar; or,</li><li>500 if the service fails to execute the update request. SPARQL
Protocol services may also return a 500 response code if they
refuse to execute an update request. This
response does not indicate whether the server may or may not
process a subsequent, identical request or requests.</li></ul><p>The response body of a failed update request is
implementation defined. Implementations <strong>may</strong> use
HTTP content negotiation to provide human-readable or
machine-processable (or both) information about the failed update
request.</p><p>A protocol service <strong>may</strong> use other 4XX or 5XX HTTP response codes for other failure conditions, as per HTTP.</p></div></div><div class="div2">
<h3><a name="base-iri" id="base-iri"></a>2.3 Determining the Base IRI</h3><p>The <code>BASE</code> keyword in a SPARQL query or a SPARQL
update request string defines the Base IRI used to resolve relative
IRIs per <a href="http://www.ietf.org/rfc/rfc3986.txt">Uniform
Resource Identifier (URI): Generic Syntax</a> [<a href="#rfc3986">RFC3986</a>] section 5.1.1, "Base URI Embedded in
Content".
The SPARQL Protocol
does not dereference query URIs so section 5.1.3 does not apply.
Finally, per section 5.1.4, SPARQL Protocol services <strong>must</strong> define their
own base URI, which <strong>may</strong> be the service endpoint.</p></div></div><div class="div1">
<h2><a name="examples" id="examples"></a>3 Example SPARQL Protocol Requests (informative)</h2><p>The following HTTP trace examples illustrate invocation of the
<code>query</code> and <code>update</code> operations under several different scenarios. Some example traces are abstracted from complete HTTP traces in these ways:</p><ol><li>In some examples the string "<i>EncodedQuery</i>" represents the URL-encoded string equivalent of the SPARQL query string given in the example; the string "<i>UnencodedQuery</i>" represents the exact SPARQL query string given in the example without any encoding.</li><li>For <code>query</code> operation examples, only partial response bodies, containing the query results, are displayed.</li></ol><div class="div2">
<h3><a name="query-bindings-http-examples" id="query-bindings-http-examples"></a>3.1 Examples of SPARQL Query</h3><div class="div3">
<h4><a name="select-svcsupplied" id="select-svcsupplied"></a>3.1.1 SELECT with service-supplied RDF Dataset</h4><p>This SPARQL query</p><div id="div-select-svcsupplied"><pre class="query">PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?book ?who
WHERE { ?book dc:creator ?who }</pre><p>is conveyed via HTTP GET to the SPARQL query
service, <tt>http://www.example/sparql/</tt>, as illustrated in this
HTTP trace:</p><pre class="req">GET /sparql/?<b>query</b>=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%20%0ASELECT%20%3Fbook%20%3Fwho%20%0AWHERE%20%7B%20%3Fbook%20dc%3Acreator%20%3Fwho%20%7D%0A HTTP/1.1
Host: www.example
User-agent: my-sparql-client/0.1</pre><p>That query against the service-supplied RDF Dataset, executed by
that SPARQL query service, returns the following query result:</p><pre class="resp">HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="book"/>
<variable name="who"/>
</head>
<results>
<result>
<binding name="book"><uri>http://www.example/book/book5</uri></binding>
<binding name="who"><bnode>r29392923r2922</bnode></binding>
</result>
...
</sparql> </pre></div></div><div class="div3">
<h4><a name="select-simple" id="select-simple"></a>3.1.2 SELECT with simple RDF Dataset</h4><p>This SPARQL query</p><div id="div-select-simple"><pre class="query">PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?book ?who
WHERE { ?book dc:creator ?who }</pre><p>is conveyed to the SPARQL query
service, <tt>http://www.other.example/sparql/</tt>, as illustrated in
this HTTP trace:</p><pre class="req">GET /sparql/?<b>query</b>=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%20%0ASELECT%20%3Fbook%20%3Fwho%20%0AWHERE%20%7B%20%3Fbook%20dc%3Acreator%20%3Fwho%20%7D%0A&<b>default-graph-uri</b>=http%3A%2F%2Fwww.other.example%2Fbooks HTTP/1.1
Host: www.other.example
User-agent: my-sparql-client/0.1
</pre><p>That query — against the RDF Dataset identified by the value
of the <code>default-graph-uri</code>
parameter, <tt>http://www.other.example/books</tt> — executed
by that SPARQL query service, returns the following query
result:</p><pre class="resp">HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="book"/>
<variable name="who"/>
</head>
...
</sparql> </pre></div></div><div class="div3">
<h4><a name="construct-simple" id="construct-simple"></a>3.1.3 CONSTRUCT with simple RDF
dataset and HTTP content negotiation</h4><p>This SPARQL query</p><div id="div-construct-simple"><pre class="query">PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX myfoaf: <http://www.example/jose/foaf.rdf#>
CONSTRUCT { myfoaf:jose foaf:depiction <http://www.example/jose/jose.jpg>.
myfoaf:jose foaf:schoolHomepage <http://www.edu.example/>.
?s ?p ?o.}
WHERE { ?s ?p ?o. myfoaf:jose foaf:nick "Jo".
FILTER ( ! (?s = myfoaf:kendall && ?p = foaf:knows && ?o = myfoaf:edd )
&& ! ( ?s = myfoaf:julia && ?p = foaf:mbox && ?o = <mailto:julia@mail.example> )
&& ! ( ?s = myfoaf:julia && ?p = rdf:type && ?o = foaf:Person))
}</pre><p>is conveyed to the SPARQL query
service, <tt>http://www.example/sparql/</tt>, as illustrated in this
HTTP trace:</p><pre class="req">GET /sparql/?<b>query</b>=<i>EncodedQuery</i>&<b>default-graph-uri</b>=http%3A%2F%2Fwww.example%2Fjose-foaf.rdf HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
Accept: text/turtle, application/rdf+xml</pre><p>With the response illustrated here:</p><pre class="resp">HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:11 GMT
Server: Apache/1.3.29 (Unix)
Connection: close
Content-Type: text/turtle
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix myfoaf: <http://www.example/jose/foaf.rdf#>.
myfoaf:jose foaf:name "Jose Jimeñez";
foaf:depiction <http://www.example/jose/jose.jpg>;
foaf:nick "Jo";
...</pre><p><em>Note:</em> registration for the media type <tt>text/turtle</tt> was started but not completed at the time of this
publication. Please see <a href="http://www.w3.org/TeamSubmission/turtle">http://www.w3.org/TeamSubmission/turtle</a> for the final
registered media type for the Turtle language.</p></div></div><div class="div3">
<h4><a name="ask-simple" id="ask-simple"></a>3.1.4 ASK with simple RDF Dataset</h4><p>This SPARQL query</p><div id="div-ask-simple"><pre class="query">PREFIX dc: <http://purl.org/dc/elements/1.1/>
ASK WHERE { ?book dc:creator "J.K. Rowling"}</pre><p>is conveyed to the SPARQL query
service, <tt>http://www.example/sparql/</tt>, as illustrated in this
HTTP trace:</p><pre class="req">GET /sparql/?<b>query</b>=<i>EncodedQuery</i>&<b>default-graph-uri</b>=http%3A%2F%2Fwww.example%2Fbooks HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
</pre><p>With the response illustrated here:</p><pre class="resp">HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head></head>
<boolean>true</boolean>
</sparql></pre></div></div><div class="div3">
<h4><a name="describe-simple" id="describe-simple"></a>3.1.5 DESCRIBE with simple RDF Dataset</h4><p>This SPARQL query</p><div id="div-describe-simple"><pre class="query">PREFIX books: <http://www.example/book/>
DESCRIBE books:book6</pre><p>is conveyed to the SPARQL query
service, <tt>http://www.example/sparql/</tt>, as illustrated here:</p><pre class="req">GET /sparql/?<b>query</b>=<i>EncodedQuery</i>&<b>default-graph-uri</b>=http%3A%2F%2Fwww.example%2Fbooks HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1</pre><p>With the response illustrated here:</p><pre class="resp">HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/rdf+xml
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:books="http://www.example/book/"
xmlns:dc="http://purl.org/dc/elements/1.1/" >
<rdf:Description rdf:about="http://www.example/book/book6">
<dc:title>Example Book #6 </dc:title>
</rdf:Description>
</rdf:RDF></pre></div></div><div class="div3">
<h4><a name="select-complex" id="select-complex"></a>3.1.6 SELECT with complex RDF Dataset</h4><p>This SPARQL query</p><div id="div-select-complex"><pre class="query">PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?who ?g ?mbox
WHERE { ?g dc:publisher ?who .
GRAPH ?g { ?x foaf:mbox ?mbox }
}</pre><p>is conveyed to the SPARQL query service, http://www.example/sparql/,
as illustrated here (with line breaks for legibility):</p><pre class="req">GET /sparql/?<b>query</b>=<i>EncodedQuery</i>&<b>default-graph-uri</b>=http%3A%2F%2Fwww.example%2Fpublishers
&<b>default-graph-uri</b>=http%3A%2F%2Fwww.example%2Fmorepublishers&<b>named-graph-uri</b>=http%3A%2F%2Fyour.example%2Ffoaf-alice
&<b>named-graph-uri</b>=http%3A%2F%2Fwww.example%2Ffoaf-bob&<b>named-graph-uri</b>=http%3A%2F%2Fwww.example%2Ffoaf-susan
&<b>named-graph-uri</b>=http%3A%2F%2Fthis.example%2Fjohn%2Ffoaf
Host: www.example
User-agent: sparql-client/0.1</pre><p>With the response illustrated here:</p><pre class="resp">HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="who"/>
<variable name="g"/>
<variable name="mbox"/>
</head>
...
</sparql></pre></div></div><div class="div3">
<h4><a name="select-queryonly" id="select-queryonly"></a>3.1.7 SELECT with query-only RDF Dataset</h4><p>This SPARQL query</p><div id="div-select-queryonly"><pre class="query">PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?who ?g ?mbox
FROM <http://www.example/publishers>
FROM NAMED <http://www.example/alice>
FROM NAMED <http://www.example/bob>
WHERE { ?g dc:publisher ?who .
GRAPH ?g { ?x foaf:mbox ?mbox }
}</pre><p>is conveyed to the SPARQL query service, <tt>http://www.example/sparql/</tt>, as illustrated in this
HTTP trace:</p><pre class="req">GET /sparql/?<b>query</b>=<i>EncodedQuery</i> HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1</pre><p>With the response illustrated here:</p><pre class="resp">HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
...
</sparql></pre></div></div><div class="div3">
<h4><a name="select-ambiguous" id="select-ambiguous"></a>3.1.8 SELECT with ambiguous RDF Dataset</h4><div id="div-select-ambiguous"><p>This SPARQL query</p><pre class="query">PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?who ?g ?mbox
FROM <http://www.example/publishers>
FROM NAMED <http://www.example/john>
FROM NAMED <http://www.example/susan>
WHERE { ?g dc:publisher ?who .
GRAPH ?g { ?x foaf:mbox ?mbox }
}</pre><p>is conveyed to the SPARQL query
service, <tt>http://www.example/sparql/</tt>, as illustrated in this
HTTP trace:</p><pre class="req">GET /sparql/?<b>query</b>=<i>EncodedQuery</i>&<b>default-graph-uri</b>=http%3A%2F%2Fwww.example%2Fmorepublishers
&<b>named-graph-uri</b>=http%3A%2F%2Fwww.example%2Fbob&<b>named-graph-uri</b>=http%3A%2F%2Fwww.example%2Falice HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1</pre><p>This protocol operation contains an ambiguous RDF Dataset: the dataset specified in the query is different than the one
specified in the protocol (by way of <code>default-graph-uri</code> and <code>named-graph-uri</code> parameters). A
conformant SPARQL Protocol service must resolve this ambiguity by executing the query against the RDF Dataset specified in
the protocol:</p><pre class="resp">HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="who"/>
<variable name="g"/>
<variable name="mbox"/>
</head>
<results>
<result>
<binding name="who">
<literal>Bob Hacker</literal>
</binding>
<binding name="g">
<uri>http://www.example/bob</uri>
</binding>
<binding name="mbox">
<uri>mailto:bob@oldcorp.example</uri>
</binding>
</result>
<result>
<binding name="who">
<literal>Alice Hacker</literal>
</binding>
<binding name="g">
<uri>http://www.example/alice</uri>
</binding>
<binding name="mbox">
<uri>mailto:alice@work.example</uri>
</binding>
</result>
</results>
</sparql></pre></div></div><div class="div3">
<h4><a name="select-malformed" id="select-malformed"></a>3.1.9 SELECT with malformed query fault</h4><p>This syntactically invalid SPARQL query</p><div id="div-select-malformed"><pre class="query">PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE { ?x foaf:name ?name
ORDER BY ?name }</pre><p>is conveyed to the SPARQL query
service, <tt>http://www.example/sparql/</tt>, as illustrated in this
HTTP trace:</p><pre class="req">GET /sparql/?<b>query</b>=<i>EncodedQuery</i>&<b>default-graph-uri</b>=http%3A%2F%2Fwww.example%2Fmorepublishers HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1</pre><p>With the error response illustrated here:</p><pre class="resp">HTTP/1.1 400 Bad Request
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: text/plain; charset=UTF-8
4:syntax error, unexpected ORDER, expecting '}'</pre></div></div><div class="div3">
<h4><a name="select-refused" id="select-refused"></a>3.1.10 SELECT with query request refused fault</h4><p>This SPARQL query</p><div id="div-select-refused"><pre class="query">PREFIX bio: <http://bio.example/schema/#>
SELECT ?valence
FROM <http://another.example/protein-db.rdf>
WHERE { ?x bio:protein ?valence }
ORDER BY ?valence</pre><p>is conveyed to the SPARQL query
service, <tt>http://www.example/sparql/</tt>, as illustrated in this
HTTP trace:</p><pre class="req">GET /sparql/?<b>query</b>=<i>EncodedQuery</i>&<b>default-graph-uri</b>=http%3A%2F%2Fanother.example%2Fprotein-db.rdf HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1</pre><p>With the error response illustrated here:</p><pre class="resp">HTTP/1.1 500 Internal Server Error
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: text/html; charset=UTF-8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>SPARQL Processing Service: Query Request Refused</title>
</head>
<body>
<p> Query Request Refused: your request could not be processed because
<code>http://another.example/protein-db.rdf</code> could not be retrieved within
the time alloted.</p>
</body>
</html></pre></div></div><div class="div3">
<h4><a name="select-longpost" id="select-longpost"></a>3.1.11 Long SELECT query using POST with URL encoding</h4><p>Some SPARQL queries, perhaps machine generated, may be longer than
can be reliably conveyed by way of the HTTP GET binding described in
<a href="#query-via-get">2.1.1 query via GET</a>. In those cases
the POST binding described in <a href="#query-via-post-urlencoded">2.1.2 query via POST with URL-encoded parameters</a> may be used.
This SPARQL query</p><div id="div-select-longpost"><pre class="query">PREFIX : <http://www.w3.org/2002/12/cal/icaltzd#>
PREFIX Chi: <http://www.w3.org/2002/12/cal/test/Chiefs.ics#>
PREFIX New: <http://www.w3.org/2002/12/cal/tzd/America/New_York#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?summary
WHERE {
{
Chi:D603E2AC-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-09-08T16:00:00"^^New:tz;
:dtstamp "2002-09-06T03:09:27Z"^^xsd:dateTime;
:dtstart "2002-09-08T13:00:00"^^New:tz;
:summary ?summary;
:uid "D603E2AC-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D603E90B-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-09-15T16:00:00"^^New:tz;
:dtstamp "2002-09-06T03:10:19Z"^^xsd:dateTime;
:dtstart "2002-09-15T13:00:00"^^New:tz;
:summary ?summary;
:uid "D603E90B-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D603ED6E-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-09-22T16:00:00"^^New:tz;
:dtstamp "2002-09-06T03:11:05Z"^^xsd:dateTime;
:dtstart "2002-09-22T13:00:00"^^New:tz;
:summary ?summary;
:uid "D603ED6E-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D603F18C-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-09-29T16:00:00"^^New:tz;
:dtstamp "2002-09-06T03:15:46Z"^^xsd:dateTime;
:dtstart "2002-09-29T13:00:00"^^New:tz;
:summary ?summary;
:uid "D603F18C-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D603F5B7-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-11-04"^^xsd:date;
:dtstamp "2002-09-06T03:12:53Z"^^xsd:dateTime;
:dtstart "2002-11-03"^^xsd:date;
:summary ?summary;
:uid "D603F5B7-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D603F9D7-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-11-10T20:15:00"^^New:tz;
:dtstamp "2002-09-06T03:14:12Z"^^xsd:dateTime;
:dtstart "2002-11-10T17:15:00"^^New:tz;
:summary ?summary;
:uid "D603F9D7-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D604022C-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-11-17T17:00:00"^^New:tz;
:dtstamp "2002-09-06T03:14:51Z"^^xsd:dateTime;
:dtstart "2002-11-17T14:00:00"^^New:tz;
:summary ?summary;
:uid "D604022C-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D604065C-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-10-06T19:05:00"^^New:tz;
:dtstamp "2002-09-06T03:16:54Z"^^xsd:dateTime;
:dtstart "2002-10-06T16:05:00"^^New:tz;
:summary ?summary;
:uid "D604065C-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6040A7E-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-10-13T19:15:00"^^New:tz;
:dtstamp "2002-09-06T03:17:51Z"^^xsd:dateTime;
:dtstart "2002-10-13T16:15:00"^^New:tz;
:summary ?summary;
:uid "D6040A7E-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6040E96-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-10-20T16:00:00"^^New:tz;
:dtstamp "2002-09-06T03:18:32Z"^^xsd:dateTime;
:dtstart "2002-10-20T13:00:00"^^New:tz;
:summary ?summary;
:uid "D6040E96-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6041270-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-10-27T17:00:00"^^New:tz;
:dtstamp "2002-09-06T03:19:15Z"^^xsd:dateTime;
:dtstart "2002-10-27T14:00:00"^^New:tz;
:summary ?summary;
:uid "D6041270-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6041673-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-11-24T20:05:00"^^New:tz;
:dtstamp "2002-09-06T03:22:09Z"^^xsd:dateTime;
:dtstart "2002-11-24T17:05:00"^^New:tz;
:summary ?summary;
:uid "D6041673-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6041A73-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-12-01T17:00:00"^^New:tz;
:dtstamp "2002-09-06T03:22:52Z"^^xsd:dateTime;
:dtstart "2002-12-01T14:00:00"^^New:tz;
:summary ?summary;
:uid "D6041A73-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D60421EF-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-12-08T17:00:00"^^New:tz;
:dtstamp "2002-09-06T03:24:04Z"^^xsd:dateTime;
:dtstart "2002-12-08T14:00:00"^^New:tz;
:summary ?summary;
:uid "D60421EF-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6042660-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-12-15T20:05:00"^^New:tz;
:dtstamp "2002-09-06T03:25:03Z"^^xsd:dateTime;
:dtstart "2002-12-15T17:05:00"^^New:tz;
:summary ?summary;
:uid "D6042660-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6042A93-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-12-22T17:00:00"^^New:tz;
:dtstamp "2002-09-06T03:25:47Z"^^xsd:dateTime;
:dtstart "2002-12-22T14:00:00"^^New:tz;
:summary ?summary;
:uid "D6042A93-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6042EDF-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-12-28T21:00:00"^^New:tz;
:dtstamp "2002-09-06T03:26:51Z"^^xsd:dateTime;
:dtstart "2002-12-28T18:00:00"^^New:tz;
:summary ?summary;
:uid "D6042EDF-C1C9-11D6-9446-003065F198AC" .
}
}</pre><p>is conveyed to the SPARQL query
service, <tt>http://www.example/sparql/</tt>, as illustrated in this
HTTP trace:</p><pre class="req">POST /sparql/ HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 9461
<b>query</b>=<i>EncodedQuery</i>&<b>default-graph-uri</b>=http%3A%2F%2Fanother.example%2Fcalendar.rdf</pre><p>With the response illustrated here:</p><pre class="resp">HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="summary"/>
</head>
<results>
<result>
<binding name="summary">
<literal>Chiefs vs. Cleveland @ Cleveland Stadium</literal>
</binding>
</result>
<result>
<binding name="summary">
<literal>Chiefs vs. Jacksonville @ Arrowhead Stadium</literal>
</binding>
</result>
<result>
<binding name="summary">
<literal>Chiefs vs. New England @ Gillette Stadium</literal>
</binding>
</result>
...
<result>
<binding name="summary">
<literal>Chiefs vs. Oakland @ Network Associates Coliseum</literal>
</binding>
</result>
</results>
</sparql></pre></div></div><div class="div3">
<h4><a name="select-longpost-direct" id="select-longpost-direct"></a>3.1.12 Long SELECT query using direct POST</h4><p>SPARQL queries may also be POSTed directly without URL encoding,
as described in <a href="#query-via-post-direct">2.1.3 query via POST directly</a>.
The same query used in the <a href="#select-longpost">previous example</a> is conveyed
to the SPARQL query service, <tt>http://www.example/sparql/</tt>, as illustrated in this
HTTP trace:</p><pre class="req">POST /sparql/?default-graph-uri=http%3A%2F%2Fanother.example%2Fcalendar.rdf HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
Content-Type: application/sparql-query
<i>UnencodedQuery</i></pre><p>With the same response as in the previous example.</p></div><div class="div3">
<h4><a name="select-kanji" id="select-kanji"></a>3.1.13 SELECT with internationalization</h4><p>SPARQL queries may include internationalized characters or character sets. This SPARQL query</p><div id="div-select-kanji"><pre class="query">PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX 食: <http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#>
SELECT ?name ?food
WHERE { [ foaf:name ?name ; 食:食べる ?food ] . }</pre><p>is conveyed to the SPARQL query service, <tt>http://www.example/sparql/</tt>, as illustrated in this HTTP trace:</p><pre class="req">GET /sparql/?<b>query=PREFIX%20foaf%3A%20%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E%0APREFIX%20%E9%A3%9F%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2001%2Fsw%2FDataAccess%2Ftests%2Fdata%2Fi18n%2Fkanji.ttl%23%3E%0ASELECT%20%3Fname%20%3Ffood%20%0AWHERE%20%7B%20%5B%20foaf%3Aname%20%3Fname%20%3B%20%E9%A3%9F%3A%E9%A3%9F%E3%81%B9%E3%82%8B%20%3Ffood%20%5D%20.%20%7D</b>
Host: www.example
User-agent: sparql-client/0.1</pre><pre class="resp">HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix)
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
...
</sparql></pre></div></div></div><div class="div2">
<h3><a name="update-bindings-http-examples" id="update-bindings-http-examples"></a>3.2 Examples of SPARQL Update</h3><div class="div3">
<h4><a name="update-urlencoded-simple" id="update-urlencoded-simple"></a>3.2.1 UPDATE using URL-encoded parameters</h4><p>An example request, which is a serialisation of a request sent to <code>http://localhost:8888/test</code> for the query <code>INSERT DATA { <a> <p> <b> }</code> is shown below using the URL-encoded parameter form.</p><pre class="req">POST /test HTTP/1.1
Host: localhost:8888
Accept: text/plain
Content-Length: 62
Content-Type: application/x-www-form-urlencoded
update=INSERT%20DATA%20%7B%20%3Ca%3E%20%3Cp%3E%20%3Cb%3E%20%7D
</pre></div><div class="div3">
<h4><a name="update-direct-simple" id="update-direct-simple"></a>3.2.2 UPDATE using POST directly</h4><p>Update requests may be sent as a POST request with a
Content-Type of <code>application/sparql-update</code>:</p><pre class="req">POST /test HTTP/1.1
Host: localhost:8888
Accept: */*
Content-Type: application/sparql-update
Content-Length: 27
INSERT DATA { <a> <p> <b> }</pre></div><div class="div3">
<h4><a name="update-direct-simple-dataset" id="update-direct-simple-dataset"></a>3.2.3 UPDATE specifying dataset and using POST directly</h4><p>
A dataset for an update request may be specified using the <code>using-graph-uri</code> and <code>using-named-graph-uri</code> parameters.
The serialisation of an example request sent to <code>http://localhost:8888/test</code>
and specifying a dataset with default graph <code>http://localhost:8888/people</code> is shown below.
</p><pre class="req">POST /test?using-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Fpeople HTTP/1.1
Host: localhost:8888
Accept: */*
Content-Type: application/sparql-update
Content-Length: 136
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
DELETE { ?person ?property ?value }
WHERE { ?person ?property ?value ; foaf:givenName 'Fred' }</pre></div><div class="div3">
<h4><a name="update-urlencoded-multi" id="update-urlencoded-multi"></a>3.2.4 Multi-operation UPDATE using URL-encoded parameters</h4><p>
A sequence of multiple operations may be included in a single request, separated by a ';' (semicolon).
The serialisation of an example request sent to <code>http://localhost:8888/test</code> for the query
</p><pre class="query">DELETE DATA { <a> <p> <old> } ;
INSERT DATA { <a> <p> <new> }</pre><p>is shown below using the URL-encoded parameter form.</p><pre class="req">POST /test HTTP/1.1
Host: localhost:8888
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 130
update=DELETE%20DATA%20%7B%20%3Ca%3E%20%3Cp%3E%20%3Cold%3E%20%7D%20%3B%0AINSERT%20DATA%20%7B%20%3Ca%3E%20%3Cp%3E%20%3Cnew%3E%20%7D</pre></div><div class="div3">
<h4><a name="update-urlencoded-multi-dataset" id="update-urlencoded-multi-dataset"></a>3.2.5 Multi-operation UPDATE specifying dataset and using URL-encoded parameters</h4><p>
When POSTing an update request with URL-encoded parameters, the dataset parameters
<code>using-graph-uri</code> and <code>using-named-graph-uri</code> are specified
in the POST body with the serialized request.
The serialisation of an example request sent to <code>http://localhost:8888/test</code>
for the query
</p><pre class="query">PREFIX foaf: <http://xmlns.com/foaf/0.1/>
INSERT { GRAPH <http://localhost:8888/people> { ?person ?property ?value } }
WHERE { GRAPH ?g { ?person ?property ?value ; foaf:givenName 'Fred' } }</pre><p>
and specifying a dataset with the named graphs <code>http://localhost:8888/alice/foaf.rdf</code>
and <code>http://localhost:8888/eve/foaf.rdf</code> is shown below.
</p><pre class="req">POST /test HTTP/1.1
Host: localhost:8888
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 130
using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Falice%2Ffoaf.rdf&using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Feve%2Ffoaf.rdf&update=PREFIX%20foaf%3A%20%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E%0AINSERT%20%7B%20GRAPH%20%3Chttp%3A%2F%2Flocalhost%3A8888%2Fpeople%3E%20%7B%20%3Fperson%20%3Fproperty%20%3Fvalue%20%7D%20%7D%0AWHERE%20%7B%20GRAPH%20%3Fg%20%7B%20%3Fperson%20%3Fproperty%20%3Fvalue%20%3B%20foaf%3AgivenName%20%27Fred%27%20%7D%20%7D
</pre></div><div class="div3">
<h4><a name="update-direct-multi-dataset" id="update-direct-multi-dataset"></a>3.2.6 Multi-operation UPDATE specifying dataset and using POST directly</h4><p>
The serialisation of an example request sent to <code>http://localhost:8888/test</code>
and specifying a dataset with the named graphs <code>http://localhost:8888/alice/foaf.rdf</code>
and <code>http://localhost:8888/eve/foaf.rdf</code> is shown below.
</p><pre class="req">POST /test?using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Falice%2Ffoaf.rdf&using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Feve%2Ffoaf.rdf HTTP/1.1
Host: localhost:8888
Accept: */*
Content-Type: application/sparql-update
Content-Length: 190
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
INSERT { GRAPH <http://localhost:8888/people> { ?person ?property ?value } }
WHERE { GRAPH ?g { ?person ?property ?value ; foaf:givenName 'Fred' } }</pre></div></div></div><div class="div1">
<h2><a name="policy" id="policy"></a>4 Policy Considerations</h2><div class="div2">
<h3><a name="policy-security" id="policy-security"></a>4.1 Security</h3><p>There are at least two possible sources of denial-of-service attacks against SPARQL protocol services. First, under-constrained
queries can result in very large numbers of results, which may require large expenditures of computing resources to process,
assemble, or return. Another possible source are queries containing very complex — either because of resource size, the number
of resources to be retrieved, or a combination of size and number — RDF Dataset descriptions, which the service may be unable
to assemble without significant expenditure of resources, including bandwidth, CPU, or secondary storage. In some cases such
expenditures may effectively constitute a denial-of-service attack. A SPARQL protocol service <strong>may</strong> place
restrictions on the resources that it retrieves or on the rate at which external resources are retrieved. There may be other sources
of denial-of-service attacks against SPARQL query processing services.
</p><p>Since a SPARQL protocol service may make HTTP requests of other origin servers on behalf of its clients, it may be used as a
vector of attacks against other sites or services. Thus, SPARQL protocol services may effectively act as proxies for third-party
clients. Such services <strong>may</strong> place restrictions on the resources that they retrieve or on the rate at which external
resources can be retrieved. SPARQL protocol services <strong>may</strong> log client requests in such a way as to facilitate tracing
them with regard to third-party origin servers or services.</p><p>SPARQL protocol services <strong>may</strong> choose to detect these and other costly, or otherwise unsafe, queries, impose time
or memory limits on queries, or impose other restrictions to reduce the service's (and other service's) vulnerability to
denial-of-service attacks. They also <strong>may</strong> <a href="#query-failure">refuse to process such query requests</a>. </p><p>SPARQL protocol services may remove, insert, and change underlying data via the update operation. To protect against malicious or destructive
updates, implementations may choose not to implement the update operation. Alternatively, implementations may choose to use HTTP authentication mechanisms
or other implementation-defined mechanisms to prevent unauthorized invocations of the update operation.</p><p>Different IRIs may have the same appearance. Characters in different scripts may look similar (a Cyrillic "о" may appear similar
to a Latin "o"). A character followed by combining characters may have the same visual representation as another character (LATIN
SMALL LETTER E followed by COMBINING ACUTE ACCENT has the same visual representation as LATIN SMALL LETTER E WITH ACUTE). Users of
SPARQL must take care to construct queries with IRIs that match the IRIs in the data. Further information about matching of similar
characters can be found in <a href="http://www.unicode.org/reports/tr36/">Unicode Security Considerations</a> [<a href="#unisec">UNISEC</a>]
and <a href="http://www.ietf.org/rfc/rfc3987.txt">Internationalized Resource Identifiers (IRIs)</a> [<a href="#rfc3987">RFC3987</a>] Section 8.</p></div></div><div class="div1">
<h2><a name="conformance" id="conformance"></a>5 Conformance</h2>
<p>The status of the parts of SPARQL 1.1 Protocol (this document) is as follows:</p><ul><li>Section 1 Introduction: <strong>normative</strong></li><li>Section 2 SPARQL Protocol Operations: <strong>normative</strong></li><li>Section 3: Example SPARQL Protocol Requests: <strong>informative</strong></li><li>Section 4: Policy Considerations: <strong>normative</strong></li><li>Section 5: Conformance: <strong>normative</strong></li><li>Section 6: Changes Since Previous Recommendation: <strong>informative</strong></li><li>Section A.1: Normative References: <strong>normative</strong></li><li>Section A.2: Other References: <strong>informative</strong></li></ul>
<p>A <a name="conformant-sparql-protocol-service" id="conformant-sparql-protocol-service">conformant SPARQL Protocol service</a>:</p><ol><li><strong>must</strong> implement either the <code>query</code> operation or the <code>update</code> operation in the way described in this document ("SPARQL 1.1 Protocol");</li><li><strong>may</strong> implement both the <code>query</code> and <code>update</code> operations;</li><li><strong>must</strong> implement all three forms of the query operation (query via GET, query via POST with URL-encoded parameters, and query via POST directly) if it implements the <code>query</code> operation</li><li><strong>must</strong> implement both forms of the update operation (update via POST with URL-encoded parameters and update via POST directly) if it implements the <code>update</code> operation
</li><li><strong>must</strong> be consistent with the normative constraints (indicated by [<a href="#rfc2119">RFC2119</a>] keywords) on SPARQL Protocol services described in <a href="#policy">4. Policy Considerations</a>.</li></ol></div><div class="div1">
<div class="wgNote">
At Risk: The SPARQL Working Group is requiring conformant SPARQL Protocol services to implement all forms of any operations implemented. The Working Group has agreed to mark this requirement "at risk", and the conformance requirement may be changed based on implementation experience.
</div>
<p>A <a name="conformant-sparql-protocol-client" id="conformant-sparql-protocol-client">conformant SPARQL Protocol client</a>:</p><ol><li><strong>must</strong> generate requests for either the <code>query</code> operation or the <code>update</code> operation;</li><li><strong>may</strong> generate requests for both the <code>query</code> and <code>update</code> operations;</li><li><strong>may</strong> generate requests for any or all of the three forms of the <code>query</code> operation if it generates <code>query</code> requests;</li><li><strong>may</strong> generate requests for either or both of the two forms of the <code>update</code> operation if it generates <code>update</code> requests;</li><li><strong>must</strong> be consistent with the normative constraints (indicated by [<a href="#rfc2119">RFC2119</a>] keywords) on SPARQL Protocol clients described in <a href="#policy">4. Policy Considerations</a>.</li></ol>
<h2><a name="changes" id="changes"></a>6 Changes Since Previous Recommendation (Informative)</h2><p>This specification extends and updates the <a href="http://www.w3.org/TR/2008/REC-rdf-sparql-protocol-20080115/">SPARQL Protocol for RDF of January, 2008</a>. The significant changes are:</p><ul><li>Remove the WSDL definition of the protocol in favor of an HTTP-based protocol</li><li>Define an Update operation for issuing SPARQL Update requests</li><li>Updated conformance criteria to accommodate the update operation</li><li>Relaxed the requirements on specific HTTP response codes to allow for other codes as long as they align with HTTP semantics</li><li>Added a variant of the query operation that directly posts a query string in the body of a POST request</li></ul></div></div><div class="back"><div class="div1">
<h2><a name="sec-bibliography" id="sec-bibliography"></a>A References</h2><div class="div2">
<h3><a name="sec-existing-stds" id="sec-existing-stds"></a>A.1 Normative References</h3><dl class="bib">
<dt><a name="sparql" id="sparql">[SPARQL]</a></dt>
<dd>
<a href="http://www.w3.org/TR/sparql11-query/">SPARQL 1.1 Query Language</a>,
Steve Harris, Andy Seaborne, Editors,
W3C (World Wide Web Consortium),
2011,
http://www.w3.org/TR/sparql11-query/ .
</dd>
<dt><a name="update" id="update">[UPDATE]</a></dt>
<dd>
<a href="http://www.w3.org/TR/sparql11-update/">SPARQL 1.1 Update</a>,
Paul Gearon, et al., Editors,
W3C (World Wide Web Consortium),
2011,
http://www.w3.org/TR/sparql11-update/ .
</dd>
<dt><a name="rdf-concepts" id="rdf-concepts">[RDF-CONCEPTS]</a></dt>
<dd>
<a href="http://www.w3.org/TR/rdf-concepts/">Resource Description Framework (RDF): Concepts and Abstract Syntax</a>,
Graham Klyne, Jeremy J. Carroll, Editors,
W3C (World Wide Web Consortium),
2004,
http://www.w3.org/TR/rdf-concepts/ .
</dd>
<dt><a name="rdf-xml" id="rdf-xml">[RDF-XML]</a></dt>
<dd>
<a href="http://www.w3.org/TR/rdf-syntax-grammar/">RDF/XML Syntax Specification (Revised)</a>,
Dave Beckett, Editor,
W3C (World Wide Web Consortium),
2004,
http://www.w3.org/TR/rdf-syntax-grammar/ .
</dd>
<dt><a name="rfc2119" id="rfc2119">[RFC2119]</a></dt>
<dd>
<a href="http://www.ietf.org/rfc/rfc2119.txt">RFC 2119: Key words for use in RFCs to Indicate Requirement Levels</a>,
Scott Bradner, Editor,
IETF (Internet Engineering Task Force),
1997,
http://www.ietf.org/rfc/rfc2119.txt .
</dd>
<dt><a name="rfc2616" id="rfc2616">[RFC2616]</a></dt>
<dd>
<a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1</a>,
R. Fielding, et al., Editors,
IETF (Internet Engineering Task Force),
1999,
http://www.ietf.org/rfc/rfc2616.txt .
</dd>
<dt><a name="rfc3986" id="rfc3986">[RFC3986]</a></dt>
<dd>
<a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986: Uniform Resource Identifier (URI): Generic Syntax</a>,
T. Berners-Lee, R. Fielding, L. Masinter, Editors,
IETF (Internet Engineering Task Force),
2005,
http://www.ietf.org/rfc/rfc3986.txt .
</dd>
</dl></div><div class="div2">
<h3><a name="sec-other-references" id="sec-other-references"></a>A.2 Other References</h3><dl>
<dt><a name="rfc3987" id="rfc3987">[RFC3987]</a></dt>
<dd>
<a href="http://www.ietf.org/rfc/rfc3987.txt">RFC 3987: Internationalized Resource Identifiers (IRIs)</a>,
M. Duerst, M. Suignard, Editors,
IETF (Internet Engineering Task Force),
2005,
http://www.ietf.org/rfc/rfc3987.txt .
</dd>
<dt><a name="unisec" id="unisec">[UNISEC]</a></dt>
<dd>
<a href="http://www.unicode.org/reports/tr36/">Unicode Security Considerations</a>,
Mark Davis, Michel Suignard, Editors,
2010,
http://www.unicode.org/reports/tr36/
</dd>
</dl></div></div><div class="div1">
<h2><a name="sec-cvsLog" id="sec-cvsLog"></a>B CVS History</h2><pre>
$Log: Overview.html,v $
Revision 1.2 2012/01/05 16:49:25 denis
fix
Revision 1.9 2012/01/05 16:21:56 apollere2
Re-added local.css
Revision 1.8 2012/01/05 06:01:35 lfeigenb
updated conformance per WG decision of 1/3/2012
Revision 1.7 2012/01/05 03:55:25 apollere2
Adapted the status section to uniform order.
Revision 1.6 2012/01/05 03:30:42 apollere2
Adapted comments period to Feb 6th, as for the other docs.
Revision 1.5 2012/01/05 03:25:36 apollere2
Fixed a link.
Revision 1.4 2012/01/03 17:50:39 gwilliam
Fixed broken link fragment.
Revision 1.35 2011/12/19 16:58:50 gwilliam
Cleaned up references.
Revision 1.34 2011/11/22 15:25:56 lfeigenb
remove editorial note in security section
Revision 1.33 2011/11/21 21:06:52 lfeigenb
fixed small editorial issues; fixed treatment of RDF datasets for protocol update operations
Revision 1.32 2011/11/17 14:56:24 lfeigenb
updates as per AndyS pre-last call review
Revision 1.31 2011/11/15 17:12:25 gwilliam
Fixed section number in link text to "Policy Considerations".
Revision 1.30 2011/11/15 17:07:31 gwilliam
Replaced "EncodedQuery" with actual encoded query string in two examples.
Revision 1.29 2011/11/15 17:04:33 gwilliam
Properly escape default-graph-uri and named-graph-uri arguments in examples.
Revision 1.28 2011/11/15 16:48:30 gwilliam
Typo and formatting fixes.
Added text restricting response body conditions to 2xx responses.
Added text to discuss the *response* to a successful query operation.
Added normative rfc2119 language to requirement for setting a base URI.
Revision 1.27 2011/11/15 16:14:06 gwilliam
"response code 400" -> "HTTP response code 400".
Revision 1.26 2011/11/15 16:08:37 gwilliam
Removed stray '>'.
Revision 1.25 2011/11/15 15:36:23 lfeigenb
near final changes pre-last call for protocol
Revision 1.24 2011/11/10 00:03:37 gwilliam
Added reference links and addressed many todo items.
Revision 1.23 2011/09/20 14:15:01 lfeigenb
moved overview2.xml to overview.xml
Revision 1.9 2011/09/13 16:51:43 gwilliam
Added update examples.
Fixed URL encoding of default-graph-uri parameter in section #select-longpost-direct.
Revision 1.8 2011/09/13 15:04:26 gwilliam
Added stubs for more UPDATE examples.
Revision 1.7 2011/09/13 14:42:46 gwilliam
Added links to other SPARQL 1.1 docs in TR space (not all in place yet).
Revision 1.6 2011/09/13 14:30:43 gwilliam
Added internal section links in introduction.
Revision 1.5 2011/08/06 20:48:31 lfeigenb
various improvements per AndyS initial review
Revision 1.4 2011/08/02 02:31:57 lfeigenb
added direct POST example for query
Revision 1.3 2011/04/13 15:58:30 lfeigenb
add update operation details
Revision 1.2 2011/03/15 20:37:06 lfeigenb
updated intro and query operation
Revision 1.1 2011/03/01 03:21:34 lfeigenb
initial changes from Greg W
Revision 1.22 2011/01/24 15:45:33 sharris2
Added examples of PSOT transmission of SPARQL Update requests
Revision 1.21 2010/05/13 18:26:19 dcharbon2
remove "graph-does-not-exist" and "graph-already-exists" errors.
Revision 1.20 2010/02/12 08:11:16 lfeigenb
Updated Kendall Clark's email address. Removed "previous version" editor designation.
Revision 1.19 2010/01/27 01:33:33 apollere2
removed cvs-log-meat div2, because it causes a strange TOC entry
Revision 1.18 2010/01/26 16:18:42 dcharbon2
Fixed broken fragment references.
Revision 1.17 2010/01/22 02:03:03 apollere2
changed the second occurrence of Excerpt-1.3 to Exceprt-1.4
Revision 1.16 2010/01/22 01:56:24 apollere2
Adapted previous versions, dates, etc.
Revision 1.15 2010/01/18 21:28:18 dcharbon2
* Fixed name references for protocol and query specifications
* Removed references to obsolete update syntax
* Updated formatting of MUST and MUST NOT where it was incorrect
* Simplified text surrounding reporting debugging data on service fault.
* Update section references
* Improved xml schema fragment descriptions
* Updated the "update" type removing references to dataset types in protocol-types.xsd
Revision 1.14 2010/01/10 16:02:56 lfeigenb
* Add Query faults back in
* Clean up the XX tokens
* Editor notes for Update's out and fault messages
* Note changes since previous WD in the SotD
Revision 1.13 2010/01/05 16:50:46 dcharbon2
Updated URI references for WSDL 2.0. Also updated the Update section for faults.
Revision 1.12 2009/10/21 02:25:37 lfeigenb
fix links
add .wsdl and .xsd
Revision 1.10 2009/10/20 20:21:47 lfeigenb
fixed placement of table
Revision 1.9 2009/10/20 19:10:19 lfeigenb
Fixed and added support for markup that was previously unsupported by our XSLTs.
Future SPARQL-specific customizations should go in shared/sparql.xsl
Revision 1.8 2009/10/20 18:13:47 lfeigenb
Factored out shared XML spec files into docs/shared
Revision 1.7 2009/10/20 16:24:01 lfeigenb
remove extra 1.1 ; DAWG -> SPARQL WG ; add note about security for update
Revision 1.6 2009/10/20 05:58:28 lfeigenb
Make all changes and updates suggested in
http://lists.w3.org/Archives/Public/public-rdf-dawg/2009OctDec/0204.html
Revision 1.5 2009/10/15 22:37:08 lfeigenb
Changes in preparation of FPWD as per http://www.w3.org/2009/sparql/meeting/2009-10-13
Revision 1.4 2009/10/03 00:15:20 lfeigenb
fixed xml tags
Revision 1.3 2009/10/03 00:13:19 lfeigenb
Initial updates by SimonKJ
Revision 1.2 2009/09/28 22:55:59 eric
- some leftover noise from the port
Revision 1.1 2009/09/28 22:30:46 eric
CREATED
</pre></div></div></body></html>