App-wdq
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
}
my @services;
foreach my $var ( sort keys %textvar ) {
my $s = <<SPARQL;
SERVICE wikibase:label {
bd:serviceParam wikibase:language "$OPT{language}" .
SPARQL
if ( $textvar{$var}{label} ) {
my $label = $var eq 'id' ? 'label' : $var . 'Label';
$s .= " ?$var rdfs:label ?$label .\n";
}
if ( $textvar{$var}{description} ) {
my $descr = $var eq 'id' ? 'description' : $var . 'Description';
$s .= " ?$var schema:description ?$descr .\n";
}
push @services, "$s }";
}
my $service = join "\n", @services;
$query =~ s/}([^}]*)$/$service}\1/m;
$namespace{$_} = $NAMESPACES{$_} for qw(bd rdfs schema wikibase);
}
my @prefixes = map { "PREFIX $_: <$namespace{$_}>" } sort keys %namespace;
$query = join "\n", @prefixes, $query;
my $sparql = RDF::Query->new($query);
if ( !$sparql ) {
if ( $OPT{'force'} ) {
warning("SPARQL query seems invalid");
}
else {
warning("invalid SPARQL query");
exit 1;
}
}
else {
$query = $sparql->as_sparql;
$query =~ s/^\s*{}\s*$//mg; # BUG IN RDF::Query
$query =~ s/\n$//mg;
$query =~ s/LANG\(LANG\(\?/LANGMATCHES(LANG(?/mg; # BUG in RDF::Query
$query =~ s/\t/ /mg;
}
if ( $OPT{'no-execute'} ) {
say $query;
return;
}
return $sparql
? ( $query, [ map { $_->name } @{ $sparql->parsed->{variables} } ] )
: ($query);
}
sub http_get {
my ( $url, %query ) = @_;
if ( $OPT{response} ) {
local ( @ARGV, $/ ) = $OPT{response};
return <>;
}
require HTTP::Tiny;
my $http = HTTP::Tiny->new(
default_headers => { agent => "wdq/$VERSION" },
timeout => 30,
);
$query{format} = 'json';
$url .= '?' . $http->www_form_urlencode( \%query );
my $res = $http->get($url);
if ( !$res->{success} ) {
if ( $OPT{ignore} ) {
return;
}
else {
warning("HTTP request failed");
say STDERR $res->{content};
exit 1;
}
}
$res->{content};
}
sub get_qid_from_sitelink {
my $api = "https://$_[0]/w/api.php";
my $title = $_[1];
my $res = http_get(
$api,
action => 'query',
prop => 'pageprops',
titles => $title,
redirects => 1
);
my $data = JSON->new->decode($res);
my ($page) = values %{ $data->{query}->{pages} };
return unless $page->{pageprops};
return $page->{pageprops}->{wikibase_item};
}
sub get_lookup_query {
my $id = shift;
my $entity_id;
if ( $id =~ $ENTITY_PATTERN ) {
$entity_id = $+{id};
$entity_id =~ s/Property://i;
}
else {
# URL could be percent-encoded or not, so normalize
my $uri = URI->new($id);
if ( $uri and $uri->canonical =~ $SITELINK_PATTERN ) {
my ( $base, $title ) = ( $+{base}, $+{title} );
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.317 second using v1.00-cache-2.02-grep-82fe00e-cpan-f5108d614456 )