File: aref-query.t

package info (click to toggle)
librdf-aref-perl 0.20-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 444 kB
  • ctags: 52
  • sloc: perl: 606; makefile: 11
file content (100 lines) | stat: -rw-r--r-- 3,387 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
use Test::More;
use strict;
use warnings;

use RDF::aREF qw(aref_query aref_query_map);
use RDF::aREF::Query;
use Scalar::Util qw(reftype);

BEGIN {
    eval { require JSON; 1; } 
    or plan skip_all => "test requires JSON";
}

my $rdf = JSON::from_json(do { local (@ARGV, $/) = "t/doi-example.json"; <> });
my $uri = "http://dx.doi.org/10.2474/trol.7.147";

my @res = aref_query($rdf, $uri, '.');
is reftype $res[0], 'HASH';

# FIXME:
# is_deeply [ aref_query($rdf, $uri, '@') ], [ ], 'empty query (@)';
is_deeply [ aref_query($rdf, $uri, '') ], [ $uri ], 'empty query';

is_deeply [ aref_query($rdf, $uri, 'dct_title') ], 
    ['Frictional Coefficient under Banana Skin'], 'dct_title';
is_deeply [ aref_query($rdf, $uri, RDF::aREF::Query->new(query => 'dct_title')) ], 
    ['Frictional Coefficient under Banana Skin'], 'dct_title (RDF::aREF::Query)';
is_deeply [ aref_query($rdf, $uri, 'dct_title@') ], 
    ['Frictional Coefficient under Banana Skin'], 'dct_title@';
is_deeply [ aref_query($rdf, $uri, 'dct_title^xsd_string') ], 
    ['Frictional Coefficient under Banana Skin'], 'dct_title^xsd_string';
is_deeply [ aref_query($rdf, $uri, 'dct_title@en') ], 
    [ ], 'dct_title@';

is_deeply [ sort(aref_query($rdf->{$uri}, 'dct_publisher')) ], [
    'Japanese Society of Tribologists',
    'http://d-nb.info/gnd/5027072-2',
], 'dct_publisher';

is_deeply [ aref_query($rdf->{$uri}, 'dct_publisher.') ], [
    'http://d-nb.info/gnd/5027072-2',
], 'dct_publisher.';

is_deeply [ aref_query($rdf->{$uri}, 'dct_date') ], ["2012"], 'dct_date';
is_deeply [ aref_query($rdf->{$uri}, 'dct_date^xsd_gYear') ], ["2012"], 'dct_date^xsd_gYear';
is_deeply [ aref_query($rdf->{$uri}, 'dct_date^xsd_foo') ], [], 'dct_date^xsd_foo';

foreach my $query (qw(dct_creator dct_creator.)) {
    is_deeply [ sort (aref_query($rdf, $uri, $query)) ], [
        "http://id.crossref.org/contributor/daichi-uchijima-y2ol1uygjx72",
        "http://id.crossref.org/contributor/kensei-tanaka-y2ol1uygjx72",
        "http://id.crossref.org/contributor/kiyoshi-mabuchi-y2ol1uygjx72",
        "http://id.crossref.org/contributor/rina-sakai-y2ol1uygjx72",
    ], $query;
}

is join(' ',sort(aref_query($rdf,$uri,'dct_creator.foaf_familyName'))),
    "Mabuchi Sakai Tanaka Uchijima", 'dct_creator.foaf_familyName';

my %names = (
    'dct_creator.foaf_name'  => 4,
    'dct_creator.foaf_name@' => 4,
    'dct_creator.foaf_name@en' => 4,
    'dct_creator.foaf_name@ja' => 0,
);
while ( my ($query, $count) = each %names ) {
    my @names = aref_query( $rdf, $uri, $query );
    is scalar @names, $count, $query;
}

foreach my $query ( "dct_title@#", "dct_date^_" ) {
    eval { RDF::Query->new($query) };
    ok $@, 'error in aREF query';
}

{
    my $rdf = {
        'http://example.org/book' => {
            dct_creator => [
                'http://example.org/alice', 
                "Bob"
            ]
        },
        'http://example.org/alice' => {
            foaf_name => "Alice"
        },
    };
    my $uri = 'http://example.org/book';

    is_deeply [ sort(aref_query($rdf, $uri, 'dct_creator')) ], 
        [qw(Bob http://example.org/alice)], 'literal and URI';

    my $record = aref_query_map( $rdf, $uri, {
        'dct_creator@' => 'creator',
        'dct_creator.foaf_name' => 'creator',
    });
    is_deeply [ sort @{$record->{creator}} ], [qw(Alice Bob)], 'aref_query_map';
}

done_testing;