RDF-Endpoint-0.07/000755 000765 000024 00000000000 12370000071 013706 5ustar00gregstaff000000 000000 RDF-Endpoint-0.07/Changes000644 000765 000024 00000000000 12370000053 015167 0ustar00gregstaff000000 000000 RDF-Endpoint-0.07/Changes.ttl000644 000765 000024 00000015771 12367777777 016066 0ustar00gregstaff000000 000000 # -*-n3-*- @prefix dc: . @prefix dcterms: . @prefix foaf: . @prefix doap: . @prefix xsd: . @prefix asc: . @prefix my: . <> dc:title "Changes" ; dc:description "Changes for RDF::Endpoint" ; dc:subject my:project ; . dcterms:isVersionOf my:project ; doap:Version [ doap:revision "0.07" ; doap:created "2014-08-04" ; ] ; asc:changes [ asc:addition "Added Plack::App::RDF::Endpoint." ; asc:update "Updated RDF::Endpoint to quote raw-value ETag values (github issue #106)." ; asc:update "Use base64 encoding of tags to get shorter strings (patch from Kjetil Kjernsmo)." ; asc:update "Updated endpoint.psgi to look for PERLRDF_STORE environment variable." ; ] ; . dcterms:isVersionOf my:project ; doap:Version [ doap:revision "0.06" ; doap:created "2014-07-01" ; ] ; asc:changes [ asc:addition "Add Server header (from Kjetil Kjernsmo via github pull request #93)." ; asc:addition "Added initial support for application/json-problem errors." ; asc:update "Fixed config bug in t/psgi.t." ; asc:update "Added SPARQL 1.1 WG protocol tests." ; asc:update "The load_data and update configuration flags cannot both be true at the same time." ; asc:update "Updated RDF::Endpoint to return a 400 error when datasets are specified both in protocol and query." ; asc:update "Made RDF::Endpoint->new die on invalid config (when both load_data and update options are specified)." ; asc:update "Added Allow header to HTTP 405 responses." ; ] ; . dcterms:isVersionOf my:project ; doap:Version [ doap:revision "0.05" ; doap:created "2012-05-28" ; ] ; asc:changes [ asc:addition "Use a default in-memory store if no config file is available." ; asc:addition "Let RDF_ENDPOINT_FILE env variable override the Config::JFDI default." ; asc:update "Fixed bug in handling of update requests." ; asc:update "Improved conformance with SPARQL 1.1 Protocol spec." ; asc:update "Added use of Plack::Builder and Plack::Middleware::AccessLog in default configuration." ; asc:update "Improved HTTP error status code messages." ; asc:update "Added Service Description resultFormat triples for SPARQL XML and JSON Results." ; asc:update "Renamed Service Description sd:defaultDatasetDescription property to sd:defaultDataset." ; asc:update "Croak when unable to open file handles" ; asc:update "Removed custom logging code (should be done with Plack middleware)." ; asc:update "Require a recent version (0.99) of Plack::Request with support for logging." ; asc:update "Updated see also link to SPARQL Protocol (1.1)." ; ] ; . dcterms:isVersionOf my:project ; doap:Version [ doap:revision "0.04" ; doap:created "2011-07-19" ; ] ; asc:changes [ asc:addition "Added RDFa serialization tests (from KjetilK)." ; asc:update "Allow the service description default graph to be a URI or a blank node (based on config value)." ; asc:update "Require RDF::RDFa::Generator 0.102 (fixes RDFa service description serialization bug)." ; asc:update "Fixed bug introduced by commit 3fb5e48 causing query results to disappear from HTML results page." ; ] ; . dcterms:isVersionOf my:project ; doap:Version [ doap:revision "0.03" ; doap:created "2011-06-07" ; ] ; asc:changes [ asc:update "Removed duplicated, hard-coded HTML to allow better customization of HTML (from nichtich)." ; asc:update "Actually dereference correctly endpoint_path, and make the test use root (from kjetilk)." ; asc:update "Make endpoint path configurable (from kjetilk)." ; asc:update "style element must go in head (from kjetilk)." ; asc:update "Updated service description RDF to use sd:endpoint instead of sd:url (tracking updates in the SD spec)." ; asc:update "Add merging of namespace hashes (from kjetilk)." ; asc:update "Replace new_with_string with new and change docs (from kjetilk)." ; ] ; . dcterms:isVersionOf my:project ; doap:Version [ doap:revision "0.02" ; doap:created "2011-04-16" ; ] ; asc:changes [ asc:addition "Added ETag support for query results, varying based on Accept and Accept-Encoding headers, and query string." ; asc:addition "Added support for POSTing queries and updates directly using the appropriate media types." ; asc:addition "Added CodeMirror files for syntax highlighting SPARQL query form markup." ; asc:update "Changes to align with SPARQL Protocol 1.1." ; asc:update "Updated tests to test functionality directly via PSGI." ; asc:update "Updated content negotiation quality values." ; asc:update "Moved endpoint-specific configuration variables into top-level 'endpoint' hash." ; asc:update "Fixed caching bug in which browsers would use cached results across endpoint instantiations." ; asc:update "Service description is now cached in the RDF::Endpoint object." ; asc:update "Updated endpoint.psgi to move config parsing and endpoint object construction outside of the request handler." ; asc:update "Updated RDF::Endpoint to use a persistent model object across run() calls." ; ] ; . dcterms:isVersionOf my:project ; doap:Version [ doap:revision "0.01" ; doap:created "2010-07-14" ; ] ; asc:changes [ asc:addition "First release." ; ] ; . my:project a doap:Project ; doap:name "RDF-Endpoint" ; doap:shortdesc "A SPARQL Protocol Endpoint implementation"@en ; doap:programming-language "Perl" ; doap:homepage ; doap:download-page ; doap:bug-database ; doap:maintainer ; doap:developer ; doap:documenter ; doap:tester ; doap:created "2010-06-19"^^xsd:date ; doap:license ; . a foaf:Person ; foaf:name "Gregory Todd Williams" ; foaf:homepage ; foaf:page ; foaf:mbox ; ; . RDF-Endpoint-0.07/Changes.xml000644 000765 000024 00000000571 12370000053 016003 0ustar00gregstaff000000 000000 RDF-Endpoint-0.07/inc/000755 000765 000024 00000000000 12370000067 014464 5ustar00gregstaff000000 000000 RDF-Endpoint-0.07/lib/000755 000765 000024 00000000000 12370000067 014461 5ustar00gregstaff000000 000000 RDF-Endpoint-0.07/LICENSE000644 000765 000024 00000005331 11552456153 014736 0ustar00gregstaff000000 000000 Except as described below, all contents of this package are Copyright (c) 2010 Gregory Todd Williams. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. With the exception of the CodeMirror files enumerated below, the files in this package may also be redistributed and/or modified under the same terms as Perl itself. -------------------------------------------------------------------------------- The following license applies to the CodeMirror (Javascript and CSS) files contained in this package and retrieved from http://codemirror.net/: share/www/css/docs.css share/www/css/sparqlcolors.css share/www/js/codemirror.js share/www/js/editor.js share/www/js/highlight.js share/www/js/mirrorframe.js share/www/js/parsecss.js share/www/js/parsedummy.js share/www/js/parsehtmlmixed.js share/www/js/parsejavascript.js share/www/js/parsesparql.js share/www/js/parsexml.js share/www/js/select.js share/www/js/sparql_form.js share/www/js/stringstream.js share/www/js/tokenize.js share/www/js/tokenizejavascript.js share/www/js/undo.js share/www/js/unittests.js share/www/js/util.js Copyright (c) 2007-2010 Marijn Haverbeke This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Marijn Haverbeke marijnh@gmail.com RDF-Endpoint-0.07/Makefile.PL000644 000765 000024 00000002251 12354561066 015702 0ustar00gregstaff000000 000000 use strict; use warnings; use inc::Module::Install; name 'RDF-Endpoint'; all_from 'lib/RDF/Endpoint.pm'; author 'Gregory Todd Williams '; license 'zlib'; test_requires 'Test::More' => '0.61'; test_requires 'Test::WWW::Mechanize::PSGI' => 0; requires 'JSON' => 0; requires 'Carp' => 0; requires 'File::ShareDir' => 0; requires 'RDF::Trine' => 0.134; requires 'RDF::Query' => 2.905; requires 'RDF::RDFa::Generator' => 0.102; requires 'Plack::Request' => 0.99; requires 'Plack::Response' => 0; requires 'Plack::Middleware::AccessLog' => 0; requires 'Data::Dumper' => 0; requires 'Config::JFDI' => 0; requires 'HTTP::Negotiate' => 0; requires 'IO::Compress::Gzip' => 0; requires 'XML::LibXML' => 1.70; requires 'HTML::HTML5::Writer' => 0; requires 'HTML::HTML5::Parser' => 0; requires 'Hash::Merge::Simple' => 0; resources( 'homepage' => "http://search.cpan.org/dist/RDF-Endpoint/", 'repository' => "http://github.com/kasei/perlrdf/", ); write_doap_changes; write_doap_changes_xml; install_share; install_script glob('scripts/*'); sign; WriteAll; RDF-Endpoint-0.07/MANIFEST000644 000765 000024 00000002256 12370000067 015051 0ustar00gregstaff000000 000000 README Changes Changes.ttl Changes.xml inc/Module/Install.pm inc/Module/Install/Base.pm inc/Module/Install/Can.pm inc/Module/Install/DOAPChangeSets.pm inc/Module/Install/Fetch.pm inc/Module/Install/Makefile.pm inc/Module/Install/Metadata.pm inc/Module/Install/Scripts.pm inc/Module/Install/Share.pm inc/Module/Install/Win32.pm inc/Module/Install/WriteAll.pm lib/RDF/Endpoint.pm LICENSE Makefile.PL MANIFEST This list of files META.yml rdf_endpoint.json scripts/endpoint.psgi share/index.html share/results.html share/www/favicon.ico share/www/css/docs.css share/www/css/sparqlcolors.css share/www/js/codemirror.js share/www/js/editor.js share/www/js/highlight.js share/www/js/mirrorframe.js share/www/js/parsecss.js share/www/js/parsedummy.js share/www/js/parsehtmlmixed.js share/www/js/parsejavascript.js share/www/js/parsesparql.js share/www/js/parsexml.js share/www/js/select.js share/www/js/sparql_form.js share/www/js/stringstream.js share/www/js/tokenize.js share/www/js/tokenizejavascript.js share/www/js/undo.js share/www/js/unittests.js share/www/js/util.js t/00-load.t t/pod.t t/pod_coverage.t t/psgi.t SIGNATURE Public-key signature (added by MakeMaker) RDF-Endpoint-0.07/META.yml000644 000765 000024 00000002151 12370000053 015156 0ustar00gregstaff000000 000000 --- abstract: 'A SPARQL Protocol Endpoint implementation' author: - 'Gregory Todd Williams ' - 'Gregory Todd Williams ' build_requires: ExtUtils::MakeMaker: 6.59 Test::More: '0.61' Test::WWW::Mechanize::PSGI: 0 configure_requires: ExtUtils::MakeMaker: 6.59 distribution_type: module dynamic_config: 1 generated_by: 'Module::Install version 1.10' license: zlib meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 name: RDF-Endpoint no_index: directory: - inc - share - t requires: Carp: 0 Config::JFDI: 0 Data::Dumper: 0 File::ShareDir: 0 HTML::HTML5::Parser: 0 HTML::HTML5::Writer: 0 HTTP::Negotiate: 0 Hash::Merge::Simple: 0 IO::Compress::Gzip: 0 JSON: 0 Plack::Middleware::AccessLog: 0 Plack::Request: 0.99 Plack::Response: 0 RDF::Query: 2.905 RDF::RDFa::Generator: 0.102 RDF::Trine: 0.134 XML::LibXML: 1.7 perl: 5.8.0 resources: homepage: http://search.cpan.org/dist/RDF-Endpoint/ license: http://dev.perl.org/licenses/ repository: http://github.com/kasei/perlrdf/ version: '0.07' RDF-Endpoint-0.07/rdf_endpoint.json000644 000765 000024 00000002026 12354561066 017276 0ustar00gregstaff000000 000000 { # "store": "Memory", # "store": "Memory;file:///Users/samofool/foaf.xrdf", # "store" : "DBI;basic;DBI:SQLite:t/data/basic.db;user;pass", "store": "DBI;endpoint;DBI:SQLite:dbname=endpoint.sqlite;;", "endpoint": { "update": true, # allow SPARQL Update operations "load_data": false, # allow loading RDF data via SPARQL Protocol or FROM/FROM NAMED clauses "html": { "resource_links": true, # turn resources into links in HTML query result pages "embed_images": false, # display foaf:Images as images in HTML query result pages "image_width": 200, # with 'embed_images', scale images to this width }, "service_description": { "default": true, # generate dataset description of the default graph "named_graphs": true, # generate dataset description of the available named graphs "related": ["http://dbpedia.org/sparql", "http://kasei.us/sparql"], "software": "http://kasei.us/code/rdf-query/#rdf-query-2.909", "namespaces": { "foaf": "http://xmlns.com/foaf/0.1/", }, }, } } RDF-Endpoint-0.07/README000644 000765 000024 00000002161 12366061374 014610 0ustar00gregstaff000000 000000 RDF::Endpoint - A SPARQL Protocol Endpoint implementation This modules implements the SPARQL Protocol for RDF using the PSGI interface provided by Plack. It may be run with any Plack handler. REQUIREMENTS To install RDF::Endpoint you'll need the following perl modules installed: * JSON * Carp * File::ShareDir * RDF::Trine * RDF::Query * RDF::RDFa::Generator * Plack::Request * Plack::Response * Plack::Middleware::AccessLog * Data::Dumper * Config::JFDI * HTTP::Negotiate * IO::Compress::Gzip * XML::LibXML * HTML::HTML5::Writer * HTML::HTML5::Parser * Hash::Merge::Simple The following additional modules are required for testing the installation: * Test::More * Test::WWW::Mechanize::PSGI INSTALLATION To install, run: perl Makefile.PL make make test make install COPYRIGHT Copyright (C) 2010-2014 Gregory Williams. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. AUTHOR Gregory Williams RDF-Endpoint-0.07/scripts/000755 000765 000024 00000000000 12370000067 015402 5ustar00gregstaff000000 000000 RDF-Endpoint-0.07/share/000755 000765 000024 00000000000 12370000067 015015 5ustar00gregstaff000000 000000 RDF-Endpoint-0.07/SIGNATURE000644 000765 000024 00000010007 12370000071 015170 0ustar00gregstaff000000 000000 This file contains message digests of all files listed in MANIFEST, signed via the Module::Signature module, version 0.73. To verify the content in this distribution, first make sure you have Module::Signature installed, then type: % cpansign -v It will check each file's integrity, as well as the signature's validity. If "==> Signature verified OK! <==" is not displayed, the distribution may already have been compromised, and you should not run its Makefile.PL or Build.PL. -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 Changes SHA1 266f39b41726172b55273c5591dc7bbcdbe41c8c Changes.ttl SHA1 b11936d525a7da21f77f2514f47682cf4e3f4cd6 Changes.xml SHA1 14a506260237169ed443ed15a269369cee605be3 LICENSE SHA1 e990e5290fcd14b34615b637c2c9d8c0444b79f4 MANIFEST SHA1 fa5b79087fa3b88c9bc696b4877e2792f0513737 META.yml SHA1 5e794284d491f879ee7bcaf750b5cdbecccc29de Makefile.PL SHA1 c082d44c499766f1583a4feda9e2ec11e8c46d44 README SHA1 4f7982f7e554df23debce735ab343d88d7355140 inc/Module/Install.pm SHA1 c68c85ca62ae30d83f633975cd9af2a0789f59e0 inc/Module/Install/Base.pm SHA1 4797fd314e2653a427e725104704b0320993ba8c inc/Module/Install/Can.pm SHA1 470809a1dbe03e197e74dde79c6af40b5f7f9b26 inc/Module/Install/DOAPChangeSets.pm SHA1 b771d93af2bfc41273f48fa36082bf1bd6f21dbe inc/Module/Install/Fetch.pm SHA1 f4f3258a505a432a58cbcdc1fd030ef5e8e90985 inc/Module/Install/Makefile.pm SHA1 100a0dd8572f0b40373350fdd6c0a6f035d9dc39 inc/Module/Install/Metadata.pm SHA1 15651618fd1e8d2fdb8da4c020bbd3d829599c42 inc/Module/Install/Scripts.pm SHA1 403deaa147e0c16c3be255f1360179e5c74d1f3f inc/Module/Install/Share.pm SHA1 4490fed943f4e556db9fd054b7ec8765ca417f7d inc/Module/Install/Win32.pm SHA1 8464ddf690b9f7036a0974ff172ec0ced2f6a329 inc/Module/Install/WriteAll.pm SHA1 9a0ca5005eee5798e62299770974b46d58f54a0f lib/RDF/Endpoint.pm SHA1 084485f2e97af1bc0e8e74a72d5f14a57348a368 rdf_endpoint.json SHA1 705b5b38f7601f3389b4e13e5b251720027af64b scripts/endpoint.psgi SHA1 19ac766464ef05698ac985e2a42e87dbb7912f3f share/index.html SHA1 6dd0cf355b49dcb0fdfe9203c68917d5320584f8 share/results.html SHA1 c40ebad09f7e1d92ad0228a0625d730ba2f57b84 share/www/css/docs.css SHA1 398bae2ae66a19ab8976036b50a2d20041b67fe5 share/www/css/sparqlcolors.css SHA1 aa6874f2bad5f0b75b0ff52760f5e6b48ec933ae share/www/favicon.ico SHA1 13fece7654a01193013d3d96528c851bfc79a300 share/www/js/codemirror.js SHA1 d372c911fcc2bd030da800fdeedfbcd6b0100c83 share/www/js/editor.js SHA1 551ff99056361eebfba2a32ea7445502a6eb4f21 share/www/js/highlight.js SHA1 5bff996ab2564db1a998de30cb9e1ae07cbe62b5 share/www/js/mirrorframe.js SHA1 d7540f8390913afc0d58484bf5161cf9b9aad9f8 share/www/js/parsecss.js SHA1 a0028275114eaedf7ddcf57976c99c32ecb2c1d3 share/www/js/parsedummy.js SHA1 39383cdfc93568cc5673e2b71f681e2811fb5463 share/www/js/parsehtmlmixed.js SHA1 d5319247a4b26cafccfd4f26621918f0f4d22ef4 share/www/js/parsejavascript.js SHA1 c6597fb9a5c7969237f7f039f2d0bc6968ef7ce7 share/www/js/parsesparql.js SHA1 ae75f537ad61277a21a8ec423f5deffed8454e22 share/www/js/parsexml.js SHA1 85cdbc16cd1581f441480d91fa5c0a50f234ff0b share/www/js/select.js SHA1 d3261a5ddb7e5835c7abed5d5c343f0ef98637a5 share/www/js/sparql_form.js SHA1 19cc324cce7165c868a60d523b2462c648f20887 share/www/js/stringstream.js SHA1 5fdb14f3db575d0ce6a7113f96ea5a530f4f1941 share/www/js/tokenize.js SHA1 7f581a2b4647f1214d1bc3160eb4e166a1261e4f share/www/js/tokenizejavascript.js SHA1 9bba7456d4a25b23e805bc2d1d5bde61371c4e82 share/www/js/undo.js SHA1 26ff15a8f6c196e8bd9f5d7e7b628a6ee9b0dfaa share/www/js/unittests.js SHA1 201409b1d00a8df0b65b00a1b92ab62d9e0bbd7a share/www/js/util.js SHA1 ab27c130ce49175526943d0ca34d6f7a1197a630 t/00-load.t SHA1 6387af7a5fde0747be5bc9ad2ec15ca9759bd95a t/pod.t SHA1 9115f7ffe1933ad736dc292f3c89595b36ed6aa2 t/pod_coverage.t SHA1 9eb5c0dd1f1e99ad3d05afaae4d3179b714f94a5 t/psgi.t -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 Comment: GPGTools - http://gpgtools.org iEYEARECAAYFAlPgADcACgkQhPK6VMqoyC1ItACgkBPfSy6WnP/2pB2IX6KxzKKg 1N0AoIwR3j6FVkOfYDiK6Dh1RhTjlcU5 =DWjn -----END PGP SIGNATURE----- RDF-Endpoint-0.07/t/000755 000765 000024 00000000000 12370000067 014156 5ustar00gregstaff000000 000000 RDF-Endpoint-0.07/t/00-load.t000755 000765 000024 00000000222 11417373145 015511 0ustar00gregstaff000000 000000 #!perl use Test::More tests => 1; BEGIN { use_ok( 'RDF::Endpoint' ); } diag( "Testing RDF::Endpoint $RDF::Endpoint::VERSION, Perl $], $^X" ); RDF-Endpoint-0.07/t/pod.t000644 000765 000024 00000000233 11412402225 015121 0ustar00gregstaff000000 000000 use strict; use warnings; use Test::More; eval "use Test::Pod 1.14"; plan skip_all => "Test::Pod 1.14 required for testing POD" if $@; all_pod_files_ok(); RDF-Endpoint-0.07/t/pod_coverage.t000644 000765 000024 00000000273 11412402225 017000 0ustar00gregstaff000000 000000 use strict; use warnings; use Test::More; eval "use Test::Pod::Coverage 1.04"; plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage" if $@; all_pod_coverage_ok(); RDF-Endpoint-0.07/t/psgi.t000755 000765 000024 00000011150 12366061374 015323 0ustar00gregstaff000000 000000 #!perl use strict; use warnings; use Test::More; use URI::QueryParam; use URI::Escape; use LWP::UserAgent; use HTTP::Request::Common; use Test::WWW::Mechanize::PSGI; use RDF::Endpoint; use RDF::Trine qw(iri); use RDF::Trine::Namespace; my $sd = RDF::Trine::Namespace->new('http://www.w3.org/ns/sparql-service-description#'); my $config = { endpoint => { endpoint_path => '/', update => 1, load_data => 0, html => { resource_links => 1, # turn resources into links in HTML query result pages embed_images => 0, # display foaf:Images as images in HTML query result pages image_width => 200, # with 'embed_images', scale images to this width }, service_description => { default => 1, # generate dataset description of the default graph named_graphs => 1, # generate dataset description of the available named graphs }, }, }; my $model = RDF::Trine::Model->new(); my $end = RDF::Endpoint->new( $model, $config ); my $mech = Test::WWW::Mechanize::PSGI->new( app => sub { my $env = shift; my $req = Plack::Request->new($env); my $resp = $end->run( $req ); return $resp->finalize; }, ); { $mech->get_ok('/'); is( $mech->ct, 'text/html', 'main page text/html' ); $mech->content_lacks('xmlns:http://www.w3.org/1999/02/22-rdf-syntax-ns#="rdf"', 'No broken NS declaration'); $mech->content_contains('xmlns:sd="http://www.w3.org/ns/sparql-service-description#"', 'Correct service description NS declaration'); like($mech->response->header('Server'), qr|RDF::Endpoint/$RDF::Endpoint::VERSION|, 'Server header is there' ); } { $mech->get_ok('/', { Accept => 'application/rdf+xml' }); is( $mech->ct, 'application/rdf+xml', 'RDF/XML service description' ); my $sd_content = $mech->content; my $sdmodel = RDF::Trine::Model->new(); my $e = 'http://endpoint.local/'; RDF::Trine::Parser::RDFXML->parse_into_model( $e, $sd_content, $sdmodel ); ok( $sdmodel->size, 'parsed triples' ); my @st = $sdmodel->get_statements( iri($e), $sd->url, undef ); cmp_ok( scalar(@st), '>', 0, 'expected sd:url triple' ); } { my $query = "select * where {}"; my $uri = '/?query=' . uri_escape($query); $mech->get_ok($uri, {Accept => 'application/sparql-results+xml'}, 'got success from empty query'); is( $mech->ct, 'application/sparql-results+xml', 'SRX media type' ); my $content = $mech->content; my $i = RDF::Trine::Iterator->from_string( $content ); isa_ok( $i, 'RDF::Trine::Iterator::Bindings' ); my $iter = $i->materialize; is( $iter->length, 1, 'expected result count' ); } my $before = $model->size; { my $update = 'PREFIX : INSERT DATA { :rdf_endpoint_test :p "FoooooBAR", 1, _:a }'; my $resp = $mech->post_ok('/', { update => $update }, 'got success from insert POST' ); } my $after = $model->size; is( ($after - $before), 3, 'expected model size after INSERT' ); { my $query = 'PREFIX : SELECT ?o WHERE { :rdf_endpoint_test :p ?o }'; my $uri = '/?query=' . uri_escape($query); $mech->get_ok($uri, {Accept => 'application/sparql-results+xml'}, 'got success from query GET'); my $content = $mech->content; my $iter = RDF::Trine::Iterator->from_string( $content ); my @values; while (my $r = $iter->next) { my $o = $r->{o}; if ($o->isa('RDF::Trine::Node::Blank')) { push(@values, '_'); } else { push(@values, $o->value); } } is_deeply( [sort @values], [qw(1 FoooooBAR _)], 'expected values after INSERT' ); } { my $query = 'PREFIX : SELECT * WHERE { ?s ?p ?o }'; $mech->get_ok("/", "Returns 200"); $mech->title_like(qr/SPARQL/, "Title contains the word SPARQL"); $mech->submit_form_ok( { form_id => 'queryform', fields => { query => $query, 'media-type' => 'text/html' }, }, 'Submitting SELECT query.' ); $mech->title_like(qr/SPARQL/, "Title contains the word SPARQL"); $mech->has_tag('textarea', $query, 'Query is in a textarea in the response'); $mech->has_tag('td', 'FoooooBAR', 'Literal string is in the response'); } { my $update = 'PREFIX : DELETE { :rdf_endpoint_test :p ?o } WHERE { :rdf_endpoint_test ?p ?o }'; my $resp = $mech->post_ok('/', { update => $update }, 'got success from delete POST' ); } { my $query = 'PREFIX : SELECT ?o WHERE { :rdf_endpoint_test ?p ?o }'; my $uri = '/?query=' . uri_escape($query); $mech->get_ok($uri, {Accept => 'application/sparql-results+xml'}, 'got success from query GET'); my $content = $mech->content; my $iter = RDF::Trine::Iterator->from_string( $content ); my $count = 0; while (my $r = $iter->next) { $count++; } is( $count, 0, 'expected count after delete' ); } done_testing(); RDF-Endpoint-0.07/share/index.html000644 000765 000024 00000002661 12354561066 017034 0ustar00gregstaff000000 000000 SPARQL


