Nanoarguments: Nanopublication Templates

Author
Virginia Balseiro
License
CC BY 4.0

Introduction

The Nanoarguments nanopublication templates are the reusable forms authoring tools use to produce discourse contributions, evidence findings, questions, and annotations as nanopublications, following the Nanoarguments model. Each is shown inline as a snapshot, with a link to the published nanopublication, which is the authoritative version. The conformance shapes validate the instances these templates generate.

Anatomy of a template

A template is a nanopublication with the usual four graphs (Head, assertion, provenance, publication info). The assertion graph declares an nt:AssertionTemplate that lists its statements and defines each placeholder (a field the author fills) and its type: introduced resource, long-literal, restricted choice, external URI, and so on. Optional and repeatable statements are flagged. The discourse-contribution template below shows the full structure; the others share the same wrapper, so only their assertion graphs are shown. Snapshots leave out the RSA signature block and Nanodash display labels, marked with # … comments; the published nanopublication linked under each snapshot is the complete, signed record.

@prefix this: <https://w3id.org/np/RAFpID-NunXGUAZebXPfhD9efjvfpZqB5gDBrgP2Lp5N8> .
@prefix sub: <https://w3id.org/np/RAFpID-NunXGUAZebXPfhD9efjvfpZqB5gDBrgP2Lp5N8/> .
@prefix gen: <https://w3id.org/kpxl/gen/terms/> .
@prefix np: <http://www.nanopub.org/nschema#> .
@prefix dct: <http://purl.org/dc/terms/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix nt: <https://w3id.org/np/o/ntemplate/> .
@prefix npx: <http://purl.org/nanopub/x/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix orcid: <https://orcid.org/> .
@prefix prov: <http://www.w3.org/ns/prov#> .

sub:Head {
  this: a np:Nanopublication;
    np:hasAssertion sub:assertion;
    np:hasProvenance sub:provenance;
    np:hasPublicationInfo sub:pubinfo .
}

sub:assertion {
  # … display labels for external terms omitted …

  sub:evidence a nt:ExternalUriPlaceholder .
  
  sub:st1 a rdf:Statement;
    rdf:object <https://schema.org/Statement>;
    rdf:predicate rdf:type;
    rdf:subject sub:statement .
  
  sub:st2 a rdf:Statement;
    rdf:object sub:statementText;
    rdf:predicate rdf:value;
    rdf:subject sub:statement .
  
  sub:st3 a nt:OptionalStatement;
    rdf:object sub:target;
    rdf:predicate sub:stance;
    rdf:subject sub:statement .
  
  sub:st4 a nt:OptionalStatement;
    rdf:object sub:target;
    rdf:predicate <https://www.w3.org/ns/activitystreams#inReplyTo>;
    rdf:subject sub:statement .
  
  sub:st5 a nt:OptionalStatement, nt:RepeatableStatement;
    rdf:object sub:evidence;
    rdf:predicate <http://purl.org/spar/cito/citesAsEvidence>;
    rdf:subject sub:statement .
  
  sub:stance a nt:RestrictedChoicePlaceholder;
    nt:possibleValuesFrom <https://w3id.org/np/RAZt5kzfoJg2m4dMRdMm2SP6JeUDD_GMzSq9xyRPMgP5k> .
  
  sub:statement a nt:IntroducedResource .
  
  sub:statementText a nt:LongLiteralPlaceholder;
    rdfs:label "statement text" .
  
  sub:target a nt:ExternalUriPlaceholder .
  
  sub:template a nt:AssertionTemplate;
    dct:description "A discourse statement that takes a typed (CiTO) stance toward, and/or replies to, another contribution, and may cite evidence. A statement with no stance, reply, or evidence is a valid standalone claim (e.g. a thread root).";
    dct:isVersionOf sub:templateKind;
    rdfs:label "Discourse contribution";
    gen:governedBy <https://w3id.org/spaces/knowledgepixels/nanoarguments>;
    nt:hasStatement sub:st1, sub:st2, sub:st3, sub:st4, sub:st5;
    nt:hasTag "Discourse" .
}

sub:provenance {
  sub:assertion prov:wasAttributedTo orcid:0009-0009-0118-9195 .
}

