@prefix ECO: <http://purl.obolibrary.org/obo/ECO_> .
@prefix IAO: <http://purl.obolibrary.org/obo/IAO_> .
@prefix asb: <https://w3id.org/asb#> .
@prefix cito: <http://purl.org/spar/cito/> .
@prefix dcat: <http://www.w3.org/ns/dcat#> .
@prefix dct: <http://purl.org/dc/terms/> .
@prefix doco: <http://purl.org/spar/doco/> .
@prefix fabio: <http://purl.org/spar/fabio/> .
@prefix indicium: <https://w3id.org/indicium/> .
@prefix oa: <http://www.w3.org/ns/oa#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sepio: <http://purl.obolibrary.org/obo/SEPIO_> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix sssom: <https://w3id.org/sssom/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

indicium:QualifierPresenceShape a sh:NodeShape ;
    sh:message "A Claim must carry at least one of asb:qualifier (closed Bucur SuperPattern) or asb:domainQualifier (open domain-adapter extension)." ;
    sh:or ( [ sh:minCount 1 ;
                sh:path asb:qualifier ] [ sh:minCount 1 ;
                sh:path asb:domainQualifier ] ) ;
    sh:targetClass asb:Claim .

indicium:SupersededByRequiredShape a sh:NodeShape ;
    sh:sparql [ a sh:SPARQLConstraint ;
            sh:message "When claim_status is 'superseded', superseded_by must be set to the URI of the replacement Claim." ;
            sh:select """
            PREFIX indicium: <https://w3id.org/indicium/>
            SELECT $this
            WHERE {
                $this indicium:claim_status "superseded" .
                FILTER NOT EXISTS { $this indicium:superseded_by ?_ }
            }
        """ ] ;
    sh:targetClass asb:Claim .

indicium:IndiciumDocument a sh:NodeShape ;
    rdfs:comment "Top-level container for a serialisable Indicium document. Holds all entity collections; enables full round-trip JSON/YAML/RDF I/O." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class asb:Claim ;
            sh:description "All Claim entities in this document." ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path indicium:claims ],
        [ sh:class fabio:ComputerProgram ;
            sh:description "All Script entities in this document." ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 4 ;
            sh:path indicium:scripts ],
        [ sh:class sssom:Mapping ;
            sh:description "SSSOM term mappings carried by this document." ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path indicium:sssom_mappings ],
        [ sh:class indicium:ClaimLink ;
            sh:description "All ClaimLink edges in this document." ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path indicium:claim_links ],
        [ sh:class fabio:Expression ;
            sh:description "All Source entities in this document." ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 2 ;
            sh:path indicium:sources ],
        [ sh:class sepio:0000002 ;
            sh:description "All Evidence entities in this document." ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 1 ;
            sh:path indicium:evidences ],
        [ sh:class indicium:CitationLink ;
            sh:description "All CitationLink edges in this document." ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 8 ;
            sh:path indicium:citation_links ],
        [ sh:class doco:Figure ;
            sh:description "All Figure entities in this document." ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 3 ;
            sh:path indicium:figures ],
        [ sh:class dcat:Dataset ;
            sh:description "All DataAsset entities in this document." ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path indicium:datasets ],
        [ sh:class fabio:ComputerProgram ;
            sh:description "All SoftwareEntity records in this document." ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 6 ;
            sh:path indicium:software_entities ] ;
    sh:targetClass indicium:IndiciumDocument .

sepio:0000002 a sh:NodeShape ;
    rdfs:comment "An evidence line linking a Claim to a Source (SEPIO EvidenceLine)." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:in ( ECO:0000006 ECO:0000033 ECO:0000302 ECO:0000361 ECO:0000034 ) ;
            sh:maxCount 1 ;
            sh:order 0 ;
            sh:path indicium:evidence_type ],
        [ sh:class dcat:Dataset ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 12 ;
            sh:path indicium:of_dataset ],
        [ sh:description "Reproducibility qualifier — coupling of the workflow that produced this evidence (Suter et al. 2025). Optional; set by producers that know the workflow structure." ;
            sh:in ( "tight" "loose" "ad_hoc" "unknown" ) ;
            sh:maxCount 1 ;
            sh:order 17 ;
            sh:path asb:workflowCoupling ],
        [ sh:datatype xsd:string ;
            sh:description "ASTRA-style 'decision_id.option_id' tags scoping this evidence item to a specific methodological universe. Empty list = universally applicable." ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path indicium:decision_context ;
            sh:pattern "^[a-zA-Z_][a-zA-Z0-9_]*\\.[a-zA-Z_][a-zA-Z0-9_]*$" ],
        [ sh:datatype xsd:string ;
            sh:description "Free-form locator for the quote — paragraph id, XPath pointer, page-offset string, or W3C OA fragment IRI. Use when the structured `text_selector` / `fragment_selector` classes are overkill (e.g. the ASB adapter passes a `paragraph_id` string from its source paper)." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path indicium:quote_location ],
        [ sh:in ( IAO:0000311 doco:Figure doco:Table IAO:0000536 fabio:ComputerProgram dcat:Dataset ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path indicium:source_type ],
        [ sh:class fabio:Expression ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path indicium:of_source ],
        [ sh:class doco:Figure ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 10 ;
            sh:path indicium:of_figure ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path indicium:quote ],
        [ sh:datatype xsd:float ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path indicium:confidence ],
        [ sh:datatype xsd:string ;
            sh:description "IRI or identifier of the agent (human ORCID, pipeline run ID, etc.) that asserted this item." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 16 ;
            sh:path prov:wasAttributedTo ],
        [ sh:class fabio:ComputerProgram ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 11 ;
            sh:path indicium:of_script ],
        [ sh:datatype xsd:string ;
            sh:description "Spec-required name for the verbatim text excerpt supporting a claim. Aliases `quote`; ASB adapter targets this name. SHACL-level constraint that exactly one of {quote, quote_exact} is set is deferred to v1.7." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path indicium:quote_exact ],
        [ sh:class oa:FragmentSelector ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 14 ;
            sh:path indicium:fragment_selector ],
        [ sh:description "ASB-subset ECO classification of this evidence line. Carries an ECO IRI via the enum's `meaning`. Coexists with `evidence_type` (broader, lifecycle-oriented): `eco_code` is the canonical ASB-emitted vocabulary, `evidence_type` remains for back-compat." ;
            sh:in ( ECO:0000033 ECO:0000251 ECO:0000305 ECO:0000302 ECO:0000204 ECO:0000006 ECO:0000213 ECO:0000033 ) ;
            sh:maxCount 1 ;
            sh:order 1 ;
            sh:path indicium:eco_code ],
        [ sh:class asb:Claim ;
            sh:description "Claim evaluated by this evidence line. Uses SEPIO is_evidence_line_for, the inverse of has_evidence_line (proposition or assertion to evidence line). The historical JSON name does not encode supporting polarity: express supporting, disputing or inconclusive direction separately with sepio:0000183 on the evidence line. Semantic alias of the local for_claim link; when both are supplied they should identify the same Claim. The two JSON fields remain distinct and are not automatically copied." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path sepio:0000427 ],
        [ sh:class oa:TextQuoteSelector ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path indicium:text_selector ],
        [ sh:class asb:Claim ;
            sh:description "Indicium-local link from an evidence line to the Claim it evaluates. Semantic alias of supports_claim with a distinct local RDF predicate. When both fields are supplied they should identify the same Claim; neither field is automatically copied to the other." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path indicium:for_claim ] ;
    sh:targetClass sepio:0000002 .

oa:TextQuoteSelector a sh:NodeShape ;
    rdfs:comment "W3C TextQuoteSelector. Exact text + optional disambiguation context. Matches ASTRA's existing oa:TextQuoteSelector alignment." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path indicium:tqs_suffix ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path indicium:tqs_exact ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path indicium:tqs_prefix ] ;
    sh:targetClass oa:TextQuoteSelector .

indicium:CitationLink a sh:NodeShape ;
    rdfs:comment "A typed link (CiTO) from a Source to a Claim." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:in ( cito:supports cito:disputes cito:qualifies cito:citesForInformation cito:contradicts cito:refines cito:extends cito:agreesWith cito:disagreesWith cito:updates cito:corrects cito:usesDataFrom cito:usesMethodIn ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path indicium:link_type ],
        [ sh:class fabio:Expression ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 0 ;
            sh:path indicium:of_source ],
        [ sh:class asb:Claim ;
            sh:description "Indicium-local link from an evidence line to the Claim it evaluates. Semantic alias of supports_claim with a distinct local RDF predicate. When both fields are supplied they should identify the same Claim; neither field is automatically copied to the other." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path indicium:for_claim ] ;
    sh:targetClass indicium:CitationLink .

indicium:ClaimLink a sh:NodeShape ;
    rdfs:comment "A typed semantic link between two Claims using CiTO predicates. Enables contradiction detection, argument graphs, and claim ledger navigation." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:in ( cito:supports cito:disputes cito:qualifies cito:citesForInformation cito:contradicts cito:refines cito:extends cito:agreesWith cito:disagreesWith cito:updates cito:corrects cito:usesDataFrom cito:usesMethodIn ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path indicium:link_type ],
        [ sh:class asb:Claim ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path indicium:from_claim ],
        [ sh:class asb:Claim ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path indicium:to_claim ] ;
    sh:targetClass indicium:ClaimLink .

sssom:Mapping a sh:NodeShape ;
    rdfs:comment "A term mapping in SSSOM form (Simple Standard for Sharing Ontological Mappings) carried by an Indicium document." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path indicium:subject_label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path dct:identifier ],
        [ sh:datatype xsd:string ;
            sh:description "SEMAPV justification (e.g. semapv:LexicalMatching)." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path indicium:mapping_justification ],
        [ sh:datatype xsd:float ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path indicium:confidence ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path indicium:object_label ],
        [ sh:datatype xsd:string ;
            sh:description "Identifiers of source mapping(s) this was inferred from (cthoyt 2026-05-29). Modelled; not yet populated by direct lexical matches." ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path indicium:derived_from ],
        [ sh:datatype xsd:string ;
            sh:description "SSSOM object term (CURIE/IRI)." ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path indicium:object_id ],
        [ sh:datatype xsd:string ;
            sh:description "SSSOM subject (CURIE/IRI)." ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path indicium:subject_id ],
        [ sh:datatype xsd:string ;
            sh:description "SSSOM mapping predicate (e.g. skos:closeMatch)." ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path indicium:predicate_id ] ;
    sh:targetClass sssom:Mapping .

oa:FragmentSelector a sh:NodeShape ;
    rdfs:comment "W3C FragmentSelector for PDF page location." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path indicium:frag_value ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path indicium:frag_page ] ;
    sh:targetClass oa:FragmentSelector .

doco:Figure a sh:NodeShape ;
    rdfs:comment "A figure, table, or other display item from a scholarly publication. Carries optional FaBiO sub-type classification (via figure_type) and provenance (source_doi). Linked from Evidence.of_figure when the evidence is grounded in a visual artefact rather than a text passage." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path indicium:page ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path indicium:is_supplementary ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path indicium:source_doi ],
        [ sh:in ( fabio:DataPlot fabio:Graph fabio:Photograph fabio:Plate fabio:Diagram fabio:Flowchart fabio:Table fabio:Figure ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path indicium:figure_type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path indicium:content_url ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path indicium:caption ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path indicium:media_type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path dct:identifier ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path indicium:panel_label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path indicium:figure_id ],
        [ sh:class oa:FragmentSelector ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 10 ;
            sh:path indicium:fragment_selector ] ;
    sh:targetClass doco:Figure .

fabio:Expression a sh:NodeShape ;
    rdfs:comment "A cited source/paper with stable identity." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path dct:title ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path indicium:license_id ],
        [ sh:datatype xsd:string ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path indicium:authors ],
        [ sh:datatype xsd:string ;
            sh:description "XPath expression locating a node within the Source's structured representation (JATS XML, TEI, HTML). Alternative to `paragraph_id` when finer granularity is needed." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path indicium:xpath_pointer ],
        [ sh:datatype xsd:string ;
            sh:description "DOI of this Source (paper, dataset, preprint). String form, no `doi:` prefix; canonical IRI is `https://doi.org/<value>`. Distinct from generic `identifier` so adapters can target it unambiguously." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path dct:identifier ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path dct:identifier ],
        [ sh:datatype xsd:string ;
            sh:description "Stable per-paragraph identifier within the Source (e.g. the `id` attribute of a JATS `<p>` element, or an ASB-emitted `p-<n>` synthetic id). Pairs with `Evidence.quote_location`." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path indicium:paragraph_id ] ;
    sh:targetClass fabio:Expression .

asb:Claim a sh:NodeShape ;
    rdfs:comment "A scientific claim using the Bucur 5-slot SuperPattern." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path indicium:source_excerpt ],
        [ sh:in ( "draft" "verified" "published" "retracted" "superseded" ) ;
            sh:maxCount 1 ;
            sh:order 11 ;
            sh:path indicium:claim_status ],
        [ sh:in ( "explicit" "implicit" ) ;
            sh:maxCount 1 ;
            sh:order 9 ;
            sh:path indicium:claim_type ],
        [ sh:description "URI of the Claim that supersedes this one. Must be set when claim_status is 'superseded'. Allows external Claim IRIs for cross-document lineage." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 14 ;
            sh:path indicium:superseded_by ],
        [ sh:in ( "causes" "prevents" "inhibits" "activates" "increases" "decreases" "correlates_with" "is_associated_with" "predicts" "interacts_with" "produces" "requires" "enables" "treats" "enhances" "reduces" "has_property" "is_part_of" "is_a" "consistent_with" ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path asb:qualifier ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path dct:identifier ],
        [ sh:datatype xsd:string ;
            sh:description "IRI or identifier of the agent (human ORCID, pipeline run ID, etc.) that asserted this item." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path prov:wasAttributedTo ],
        [ sh:description "Provenance qualifier — how this Claim relates to the task in its source paper (reproduction / analysis / component_reconstruction / extension). Claim-level sibling of Evidence.workflow_coupling. Canonical replacement for the ASB-emitted asbext:source_task_kind extension field. Optional: producers omit it when a claim spans tasks of differing kinds." ;
            sh:in ( "reproduction" "analysis" "component_reconstruction" "extension" ) ;
            sh:maxCount 1 ;
            sh:order 15 ;
            sh:path asb:sourceTaskKind ],
        [ sh:description "Spec-required name for the Bucur SuperPattern qualifier. Aliases `qualifier`; the ASB adapter targets this name. Either may be set; both must agree if both are populated." ;
            sh:in ( "causes" "prevents" "inhibits" "activates" "increases" "decreases" "correlates_with" "is_associated_with" "predicts" "interacts_with" "produces" "requires" "enables" "treats" "enhances" "reduces" "has_property" "is_part_of" "is_a" "consistent_with" ) ;
            sh:maxCount 1 ;
            sh:order 4 ;
            sh:path asb:qualifier ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path asb:subject ],
        [ sh:datatype xsd:string ;
            sh:description "Open-vocabulary qualifier contributed by a DomainAdapter (indicium-adapters), e.g. 'aligned_with' or 'differentially_expressed_in'. This is NOT the closed Bucur SuperPattern — values are snake_case domain terms. A Claim must carry at least one of {qualifier, domain_qualifier} (enforced by the supplemental QualifierPresenceShape, since `qualifier` itself is no longer required at the slot level)." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path asb:domainQualifier ;
            sh:pattern "^[a-z][a-z0-9_]*$" ],
        [ sh:datatype xsd:string ;
            sh:description "Spec-required name for the CiTO/SEPIO predicate. Shares slot_uri with `relation`; ASB adapter targets this name. Either may be set; they MUST agree if both are populated (enforced by downstream adapter, not at schema level)." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path asb:relation ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path asb:object ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path asb:context ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path asb:relation ],
        [ sh:datatype xsd:string ;
            sh:description "Reference to the originating ASTRA insight in 'analysis_id/insight_id' format." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path indicium:astra_insight_ref ] ;
    sh:targetClass asb:Claim .

fabio:ComputerProgram a sh:NodeShape ;
    rdfs:comment "A code artefact (script, notebook, or pipeline) from a scholarly publication. Carries role classification (script_type), programming language, repository URL, and optional pinned commit. Linked from Evidence.of_script when the evidence is grounded in code rather than a text passage or figure.",
        "A software tool / package with stable identity, EDAM annotations, and optional bio.tools cross-reference. Distinct from `Script` (in-paper code artefact): SoftwareEntity is a globally identified tool (e.g. MZmine, OpenMS) that multiple papers may cite." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ),
        ( rdf:type ) ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path indicium:is_supplementary ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path indicium:script_id ],
        [ sh:in ( fabio:ComputerProgram fabio:ComputerProgram fabio:ComputerProgram fabio:ComputerProgram fabio:ComputerProgram fabio:ComputerProgram ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path indicium:script_type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path indicium:repository_url ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path indicium:source_doi ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path indicium:purpose ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path indicium:commit_sha ],
        [ sh:description "EDAM topic IRIs (multivalued)." ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path indicium:edam_topics ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path indicium:language ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path indicium:content_url ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path dct:identifier ],
        [ sh:description "Canonical homepage / source URL of the software entity." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path indicium:canonical_url ],
        [ sh:datatype xsd:string ;
            sh:description "Version string (e.g. SemVer, git tag, release name)." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path indicium:version ],
        [ sh:datatype xsd:string ;
            sh:description "bio.tools registry ID for cross-reference / federation." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path indicium:bio_tools_id ],
        [ sh:description "EDAM operation IRI (e.g. http://edamontology.org/operation_3215)." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path indicium:edam_operation ],
        [ sh:datatype xsd:string ;
            sh:description "Stable IRI (e.g. w3id.org/holobiomicslab/asb-tool/<slug>) or URN identifying the software entity." ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path dct:identifier ] ;
    sh:targetClass fabio:ComputerProgram .

dcat:Dataset a sh:NodeShape ;
    rdfs:comment "A data artefact (dataset, supplementary file, or public repository deposit) from a scholarly publication. Carries content-type classification (dataset_type), file format, accession number, and hosting repository. Linked from Evidence.of_dataset when the evidence is grounded in data rather than a text passage." ;
    sh:closed false ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:in ( dcat:Dataset dcat:Dataset dcat:Dataset dcat:Dataset dcat:Dataset dcat:Dataset dcat:Dataset ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path indicium:dataset_type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path indicium:source_doi ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path indicium:is_supplementary ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path indicium:accession ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path indicium:n_samples ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path indicium:asset_id ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path indicium:repository ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path indicium:content_url ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path dct:identifier ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path indicium:data_format ] ;
    sh:targetClass dcat:Dataset .

