VOSSparqlProtocol Virtuoso SPARQL Query Service Virtuoso SPARQL Query Service Introduction to SPARQL in Virtuoso The Virtuoso SPARQL query service originally implemented the SPARQL Protocol for RDF (W3C Recommendation, 15 January 2008), and has been updated to support SPARQL 1.1, providing SPARQL query-processing for RDF data available on the open Internet. The query service implementation extends the standard protocol by providing multiple output-formats alongside the standard XML results serialization. At present this uses additional query parameters, although content-negotiation will be supported soon. SPARQL Service Endpoint Virtuoso reserves the path '/sparql/' and a synonym path '/SPARQL/' for SPARQL service. In the current implementation, Virtuoso defines virtual directories for HTTP requests received on the port specified as 'ServerPort' in the '[HTTPServer]' section of the Virtuoso configuration file which refer to one of these two path strings. If the Virtuoso installation on host example.com listens for HTTP requests on port 8080 then client applications should use the 'service endpoint' string equal to http://example.com:8080/sparql/. For example, the Live Virtuoso Demo instance publishes a service at the following endpoint: http://demo.openlinksw.com/sparql/. Both GET and POST requests are supported by both server and client. The server recognizes the 'Accept: ...' line of the request header to find MIME types preferred by the connected client and adjust the output mode of the response. The client chooses between GET and POST automatically, based on the length of the query text. HTTP Request Methods <tgroup><thead /><tbody> <row /> <row><entry> GET </entry><entry> Yes </entry><entry> Short queries are sent in GET mode </entry></row> <row><entry> POST </entry><entry> Yes </entry><entry> Queries longer than 1900 bytes are POST-ed </entry></row> <row><entry> DELETE </entry><entry> No </entry><entry> </entry></row> <row><entry> PUT </entry><entry> No </entry><entry> </entry></row> </tbody></tgroup></table> <bridgehead class="http://www.w3.org/1999/xhtml:h2"> HTTP Request Parameters</bridgehead> <table><title /><tgroup><thead /><tbody> <row /> <row><entry> query </entry><entry> SPARQL Query text </entry><entry> Yes </entry><entry> </entry></row> <row><entry> query-uri </entry><entry> Absolute URL for Query Template file that returns SPARQL Query Text </entry><entry> No </entry><entry> </entry></row> <row><entry> default-graph-uri </entry><entry> Absolute URL of default graph (string or NULL) </entry><entry> Yes </entry><entry> </entry></row> <row><entry> named-graph-uri </entry><entry> Vector of named graphs (or NULL to not override what's specified in the query </entry><entry> Yes </entry><entry> </entry></row> <row><entry> req_hdr </entry><entry> Additional HTTP header lines that should be passed to the service; 'Host: ...' is most popular </entry><entry> No </entry><entry> </entry></row> <row><entry> maxrows </entry><entry> Maximum numbers of rows that should be returned (actual size of result set may differ) </entry><entry> No </entry><entry> </entry></row> <row><entry> bnode_dict </entry><entry> Dictionary of known blank node names, or NULL for usual loading </entry><entry> No </entry><entry> </entry></row> <row><entry> xslt-uri </entry><entry> Absolute URL of XSLT file to be applied to SPARQL Query results </entry><entry> No </entry><entry> </entry></row> </tbody></tgroup></table> <para> </para> <bridgehead class="http://www.w3.org/1999/xhtml:h2"> HTTP Response Codes</bridgehead> <para>As specified in the <ulink url="http://www.w3.org/TR/rdf-sparql-protocol/#query-bindings-http">SPARQL protocol</ulink>, Virtuoso returns the following HTTP response codes:</para> <table><title /><tgroup><thead /><tbody> <row /> <row><entry> 200 </entry><entry> successful query </entry></row> <row><entry> 400 </entry><entry> malformed query </entry></row> <row><entry> 500 </entry><entry> error processing query or fetching data </entry></row> </tbody></tgroup></table> <bridgehead class="http://www.w3.org/1999/xhtml:h2"> HTTP Response Formats</bridgehead> <para>All standard MIME types of SPARQL Protocol are supported.</para> <bridgehead class="http://www.w3.org/1999/xhtml:h3"> SPARQL Protocol Client Response Formats</bridgehead> <table><title /><tgroup><thead /><tbody> <row /> <row><entry> 'application/sparql-results+xml' </entry><entry> SELECT, ASK </entry><entry> Canonical XML presentation of SPARQL result set </entry></row> <row><entry> 'text/rdf+n3' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'text/rdf+ttl' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'text/rdf+turtle' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'text/turtle' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'text/n3' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'application/turtle' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'application/x-turtle' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'application/rdf+xml' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> Canonical RDF/XML presentation </entry></row> </tbody></tgroup></table> <para> </para> <bridgehead class="http://www.w3.org/1999/xhtml:h3"> SPARQL Protocol Server Response Formats</bridgehead> <table><title /><tgroup><thead /><tbody> <row /> <row><entry> 'application/sparql-results+xml' </entry><entry> SELECT, ASK </entry><entry> Canonical XML presentation of SPARQL result set </entry></row> <row><entry> 'text/rdf+n3' </entry><entry> SELECT, ASK, CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'text/rdf+ttl' </entry><entry> SELECT, ASK, CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'text/rdf+turtle' </entry><entry> SELECT, ASK, CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'text/turtle' </entry><entry> SELECT, ASK, CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'text/n3' </entry><entry> SELECT, ASK, CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'application/turtle' </entry><entry> SELECT, ASK, CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'application/x-turtle' </entry><entry> SELECT, ASK, CONSTRUCT, DESCRIBE </entry><entry> Turtle </entry></row> <row><entry> 'application/x-nice-turtle' </entry><entry> SELECT, ASK, CONSTRUCT, DESCRIBE </entry><entry> Turtle, like above, but the server will try to use "list" and "[...]" notations to make the document easier to read. This formatting is a slow procedure so long results will be formatted as plain Turtle. </entry></row> <row><entry> 'text/rdf+nt' </entry><entry> SELECT </entry><entry> Format for NT (each triple is printed separately without abbreviations) </entry></row> <row><entry> 'text/plain' </entry><entry> SELECT </entry><entry> Format for NT (each triple is printed separately without abbreviations) </entry></row> <row><entry> 'text/ntriples' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> Format for NT (each triple is printed separately without abbreviations) </entry></row> <row><entry> 'application/x-trig' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> <ulink url="TriG">TriG</ulink> syntax for result sets, triples and quads (or sets of graphs with triples). While it is not used for quads, the output is same as for Turtle. </entry></row> <row><entry> 'application/rdf+xml' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> Canonical RDF/XML presentation </entry></row> <row><entry> 'application/soap+xml' </entry><entry> SELECT </entry><entry> SOAP XML </entry></row> <row><entry> 'application/soap+xml;11' </entry><entry> SELECT </entry><entry> SOAP XML </entry></row> <row><entry> 'text/html' </entry><entry> SELECT </entry><entry> HTML document for plain browsing; it's a TABLE for result set and HTML with micro-data for triples </entry></row> <row><entry> 'text/md+html' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> HTML with microdata; for triples only </entry></row> <row><entry> 'text/microdata+html' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> HTML with microdata; for triples only </entry></row> <row><entry> 'text/x-html+ul' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> HTML with triples grouped into hierarchical list </entry></row> <row><entry> 'text/x-html+tr' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> HTML with triples in form of a table </entry></row> <row><entry> 'application/vnd.ms-excel' </entry><entry> SELECT </entry><entry> HTML table for loading data into stylesheets </entry></row> <row><entry> 'text/csv' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> Comma-separated values </entry></row> <row><entry> 'text/tab-separated-values' </entry><entry> SELECT </entry><entry> Tab-separated values </entry></row> <row><entry> 'application/javascript' </entry><entry> SELECT </entry><entry> <ulink url="JavaScript">JavaScript</ulink> data fragment </entry></row> <row><entry> 'application/json' </entry><entry> SELECT </entry><entry> JSON </entry></row> <row><entry> 'application/sparql-results+json' </entry><entry> SELECT, ASK </entry><entry> JSON result set </entry></row> <row><entry> 'application/odata+json' </entry><entry> SELECT, ASK, CONSTRUCT, DESCRIBE </entry><entry> JSON in ODATA style </entry></row> <row><entry> 'application/microdata+json' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> Microdata as JSON; for triples only </entry></row> <row><entry> 'application/rdf+json' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> JSON in TALIS style; for triples only </entry></row> <row><entry> 'application/x-rdf+json' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> JSON in TALIS style; for triples only </entry></row> <row><entry> 'application/x-json+ld' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> JSON in Linked Data style; for triples only </entry></row> <row><entry> 'application/ld+json' </entry><entry> CONSTRUCT, DESCRIBE </entry><entry> JSON in Linked Data style; for triples only </entry></row> <row><entry> 'text/cxml' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> CXML output for rendering in Pivot Viewer of MS <ulink url="SilverLight">SilverLight</ulink>. Result sets and triples are handled in different ways. </entry></row> <row><entry> 'text/cxml+qrcode' </entry><entry> SELECT,CONSTRUCT, DESCRIBE </entry><entry> CXML output with QRcode imprinted into each picture; for result sets and triples </entry></row> <row><entry> 'application/atom+xml' </entry><entry> SELECT, CONSTRUCT, DESCRIBE </entry><entry> Atom-style XML </entry></row> <row><entry> 'application/xhtml+xml' </entry><entry> SELECT </entry><entry> RDFa placed into XHTML; for triples only </entry></row> </tbody></tgroup></table> <para>If the HTTP header returned by the remote server does not contain a 'Content-Type' line, the MIME-type may be deduced from the text of the returned body. Error messages returned from the service are returned as XML documents, using the mime-type application/xml. The documents consist of a single element containing an error message.</para> <bridgehead class="http://www.w3.org/1999/xhtml:h3"> Additional HTTP Response Formats -- SELECT</bridgehead> <para>Use the format parameter to select one of the following alternate output formats:</para> <table><title /><tgroup><thead /><tbody> <row /> <row><entry> HTML </entry><entry> HTML document containing query summary and tabular results </entry><entry> text/html </entry></row> <row><entry> JSON </entry><entry> JSON serialization of results. Conforms to the draft specification <ulink url="http://www.mindswap.org/~kendall/sparql-results-json/">Serializing SPARQL Query Results in JSON</ulink> </entry><entry> application/sparql-results+json </entry></row> <row><entry> Javascript </entry><entry> Javascript serialization of results. Generates an HTML table with the CSS class sparql. The table contains a column indicating row number and additional columns for each query variable. Each query solution contributes one row of the table. Unbound variables are indicated with a non-breaking space in the appropriate table cells. </entry><entry> application/javascript </entry></row> <row><entry> XML </entry><entry> </entry><entry> application/sparql-results+xml </entry></row> <row><entry> TURTLE </entry><entry> </entry><entry> text/rdf+n3 </entry></row> </tbody></tgroup></table> <para> </para> <bridgehead class="http://www.w3.org/1999/xhtml:h3"> Additional HTTP Response Formats -- DESCRIBE & CONSTRUCT</bridgehead> <table><title /><tgroup><thead /><tbody> <row /> <row><entry> JSON </entry><entry> </entry><entry> application/rdf+json </entry></row> </tbody></tgroup></table> <bridgehead class="http://www.w3.org/1999/xhtml:h2"> Virtuoso/PL APIs</bridgehead> <para>Virtuoso also provides SPARQL Protocol client APIs in PL, so you can communicate with SPARQL Query Services from within SQL stored-procedures. The APIs are as follows:</para> <table><title /><tgroup><thead /><tbody> <row /> <row><entry> DB.DBA.SPARQL_REXEC </entry><entry> behaves like DBA.SPARQL_EVAL, but executes the query on the specified server. The procedure does not return anything. Instead, it creates a result set. </entry></row> <row><entry> DB.DBA.SPARQL_REXEC_TO_ARRAY </entry><entry> behaves like DBA.SPARQL_EXEC_TO_ARRAY(), but executes the query on the specified server. The function return a vector of rows, where every row is represented by a vector of values of fields. </entry></row> <row><entry> DB.DBA.SPARQL_REXEC_WITH_META </entry><entry> has no local SPARQL_EVAL analog. It produces not only an array of result rows but also array of metadata about result set in a format used by the exec() function. </entry></row> </tbody></tgroup></table> <bridgehead class="http://www.w3.org/1999/xhtml:h2"> Examples</bridgehead> <para>There is a live <ulink url="http://demo.openlinksw.com/sparql_demo">Virtuoso Demo Server</ulink> instance available at all times for experimentation and demonstrations. It includes a collection of saved queries demonstrating Virtuoso's implementation of the <ulink url="http://www.w3.org/TR/rdf-dawg-uc/">DAWG's SPARQL test-suite</ulink> -- a collection of SPARQL query language use-cases that enables interactive and simplified testing of a RDF triple-store's SPARQL implementation.</para> <para>Virtuoso also powers the publicly accessible endpoints housing datasets for <ulink url="http://dbpedia.org/sparql">DBpedia</ulink>, the <ulink url="http://lod.openlinksw.com/sparql">LOD Cloud Cache</ulink>, and <ulink url="http://linkeddata.uriburner.com/sparql/">URIBurner</ulink>.</para> <bridgehead class="http://www.w3.org/1999/xhtml:h2"> Implementation Notes</bridgehead> <para>This service has been implemented using <ulink url="http://docs.openlinksw.com/virtuoso">OpenLink Virtuoso</ulink>.</para> <para> </para> <bridgehead class="http://www.w3.org/1999/xhtml:h2"> Related</bridgehead> <itemizedlist mark="bullet" spacing="compact"><listitem><ulink url="VirtSPARQLEndpointProtection">Safeguarding your Virtuoso-hosted SPARQL Endpoint</ulink> </listitem> <listitem><ulink url="VirtTipsAndTricksGuideSPARQLEndpointProtection">SPARQL Endpoint Protection Methods Collection</ulink> </listitem> <listitem><ulink url="http://docs.openlinksw.com/virtuoso/">Virtuoso documentation</ulink> <itemizedlist mark="bullet" spacing="compact"><listitem><ulink url="http://docs.openlinksw.com/virtuoso/rdfsparql.html#rdfsupportedprotocolendpoint">SPARQL Service Endpoint</ulink> </listitem> <listitem><ulink url="http://docs.openlinksw.com/virtuoso/rdfsparql.html#rdfsupportedprotocolendpointuri">Service Endpoint Security</ulink> </listitem> <listitem><ulink url="http://docs.openlinksw.com/virtuoso/rdfsparql.html#sparqwebservicetbl">Managing a SPARQL Web Service Endpoint</ulink> </listitem> <listitem><ulink url="http://docs.openlinksw.com/virtuoso/rdfsparql.html">SPARQL</ulink> </listitem> </itemizedlist></listitem> <listitem><ulink url="VirtTipsAndTricksGuide">Virtuoso Tips and Tricks Collection</ulink> <itemizedlist mark="bullet" spacing="compact"><listitem><ulink url="VirtSPARQLDET">SPARQL Endpoint DET Configuration Guide</ulink> </listitem> <listitem><ulink url="VirtSPARQLSecurityWebID">WebID Protocol & SPARQL Endpoint ACLs Tutorial</ulink> </listitem> <listitem><ulink url="VirtOAuthSPARQL">SPARQL OAuth Tutorial</ulink> </listitem> <listitem><ulink url="VirtTipsAndTricksGuideSPARQLEndpoints">Securing SPARQL endpoints</ulink> </listitem> </itemizedlist></listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/OdsSPARQLAuth">SPARUL over SPARQL using the http://cname:port/sparql-auth endpoint</ulink> </listitem> <listitem><ulink url="VirtAuthServerUI">Virtuoso Authentication Server UI</ulink> </listitem> <listitem><ulink url="VirtSPARQLSSL">Manage a SPARQL-WebID based Endpoint</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/VirtODSSecurityWebID">WebID Protocol Support in OpenLink Data Spaces</ulink>. </listitem> <listitem>Manage ODS Datadspaces Objects <ulink url="WebID">WebID</ulink> Access Control Lists (ACLs): <itemizedlist mark="bullet" spacing="compact"><listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSBriefcaseWebID">ODS Briefcase WebID based ACL Guide</ulink> <itemizedlist mark="bullet" spacing="compact"><listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSBriefcaseWebIDPerson">Person Entity WebID based ACL Guide</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSBriefcaseWebIDGroup">Group Entity WebID based ACL Guide</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSBriefcaseWebIDPublic">Public WebID based ACL Guide</ulink> </listitem> </itemizedlist></listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSFeedManagerWebIDACL">ODS Feed Manager WebID based ACL Guide</ulink> <itemizedlist mark="bullet" spacing="compact"><listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSFeedManagerWebIDACLPerson">Person Entity Specific ACL</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSFeedManagerWebIDACLGroup">Group Entity Specific ACL</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSFeedManagerWebIDACLPublic">Public Specific ACL for anyone with a WebID</ulink> </listitem> </itemizedlist></listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSCalendarWebIDACL">ODS Calendar WebID based ACL Guide</ulink> <itemizedlist mark="bullet" spacing="compact"><listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSCalendarWebIDACLPerson">Person Entity Specific ACL</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSCalendarWebIDACLGroup">Group Entity Specific ACL</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSCalendarWebIDACLPublic">Public Specific ACL for anyone with a WebID</ulink> </listitem> </itemizedlist></listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSBookmarksWebIDACL">ODS Bookmark Manager WebID based ACL Guide</ulink> <itemizedlist mark="bullet" spacing="compact"><listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSBookmarksWebIDACLPerson">Person Entity Specific ACL</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSBookmarksWebIDACLGroup">Group Entity Specific ACL</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSBookmarksWebIDACLPublic">Public Specific ACL for anyone with a WebID</ulink> </listitem> </itemizedlist></listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSAddressBookWebIDACL">ODS Addressbook WebID based ACL Guide</ulink> <itemizedlist mark="bullet" spacing="compact"><listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSAddressBookWebIDACLPerson">Person Entity Specific ACL</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSAddressBookWebIDACLGroup">Group Entity Specific ACL</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSAddressBookWebIDACLPublic">Public Specific ACL for anyone with a WebID</ulink> </listitem> </itemizedlist></listitem> </itemizedlist></listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSPkiSetup">Guide for Set up a X.509 certificate issuer and HTTPS listener and generate ODS user certificates.</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/VirtODSPubSubHub">Setting up PubSubHub in ODS</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/VirtPubSubHub">PubSubHubBub Demo Client Example</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/VirtFeedPubSubHub">Feed subscription via PubSubHub protocol Example</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/VirtPubSubHubACL">Setting Up PubSubHub to use WebID Protocol or IP based control lists</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/OdsKeyImport">CA Keys Import using Conductor</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSGenerateX509Certificate">Generate an X.509 Certificate hosted WebID Guide</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSGenerateWebIDX509CertOSKeystore">Generate an X.509 Certificate (with a WebID watermark) to be managed by host operating system keystore</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSGenerateWebIDX509CertBrsKeystore">Generate an X.509 Certificate (with a WebID watermark) to be managed by a browser-based keystore</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSWebIDIdP">Using Virtuoso's WebID Verification Proxy Service with a WebID-bearing X.509 certificate</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSWebIDIdpProxy">Using Virtuoso's WebID Identity Provider (IdP) Proxy Service with an X.509 certificate</ulink> </listitem> <listitem><ulink url="http://ods.openlinksw.com/wiki/ODS/ODSBriefcaseWebIDShareFile">ODS Briefcase WebID Protocol Share File Guide</ulink> </listitem> <listitem><ulink url="http://esw.w3.org/topic/foaf+ssl">WebID Protocol Specification</ulink> </listitem> <listitem><ulink url="https://foaf.me/simpleLogin.php">Test WebID Protocol Certificate page</ulink> </listitem> <listitem><ulink url="http://test.foafssl.org/cert/">WebID Protocol Certificate Generation page</ulink></listitem> </itemizedlist><para> </para> </section></docbook>