Linked Open Data - HTTP Caching Evaluation

"http://dbpedia.org/data/Linked_Data", "Freebase" => "http://rdf.freebase.com/rdf/guid/9202a8c04000641f8000000005714541", "GeoSpecies" => "http://lod.geospecies.org/ses/4XSQO.rdf", "Geonames" => "http://sws.geonames.org/5279468/about.rdf", "BBC Programmes" =>"http://www.bbc.co.uk/programmes/p0054wgr.rdf", "RKB (Citeseer)" => "http://citeseer.rkbexplorer.com/data/resource-CSP26378", "DBLP" => "http://www4.wiwiss.fu-berlin.de/dblp/data/person/100059", "LinkedMDB" => "http://data.linkedmdb.org/data/film/2014", "LinkedGeoData" => "http://linkedgeodata.org/triplify/way/27743320", "ProductDB" => "http://productdb.org/2006-audi-tt.rdf", "RDFOhloh" => "http://rdfohloh.wikier.org/project/firefox/rdf", "Telegraphis" => "http://telegraphis.net/data/capitals/AF/Kabul", "US Census" => "http://www.rdfabout.com/sparql?query=DESCRIBE ", "W3C Wordnet" => "http://www.w3.org/2006/03/wn/wn20/instances/wordsense-bank-noun-1.rdf", "Virtuoso's URI burner" => "http://linkeddata.uriburner.com/about/rdf/http://www.crunchbase.com/financial-organization/andreessen-horowitz", "DogFood" => "http://data.semanticweb.org/person/abraham-bernstein/rdf", "Crunchbase (Semsol)" => "http://cb.semsol.org/company/3x-systems" ); $accept_header = array('Accept' => 'application/rdf+xml'); $options = array( 'return_info' => true, 'headers' => $accept_header ); $countLastModified = 0; $countETag = 0; $countNoCache = 0; $countPrivateCache = 0; $countLastModifiedANDETag = 0; $countCacheControl = 0; echo "

Samples (HTTP response headers)

"; echo "\n\n"; foreach($samples as $sample) { $dataset = array_keys($samples, $sample); $start = (float) array_sum(explode(' ',microtime())); $result = load($sample, $options); $end = (float) array_sum(explode(' ',microtime())); echo "\n"; echo "\n"; echo "\n"; if($result['headers']['Last-Modified']){ echo "\n"; $countLastModified++; } else { echo "\n"; } if($result['headers']['ETag']){ echo "\n"; $countETag++; } else { echo "\n"; } if($result['headers']['Cache-Control']){ echo "\n"; $countCacheControl++; $ccHeader = $result['headers']['Cache-Control']; if($ccHeader == 'no-cache'){ $countNoCache++; } if(stristr($ccHeader, 'private') !== FALSE) { $countPrivateCache++; } } else { echo "\n"; } if($result['headers']['Pragma']){ echo "\n"; } else { echo "\n"; } echo ""; echo "\n"; // extra stats if($result['headers']['Last-Modified'] && $result['headers']['ETag']){ $countLastModifiedANDETag++; } } echo "\n
DatasetSampleLast-ModifiedETagCache-ControlPragmaProcessing Time (s)
" . $dataset[0] . "$sample" . $result['headers']['Last-Modified'] . "-" . $result['headers']['ETag']. "-" . $result['headers']['Cache-Control']. "-" . $result['headers']['Pragma']. "-" . sprintf("%.4f", ($end - $start)) . "
\n"; echo "

Summary

\n"; $noLastModified = sizeof($samples) - $countLastModified; $LMratio = round(100*($countLastModified/sizeof($samples)), 1); echo "

\n"; echo " "; $noETag = sizeof($samples) - $countETag; $ETratio = round(100*($countETag/sizeof($samples)), 1); echo " "; echo "

\n"; $noLastModifiedANDETag = sizeof($samples) - $countLastModifiedANDETag; $LastModifiedANDETagratio = round(100*($countLastModifiedANDETag/sizeof($samples)), 1); echo "

\n"; //echo " "; $noCacheControl = sizeof($samples) - $countCacheControl; $otherCache = $countCacheControl - $countNoCache - $countPrivateCache; $noCCratio = round(100*($noCacheControl/sizeof($samples)), 1); $noCacheCCratio = round(100*($countNoCache/sizeof($samples)), 1); $privateCCratio = round(100*($countPrivateCache/sizeof($samples)), 1); $otherCCratio = round(100*($otherCache/sizeof($samples)), 1); echo ""; echo "

\n"; echo "

Total sample size: " . sizeof($samples) . " URIs.

\n"; echo "

#Last-Modified: $countLastModified
\n"; echo " #ETag: $countETag
\n"; echo " #(Last-Modified and ETag): $countLastModifiedANDETag
\n"; echo " #Cache-Control: $countCacheControl
\n"; echo " - #no-cache: $countNoCache
\n"; echo " - #private: $countPrivateCache

\n"; ?>