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">&lt;lee@thefigtrees.net&gt;</a></dd><dd>Gregory Todd Williams, Rensselaer Polytechnic Institute <a href="mailto:greg@evilfunhouse.com">&lt;greg@evilfunhouse.com&gt;</a></dd><dd>Kendall Grant Clark, 1st Edition, Clark &amp; Parsia LLC <a href="mailto:kendall@clarkparsia.com">&lt;kendall@clarkparsia.com&gt;</a></dd><dd>Elias Torres, 1st Edition, IBM Corporation <a href="mailto:eliast@us.ibm.com">&lt;eliast@us.ibm.com&gt;</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>&amp;</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>&amp;</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>&amp;</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 &lt;g&gt;</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 &lt;g&gt;</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: &lt;http://purl.org/dc/elements/1.1/&gt; 
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

&lt;?xml version="1.0"?&gt;
&lt;sparql xmlns="http://www.w3.org/2005/sparql-results#"&gt;

 &lt;head&gt;
   &lt;variable name="book"/&gt;
   &lt;variable name="who"/&gt;
 &lt;/head&gt;
 &lt;results&gt;
   &lt;result&gt;
     &lt;binding name="book"&gt;&lt;uri&gt;http://www.example/book/book5&lt;/uri&gt;&lt;/binding&gt;
     &lt;binding name="who"&gt;&lt;bnode&gt;r29392923r2922&lt;/bnode&gt;&lt;/binding&gt;
   &lt;/result&gt;
...
&lt;/sparql&gt; </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: &lt;http://purl.org/dc/elements/1.1/&gt; 
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&amp;<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

&lt;?xml version="1.0"?&gt;
&lt;sparql xmlns="http://www.w3.org/2005/sparql-results#"&gt;
 &lt;head&gt;
   &lt;variable name="book"/&gt;
   &lt;variable name="who"/&gt;
 &lt;/head&gt;
...
&lt;/sparql&gt; </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: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;
PREFIX foaf: &lt;http://xmlns.com/foaf/0.1/&gt;
PREFIX myfoaf: &lt;http://www.example/jose/foaf.rdf#&gt;

CONSTRUCT { myfoaf:jose foaf:depiction &lt;http://www.example/jose/jose.jpg&gt;.
            myfoaf:jose foaf:schoolHomepage &lt;http://www.edu.example/&gt;.
            ?s ?p ?o.}
