@prefix this: . @prefix sub: . @prefix schema: . @prefix gen: . @prefix np: . @prefix dct: . @prefix nt: . @prefix npx: . @prefix xsd: . @prefix rdfs: . @prefix prov: . sub:Head { this: a np:Nanopublication; np:hasAssertion sub:assertion; np:hasProvenance sub:provenance; np:hasPublicationInfo sub:pubinfo . } sub:assertion { sub:paragraph a gen:Paragraph; schema:about ; schema:title "The SPARQL must parse"; gen:hasContent """

A nanopublication cannot be changed once published, so a query whose SPARQL does not parse would be broken permanently: it could never run, and the only remedy would be publishing a corrected version.

Since nanopub-java 1.94.0 both signing and publishing refuse such a nanopublication, reporting the parser's own error, and check reports it as an issue. This catches the doubled-backslash mistake at signing time rather than after publication.

Where the parser stops at a character outside ASCII, the message names it, because these queries are more often broken by a character picked up from a word processor or a web page than by a mistyped keyword. A non-breaking space, for instance, is reported as Encountered: '160' (160).

Older versions of the tool have no such check: they sign and publish the nanopublication, and only the query API rejects it afterwards.

"""; gen:hasPositionString "12" . } sub:provenance { sub:assertion prov:wasAttributedTo . } sub:pubinfo { this: dct:created "2026-09-09T14:46:50Z"^^xsd:dateTime; dct:creator ; dct:license ; npx:introduces sub:paragraph; rdfs:label "The SPARQL must parse"; nt:wasCreatedFromProvenanceTemplate ; nt:wasCreatedFromPubinfoTemplate , ; nt:wasCreatedFromTemplate . sub:sig npx:hasAlgorithm "RSA"; npx:hasPublicKey "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl8cMusqtNyKA6UIsi3f7BAcZmHQXWxU0qk0PLsboMWQxYrGBfGgHTgRHJrBRxL+Zn9kJHKVmz2smDcjCBptXi/OwWy80gjsx+Pbe6IWz3zFPWF1UoFIKfPnC0slV67CQgdM853zW7Bmk9/uflCtK4EtZKmPdRGtUHVC7DTVvDBMDzLRGdE2KCBVN29EbM5GGVNvijYbaZQ9OFQPBkQshayqSIyGRr6rreJdkrRVLIzu3uuAjKYydaeXZWSN2JLnVBwrClKUxaEdCwhb5nXpMtKOMD+R+LgaXLeJUWM8BdRSYnta9ZqI5pHY4y3v+eW7J+HHeTvRbHvlik+Z4hFUXmQIDAQAB"; npx:hasSignature "hnngNLnX83OT7YdWUbjJdV92wDf0yFCHF/xmkdOMBbHoUE6sMBvny7w5bABxJRUpTWIHCiUWjZs3KH7hBfaw51t7JSbTDOe+VYvOUSiaASX7I1wCpLUsIebu8NHnnQP+wuBwlNxlvD5ZEImr3bWtTyNOtVh+giFIFBv0oXD2YaTA+ftZSu3UAsrnFqZ6iLwfuFts74v2W1hVcV+GIg+V/FXSl04AF9MadF01XrRTabSqFFLjZUn6w7re+lJzxHF23xZuC0/pD8zhjxUk1LRgyqaWQbKngHcxkyYaTivqOn1Y4LxJraHQpDtW5Z9pXZ872JsPs+YDNANSF8ytpHjShA=="; npx:hasSignatureTarget this:; npx:signedBy . }