Add missing escaping of language-tagged literals in Turtle encoder

This commit is contained in:
Marcel Otto 2021-05-09 11:58:36 +02:00
parent 967f81ad5a
commit 3480c254c3
3 changed files with 18 additions and 1 deletions

View file

@ -11,6 +11,8 @@ This project adheres to [Semantic Versioning](http://semver.org/) and
- the Turtle encoder was encoding IRIs as prefixed names even when they were
resulting in non-conform prefixed names
- the Turtle encoder didn't properly escape special characters in language-tagged
literals
- the `Inspect` protocol implementation for `RDF.Diff` was causing an error when
both graphs had prefixes defined

View file

@ -351,7 +351,7 @@ defmodule RDF.Turtle.Encoder do
do: to_string(bnode)
defp term(%Literal{literal: %LangString{} = lang_string}, _, _, _) do
~s["#{lang_string.value}"@#{lang_string.language}]
quoted(lang_string.value) <> "@" <> lang_string.language
end
defp term(%Literal{literal: %XSD.String{}} = literal, _, _, _) do

View file

@ -738,6 +738,21 @@ defmodule RDF.Turtle.EncoderTest do
)
end
test "language-tagged literals with newlines embedded are encoded with long quotes" do
Turtle.read_string!(~s[<http://a> <http:/b> """testing string parsing in Turtle.
"""@en .])
|> assert_serialization(matches: [~s["""testing string parsing in Turtle.\n]])
end
test "language-tagged literals escaping" do
Turtle.read_string!(~s[<http://a> <http:/b> """string with " escaped quote marks"""@en .])
|> assert_serialization(
matches: [
~r[string with \\" escaped quote mark]
]
)
end
test "language tagged literals specifies language for literal with language" do
Turtle.read_string!(~s[<http://a> <http:/b> "string"@en .])
|> assert_serialization(matches: [~r["string"@en]])