Skip to content

Commit 430c874

Browse files
committed
Change reifiedTriple to use subject and object productions instead of ttSubject and ttObject.
1 parent 7ac9eae commit 430c874

File tree

5 files changed

+10
-8
lines changed

5 files changed

+10
-8
lines changed

etc/turtle.bnf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ iri ::= IRIREF | PrefixedName
2626
PrefixedName ::= PNAME_LN | PNAME_NS
2727
BlankNode ::= BLANK_NODE_LABEL | ANON
2828
reifier ::= '~' (iri | BlankNode)?
29-
reifiedTriple ::= '<<' ttSubject predicate ttObject reifier* '>>'
29+
reifiedTriple ::= '<<' (subject | reifiedTriple) predicate object reifier* '>>'
3030
tripleTerm ::= '<<(' ttSubject predicate ttObject ')>>'
3131
ttSubject ::= iri | BlankNode
3232
ttObject ::= iri | BlankNode | literal | tripleTerm

lib/rdf/turtle/reader.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -451,17 +451,17 @@ def read_object(subject = nil, predicate = nil)
451451
##
452452
# Read reifiedTriple
453453
#
454-
# reifiedTriple ::= '<<' ttSubject predicate ttObject reifier? '>>'
454+
# reifiedTriple ::= '<<' (subject | reifiedTriple) predicate object reifier* '>>'
455455
#
456456
# @return [RDF::Term]
457457
def read_reifiedTriple
458458
return unless @options[:rdfstar]
459459
if @lexer.first.value == '<<'
460460
prod(:reifiedTriple) do
461461
@lexer.shift # eat <<
462-
subject = read_ttSubject || error("Failed to parse subject", production: :reifiedTriple, token: @lexer.first)
462+
subject = read_ttSubject || read_reifiedTriple || error("Failed to parse subject", production: :reifiedTriple, token: @lexer.first)
463463
predicate = read_verb || error("Failed to parse predicate", production: :reifiedTriple, token: @lexer.first)
464-
object = read_ttObject || error("Failed to parse object", production: :reifiedTriple, token: @lexer.first)
464+
object = read_object || error("Failed to parse object", production: :reifiedTriple, token: @lexer.first)
465465
tt = RDF::Statement(subject, predicate, object, tripleTerm: true)
466466

467467
# An optional reifier. If not specified it is a new blank node.

script/tc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ def run_tc(tc, **options)
7474
begin
7575
graph << reader
7676
rescue Exception => e
77+
#require 'byebug'; byebug
7778
STDERR.puts "Unexpected exception: #{e.inspect}" if options[:verbose]
7879
result = "failed"
7980
end
8081
else
8182
begin
8283
graph << reader
83-
raise RDF::ReaderError, "triple term" if graph.statements.any? {|s| s.to_a.any?(&:statement?)}
8484
STDERR.puts "Expected exception" if options[:verbose]
8585
result = "failed"
8686
rescue RDF::ReaderError

spec/ntriples_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
else
3232
expect {
3333
graph << reader
34-
raise RDF::ReaderError, "triple term" if graph.statements.any? {|s| s.to_a.any?(&:statement?)}
35-
#expect(graph.dump(:ntriples).should produce("", t.debug)
3634
}.to raise_error RDF::ReaderError
3735
end
3836

spec/reader_spec.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1168,7 +1168,11 @@
11681168
ex:p1 ex:o1 >>
11691169
ex:p ex:o .
11701170
),
1171-
RDF::ReaderError
1171+
%(
1172+
_:anon1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#reifies> <<(<http://example/s2> <http://example/p2> <http://example/o2>)>> .
1173+
_:anon2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#reifies> <<(_:anon1 <http://example/p1> <http://example/o1>)>> .
1174+
_:anon2 <http://example/p> <http://example/o> .
1175+
)
11721176
],
11731177
"IRI identifier": [
11741178
%(

0 commit comments

Comments
 (0)