Catmandu-RDF

 view release on metacpan or  search on metacpan

lib/Catmandu/Fix/rdf_ldf_statements.pm  view on Meta::CPAN

has subject   => (fix_opt => 1, default => sub { undef });
has predicate => (fix_opt => 1, default => sub { undef });
has url       => (fix_opt => 1, default => sub { undef });

has client    => (is => 'lazy');

with 'Catmandu::Fix::SimpleGetValue';

sub _build_client {
    my ($self) = @_;
    my $url = $self->url // 'http://data.linkeddatafragments.org/viaf';
    RDF::LDF->new(url => $url);
}

sub emit_value {
    my ($self,$var,$fixer) = @_;
    my $subject_var   = $fixer->capture($self->subject);
    my $predicate_var = $fixer->capture($self->predicate);
    my $client_var    = $fixer->capture($self->client);
    my $it            = $fixer->generate_var;
    my $st            = $fixer->generate_var;

lib/Catmandu/Fix/rdf_ldf_statements.pm  view on Meta::CPAN

}

=head1 NAME

Catmandu::Fix::rdf_ldf_statements - lookup an object into a LDF endpoint

=head1 SYNOPSIS

    # Replace a name with an array of matching VIAF records
    # name: "\"Einstein, Albert, 1879-1955\""
    rdf_ldf_statements(name,url:"http://data.linkedatafragments.org/viaf",predicate:"http://schema.org/alternateName")

    # name:
    #   - http://viaf.org/viaf/75121530

=head1 DESCRIPTION

This L<Catmandu::Fix> can be used to find at a Linked Data Fragments endpoint
all subject URIs for which the object has a specific value found at a path. E.g.

   rdf_ldf_statements(name,url:"http://data.linkedatafragments.org/viaf")

 means, search at the endpoint http://data.linkedatafragments.org/viaf all the
 subjects for which the object is the value found in 'name', and replace the name value
 with all the found subjects.

=head1 ARGUMENTS

=over

=item subject

Optional subject URI to be used in the LDF query