RDF-Endpoint-0.07/share/results.html000644 000765 000024 00000001432 11712064116 017410 0ustar00gregstaff000000 000000 SPARQL Results

Query


RDF-Endpoint-0.07/share/www/000755 000765 000024 00000000000 12370000067 015641 5ustar00gregstaff000000 000000 RDF-Endpoint-0.07/share/www/css/000755 000765 000024 00000000000 12370000067 016431 5ustar00gregstaff000000 000000 RDF-Endpoint-0.07/share/www/favicon.ico000644 000765 000024 00000026451 11411730762 020001 0ustar00gregstaff000000 000000 PNG  IHDR@@iqJiCCPICC ProfilexYy8V]ܣ}yy S]U?3h}wWozGFZG`H@~D29BC҅z@`M/7yDHHAL&{L~'2~@Tx09~ AA`0!7Y r ]!2O-BaMHC#}!h37B16@pGTYþ&e`h؀+3 |@ DP =W+ |"(> 8 C0_rzF1y"GA3x#۱.=?cѷkL̜Bh9"ZD4 H*hZC0hczؼx5aW: -6-h8;@/,<>2?Gr}$xLB$xddevo9뷱lv"?47@QJ؊ J @ͬWLdo} 5 =%08H#1 C(H,2 jP] 0fX&A8C7$Cr @{!P(:ҡl(**:4 A_ aaX6`7d8΃K*ńEITPz(K JDrQ%T+5ZD@ch$h{:>G_G7{Oѓe/ ÁǨaL0N?L &S<`cX&0VkubbOc/akvñq8KK]UqOp3u<%/7ĻC{'M  A 5 K oxLRV3Z0A`G$%jo|֔Iy7)SNR ňzDWb 1XN "~#HB$m )A uHTTRT&TTG P-QSP RPNΥn~LHCA#DGCI)iyAJKO+KkIB{,N΀Λ.*]7=^ދ8})}/ A!!aaQс1q $d̔T4ʴɬÜ\yEŇ%9+kkk;645"^Evvuv/4z0 A9V9889/rvs.r1qisr5Mϭ}{G''gט7wwOϞ_-;~ /y.ensC)U/ 9 jf6N~+B)y&U $:,)=ŕ/H`$T%B%J$^H%u$c%+%'JjZvΒ%(,S*FNTlW919/g$yC#_|^*++TRT4,\BAJ}Uջ?ԔԢ>KP#gO) > FƄ& -^-V{m~mo2:::U:K2uu + uc͌_pxT,*61#ٚ国+7ro9lnj~EE%4u&.N=I>2dt(hGde[9x539)yщȔ'O^>>pj(U>b42[N?8#{&voPRfYгYZY׳iΙkJ{@B 1&5_xV݂BµKޗi\漜~yJFō%B%WWc~(u(r,gyhu=78ndV•1sUU55ŵL7͘uuf] * 5oަ57.77M4;7t޾#u.݂6ƶ{{W;;;:ܻt;u?5gݯ~_**>H!ʏU[G{Ӿg&[<}K_}yzM[۴w4r8JEk'&&'}fkja:jzk&CGrw ,/l.|T$tN3_"l=[Jתkipy` Sg/_oCɑݽ ia__#93; @SJ EA -TsY(FTÇYG)(.j|:~*F-6+#4^{~v7BWE$OIsɏ+F+S\QST0ֶ341*0Au3[Y6[mf=vsq:w{];/țG/?%063qxRzIb<`tχKJr9r88>ܚZ:ۺz⏨ ͚_ۻއ!/, QMy0-|3#1\'Rp)['ZHN{37ded=s>4/kE|BKEvە^/fYf^nrݪ"FYPF wͰ Oo6267۴fܩ;ڶ.ay{pwc=n.)x4YQ/_q&^y3]۸DSSߧ;gN}Hlw%8$jJie9+nW>RV']o2%M-V;wU{݁םp_njpБǭß=bG8{T4۾haU+a011?"XGIl3vǁB26 ^/QpP('7 ?(()'2$R*iJ /j>I6vΎ>};Fuv&#'n HӲV鱍 d||҄EDe$x$)%KMJ?i-;.`ħLP^QST޿ƒͪ#gnix(ϸƤ٦9~7m^;pq༽U{Dzwόl@oSpXHo[xt`PtR̋2qS#'Ov,4Y=j3͙Yes/T_+h}x4| I ƛ.ڵ1w={?q0|H̳w^CMLϦ|]b֫ew&d0pG*-$ ( A2L`MF_PhJ:*Buޣha): @pc1ɘ&d=-.W[ċ% YX6`I( R*Q|C"I\*=U35Q.Zr:zt"C:#cS%*}},ˬll]qspqep+s*Z%V(~J"VKZZ[FZOABRXS4<2){T/_1db佧̫,F68P:;9'Wz-&WwϼM@Z`W0z !|9Rc^3?0~ڑ̣ړN8Y6y:#cO槬+sXsgj P*)s}խ;0(ݜ}nuU{}/{TLMf.Z*\Jڭ] "U8pER\$4}Y`- (&*u 5/<L!K/5,VlpŸx|9E%JxFN$aII_TI0u 3M $m [JkLYX.A:ˡ̱y0>%(e ~  A!1a>NQ1Nq. aI))5igpSe ݊U/5 moH0X¤}E][3 0_'ѹ^ٯ>H. H ~1cw=pӤc 'ޞ<*w:(Ye=y>1_ 3/wK6KsʔʟTUb.ԯihiqk]~O}ӯSgchp#x0HSg~/Zp\ `eajbϖz[jw_NsqcC`h|%urk'O?7~j .R~&.Yۛ%?"#a,Rs/LA~GT6l! pHYs  IDATx[ tUՙ#7 $<!QD`QPSk yutI3c̚$ZZhKhK:-AQy(/ ${{{.7ls?{uWkbCK8^.i?4T O،tھs6`ZaUi}[wgoR=)۽_=rEe|۫p~ eF!3T[k{{}>v^cºRM&[DŽn||Ծܽ}rzK1\ή!h ʶɮ_~!%E#,G^[Ayur9t;zWoGj6|ď=z'~lD>XLdT}Z$A9sXa^QS3wMa@nIPiט'c|9N2 v31^0 da =tO? y#1WbYHqrLdFa@hDqCt}c ]xxs {oH8HZ44xB ʅ ؽxK\8t?b'us` \nIqD<%^i&!JFp&xM_ÿtxhSg))#%]cy?MUuQ%}륿s+ \>zPsҟvoPxT{7Q<5G F1 ʯC9 ^Qmw:#ZPVIa#ާ Iڰ5|+B(icZa@PV&!;\Uʽ* ):yݵ&X"tpRؙ(Fk~mE e=c۾"qK:d4RPY=Օ#Ym-1 cOH rne?)ѾID%\ʐts>Bx.GO@RIkwR!䧥, gSҊKi-^M䭏v$4\sv 1vRT n6bW$f>`R`\$NL TCߨ)ֆqEj) :4\=||N *= OЮ!RUJ,#ִAU&|ukoME/dj4D8(`avSUe/ -)XE>uc/싖u\o$H6w.J6`ɀ\K',Hj^_^ 'A\QLH0Q7wU]zpT! w # qIjG.ܺ(~R"ME (d N('IG{X&11pLGոn~db3hcxv]>J`'XʺʟC?Z=o81Ş`;4S{SEKFހ ‡9qf(Pw{+?RkHU%ruU#iNxK.^[ MM˶Y~1dzTO|q^b3Lk6VIW4TXHI~\Pos?yToGହ *I$r_@o5aCevs \Fc7 b*We]Ƃ 8de1&[@ '$WYd07*兦 x`]q.9=~-ceS)1 HZZ_6XD2q ԓ4i}fԮ⢼k"IES[:x)cy񇤙hFBPyqqc |#S.o# #ϛ梔>DɈz쒒x*Hc. N\*"_XGȌV >k˕B@9h'kSeSoY8QU)u/x2ii!Oc;_ 2b+8클GWԈdט&{i5N! )<$Pom5_q9FZ7v LД^=c p;a;v"K~Co0[^ WXMjӄB#k5_iFvXSP.Fiߤ]CP hpom UrdŲ&n h@t/n1'Qrdwͬ?[R{Z=τH qB| AUKjM;_ HaLT`9Lxj}HLo7!, +e6LnU YA:J9 Ht8w&p8uHytx ЙT#Fw6MZpb*dJ-|Ҩ4#"z Mm&UcQyrJl2%AS;5h\P&K޸\ ,ַl30]׽7 ]V!%x\T}\ % '{4jyG$!:w< e5Kdg_ d1~٫F6^+7s<YDҊژY%aг )CalS{JHu}Pbw ןt 0R5 ե]牁HrJHؙޓe@e[T|yEh'Ţz3EՐz6 }$(`K> >AH#9 L?GIQx=;iiec yU~T/cpmAIo=q٫Q M`g34#١3הb iJ'v\SۊKG- +-iH(tHX]@1z$=ݰqw!&IR"Duz:#2vAUiFb)Mפwڋ#z@P62s 'D| Ad2\UeQܴQPބ5O϶/rVg̫"b(=W{mU#20<3 k 13 mw ~2~b~Sk%S^mc!*֑pqdhHF')jG:E;]ARBwQdю#1B7AAu/,~@NPYR0))Bb TZTi1 #{K&CoZ},ri+VH| :Ӣ 9!МQ $ߨjUH̖Ҹ9 Ӽ'_uєÙWVJ& EչIu|c(3հS=A"}:vhKKF@9!1=JE-fsa^p@ϥ Ӂl}ەn[SvrPa2UR mR 1Bb,M7lTӒ_ Iy=+ƼL /`כ Y'yi %]KC3[!=3:}~&&(ل-GzvK<˽J[}z  `|gvįla\#6&dZAvͱW `Xy]czcF݂EE*U)j(]^8p] ^"'E-\WyƩP.{w0^-%x6"ɘ2 t[@0*j#_!o~A^TG*+xKL5FGz.b@v2cWfUgVӮHqeIu.bJ%%GdGײ0k̮n\.uT=Gc>ZҼ =+״{VۜbOIb>}o[4+,Hۆi02jk7̀3&}78bZH]K X}yKҚHsluA8;$|=ȓW ֥`Q۠5GBwHm웟OZU[ 4EX:ZővHOHwX5Xl{[1@"E9FIpzp/2/JGpVR e`ү*cӇ*" L`J Vd2R̒\̻r+~1tc dwgM>-pnnFSFM;% ۾rʁv48O@Ya $S0E幽"h&JTړTfiU[+ϨN =BZ[砙ݖ9.AY:6hN F~AJhIx } a4{둯ݳzJbT .>Sϵ(܈6q^b㿆y:2H h'*^FXyujgG'D4]^SK_]DU^F msArp[s`(`=qIENDB`RDF-Endpoint-0.07/share/www/js/000755 000765 000024 00000000000 12370000067 016255 5ustar00gregstaff000000 000000 RDF-Endpoint-0.07/share/www/js/codemirror.js000644 000765 000024 00000051243 11552456153 021001 0ustar00gregstaff000000 000000 /* CodeMirror main module (http://codemirror.net/) * * Implements the CodeMirror constructor and prototype, which take care * of initializing the editor frame, and providing the outside interface. */ // The CodeMirrorConfig object is used to specify a default // configuration. If you specify such an object before loading this // file, the values you put into it will override the defaults given // below. You can also assign to it after loading. var CodeMirrorConfig = window.CodeMirrorConfig || {}; var CodeMirror = (function(){ function setDefaults(object, defaults) { for (var option in defaults) { if (!object.hasOwnProperty(option)) object[option] = defaults[option]; } } function forEach(array, action) { for (var i = 0; i < array.length; i++) action(array[i]); } // These default options can be overridden by passing a set of // options to a specific CodeMirror constructor. See manual.html for // their meaning. setDefaults(CodeMirrorConfig, { stylesheet: [], path: "", parserfile: [], basefiles: ["util.js", "stringstream.js", "select.js", "undo.js", "editor.js", "tokenize.js"], iframeClass: null, passDelay: 200, passTime: 50, lineNumberDelay: 200, lineNumberTime: 50, continuousScanning: false, saveFunction: null, onChange: null, undoDepth: 50, undoDelay: 800, disableSpellcheck: true, textWrapping: true, readOnly: false, width: "", height: "300px", minHeight: 100, autoMatchParens: false, parserConfig: null, tabMode: "indent", // or "spaces", "default", "shift" enterMode: "indent", // or "keep", "flat" electricChars: true, reindentOnLoad: false, activeTokens: null, cursorActivity: null, lineNumbers: false, firstLineNumber: 1, indentUnit: 2, domain: null, noScriptCaching: false }); function addLineNumberDiv(container, firstNum) { var nums = document.createElement("DIV"), scroller = document.createElement("DIV"); nums.style.position = "absolute"; nums.style.height = "100%"; if (nums.style.setExpression) { try {nums.style.setExpression("height", "this.previousSibling.offsetHeight + 'px'");} catch(e) {} // Seems to throw 'Not Implemented' on some IE8 versions } nums.style.top = "0px"; nums.style.left = "0px"; nums.style.overflow = "hidden"; container.appendChild(nums); scroller.className = "CodeMirror-line-numbers"; nums.appendChild(scroller); scroller.innerHTML = "
" + firstNum + "
"; return nums; } function frameHTML(options) { if (typeof options.parserfile == "string") options.parserfile = [options.parserfile]; if (typeof options.basefiles == "string") options.basefiles = [options.basefiles]; if (typeof options.stylesheet == "string") options.stylesheet = [options.stylesheet]; var html = [""]; // Hack to work around a bunch of IE8-specific problems. html.push(""); forEach(options.stylesheet, function(file) { html.push(""); }); forEach(options.basefiles.concat(options.parserfile), function(file) { if (!/^https?:/.test(file)) file = options.path + file; html.push("