sub:pubinfo {
  this: dct:created "2026-07-14T09:13:10.856Z"^^xsd:dateTime;
    dct:creator orcid:0000-0002-1267-0234, orcid:0009-0009-0118-9195;
    dct:license <https://creativecommons.org/licenses/by/4.0/>;
    npx:embeds sub:template;
    npx:introduces sub:templateKind;
    npx:wasCreatedAt <https://nanodash.knowledgepixels.com/>;
    prov:wasDerivedFrom <https://w3id.org/np/RAsHohypO12gewyyusDEH_aI3z7GE-36tXIkr_ev8eITc>;
    nt:wasCreatedFromProvenanceTemplate <https://w3id.org/np/RA7lSq6MuK_TIC6JMSHvLtee3lpLoZDOqLJCLXevnrPoU>;
    nt:wasCreatedFromPubinfoTemplate <https://w3id.org/np/RACJ58Gvyn91LqCKIO9zu1eijDQIeEff28iyDrJgjSJF8>,
      <https://w3id.org/np/RAMEgudZsQ1bh1fZhfYnkthqH6YSXpghSE_DEN1I-6eAI>, <https://w3id.org/np/RARW4MsFkHuwjycNElvEVtuMjpf4yWDL10-0C5l2MqqRQ>,
      <https://w3id.org/np/RAukAcWHRDlkqxk7H2XNSegc1WnHI569INvNr-xdptDGI>;
    nt:wasCreatedFromTemplate <https://w3id.org/np/RAKmcrbEVkxF0ivA0_yGg8bnl6iKkwVDp_2SSHvPBrkPw/template> .

  # … RSA signature (sub:sig), author names, and display labels omitted …
}

Placeholders draw restricted choices from a value-list nanopublication via nt:possibleValuesFrom: the stance placeholder draws the full CiTO predicate set from the published cito-choices list. Statements st3-st5 are optional, so a statement with no stance, reply, or evidence is a valid standalone claim (a thread root).

The templates

Discourse contribution

The direct representation: the statement is a first-class content node (schema:Statement) carrying its discourse relations as plain triples: a typed CiTO stance and/or an as:inReplyTo reply to another contribution, plus optional cited evidence. Shown in full under Anatomy above.

Annotation as a discourse contribution

The same discourse statement wrapped as an oa:Annotation that anchors it to a target. oa:hasBody references the statement by IRI, so the body is an external web resource (a first-class content node, not embedded annotation text). The target is an oa:SpecificResource, optionally narrowed to a passage with an oa:TextQuoteSelector (leave the selector empty to anchor to the whole resource).

