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
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;
\@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#>.
\@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#>.
\@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 0.902 second using v1.01-cache-2.11-cpan-364913b4093 )