lib/Catmandu/Importer/RDF.pm  view on Meta::CPAN


    die "need an url" unless $self->url;

    $self->log->info("parsing: " . $self->sparql);

    my $store;

    # Check if this server is an LDF server
    my $ldf_client = RDF::LDF->new(url => $self->url);

    if ($ldf_client->is_fragment_server) {
        $store = RDF::Trine::Store->new_with_config({
                    storetype => 'LDF',
                    url => $self->url
        });
    }
    else {
        $store = RDF::Trine::Store->new_with_config({
                    storetype => 'SPARQL',
                    url => $self->url
        });

lib/Catmandu/Importer/RDF.pm  view on Meta::CPAN

  # most efficient way to process RDF)
  catmandu convert RDF --triples 1 --file rdfdump.ttl to RDF --type NTriples

  # Query a SPARQL endpoint
  catmandu convert RDF --url http://dbpedia.org/sparql
                       --sparql "SELECT ?film WHERE { ?film dct:subject <http://dbpedia.org/resource/Category:French_films> }"

  catmandu convert RDF --url http://example.org/sparql --sparql query.rq

  # Query a Linked Data Fragment endpoint
  catmandu convert RDF --url http://fragments.dbpedia.org/2014/en
                       --sparql "SELECT ?film WHERE { ?film dct:subject <http://dbpedia.org/resource/Category:French_films> }"

In Perl code:

    use Catmandu::Importer::RDF;
    my $url = "http://dx.doi.org/10.2474/trol.7.147";
    my $rdf = Catmandu::Importer::RDF->new( url => $url )->first;

=head1 DESCRIPTION

t/sparql.t  view on Meta::CPAN

    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;

t/sparql.t  view on Meta::CPAN

\@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";
    hydra:property rdf:subject.
_:predicate hydra:variable "predicate";
    hydra:property rdf:predicate.
_:object hydra:variable "object";
    hydra:property rdf:object.
<http://example.org/uri3> <http://example.org/predicate3> <http://example.org/uri3>, <http://example.org/uri4>, <http://example.org/uri5>.
<http://example.org/uri1> <http://example.org/predicate1> "literal1", "literalA", "literalB", "literalC";
    <http://example.org/predicate2> <http://example.org/uri3>, <http://example.org/uriA3>.
<http://example.org/uri2> <http://example.org/predicate1> "literal2".
<http://fragments.dbpedia.org/2014/en> void:subset <http://fragments.dbpedia.org/2014/en>;
    a hydra:Collection, hydra:PagedCollection;
    dc:title "Linked Data Fragment of Test"\@en;
    dc:description "Triple Pattern Fragment of the 'Test' dataset containing triples matching the pattern { ?s ?p ?o }."\@en;
    dc:source <http://fragments.dbpedia.org/2014/en#dataset>;
    hydra:totalItems "10"^^xsd:integer;
    void:triples "10"^^xsd:integer;
    hydra:itemsPerPage "100"^^xsd:integer;
    hydra:firstPage <http://fragments.dbpedia.org/2014/en?page=1>.
EOF
    add_response(
        $ua,
        'http://fragments.dbpedia.org/2014/en',
        'text/turtle; charset=utf-8',
        $example2
    );

    my $example2b =<<EOF;
\@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
\@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
\@prefix owl: <http://www.w3.org/2002/07/owl#>.
\@prefix skos: <http://www.w3.org/2004/02/skos/core#>.
\@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

t/sparql.t  view on Meta::CPAN

\@prefix dcterms: <http://purl.org/dc/terms/>.
\@prefix dc11: <http://purl.org/dc/elements/1.1/>.
\@prefix foaf: <http://xmlns.com/foaf/0.1/>.
\@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>.
\@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/#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?predicate=http://purl.org/dc/terms/subject&object=http://dbpedia.org/resource/Category:French_films>, <http://fragments.dbpedia.org/2014/en?predicate=http%3A%2F%2Fpurl.org%2Fdc%2Fterms%2Fsubject&o...
    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";
    hydra:property rdf:subject.
_:predicate hydra:variable "predicate";
    hydra:property rdf:predicate.
_:object hydra:variable "object";
    hydra:property rdf:object.
<http://dbpedia.org/resource/...Sans_laisser_d'adresse> dcterms:subject <http://dbpedia.org/resource/Category:French_films>.
<http://fragments.dbpedia.org/2014/en?predicate=http%3A%2F%2Fpurl.org%2Fdc%2Fterms%2Fsubject&object=http%3A%2F%2Fdbpedia.org%2Fresource%2FCategory%3AFrench_films> void:subset <http://fragments.dbpedia.org/2014/en?predicate=http://purl.org/dc/terms/su...
<http://fragments.dbpedia.org/2014/en?predicate=http://purl.org/dc/terms/subject&object=http://dbpedia.org/resource/Category:French_films> a hydra:Collection, hydra:PagedCollection;
    dcterms:title "Linked Data Fragment of DBpedia 2014"\@en;
    dcterms:description "Triple Pattern Fragment of the 'DBpedia 2014' dataset containing triples matching the pattern { ?s <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:French_films>  }."\@en;
    dcterms:source <http://fragments.dbpedia.org/2014/en#dataset>;
    hydra:totalItems "1"^^xsd:integer;
    void:triples "1"^^xsd:integer;
    hydra:itemsPerPage "100"^^xsd:integer;
    hydra:firstPage <http://fragments.dbpedia.org/2014/en?predicate=http%3A%2F%2Fpurl.org%2Fdc%2Fterms%2Fsubject&object=http%3A%2F%2Fdbpedia.org%2Fresource%2FCategory%3AFrench_films&page=1>;
    hydra:nextPage <http://fragments.dbpedia.org/2014/en?predicate=http%3A%2F%2Fpurl.org%2Fdc%2Fterms%2Fsubject&object=http%3A%2F%2Fdbpedia.org%2Fresource%2FCategory%3AFrench_films&page=2>.
EOF
    add_response(
        $ua,
        'http://fragments.dbpedia.org/2014/en?predicate=http%3A%2F%2Fpurl.org%2Fdc%2Fterms%2Fsubject&object=http%3A%2F%2Fdbpedia.org%2Fresource%2FCategory%3AFrench_films',
        'text/turtle; charset=utf-8',
        $example2b
    );

    my $example3=<<EOF;
\@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
\@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
\@prefix owl: <http://www.w3.org/2002/07/owl#>.
\@prefix skos: <http://www.w3.org/2004/02/skos/core#>.
\@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

t/sparql.t  view on Meta::CPAN

\@prefix dcterms: <http://purl.org/dc/terms/>.
\@prefix dc11: <http://purl.org/dc/elements/1.1/>.
\@prefix foaf: <http://xmlns.com/foaf/0.1/>.
\@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>.
\@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/#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?subject=http%3A%2F%2Fdbpedia.org%2Fresource%2FFran%C3%A7ois_Schuiten&predicate=http%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23label>;
    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";
    hydra:property rdf:subject.
_:predicate hydra:variable "predicate";
    hydra:property rdf:predicate.
_:object hydra:variable "object";
    hydra:property rdf:object.
<http://dbpedia.org/resource/François_Schuiten> rdfs:label "François Schuiten"\@de, "François Schuiten"\@en, "François Schuiten"\@es, "François Schuiten"\@fr, "François Schuiten"\@it, "François Schuiten"\@nl, "フランソワ・スクイテン...
<http://fragments.dbpedia.org/2014/en?subject=http%3A%2F%2Fdbpedia.org%2Fresource%2FFran%C3%A7ois_Schuiten&predicate=http%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23label> void:subset <http://fragments.dbpedia.org/2014/en?subject=http%3A%2F%2Fdbpe...
    a hydra:Collection, hydra:PagedCollection;
    dcterms:title "Linked Data Fragment of DBpedia 2014"\@en;
    dcterms:description "Triple Pattern Fragment of the 'DBpedia 2014' dataset containing triples matching the pattern { <http://dbpedia.org/resource/François_Schuiten> <http://www.w3.org/2000/01/rdf-schema#label> ?o }."\@en;
    dcterms:source <http://fragments.dbpedia.org/2014/en#dataset>;
    hydra:totalItems "7"^^xsd:integer;
    void:triples "7"^^xsd:integer;
    hydra:itemsPerPage "100"^^xsd:integer;
    hydra:firstPage <http://fragments.dbpedia.org/2014/en?subject=http%3A%2F%2Fdbpedia.org%2Fresource%2FFran%C3%A7ois_Schuiten&predicate=http%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23label&page=1>
EOF
    add_response(
        $ua,
        'http://fragments.dbpedia.org/2014/en?subject=http%3A%2F%2Fdbpedia.org%2Fresource%2FFran%C3%A7ois_Schuiten&predicate=http%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23label',
        'text/turtle; charset=utf-8',
        $example3
    );

    return $ua;
}

sub add_response {
    my $ua           = shift;
    my $url          = shift;



( run in 2.632 seconds using v1.01-cache-2.11-cpan-364913b4093 )