Skip to content

Commit 5ff4507

Browse files
committed
Require rdfstar option to read directional language-tagged strings.
1 parent 770861e commit 5ff4507

2 files changed

Lines changed: 23 additions & 11 deletions

File tree

lib/rdf/ntriples/reader.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ def read_literal
296296
literal = case
297297
when lang_dir = match(LANG_DIR)
298298
language, direction = lang_dir.split('--')
299+
raise ArgumentError if direction && !@options[:rdfstar]
299300
RDF::Literal.new(literal_str, language: language, direction: direction)
300301
when datatype = match(/^(\^\^)/) # FIXME
301302
RDF::Literal.new(literal_str, datatype: read_uriref || fail_object)

spec/ntriples_spec.rb

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -309,17 +309,27 @@
309309
end
310310
end
311311

312-
context 'parse language/direction' do
313-
{
314-
"language" => '<http://subj> <http://pred> "Hello"@en .',
315-
"direction" => '<http://subj> <http://pred> "Hello"@en--ltr .',
316-
}.each_pair do |name, triple|
317-
specify "test #{name}" do
318-
stmt = reader.new(triple).first
319-
if name.include?('dir')
320-
expect(stmt.object.datatype).to eql RDF.dirLangString
321-
else
322-
expect(stmt.object.datatype).to eql RDF.langString
312+
context "base direction" do
313+
context "without rdfstar option" do
314+
it "Raises an error" do
315+
expect do
316+
expect {parse('<http://subj> <http://pred> "Hello"@en--ltr .')}.to raise_error(RDF::ReaderError)
317+
end.to write(:something).to(:error)
318+
end
319+
end
320+
321+
context 'parse language/direction' do
322+
{
323+
"language" => '<http://subj> <http://pred> "Hello"@en .',
324+
"direction" => '<http://subj> <http://pred> "Hello"@en--ltr .',
325+
}.each_pair do |name, triple|
326+
specify "test #{name}" do
327+
stmt = reader.new(triple, rdfstar: true).first
328+
if name.include?('dir')
329+
expect(stmt.object.datatype).to eql RDF.dirLangString
330+
else
331+
expect(stmt.object.datatype).to eql RDF.langString
332+
end
323333
end
324334
end
325335
end
@@ -370,6 +380,7 @@
370380

371381
"Literals with languages (1)" => '<http://example.org/resource30> <http://example.org/property> "chat"@fr .',
372382
"Literals with languages (2)" => '<http://example.org/resource31> <http://example.org/property> "chat"@en .',
383+
# FIXME: once rdfstar option is no longer used
373384
#"Literals with language and direction" => '<http://example.org/resource31> <http://example.org/property> "chat"@en--ltr .',
374385
"Typed Literals" => '<http://example.org/resource32> <http://example.org/property> "abc"^^<http://example.org/datatype1> .',
375386
"Plain lieral with embedded quote" => %q(<http://example.org/resource33> <http://example.org/property> "From \\"Voyage dans l’intérieur de l’Amérique du Nord, executé pendant les années 1832, 1833 et 1834, par le prince Maximilien de Wied-Neuwied\\" (Paris & Coblenz, 1839-1843)" .),

0 commit comments

Comments
 (0)