In certain cases like for Ajax applications, it's prohibited to issue HTTP requests to another server that origin server. In other cases it is needed to transform the content of target to an RDF format. To this purpose the Virtuoso Server provide a RDF proxy service. This service takes as argument target URL and may return content as-is or will try to transform with SPARQL sponger and return RDF data representing the target. In case of transformation to RDF the serialization of the output can be forced by a URL parameter of by content negotiation.
Virtuoso reserves the path '/proxy/' for RDF proxy service. In the current implementation, Virtuoso defines virtual directories for HTTP requests that come to the port specified as 'ServerPort?' in the '[HTTPServer]' section of Virtuoso configuration file and refer to the above path string. So 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/proxy/'.
The RDF proxy service takes following URL parameters:
- url - the URL of the target
- force - if 'rdf' is specified will try to extract RDF data from target and return it
- header - HTTP headers to be sent to the target
- output-format - if 'force=rdf' is given, designate the output MIME type of the RDF data, the default is 'rdf+xml', can be also 'n3' or 'turtle' or 'ttl'.
- get - the sponger cache behaviour , represents SPARQL extension 'get:soft' , accepts two values 'soft' (default) and 'replacing'
- login (optional) - user account name, if given the cached data will be associated with given account and certain RDF mapping functions such as for FaceBook? will use account specific settings
- sparql_(extension) - (optional) - any of SPARQL extensions , for example 'sparql_input:grab-limit' with value '1' will result in adding 'define input:grab-limit 1' to the query executed by proxy service.
When no 'output-format' is given and RDF data is asked, the result will be serialized with MIME type depending of 'Accept' header i.e. the proxy service will do content negotiation.