Catmandu-RDF

 view release on metacpan or  search on metacpan

t/sparql.t  view on Meta::CPAN

use strict;
use warnings;
use open ':std', ':encoding(utf8)';
use Test::More;
use Catmandu -all;
use Catmandu::RDF;
use RDF::Trine;
use Encode;
use HTTP::Response;
use Test::LWP::UserAgent;
use utf8;

RDF::Trine->default_useragent(user_agent());

{
    note("importing from sparql endpoint");
    my $sparql   =<<END;
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT * WHERE { ?book dc:title ?title . }
END

    my $url = 'http://sparql.org/books/sparql';

    my $importer = importer('RDF', url => $url, sparql => $sparql);
    is $importer->sparql, $sparql, "SPARQL";

    $importer = importer('RDF', url => $url, 
        sparql => "SELECT * WHERE { ?book dc:title ?title . }\n");
    is $importer->sparql, $sparql, "SPARQL, PREFIX added";

    my $ref = $importer->first;
    ok $ref->{title} , 'got a title';
    ok $ref->{book} , 'got a book';
}

{
     note("importing from ldf endpoint");
     my $sparql =<<EOF;
SELECT ?film WHERE { ?film dct:subject <http://dbpedia.org/resource/Category:French_films> }
EOF
     my $url = 'http://fragments.dbpedia.org/2014/en';

     my $importer = importer('RDF', url => $url, sparql => $sparql);

     my $ref = $importer->first;
     ok $ref->{film} , 'got a film';
}

{
     note("importing from ldf endpoint (utf8)");
     my $url = 'http://fragments.dbpedia.org/2014/en';

     my $importer = importer('RDF', url => $url, sparql => 't/query.sparql');

     my $ref = $importer->first;
     ok $ref->{name} , 'got a name (file sparql)';
     like $ref->{name} , qr/François Schuiten/ , 'utf8 test';
}

done_testing;

sub user_agent {
    my $ua = Test::LWP::UserAgent->new( agent => "Catmandu::RDF/${Catmandu::RDF::VERSION}" );

    my $example =<<EOF;
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
  <head>
    <variable name="book"/>
    <variable name="title"/>
  </head>
  <results>
    <result>
      <binding name="book">
        <uri>http://example.org/book/book7</uri>
      </binding>
      <binding name="title">
        <literal>Harry Potter and the Deathly Hallows</literal>
      </binding>
    </result>
  </results>
</sparql>
EOF
    add_response(
        $ua,
        'http://sparql.org/books/sparql?query=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%0ASELECT%20%2A%20WHERE%20%7B%20%3Fbook%20dc%3Atitle%20%3Ftitle%20.%20%7D%0A',
        'application/sparql-results+xml; charset=utf-8',
        $example
    );

    my $example2 =<<EOF;
\@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
\@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
\@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
\@prefix dc: <http://purl.org/dc/terms/>.
\@prefix foaf: <http://xmlns.com/foaf/0.1/>.
\@prefix dbpedia: <http://dbpedia.org/resource/>.
\@prefix dbpedia-owl: <http://dbpedia.org/ontology/>.
\@prefix dbpprop: <http://dbpedia.org/property/>.
\@prefix hydra: <http://www.w3.org/ns/hydra/core#>.
\@prefix void: <http://rdfs.org/ns/void#>.

<http://fragments.dbpedia.org/2014/en/#dataset> hydra:member <http://fragments.dbpedia.org/2014/en#dataset>.
<http://fragments.dbpedia.org/2014/en#dataset> a void:Dataset, hydra:Collection;
    void:subset <http://fragments.dbpedia.org/2014/en>;
    void:uriLookupEndpoint "http://fragments.dbpedia.org/2014/en{?subject,predicate,object}";
    hydra:search _:triplePattern.
_:triplePattern hydra:template "http://fragments.dbpedia.org/2014/en{?subject,predicate,object}";
    hydra:mapping _:subject, _:predicate, _:object.
_:subject hydra:variable "subject";



( run in 1.082 second using v1.01-cache-2.11-cpan-39bf76dae61 )