@prefix this: . @prefix sub: . @prefix np: . @prefix grlc: . @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:get-docs-topics a grlc:grlc-query; dct:description "The topics of a documentation collection in reading order: each topic's newest declaration by a member of the maintaining space, ordered by position and then label, with its description and its number of paragraphs. Shaped for a paragraph view, so each topic's heading links to its page; the declaring nanopublication is the source and edit target."; dct:license ; rdfs:label "Get the table of contents of a documentation collection"; grlc:endpoint ; grlc:sparql """prefix rdf: prefix rdfs: prefix dct: prefix np: prefix npa: prefix npx: prefix gen: prefix schema: prefix schemas: # The table of contents of a documentation collection: each topic's newest declaration by a # member of the maintaining space, in reading order (position, then label), with its description # and the number of paragraphs it has. Shaped for a paragraph view: ?paragraph is the topic's own # IRI (so the heading links to the topic page), ?title its label, ?content the description and # paragraph count. select ?paragraph ?title ?content (str(?np) as ?override_target) ?np (\"^\" as ?np_label) where { { select ?topic ?np ?date (min(?l) as ?title) (min(?pos) as ?position) (min(?d) as ?description) where { service { select (group_concat(?mpk; separator=\" \") as ?memberPubkeys) where { graph npa:graph { npa:thisRepo npa:hasCurrentSpaceState ?stateG . } values ?_resource_multi_iri {} graph ?stateG { ?_resource_multi_iri npa:isMaintainedBy? ?space . ?ri a gen:RoleInstantiation ; npa:forSpace ?space ; npa:forAgent ?agent ; npa:hasRoleType ?roleType . ?acct a npa:AccountState ; npa:agent ?agent ; npa:pubkey ?mpk . } filter(?roleType in (gen:AdminRole, gen:MaintainerRole, gen:MemberRole)) } } values ?_resource_multi_iri {} graph npa:graph { ?np npa:hasValidSignatureForPublicKeyHash ?k ; dct:created ?date ; np:hasAssertion ?a . filter not exists { ?x npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?k . } } filter(contains(?memberPubkeys, ?k)) graph ?a { ?topic gen:isRelevantFor ?_resource_multi_iri ; rdfs:label ?l . optional { ?topic gen:hasPositionString ?pos . } optional { ?topic dct:description ?d . } } filter not exists { graph npa:graph { ?np2 npa:hasValidSignatureForPublicKeyHash ?k2 ; dct:created ?date2 ; np:hasAssertion ?a2 . filter not exists { ?y npx:invalidates ?np2 ; npa:hasValidSignatureForPublicKeyHash ?k2 . } } graph ?a2 { ?topic gen:isRelevantFor ?_resource_multi_iri . } filter(?date2 > ?date) filter(contains(?memberPubkeys, ?k2)) } } group by ?topic ?np ?date } # number of paragraphs about the topic (retracted ones excluded; each paragraph counted once) { select ?topic (count(distinct ?p) as ?n) where { graph npa:graph { ?pnp npa:hasValidSignatureForPublicKeyHash ?pk ; np:hasAssertion ?pa . filter not exists { ?z npx:invalidates ?pnp ; npa:hasValidSignatureForPublicKeyHash ?pk . } } graph ?pa { ?p rdf:type gen:Paragraph ; schema:about|schemas:about ?topic . } } group by ?topic } bind(?topic as ?paragraph) bind(concat(\"

\", coalesce(?description, \"\"), \"

\", str(?n), \" paragraph\", if(?n = 1, \"\", \"s\"), \"

\") as ?content) } order by ?position ?title""" . } sub:provenance { sub:assertion prov:wasAttributedTo . } sub:pubinfo { this: dct:created "2026-09-16T12:40:45Z"^^xsd:dateTime; dct:creator ; dct:license ; npx:embeds sub:get-docs-topics; 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 "Fjb7rP3ZCsiyDnRZk+9SsGHYdToy0YfP32ar4tC1+m6URygt+YTT+7fTYhwzOSkcFDmk2pqMeRNUMRGeWmvyZ4bgnWmTockxU1tVBUmnTCzCGyukcqPIhIb9GrhvNRARb27r0+sYlw7apZoHbO4flddtTK+QnnoebI5F/z3UgAvzg/U2KNFhBJ3Jp6RYS8nbrTAZGFB7gyDWc211RW+j7jZhfYyikzmU92jmMh4GPo5sQPpR/bo0EaLPneh4JrLNNTFjUKSBTL27XGlnDH6J8H47T8DvxmAWa9D84BqWVFr6f4PKw3UIZlftLPZ421VeIQ2v2uV1zO/cXLvobe5Fzg=="; npx:hasSignatureTarget this:; npx:signedBy . }