LWP::UserAgent::SemWebCache - LWP::UserAgent for caching SPARQL Queries


This is a slight modification of LWP::UserAgent::CHICaching, and can be used much like it:

  my $cache = CHI->new( driver => 'Memory', global => 1 );
  my $ua = LWP::UserAgent::SemWebCache->new(cache => $cache);
  my $res1 = $ua->get("http://localhost:3000/?query=DAHUT");


This class composes the two roles LWP::UserAgent::Role::CHICaching and LWP::UserAgent::Role::CHICaching::VaryNotAsterisk and reimplements the key attribute.

For now, it makes a relatively uncertain assumption that could in some cases violate Section 4.1 of RFC7234 and cause unpredictable results: Since SPARQL results come in different serializations, the Vary header will be present in most cases, and therefore, different caches would usually have been required. However, if we assume that no variations that are semantically significant could occur, then we should be OK. Unless, of course, the server declared that anything goes, which amount to setting Vary: *, in that case, we don't cache.

Additionally, since the URI resulting from a SPARQL protocol query might be long, and long keys are often difficult for backend caches, so the reimplementation of key will create a digest.

Attributes and Methods

key, clear_key

The key to use for a response. This role will return the canonical URI of the request as a string, which is a reasonable default.


Kjetil Kjernsmo <>.


This software is copyright (c) 2015, 2016 by Kjetil Kjernsmo.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.