WHERE { ?s ?p ?o. myfoaf:jose foaf:nick "Jo".
       FILTER ( ! (?s = myfoaf:kendall &amp;&amp; ?p = foaf:knows &amp;&amp; ?o = myfoaf:edd ) 
              &amp;&amp; ! ( ?s = myfoaf:julia &amp;&amp; ?p = foaf:mbox &amp;&amp; ?o = &lt;mailto:julia@mail.example&gt; )
	      &amp;&amp; ! ( ?s = myfoaf:julia &amp;&amp; ?p = rdf:type &amp;&amp; ?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>&amp;<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: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;.
@prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt;.
@prefix myfoaf: &lt;http://www.example/jose/foaf.rdf#&gt;.

myfoaf:jose foaf:name "Jose Jimeñez";
	    foaf:depiction &lt;http://www.example/jose/jose.jpg&gt;;
            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: &lt;http://purl.org/dc/elements/1.1/&gt; 
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>&amp;<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

&lt;?xml version="1.0"?&gt;
&lt;sparql xmlns="http://www.w3.org/2005/sparql-results#"&gt;
 &lt;head&gt;&lt;/head&gt;
 &lt;boolean&gt;true&lt;/boolean&gt;
&lt;/sparql&gt;</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: &lt;http://www.example/book/&gt;
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>&amp;<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

&lt;?xml version="1.0"?&gt;
&lt;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/" &gt;
  &lt;rdf:Description rdf:about="http://www.example/book/book6"&gt;
    &lt;dc:title&gt;Example Book #6 &lt;/dc:title&gt;
  &lt;/rdf:Description&gt;
&lt;/rdf:RDF&gt;</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: &lt;http://xmlns.com/foaf/0.1/&gt;
PREFIX dc: &lt;http://purl.org/dc/elements/1.1/&gt;

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>&amp;<b>default-graph-uri</b>=http%3A%2F%2Fwww.example%2Fpublishers
&amp;<b>default-graph-uri</b>=http%3A%2F%2Fwww.example%2Fmorepublishers&amp;<b>named-graph-uri</b>=http%3A%2F%2Fyour.example%2Ffoaf-alice
&amp;<b>named-graph-uri</b>=http%3A%2F%2Fwww.example%2Ffoaf-bob&amp;<b>named-graph-uri</b>=http%3A%2F%2Fwww.example%2Ffoaf-susan
&amp;<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

&lt;?xml version="1.0"?&gt;
&lt;sparql xmlns="http://www.w3.org/2005/sparql-results#"&gt;
  &lt;head&gt;
    &lt;variable name="who"/&gt;
    &lt;variable name="g"/&gt;
    &lt;variable name="mbox"/&gt;
  &lt;/head&gt;
...
&lt;/sparql&gt;</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: &lt;http://xmlns.com/foaf/0.1/&gt;
PREFIX dc: &lt;http://purl.org/dc/elements/1.1/&gt;

SELECT ?who ?g ?mbox
FROM &lt;http://www.example/publishers&gt;
FROM NAMED &lt;http://www.example/alice&gt;
FROM NAMED &lt;http://www.example/bob&gt;
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

&lt;?xml version="1.0"?&gt;
&lt;sparql xmlns="http://www.w3.org/2005/sparql-results#"&gt;
...
&lt;/sparql&gt;</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: &lt;http://xmlns.com/foaf/0.1/&gt;
PREFIX dc: &lt;http://purl.org/dc/elements/1.1/&gt;

SELECT ?who ?g ?mbox
FROM &lt;http://www.example/publishers&gt;
FROM NAMED &lt;http://www.example/john&gt;
FROM NAMED &lt;http://www.example/susan&gt;
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>&amp;<b>default-graph-uri</b>=http%3A%2F%2Fwww.example%2Fmorepublishers
&amp;<b>named-graph-uri</b>=http%3A%2F%2Fwww.example%2Fbob&amp;<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

&lt;?xml version="1.0"?&gt;
&lt;sparql xmlns="http://www.w3.org/2005/sparql-results#"&gt;
  &lt;head&gt;
    &lt;variable name="who"/&gt;
    &lt;variable name="g"/&gt;
    &lt;variable name="mbox"/&gt;
  &lt;/head&gt;
  &lt;results&gt;
    &lt;result&gt;
      &lt;binding name="who"&gt;
      	&lt;literal&gt;Bob Hacker&lt;/literal&gt;
      &lt;/binding&gt;
      &lt;binding name="g"&gt;
	&lt;uri&gt;http://www.example/bob&lt;/uri&gt;
      &lt;/binding&gt;
      &lt;binding name="mbox"&gt;
        &lt;uri&gt;mailto:bob@oldcorp.example&lt;/uri&gt;
      &lt;/binding&gt;
    &lt;/result&gt;
    &lt;result&gt;
      &lt;binding name="who"&gt;
	&lt;literal&gt;Alice Hacker&lt;/literal&gt;
      &lt;/binding&gt;
      &lt;binding name="g"&gt;
	&lt;uri&gt;http://www.example/alice&lt;/uri&gt;
      &lt;/binding&gt;
      &lt;binding name="mbox"&gt;
	&lt;uri&gt;mailto:alice@work.example&lt;/uri&gt;
      &lt;/binding&gt;
    &lt;/result&gt;
  &lt;/results&gt;
&lt;/sparql&gt;</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: &lt;http://xmlns.com/foaf/0.1/&gt;
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>&amp;<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: &lt;http://bio.example/schema/#&gt;
SELECT ?valence
FROM &lt;http://another.example/protein-db.rdf&gt;
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>&amp;<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

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;SPARQL Processing Service: Query Request Refused&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt; Query Request Refused: your request could not be processed because 
 &lt;code&gt;http://another.example/protein-db.rdf&lt;/code&gt; could not be retrieved within 
 the time alloted.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</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 : &lt;http://www.w3.org/2002/12/cal/icaltzd#&gt;
PREFIX Chi: &lt;http://www.w3.org/2002/12/cal/test/Chiefs.ics#&gt;
PREFIX New: &lt;http://www.w3.org/2002/12/cal/tzd/America/New_York#&gt;
PREFIX xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt;

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>&amp;<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

&lt;?xml version="1.0"?&gt;
&lt;sparql xmlns="http://www.w3.org/2005/sparql-results#"&gt;
    &lt;head&gt;
        &lt;variable name="summary"/&gt;
    &lt;/head&gt;
    &lt;results&gt;
        &lt;result&gt;
            &lt;binding name="summary"&gt;
                &lt;literal&gt;Chiefs vs. Cleveland @ Cleveland Stadium&lt;/literal&gt;
            &lt;/binding&gt;
        &lt;/result&gt;
        &lt;result&gt;
            &lt;binding name="summary"&gt;
                &lt;literal&gt;Chiefs vs. Jacksonville @ Arrowhead Stadium&lt;/literal&gt;
            &lt;/binding&gt;
        &lt;/result&gt;
        &lt;result&gt;
            &lt;binding name="summary"&gt;
                &lt;literal&gt;Chiefs vs. New England @ Gillette Stadium&lt;/literal&gt;
            &lt;/binding&gt;
        &lt;/result&gt;
        ...
        &lt;result&gt;
            &lt;binding name="summary"&gt;
                &lt;literal&gt;Chiefs vs. Oakland @ Network Associates Coliseum&lt;/literal&gt;
            &lt;/binding&gt;
        &lt;/result&gt;
    &lt;/results&gt;
&lt;/sparql&gt;</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: &lt;http://xmlns.com/foaf/0.1/&gt;
PREFIX 食: &lt;http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#&gt;
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

&lt;?xml version="1.0"?&gt;
&lt;sparql xmlns="http://www.w3.org/2005/sparql-results#"&gt;
...
&lt;/sparql&gt;</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 { &lt;a&gt; &lt;p&gt; &lt;b&gt; }</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 { &lt;a&gt; &lt;p&gt; &lt;b&gt; }</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: &lt;http://xmlns.com/foaf/0.1/&gt;
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 { &lt;a&gt; &lt;p&gt; &lt;old&gt; } ;
INSERT DATA { &lt;a&gt; &lt;p&gt; &lt;new&gt; }</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: &lt;http://xmlns.com/foaf/0.1/&gt;
INSERT { GRAPH &lt;http://localhost:8888/people&gt; { ?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&amp;using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Feve%2Ffoaf.rdf&amp;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&amp;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: &lt;http://xmlns.com/foaf/0.1/&gt;
INSERT { GRAPH &lt;http://localhost:8888/people&gt; { ?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" -&gt; "HTTP response code 400".

Revision 1.26  2011/11/15 16:08:37  gwilliam
Removed stray '&gt;'.

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 -&gt; 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>