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: "RAYcriHlII62-eAYy91vOZ6WG5QmEc2juBM4XLu9U26aU" } } rows { namespace { name: "this" value { prefix_id: 1 } } } rows { prefix { value: "https://w3id.org/np/RAYcriHlII62-eAYy91vOZ6WG5QmEc2juBM4XLu9U26aU/" } } rows { name { } } rows { namespace { name: "sub" value { prefix_id: 2 } } } rows { prefix { value: "http://schema.org/" } } rows { namespace { name: "schema" value { prefix_id: 3 name_id: 2 } } } rows { prefix { value: "https://w3id.org/kpxl/gen/terms/" } } rows { namespace { name: "gen" value { prefix_id: 4 name_id: 2 } } } rows { prefix { value: "http://www.nanopub.org/nschema#" } } rows { namespace { name: "np" value { prefix_id: 5 name_id: 2 } } } rows { prefix { value: "http://purl.org/dc/terms/" } } rows { namespace { name: "dct" value { prefix_id: 6 name_id: 2 } } } rows { prefix { value: "https://w3id.org/np/o/ntemplate/" } } rows { namespace { name: "nt" value { prefix_id: 7 name_id: 2 } } } rows { prefix { value: "http://purl.org/nanopub/x/" } } rows { namespace { name: "npx" value { prefix_id: 8 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/2001/XMLSchema#" } } rows { namespace { name: "xsd" value { prefix_id: 9 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/2000/01/rdf-schema#" } } rows { namespace { name: "rdfs" value { prefix_id: 10 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/ns/prov#" } } rows { namespace { name: "prov" 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: 5 name_id: 3 } o_iri { prefix_id: 2 } g_iri { } } } rows { name { value: "hasProvenance" } } rows { name { value: "provenance" } } rows { quad { p_iri { prefix_id: 5 } o_iri { prefix_id: 2 } } } rows { name { value: "hasPublicationInfo" } } rows { name { value: "pubinfo" } } rows { quad { p_iri { prefix_id: 5 } 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: 5 } } } rows { name { value: "paragraph" } } rows { name { value: "about" } } rows { prefix { value: "https://w3id.org/kpxl/grlc/" } } rows { name { value: "grlc-query" } } rows { quad { s_iri { prefix_id: 2 } p_iri { prefix_id: 3 } o_iri { prefix_id: 13 } g_iri { prefix_id: 2 name_id: 4 } } } rows { name { value: "title" } } rows { quad { p_iri { prefix_id: 3 name_id: 15 } o_literal { lex: "Writing the SPARQL into the TriG" } } } rows { name { value: "Paragraph" } } rows { quad { p_iri { prefix_id: 12 name_id: 10 } o_iri { prefix_id: 4 name_id: 16 } } } rows { name { value: "hasContent" } } rows { quad { p_iri { } o_literal { lex: "

When a query nanopublication is written by hand, the SPARQL sits inside a TriG string literal, and the TriG parser resolves backslash escapes before the SPARQL is ever seen. Every backslash meant for the SPARQL must therefore be doubled in the file.

\n

The one that catches people is the separator of group_concat. Written as a single backslash, separator=\"\\n\" becomes a real line break inside a quoted SPARQL string, which is not valid SPARQL. Written as separator=\"\\\\n\" in the TriG, it reaches the query as the two characters that were intended.

\n

The safe way to produce the file is to build it from the raw query text with the backslashes doubled programmatically, then parse the result back and check that the round-tripped literal still contains the escape rather than a line break.

" } } } rows { name { value: "hasPositionString" } } rows { quad { p_iri { } o_literal { lex: "11" } } } rows { name { value: "wasAttributedTo" } } rows { prefix { value: "https://w3id.org/np/RAFJKwxgChOLOQ2UduMAT1bYf1VNaWIZYIPmTT3YvJ8y0/" } } rows { name { value: "docs-bot" } } rows { quad { s_iri { prefix_id: 2 name_id: 4 } p_iri { prefix_id: 11 name_id: 19 } o_iri { prefix_id: 14 } g_iri { prefix_id: 2 name_id: 7 } } } rows { name { value: "created" } } rows { datatype { value: "http://www.w3.org/2001/XMLSchema#dateTime" } } rows { quad { s_iri { prefix_id: 1 name_id: 1 } p_iri { prefix_id: 6 name_id: 21 } o_literal { lex: "2026-09-09T14:46:50Z" datatype: 1 } g_iri { prefix_id: 2 name_id: 9 } } } rows { name { value: "creator" } } rows { quad { p_iri { prefix_id: 6 name_id: 22 } o_iri { prefix_id: 14 name_id: 20 } } } rows { name { value: "license" } } rows { prefix { value: "https://creativecommons.org/publicdomain/zero/1.0/" } } rows { quad { p_iri { prefix_id: 6 name_id: 23 } o_iri { prefix_id: 15 name_id: 2 } } } rows { name { value: "introduces" } } rows { quad { p_iri { prefix_id: 8 name_id: 24 } o_iri { prefix_id: 2 name_id: 12 } } } rows { name { value: "label" } } rows { quad { p_iri { prefix_id: 10 name_id: 25 } o_literal { lex: "Writing the SPARQL into the TriG" } } } rows { name { value: "wasCreatedFromProvenanceTemplate" } } rows { name { value: "RA7lSq6MuK_TIC6JMSHvLtee3lpLoZDOqLJCLXevnrPoU" } } rows { quad { p_iri { prefix_id: 7 } o_iri { prefix_id: 1 } } } rows { name { value: "wasCreatedFromPubinfoTemplate" } } rows { name { value: "RA-N4_kFxcruvBTlo1yJv29E4SLOXsx5KO_th69PprMrA" } } rows { quad { p_iri { prefix_id: 7 } o_iri { prefix_id: 1 } } } rows { name { value: "RACJ58Gvyn91LqCKIO9zu1eijDQIeEff28iyDrJgjSJF8" } } rows { quad { o_iri { } } } rows { name { value: "wasCreatedFromTemplate" } } rows { name { value: "RAdxrv0Rie-65L6gdURjpy8nTt7YagghQfX20Zw4pR7t0" } } rows { quad { p_iri { prefix_id: 7 } o_iri { prefix_id: 1 } } } rows { name { value: "sig" } } rows { name { value: "hasAlgorithm" } } rows { quad { s_iri { prefix_id: 2 } p_iri { prefix_id: 8 } o_literal { lex: "RSA" } } } rows { name { value: "hasPublicKey" } } rows { quad { p_iri { } o_literal { lex: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl8cMusqtNyKA6UIsi3f7BAcZmHQXWxU0qk0PLsboMWQxYrGBfGgHTgRHJrBRxL+Zn9kJHKVmz2smDcjCBptXi/OwWy80gjsx+Pbe6IWz3zFPWF1UoFIKfPnC0slV67CQgdM853zW7Bmk9/uflCtK4EtZKmPdRGtUHVC7DTVvDBMDzLRGdE2KCBVN29EbM5GGVNvijYbaZQ9OFQPBkQshayqSIyGRr6rreJdkrRVLIzu3uuAjKYydaeXZWSN2JLnVBwrClKUxaEdCwhb5nXpMtKOMD+R+LgaXLeJUWM8BdRSYnta9ZqI5pHY4y3v+eW7J+HHeTvRbHvlik+Z4hFUXmQIDAQAB" } } } rows { name { value: "hasSignature" } } rows { quad { p_iri { } o_literal { lex: "d5PHBPpVvYcPqElilRU9gphppdyl0vsEaPA1PupnJtta/ugfZ4Rxx0eHBC0U7khJDtmq/qFFdd23ibPcC7gX71VJJyTN/BNDKVojAjC7opVDipz+UEr/M644H/eX6zXvFlMB49UzdHb/PAkusq+D9KJ7XYpjKy2B8sYF/cvf4J8rHwb8zCbEuYYDKMX8bsPdwWzxsey3eg255diI+gkQYFNOtN3IWMoWCel5YZl2f3ICq4sy6tyJnjO6y1NwbWAOfB9MKdxQN3wUSkzeEXUdq8XiJdg1smb9X8Cw45rMb//TSUokHzlXiKvGVN6TIeQs3FkZzo1AjI0+3KEZEYap6A==" } } } rows { name { value: "hasSignatureTarget" } } rows { quad { p_iri { } o_iri { prefix_id: 1 name_id: 1 } } } rows { name { value: "signedBy" } } rows { quad { p_iri { prefix_id: 8 name_id: 38 } o_iri { prefix_id: 14 name_id: 20 } } }