sub:assertion {
  sub:annotation a nt:LocalResource .
  
  sub:exactText a nt:LongLiteralPlaceholder .
  
  sub:motivation a nt:RestrictedChoicePlaceholder;
    nt:possibleValuesFrom <https://w3id.org/np/RACsOf8k6zeAMnUDOjv2IkCKgQmom-2VRNTKKt70kc57k> .
  
  sub:prefixText a nt:LiteralPlaceholder .
  
  sub:specificResource a nt:LocalResource .
  
  sub:st1 rdf:object <https://schema.org/Statement>;
    rdf:predicate rdf:type;
    rdf:subject sub:statement .
  
  sub:st10 rdf:object sub:anchor;
    rdf:predicate <http://www.w3.org/ns/oa#hasSource>;
    rdf:subject sub:specificResource .
  
  sub:st11 a nt:OptionalStatement;
    rdf:object sub:selector;
    rdf:predicate <http://www.w3.org/ns/oa#hasSelector>;
    rdf:subject sub:specificResource .
  
  sub:st12 a nt:OptionalStatement;
    rdf:object <http://www.w3.org/ns/oa#TextQuoteSelector>;
    rdf:predicate rdf:type;
    rdf:subject sub:selector .
  
  sub:st13 a nt:OptionalStatement;
    rdf:object sub:exactText;
    rdf:predicate <http://www.w3.org/ns/oa#exact>;
    rdf:subject sub:selector .
  
  sub:st14 a nt:OptionalStatement;
    rdf:object sub:prefixText;
    rdf:predicate <http://www.w3.org/ns/oa#prefix>;
    rdf:subject sub:selector .
  
  sub:st15 a nt:OptionalStatement;
    rdf:object sub:suffixText;
    rdf:predicate <http://www.w3.org/ns/oa#suffix>;
    rdf:subject sub:selector .
  
  sub:st2 rdf:object sub:statementText;
    rdf:predicate rdf:value;
    rdf:subject sub:statement .
  
  sub:st3 a nt:OptionalStatement;
    rdf:object sub:target;
    rdf:predicate sub:stance;
    rdf:subject sub:statement .
  
  sub:st4 a nt:OptionalStatement;
    rdf:object sub:target;
    rdf:predicate <https://www.w3.org/ns/activitystreams#inReplyTo>;
    rdf:subject sub:statement .
  
  sub:st5 rdf:object <http://www.w3.org/ns/oa#Annotation>;
    rdf:predicate rdf:type;
    rdf:subject sub:annotation .
  
  sub:st6 rdf:object sub:statement;
    rdf:predicate <http://www.w3.org/ns/oa#hasBody>;
    rdf:subject sub:annotation .
  
  sub:st7 rdf:object sub:specificResource;
    rdf:predicate <http://www.w3.org/ns/oa#hasTarget>;
    rdf:subject sub:annotation .
  
  sub:st8 rdf:object sub:motivation;
    rdf:predicate <http://www.w3.org/ns/oa#motivatedBy>;
    rdf:subject sub:annotation .
  
  sub:st9 rdf:object <http://www.w3.org/ns/oa#SpecificResource>;
    rdf:predicate rdf:type;
    rdf:subject sub:specificResource .
  
  sub:stance a nt:RestrictedChoicePlaceholder;
    nt:possibleValuesFrom <https://w3id.org/np/RAZt5kzfoJg2m4dMRdMm2SP6JeUDD_GMzSq9xyRPMgP5k> .
  
  sub:statement a nt:IntroducedResource .
  
  sub:statementText a nt:LongLiteralPlaceholder .
  
  sub:suffixText a nt:LiteralPlaceholder .
  
  sub:target a nt:ExternalUriPlaceholder .
  
  sub:template a nt:AssertionTemplate;
    dct:description "A Web Annotation whose body is a discourse statement taking a typed (CiTO) stance toward, and/or replying to, the annotated target. oa:hasBody references the statement by IRI, so the body is an external web resource. The target is an oa:SpecificResource, optionally narrowed to a passage with an oa:TextQuoteSelector.";
    dct:isVersionOf sub:templateKind;
    rdfs:label "Annotation as a discourse contribution";
    gen:governedBy <https://w3id.org/spaces/knowledgepixels/nanoarguments>;
    nt:hasStatement sub:st1, sub:st10, sub:st11, sub:st12, sub:st13, sub:st14, sub:st15,
      sub:st2, sub:st3, sub:st4, sub:st5, sub:st6, sub:st7, sub:st8, sub:st9;
    nt:hasTag "Discourse" .
}

Evidence finding

An ordinary discourse contribution (a schema:Statement with a CiTO stance) additionally typed as the SIO evidence class (sio:SIO_001394), pointed at the claim it bears on. It is still a valued statement with a CiTO relation, so it flows through the same discourse queries as any other contribution, and a receiver that does not understand the evidence type still sees a statement supporting or disputing a claim. Finer-grained evidence typing (ECO) is a deferred, optional extension.

