Generalized 'approved' half of the former 'Get the biochementities of an ontology from space members' query (its counterpart is 'Get the classes pending approval of an ontology from space members'). Returns the approved classes (owl:Class) of the given ontology or vocabulary: classes whose definition declares them part of the given resource via dct:isPartOf (or the legacy dct:partOf), restricted to nanopubs published by an admin, maintainer, or member of the space that maintains the resource. The maintaining space and its validated member public-key hashes are resolved server-side from the spaces repo (/repo/spaces); observers are excluded. Each class URI appears once, kept from the latest (by nanopub timestamp) member-published definition. Approval is judged on that winning definition only, so publishing a new version starts it out unapproved and moves the class to the pending listing until it is approved again. A version counts as approved when the newest non-invalidated approval/disapproval nanopublication targeting it is an npx:approvesOf (latest wins across all publishers: a later npx:disapprovesOf neutralises an earlier approval, and a later approval reinstates it), its publisher signed with a key that belongs to a current member+ of the maintaining space, and that publisher is not the signer of the nanopublication being approved (self-approval never counts). In addition, a contribution counts as approved by default when its signing key belongs to a validated holder of the auto-approved helper role (https://w3id.org/np/RASGFRI3F5TtJ4GA4Yaed3esIpTF3pDyJLbpuvsqHzIXc/autoApprovedHelperRole) in the maintaining space -- typically a curation bot the space has admitted in that role -- with no separate npx:approvesOf needed; this replaces the earlier rule that auto-approved any self-declared software agent. The default is only a starting point: an outstanding member disapproval overrides it, and disapproving then re-approving returns the nanopublication to the explicit state. The helper-role holders' key hashes are resolved from the spaces repo via the validated role instantiations carrying gen:hasRole. Because approval nanopublications do not carry the owl:Class nanopub type they are absent from the type-scoped endpoint this query runs on, so the set of current approval verdicts is resolved once per request by a self-contained sub-select that federates to /repo/full for the approvals and to /repo/spaces for the approvers' member keys, keeping every federated call at one SERVICE level. Superclass labels are taken from the superclass' own rdfs:label when it is a class in the same ontology. The status column is a multi-value literal listing the curation states that apply to the winning definition: "deprecated" (owl:DeprecatedClass), "withdrawn" (gen:WithdrawnTerm) and "example" (npx:ExampleNanopub), in that order; "approved" is not listed any more since every row of this query is approved. Note that "withdrawn" can never appear because classes whose winning definition types them gen:WithdrawnTerm are excluded entirely (withdrawal is judged on the winning definition only, so publishing a new version without that type reinstates the class); the branch is kept so the expression matches the sibling queries. The disapprove_target and approval_choice columns are action data rather than content: they let a view offer a per-row disapprove action pre-filled with the row's nanopublication and npx:disapprovesOf, and the override_target column carries the row's nanopublication for an in-place re-edit action. The last_modified_by/last_modified columns give the signer and timestamp of the latest definition; the signer name is resolved from the trust repo (/repo/trust) or left blank.
Get the approved classes of an ontology from space members
prefix owl: <http://www.w3.org/2002/07/owl#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix dct: <http://purl.org/dc/terms/> prefix np: <http://www.nanopub.org/nschema#> prefix npa: <http://purl.org/nanopub/admin/> prefix npx: <http://purl.org/nanopub/x/> prefix skos: <http://www.w3.org/2004/02/skos/core#> prefix gen: <https://w3id.org/kpxl/gen/terms/> prefix foaf: <http://xmlns.com/foaf/0.1/> select ?class ?class_label ?description ?superclasses_multi_iri ?superclasses_label_multi ?status_multi ?last_modified_by (sample(?lmbl) as ?last_modified_by_label) ?last_modified (?np as ?override_target) ?disapprove_target ?approval_choice ?np ?np_label where { { select ?class ?class_label (?definition as ?description) (group_concat(distinct str(?superclass); separator=" ") as ?superclasses_multi_iri) (group_concat(distinct replace(replace(coalesce(?superclass_lbl, str(?superclass)), "\\\\", "\\\\\\\\"), "[\r\n]+", "\\\\n"); separator="\n") as ?superclasses_label_multi) ?status_multi ?disapprove_target ?approval_choice (sample(?user) as ?last_modified_by) (sample(?date) as ?last_modified) ?np ("^" as ?np_label) where { values ?_ontology_multi_iri {} service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> { select (group_concat(?mpk; separator=" ") as ?memberPubkeys) where { graph npa:graph { npa:thisRepo npa:hasCurrentSpaceState ?stateG . } values ?_ontology_multi_iri {} graph ?stateG { ?_ontology_multi_iri npa:isMaintainedBy? ?space . ?ri a gen:RoleInstantiation ; npa:forSpace ?space ; npa:forAgent ?agent ; npa:hasRoleType ?rt . filter(?rt in (gen:AdminRole, gen:MaintainerRole, gen:MemberRole)) ?acct a npa:AccountState ; npa:agent ?agent ; npa:pubkey ?mpk . } } } graph npa:graph { ?np npx:hasNanopubType owl:Class . ?np npa:hasValidSignatureForPublicKeyHash ?pubkey . filter not exists { ?npx npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pubkey . } ?np dct:created ?date . ?np npx:introduces ?class . ?np np:hasAssertion ?a . optional { ?np npx:signedBy ?user . } } filter(contains(?memberPubkeys, ?pubkey)) { select (group_concat(distinct ?apV; separator=" ") as ?approvedNps) (group_concat(distinct ?disV; separator=" ") as ?disapprovedNps) where { { select ?vTarget (max(concat(str(?vDate), ">", str(?vNp), ">", ?vMark)) as ?vWin) where { values ?_ontology_multi_iri {} service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> { select (group_concat(?vpk; separator=" ") as ?vMemberPubkeys) where { graph npa:graph { npa:thisRepo npa:hasCurrentSpaceState ?vStateG . } values ?_ontology_multi_iri {} graph ?vStateG { ?_ontology_multi_iri npa:isMaintainedBy? ?vSpace . ?vRi a gen:RoleInstantiation ; npa:forSpace ?vSpace ; npa:forAgent ?vMember ; npa:hasRoleType ?vRt . filter(?vRt in (gen:AdminRole, gen:MaintainerRole, gen:MemberRole)) ?vAcct a npa:AccountState ; npa:agent ?vMember ; npa:pubkey ?vpk . } } } service <https://w3id.org/np/l/nanopub-query-1.1/repo/full> { select distinct ?vTarget ?vNp ?vDate ?vPubkey ?vMark where { graph npa:graph { ?vTarget npx:hasNanopubType owl:Class ; npx:signedBy ?targetAgent . ?vNp npx:signedBy ?vAgent ; npa:hasValidSignatureForPublicKeyHash ?vPubkey ; dct:created ?vDate ; np:hasAssertion ?vA . filter not exists { ?vInv npx:invalidates ?vNp ; npa:hasValidSignatureForPublicKeyHash ?vPubkey . } } graph ?vA { ?vAgent ?vPred ?vTarget . } values ?vPred { npx:approvesOf npx:disapprovesOf } filter(?vAgent != ?targetAgent) bind(if(?vPred = npx:approvesOf, "a", "d") as ?vMark) } } filter(contains(?vMemberPubkeys, ?vPubkey)) } group by ?vTarget } bind(if(strends(?vWin, "a"), str(?vTarget), "") as ?apV) bind(if(strends(?vWin, "d"), str(?vTarget), "") as ?disV) } } service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> { select (group_concat(?hpk; separator=" ") as ?helperPubkeys) where { graph npa:graph { npa:thisRepo npa:hasCurrentSpaceState ?hStateG . } values ?_ontology_multi_iri {} graph ?hStateG { ?_ontology_multi_iri npa:isMaintainedBy? ?hSpace . ?hRi a gen:RoleInstantiation ; npa:forSpace ?hSpace ; npa:forAgent ?hAgent ; gen:hasRole <https://w3id.org/np/RASGFRI3F5TtJ4GA4Yaed3esIpTF3pDyJLbpuvsqHzIXc/autoApprovedHelperRole> . ?hAcct a npa:AccountState ; npa:agent ?hAgent ; npa:pubkey ?hpk . } } } graph ?a { ?class dct:isPartOf|dct:partOf ?_ontology_multi_iri . optional { ?class rdfs:label ?class_label . filter(lang(?class_label) = "") } optional { ?class skos:definition ?definition . } optional { ?class rdfs:subClassOf ?superclass . filter(isIRI(?superclass)) } } filter not exists { graph ?a { ?class a gen:WithdrawnTerm } } bind(contains(concat(" ", ?approvedNps, " "), concat(" ", str(?np), " ")) as ?explicitApproved) bind(contains(concat(" ", ?disapprovedNps, " "), concat(" ", str(?np), " ")) as ?explicitDisapproved) bind(contains(?helperPubkeys, ?pubkey) as ?isAutoApproved) bind(?explicitApproved || (?isAutoApproved && !?explicitDisapproved) as ?isApproved) filter(?isApproved) bind(str(?np) as ?disapprove_target) bind(str(npx:disapprovesOf) as ?approval_choice) bind(replace(concat( if(exists { graph ?a { ?class a owl:DeprecatedClass } }, "deprecated\n", ""), if(exists { graph ?a { ?class a gen:WithdrawnTerm } }, "withdrawn\n", ""), if(exists { graph npa:graph { ?np npx:hasNanopubType npx:ExampleNanopub } }, "example\n", "") ), "\n$", "") as ?status_multi) filter not exists { graph npa:graph { ?np2 npx:hasNanopubType owl:Class . ?np2 npa:hasValidSignatureForPublicKeyHash ?pubkey2 . filter not exists { ?np2x npx:invalidates ?np2 ; npa:hasValidSignatureForPublicKeyHash ?pubkey2 . } ?np2 dct:created ?date2 . ?np2 npx:introduces ?class . ?np2 np:hasAssertion ?a2 . } filter(contains(?memberPubkeys, ?pubkey2)) graph ?a2 { ?class dct:isPartOf|dct:partOf ?_ontology_multi_iri . } filter(?date2 > ?date || (?date2 = ?date && str(?np2) > str(?np))) } optional { select ?superclass (sample(?sclbl) as ?superclass_lbl) where { values ?_ontology_multi_iri {} graph npa:graph { ?scnp npx:hasNanopubType owl:Class ; npx:introduces ?superclass ; np:hasAssertion ?sca . } graph ?sca { ?superclass dct:isPartOf|dct:partOf ?_ontology_multi_iri ; rdfs:label ?sclbl . } } group by ?superclass } } group by ?class ?class_label ?definition ?status_multi ?disapprove_target ?approval_choice ?np } optional { service <https://w3id.org/np/l/nanopub-query-1.1/repo/trust> { select ?last_modified_by ?lmbl where { graph npa:graph { npa:thisRepo npa:hasCurrentTrustState ?tg . } graph ?tg { ?last_modified_by foaf:name ?lmbl . } } } } } group by ?class ?class_label ?description ?superclasses_multi_iri ?superclasses_label_multi ?status_multi ?last_modified_by ?last_modified ?disapprove_target ?approval_choice ?np ?np_label order by ?class_label