rows { options { physical_type: PHYSICAL_STREAM_TYPE_QUADS max_name_table_size: 128 max_prefix_table_size: 16 max_datatype_table_size: 16 logical_type: LOGICAL_STREAM_TYPE_DATASETS version: 2 } } rows { prefix { value: "https://w3id.org/np/" } } rows { name { value: "RAekqSYOKrvcBt0joDwam5ZBQDNthNv4jAoyGsxGiZsp4" } } rows { namespace { name: "this" value { prefix_id: 1 } } } rows { prefix { value: "https://w3id.org/np/RAekqSYOKrvcBt0joDwam5ZBQDNthNv4jAoyGsxGiZsp4/" } } rows { name { } } rows { namespace { name: "sub" value { prefix_id: 2 } } } rows { prefix { value: "http://www.nanopub.org/nschema#" } } rows { namespace { name: "np" value { prefix_id: 3 name_id: 2 } } } rows { prefix { value: "http://purl.org/dc/terms/" } } rows { namespace { name: "dct" value { prefix_id: 4 name_id: 2 } } } rows { prefix { value: "https://w3id.org/np/o/ntemplate/" } } rows { namespace { name: "nt" value { prefix_id: 5 name_id: 2 } } } rows { prefix { value: "http://purl.org/nanopub/x/" } } rows { namespace { name: "npx" value { prefix_id: 6 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/2001/XMLSchema#" } } rows { namespace { name: "xsd" value { prefix_id: 7 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/2000/01/rdf-schema#" } } rows { namespace { name: "rdfs" value { prefix_id: 8 name_id: 2 } } } rows { prefix { value: "https://orcid.org/" } } rows { namespace { name: "orcid" value { prefix_id: 9 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/ns/prov#" } } rows { namespace { name: "prov" value { prefix_id: 10 name_id: 2 } } } rows { prefix { value: "http://xmlns.com/foaf/0.1/" } } rows { namespace { name: "foaf" value { prefix_id: 11 name_id: 2 } } } rows { name { value: "hasAssertion" } } rows { name { value: "assertion" } } rows { name { value: "Head" } } rows { quad { s_iri { prefix_id: 1 name_id: 1 } p_iri { prefix_id: 3 name_id: 3 } o_iri { prefix_id: 2 } g_iri { } } } rows { name { value: "hasProvenance" } } rows { name { value: "provenance" } } rows { quad { p_iri { prefix_id: 3 } o_iri { prefix_id: 2 } } } rows { name { value: "hasPublicationInfo" } } rows { name { value: "pubinfo" } } rows { quad { p_iri { prefix_id: 3 } o_iri { prefix_id: 2 } } } rows { prefix { value: "http://www.w3.org/1999/02/22-rdf-syntax-ns#" } } rows { name { value: "type" } } rows { name { value: "Nanopublication" } } rows { quad { p_iri { prefix_id: 12 } o_iri { prefix_id: 3 } } } rows { name { value: "paragraph" } } rows { prefix { value: "https://w3id.org/kpxl/gen/terms/" } } rows { name { value: "Paragraph" } } rows { quad { s_iri { prefix_id: 2 } o_iri { prefix_id: 13 } g_iri { prefix_id: 2 name_id: 4 } } } rows { prefix { value: "https://schema.org/" } } rows { name { value: "about" } } rows { prefix { value: "https://w3id.org/kpxl/grlc/" } } rows { name { value: "grlc-query" } } rows { quad { p_iri { prefix_id: 14 name_id: 14 } o_iri { prefix_id: 15 } } } rows { name { value: "title" } } rows { quad { p_iri { prefix_id: 14 } o_literal { lex: "Escaping in multi-value literal columns" } } } rows { name { value: "hasContent" } } rows { quad { p_iri { prefix_id: 13 } o_literal { lex: "
When concatenating literal values with a newline separator in group_concat, always escape existing backslashes and newlines in the individual values first: replace(replace(?val, \"\\\\\\\\\" , \"\\\\\\\\\\\\\\\\\"), \"\\\\n\", \"\\\\\\\\n\"). First escape existing backslashes (\\\\ \342\206\222 \\\\\\\\), then escape existing newlines (newline \342\206\222 \\\\n). This ensures values containing these characters can be safely split on newlines later.