sub:assertion {
  sub:claim a nt:ExternalUriPlaceholder .
  
  sub:finding a nt:IntroducedResource .
  
  sub:findingText a nt:LongLiteralPlaceholder .
  
  sub:st1 rdf:object <https://schema.org/Statement>;
    rdf:predicate rdf:type;
    rdf:subject sub:finding .
  
  sub:st2 rdf:object <http://semanticscience.org/resource/SIO_001394>;
    rdf:predicate rdf:type;
    rdf:subject sub:finding .
  
  sub:st3 rdf:object sub:findingText;
    rdf:predicate rdf:value;
    rdf:subject sub:finding .
  
  sub:st4 rdf:object sub:claim;
    rdf:predicate sub:stance;
    rdf:subject sub:finding .
  
  sub:stance a nt:RestrictedChoicePlaceholder;
    nt:possibleValuesFrom <https://w3id.org/np/RAZt5kzfoJg2m4dMRdMm2SP6JeUDD_GMzSq9xyRPMgP5k> .
  
  sub:template a nt:AssertionTemplate;
    dct:description "A finding presented as evidence: a statement typed as the SIO evidence class that bears on a claim through a typed (CiTO) relation. It is an ordinary discourse contribution (a schema:Statement carrying rdf:value and a CiTO stance) additionally typed as evidence, so it flows through the same discourse queries as any other contribution.";
    dct:isVersionOf sub:templateKind;
    rdfs:label "Evidence finding";
    gen:governedBy <https://w3id.org/spaces/knowledgepixels/nanoarguments>;
    nt:hasStatement sub:st1, sub:st2, sub:st3, sub:st4;
    nt:hasTag "Discourse" .
}

Question

A schema:Question posed to the discourse graph: the same shape as a discourse contribution, typed as a question. Unlike statements, a question relates to its target through a narrow, non-affirmative subset of CiTO, challenging it (disputes, critiques, qualifies, corrects) or neutrally discussing it (discusses), never supporting or agreeing. These are supplied inline as nt:possibleValue rather than pulled from the full CiTO list.

sub:assertion {
  sub:evidence a nt:ExternalUriPlaceholder .
  
  sub:question a nt:IntroducedResource .
  
  sub:questionText a nt:LongLiteralPlaceholder .
  
  sub:st1 rdf:object <https://schema.org/Question>;
    rdf:predicate rdf:type;
    rdf:subject sub:question .
  
  sub:st2 rdf:object sub:questionText;
    rdf:predicate rdf:value;
    rdf:subject sub:question .
  
  sub:st3 rdf:object sub:target;
    rdf:predicate sub:stance;
    rdf:subject sub:question .
  
  sub:st4 rdf:object sub:target;
    rdf:predicate <https://www.w3.org/ns/activitystreams#inReplyTo>;
    rdf:subject sub:question .
  
  sub:st5 rdf:object sub:evidence;
    rdf:predicate <http://purl.org/spar/cito/citesAsEvidence>;
    rdf:subject sub:question .
  
  sub:stance a nt:RestrictedChoicePlaceholder;
    nt:possibleValue <http://purl.org/spar/cito/corrects>, <http://purl.org/spar/cito/critiques>,
      <http://purl.org/spar/cito/discusses>, <http://purl.org/spar/cito/disputes>, <http://purl.org/spar/cito/qualifies> .
  
  sub:target a nt:ExternalUriPlaceholder .
  
  sub:template a nt:AssertionTemplate;
    dct:description "A question posed to the discourse graph: a schema:Question carrying its text in rdf:value. It may reply to a prior contribution (as:inReplyTo), or carry a rhetorical CiTO stance toward one when the question implicitly challenges its target (e.g. cito:disputes), and may cite evidence. Answers are separate contributions that target this question. A standalone question with no target is valid.";
    dct:isVersionOf sub:templateKind;
    rdfs:label "Question";
    gen:governedBy <https://w3id.org/spaces/knowledgepixels/nanoarguments>;
    nt:hasStatement sub:st1, sub:st2, sub:st3, sub:st4, sub:st5;
    nt:hasTag "Discourse" .
}

Published templates

Each template is a maintained resource of the Nanoarguments space, linked here by its template kind: the stable identifier that stays the same across versions (each published version declares dct:isVersionOf the kind). The snapshots on this page show the version current at the time of writing.

TemplateNanopublication
Discourse contributionRAFpID-NunXGUAZebXPfhD9efjvfpZqB5gDBrgP2Lp5N8/templateKind
Annotation as a discourse contributionRATxyPikKUvLwqijI4T_fvaHE758DsxgXhOq0m6KiLlEI/templateKind
Evidence findingRAdGQVeqqUoTNJe52OSMhY8EX1MkFA1LI4oQh-NAgrYV8/templateKind
QuestionRAOp9i7XUKKJhT4qIvtCA6LpXj9Hq7qkhsZ1MrLP7UfHE/templateKind