Attean
view release on metacpan or search on metacpan
t/serializer-sparql.t view on Meta::CPAN
my $pp1 = Attean::Algebra::PredicatePath->new( predicate => $p1 );
my $pp2 = Attean::Algebra::PredicatePath->new( predicate => $p2 );
my $seq = Attean::Algebra::AlternativePath->new( children => [$pp1, $pp2] );
my $inv = Attean::Algebra::InversePath->new( children => [$seq] );
my $a = Attean::Algebra::OneOrMorePath->new( children => [$inv] );
my $i = $a->sparql_tokens;
# (^(<p1>/<p2>))+
expect_token_stream($i, [LPAREN, HAT, LPAREN, IRI, OR, IRI, RPAREN, RPAREN, PLUS]);
subtest '+ path' => sub {
my $p = Attean::Algebra::Path->new( path => $a, subject => iri('s'), object => iri('o') );
ws_is($p->as_sparql, '<s> (^(<p1>|<p2>))+ <o>');
}
};
subtest 'expected tokens: zero or one 2-IRI inverse path' => sub {
my $p1 = iri('p1');
my $p2 = iri('p2');
my $pp1 = Attean::Algebra::PredicatePath->new( predicate => $p1 );
my $pp2 = Attean::Algebra::PredicatePath->new( predicate => $p2 );
my $seq = Attean::Algebra::AlternativePath->new( children => [$pp1, $pp2] );
my $inv = Attean::Algebra::InversePath->new( children => [$seq] );
my $a = Attean::Algebra::ZeroOrOnePath->new( children => [$inv] );
my $i = $a->sparql_tokens;
# (^(<p1>/<p2>))+
expect_token_stream($i, [LPAREN, HAT, LPAREN, IRI, OR, IRI, RPAREN, RPAREN, QUESTION]);
subtest '? path' => sub {
my $p = Attean::Algebra::Path->new( path => $a, subject => iri('s'), object => iri('o') );
ws_is($p->as_sparql, '<s> (^(<p1>|<p2>))? <o>');
}
};
subtest 'expected tokens: 2-IRI sequence path triple' => sub {
my $p1 = iri('p1');
my $p2 = iri('p2');
my $pp1 = Attean::Algebra::PredicatePath->new( predicate => $p1 );
my $pp2 = Attean::Algebra::PredicatePath->new( predicate => $p2 );
my $seq = Attean::Algebra::SequencePath->new( children => [$pp1, $pp2] );
my $a = Attean::Algebra::Path->new( path => $seq, subject => iri('s'), object => iri('o') );
my $i = $a->sparql_tokens;
expect_token_stream($i, [IRI, IRI, SLASH, IRI, IRI]);
ws_is($a->as_sparql, '<s> <p1>/<p2> <o>');
};
};
subtest 'expected tokens: named graph tokens' => sub {
my $bgp = Attean::Algebra::BGP->new(triples => [triple(iri('s'), iri('p'), literal('1'))]);
my $g = iri('graphname');
my $a = Attean::Algebra::Graph->new( children => [$bgp], graph => $g );
my $i = $a->sparql_tokens;
does_ok($i, 'Attean::API::Iterator');
# GRAPH <graphname> { <s> <p> "1" . }
expect_token_stream($i, [KEYWORD, IRI, LBRACE, IRI, IRI, STRING1D, DOT, RBRACE]);
ws_is($a->as_sparql, 'GRAPH <graphname> { <s> <p> "1" . }');
};
subtest 'expected tokens: service tokens' => sub {
my $bgp = Attean::Algebra::BGP->new(triples => [triple(iri('s'), iri('p'), literal('1'))]);
my $g = iri('http://example.org/sparql');
my $a = Attean::Algebra::Service->new( children => [$bgp], endpoint => $g );
my $i = $a->sparql_tokens;
does_ok($i, 'Attean::API::Iterator');
# SERVICE <http://example.org/sparql> { <s> <p> "1" . }
expect_token_stream($i, [KEYWORD, IRI, LBRACE, IRI, IRI, STRING1D, DOT, RBRACE]);
ws_is($a->as_sparql, 'SERVICE <http://example.org/sparql> { <s> <p> "1" . }');
};
subtest 'expected tokens: union tokens' => sub {
my $lhs = Attean::Algebra::BGP->new(triples => [triple(iri('s'), iri('p'), literal('1'))]);
my $rhs = Attean::Algebra::BGP->new(triples => [triple(iri('s'), iri('p'), literal('2'))]);
my $a = Attean::Algebra::Union->new( children => [$lhs, $rhs] );
my $i = $a->sparql_tokens;
does_ok($i, 'Attean::API::Iterator');
expect_token_stream($i, [LBRACE, IRI, IRI, STRING1D, DOT, RBRACE, KEYWORD, LBRACE, IRI, IRI, STRING1D, DOT, RBRACE]);
ws_is($a->as_sparql, '{ <s> <p> "1" . } UNION { <s> <p> "2" . }');
};
subtest 'expected tokens: minus tokens' => sub {
my $lhs = Attean::Algebra::BGP->new(triples => [triplepattern(variable('s'), iri('p'), literal('1'))]);
my $rhs = Attean::Algebra::BGP->new(triples => [triplepattern(variable('s'), iri('p'), literal('2'))]);
my $a = Attean::Algebra::Minus->new( children => [$lhs, $rhs] );
my $i = $a->sparql_tokens;
does_ok($i, 'Attean::API::Iterator');
# { ?s <p> "1" . } MINUS { ?s <p> "2" . }
expect_token_stream($i, [LBRACE, VAR, IRI, STRING1D, DOT, RBRACE, KEYWORD, LBRACE, VAR, IRI, STRING1D, DOT, RBRACE]);
ws_is($a->as_sparql, '{ ?s <p> "1" . } MINUS { ?s <p> "2" . }');
};
subtest 'expected tokens: optional tokens' => sub {
my $lhs = Attean::Algebra::BGP->new(triples => [triplepattern(variable('s'), iri('p'), literal('1'))]);
my $rhs = Attean::Algebra::BGP->new(triples => [triplepattern(variable('s'), iri('p'), literal('2'))]);
my $a = Attean::Algebra::LeftJoin->new( children => [$lhs, $rhs] );
my $i = $a->sparql_tokens;
does_ok($i, 'Attean::API::Iterator');
# { ?s <p> "1" . } OPTIONAL { ?s <p> "1" . }
expect_token_stream($i, [LBRACE, VAR, IRI, STRING1D, DOT, RBRACE, KEYWORD, LBRACE, VAR, IRI, STRING1D, DOT, RBRACE]);
ws_is($a->as_sparql, '{ ?s <p> "1" . } OPTIONAL { ?s <p> "2" . }');
};
subtest 'expected tokens: table tokens' => sub {
my @rows;
push(@rows, Attean::Result->new( bindings => { 's' => iri('http://example.org/') }));
push(@rows, Attean::Result->new( bindings => { 's' => literal('sparql') }));
my $a = Attean::Algebra::Table->new(variables => [variable('s')], rows => \@rows);
my $i = $a->sparql_tokens;
does_ok($i, 'Attean::API::Iterator');
# VALUES (?s) { (<http://example.org>) ("sparql") }
expect_token_stream($i, [KEYWORD, LPAREN, VAR, RPAREN, LBRACE, LPAREN, IRI, RPAREN, LPAREN, STRING1D, RPAREN, RBRACE]);
ws_is($a->as_sparql, 'VALUES (?s) { (<http://example.org/>) ("sparql") }');
};
subtest 'expected tokens: optional+filter tokens' => sub {
my $lhs = Attean::Algebra::BGP->new(triples => [triplepattern(variable('s'), iri('p'), literal('1'))]);
my $rhs = Attean::Algebra::BGP->new(triples => [triplepattern(variable('s'), iri('p'), literal('2'))]);
my $e = Attean::ValueExpression->new( value => variable('s') );
my $expr = Attean::FunctionExpression->new( operator => 'ISIRI', children => [$e] );
my $a = Attean::Algebra::LeftJoin->new( children => [$lhs, $rhs], expression => $expr );
my $i = $a->sparql_tokens;
does_ok($i, 'Attean::API::Iterator');
( run in 1.269 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )