@prefix : <https://ontology.inferal.com/modules/competency-question/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mod: <https://w3id.org/mod#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix pubacc: <https://ontology.inferal.com/modules/publication-access/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

:
    a owl:Ontology, mod:SemanticArtefact, pubacc:PublicationManagedOntology ;
    dcterms:accessRights pubacc:PublicAccess ;
    owl:imports
        <http://www.w3.org/ns/prov> ,
        <https://w3id.org/mod> ;
    dcterms:title "Competency Question Ontology" ;
    dcterms:description "A first-class RDF model for competency questions, their formulations, requirements and use cases, stakeholders, targets, expectations, executable query artifacts, fixtures, executions, result observations and expectation assessments, lifecycle, review, ordered templates, qualified template instantiations and bindings, and coverage evidence." ;
    dcterms:issued "2026-07-29"^^xsd:date ;
    dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
    dcterms:source
        <https://ceur-ws.org/Vol-273/paper_38.pdf> ,
        <https://coralcorpus.linkeddata.es/> ,
        <https://github.com/CQ2SPARQLOWL/Dataset> ,
        <https://github.com/mkeet/CLaRO> ,
        <https://github.com/zubeidaiscyber/ROCQS> ,
        <https://w3id.org/mod> ;
    dcterms:references
        <http://w3id.org/def/ontoreq> ,
        <http://www.loa-cnr.it/ontologies/OD/OntologyDesign.owl> ,
        <https://arxiv.org/abs/1811.09529> ,
        <https://arxiv.org/abs/1907.07378> ,
        <https://arxiv.org/abs/2412.13688> ;
    vann:preferredNamespacePrefix "cqo" ;
    vann:preferredNamespaceUri "https://ontology.inferal.com/modules/competency-question/" ;
    mod:competencyQuestion "Can competency questions be represented as first-class, traceable, executable, and recursively testable resources without treating query text or SHACL validation as ontology semantics?" ;
    mod:status "draft" ;
    rdfs:label "Competency Question Ontology" ;
    rdfs:comment "The module preserves competency questions as resources with independent natural-language, requirement, target, expectation, formalization, execution, template-realization, and review relations. A template binding realizes natural-language text, while a formal query evaluates a question; neither query execution nor SHACL conformance by itself proves the question's answer to be true." ;
    rdfs:seeAlso
        <http://w3id.org/def/ontoreq> ,
        <http://www.loa-cnr.it/ontologies/OD/OntologyDesign.owl#competency-question> ,
        <https://coralcorpus.linkeddata.es/> ,
        <https://github.com/CQ2SPARQLOWL/Dataset> ,
        <https://github.com/mkeet/CLaRO> ,
        <https://github.com/zubeidaiscyber/ROCQS> ;
    owl:versionIRI <https://ontology.inferal.com/modules/competency-question/versions/0.1.0> ;
    owl:versionInfo "0.1.0" .

# Core question and context resources

:CompetencyQuestion
    a rdfs:Class ;
    rdfs:label "competency question" ;
    rdfs:comment "A persistent requirement-oriented question used to scope, explain, evaluate, or regress-test a semantic artifact. Its identity is independent of any one wording, query, answer, or execution." .

:QuestionSet
    a rdfs:Class ;
    rdfs:label "question set" ;
    rdfs:comment "A named collection of competency questions assembled for a stated design, evaluation, regression, or publication purpose. Membership does not imply that the set is complete." .

:QuestionFormulation
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "question formulation" ;
    rdfs:comment "A language-tagged natural-language expression of a competency question. Multiple formulations can express one question without creating multiple question identities." .

:OntologyRequirement
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "ontology requirement" ;
    rdfs:comment "A stated semantic capability or boundary that an ontology is expected to provide. A requirement is not itself a competency question, though questions can operationalize it." .

:UseCase
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "use case" ;
    rdfs:comment "A stakeholder-relevant situation or intended decision that motivates one or more competency questions. It does not assert that the described workflow has occurred." .

:QuestionTemplate
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "question template" ;
    rdfs:comment "A reusable, language-specific natural-language pattern composed of ordered template elements and used to produce or recognize question formulations. Formal queries remain separate and multiple formalizations can coexist." .

:TemplateElement
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "template element" ;
    rdfs:comment "A first-class occurrence at one zero-based position in exactly one question template. An element is either fixed natural-language text or a replaceable slot in the module SHACL regime." .

:TemplateTextSegment
    a rdfs:Class ;
    rdfs:subClassOf :TemplateElement ;
    rdfs:label "template text segment" ;
    rdfs:comment "A fixed language-tagged text occurrence in a question template, including any whitespace or punctuation that belongs to that position." .

:TemplateSlot
    a rdfs:Class ;
    rdfs:subClassOf :TemplateElement ;
    rdfs:label "template slot" ;
    rdfs:comment "A replaceable occurrence in a question template that refers to a template parameter. Several slot occurrences can refer to the same parameter without sharing element identity or position." .

:TemplateParameter
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "template parameter" ;
    rdfs:comment "A template-local logical input referenced by one or more slot occurrences. Parameter identity is resource-based and remains stable if its human-readable name changes." .

:TemplateInstantiation
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "template instantiation" ;
    rdfs:comment "A qualified realization of one question template as one natural-language formulation, with explicit parameter bindings and provenance. It is not a formal-query binding or an ontology entailment." .

:TemplateBinding
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "template binding" ;
    rdfs:comment "A parameter assignment within one template instantiation that preserves both the bound RDF value and the language-specific text used to render it." .

# Answer and operational resources

:FormalQuery
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "formal query" ;
    rdfs:comment "An executable query artifact that formalizes all or part of one or more competency questions under declared graph assumptions. Its text remains processor input, not an ontology axiom." .

:TestFixture
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "test fixture" ;
    rdfs:comment "A fixed graph or dataset used as input to a formal query execution. A fixture demonstrates a test condition and is not a hand-authored substitute for executing the query." .

:AnswerExpectation
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "answer expectation" ;
    rdfs:comment "A resource that states an expected answer or a constraint on acceptable answers for a competency question. Expectations are reviewable requirements, not observed execution results." .

:ExpectedAnswer
    a rdfs:Class ;
    rdfs:subClassOf :AnswerExpectation ;
    rdfs:label "expected answer" ;
    rdfs:comment "An answer expectation that records a concrete answer in natural language or by reference to an RDF resource." .

:AnswerConstraint
    a rdfs:Class ;
    rdfs:subClassOf :AnswerExpectation ;
    rdfs:label "answer constraint" ;
    rdfs:comment "An answer expectation that constrains acceptable results using a declared expression language. It is distinct from SHACL graph validation unless SHACL is explicitly named as that language." .

:QueryExecution
    a rdfs:Class ;
    rdfs:subClassOf prov:Activity ;
    rdfs:label "query execution" ;
    rdfs:comment "A concrete activity that executes a formal query over one or more fixtures or target graphs to evaluate competency questions." .

:ExecutionResult
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "execution result" ;
    rdfs:comment "A provenance-bearing record produced by a query execution, including its status and optional machine-observed result values. A result does not by itself state that it satisfies a particular answer expectation." .

:ExpectationAssessment
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "expectation assessment" ;
    rdfs:comment "A qualified comparison between one execution result and one answer expectation. Its boolean judgement is evidence under the expectation's declared interpretation, not an ontology entailment or universal truth." .

:CoverageAssertion
    a rdfs:Class ;
    rdfs:subClassOf prov:Entity ;
    rdfs:label "coverage assertion" ;
    rdfs:comment "A qualified, reviewable claim that a competency question covers a requirement, term, artifact, behavior, or other resource to a stated degree." .

# Controlled-value classes

:CompetencyQuestionKind
    a rdfs:Class ;
    rdfs:label "competency question kind value" ;
    rdfs:comment "A classification of a competency question by its semantic function and distinguishing constituents. The five supplied values follow the QuO model used by ROCQS, but the range remains extensible because that model does not claim the five kinds are exhaustive." .

:QuestionPurpose
    a rdfs:Class ;
    rdfs:label "question purpose value" ;
    rdfs:comment "An operational use of a competency question or question set in an Inferal workflow, kept separate from the question's semantic kind, authoring lifecycle, and review state." .

:LifecycleState
    a rdfs:Class ;
    rdfs:label "lifecycle state value" ;
    rdfs:comment "A controlled state in the authoring and maintenance lifecycle of a competency question." .

:ReviewState
    a rdfs:Class ;
    rdfs:label "review state value" ;
    rdfs:comment "A controlled state describing the review disposition of a competency question." .

:ExecutionStatus
    a rdfs:Class ;
    rdfs:label "execution status value" ;
    rdfs:comment "A controlled status for the outcome of a particular query execution." .

:CoverageStatus
    a rdfs:Class ;
    rdfs:label "coverage status value" ;
    rdfs:comment "A controlled degree claimed by a coverage assertion without closing the world over unasserted coverage." .

# Question relations

:hasCompetencyQuestion
    a rdf:Property ;
    rdfs:label "has competency question" ;
    rdfs:comment "Relates a semantic artifact or other scoped resource to a first-class competency question about it. This is not equivalent to MOD's literal-valued competencyQuestion property." ;
    rdfs:range :CompetencyQuestion .

:containsQuestion
    a rdf:Property ;
    rdfs:label "contains question" ;
    rdfs:comment "Relates a question set to a competency question included in that set; absence of another member does not establish completeness." ;
    rdfs:domain :QuestionSet ;
    rdfs:range :CompetencyQuestion .

:hasFormulation
    a rdf:Property ;
    rdfs:label "has formulation" ;
    rdfs:comment "Relates a competency question to one of its natural-language formulations." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range :QuestionFormulation .

:formulationText
    a rdf:Property ;
    rdfs:label "formulation text" ;
    rdfs:comment "The language-tagged natural-language text carried by a question formulation." ;
    rdfs:domain :QuestionFormulation ;
    rdfs:range rdf:langString .

:addressesRequirement
    a rdf:Property ;
    rdfs:label "addresses requirement" ;
    rdfs:comment "Relates a competency question to an ontology requirement that it helps specify or evaluate." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range :OntologyRequirement .

:requirementText
    a rdf:Property ;
    rdfs:label "requirement text" ;
    rdfs:comment "A language-tagged statement of the capability or boundary expressed by an ontology requirement." ;
    rdfs:domain :OntologyRequirement ;
    rdfs:range rdf:langString .

:supportsUseCase
    a rdf:Property ;
    rdfs:label "supports use case" ;
    rdfs:comment "Relates a competency question to a use case whose decisions or tasks motivate the question." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range :UseCase .

:useCaseText
    a rdf:Property ;
    rdfs:label "use case text" ;
    rdfs:comment "A language-tagged statement of the stakeholder situation or intended decision represented by a use case." ;
    rdfs:domain :UseCase ;
    rdfs:range rdf:langString .

:hasStakeholder
    a rdf:Property ;
    rdfs:label "has stakeholder" ;
    rdfs:comment "Identifies an agent whose goals, decisions, or review responsibilities are represented by a question, requirement, use case, or question set. It does not imply authorship." ;
    rdfs:range prov:Agent .

:questionKind
    a rdf:Property ;
    rdfs:label "question kind" ;
    rdfs:comment "Classifies a competency question by its semantic function and distinguishing constituents. Kind is not inferred from interrogative wording and remains independent of the question's current operational purpose." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range :CompetencyQuestionKind .

:questionPurpose
    a rdf:Property ;
    rdfs:label "has question purpose" ;
    rdfs:comment "Classifies a competency question or question set by its current operational use in design, evaluation, or regression testing. This local axis does not redefine the QuO/ROCQS question kind." ;
    rdfs:range :QuestionPurpose .

:targetsArtifact
    a rdf:Property ;
    rdfs:label "targets artifact" ;
    rdfs:comment "Relates a competency question to a semantic artifact whose scope or behavior it evaluates." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range mod:SemanticArtefact .

:targetsVersion
    a rdf:Property ;
    rdfs:label "targets version" ;
    rdfs:comment "Relates a competency question to a particular semantic-artifact version. The version should identify its unversioned artifact with dcterms:isVersionOf." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range mod:SemanticArtefact .

:hasAnswerExpectation
    a rdf:Property ;
    rdfs:label "has answer expectation" ;
    rdfs:comment "Relates a competency question to a concrete expected answer or an explicit constraint on acceptable answers." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range :AnswerExpectation .

:hasFormalQuery
    a rdf:Property ;
    rdfs:label "has formal query" ;
    rdfs:comment "Relates a competency question to one possible executable query evaluation; other formalizations may coexist." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range :FormalQuery .

:hasTemplateInstantiation
    a rdf:Property ;
    rdfs:label "has template instantiation" ;
    rdfs:comment "Relates a competency question to a qualified template realization for one of its formulations." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range :TemplateInstantiation .

:hasTemplateElement
    a rdf:Property ;
    rdfs:label "has template element" ;
    rdfs:comment "Relates a question template to one of its ordered text-segment or slot occurrences. Element order is carried by elementIndex, not by RDF serialization order." ;
    rdfs:domain :QuestionTemplate ;
    rdfs:range :TemplateElement .

:hasTemplateParameter
    a rdf:Property ;
    rdfs:label "has template parameter" ;
    rdfs:comment "Relates a question template to a logical input declared for use by its slot occurrences." ;
    rdfs:domain :QuestionTemplate ;
    rdfs:range :TemplateParameter .

:usesParameter
    a rdf:Property ;
    rdfs:label "uses template parameter" ;
    rdfs:comment "Relates a template slot occurrence to the template parameter whose value is rendered at that position." ;
    rdfs:domain :TemplateSlot ;
    rdfs:range :TemplateParameter .

:usesTemplate
    a rdf:Property ;
    rdfs:label "uses template" ;
    rdfs:comment "Identifies the question template realized by a qualified template instantiation." ;
    rdfs:domain :TemplateInstantiation ;
    rdfs:range :QuestionTemplate .

:realizesFormulation
    a rdf:Property ;
    rdfs:label "realizes formulation" ;
    rdfs:comment "Identifies the natural-language formulation produced by the ordered elements and bindings of a template instantiation." ;
    rdfs:domain :TemplateInstantiation ;
    rdfs:range :QuestionFormulation .

:hasTemplateBinding
    a rdf:Property ;
    rdfs:label "has template binding" ;
    rdfs:comment "Relates a template instantiation to a parameter binding used by that realization." ;
    rdfs:domain :TemplateInstantiation ;
    rdfs:range :TemplateBinding .

:bindsParameter
    a rdf:Property ;
    rdfs:label "binds template parameter" ;
    rdfs:comment "Identifies the template parameter assigned by a template binding." ;
    rdfs:domain :TemplateBinding ;
    rdfs:range :TemplateParameter .

:lifecycleState
    a rdf:Property ;
    rdfs:label "has lifecycle state" ;
    rdfs:comment "Relates a competency question to its current authoring and maintenance state." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range :LifecycleState .

:reviewState
    a rdf:Property ;
    rdfs:label "has review state" ;
    rdfs:comment "Relates a competency question to its current review disposition, independently of lifecycle state." ;
    rdfs:domain :CompetencyQuestion ;
    rdfs:range :ReviewState .

# Content and artifact properties

:templateText
    a rdf:Property ;
    rdfs:label "template text" ;
    rdfs:comment "The single language-tagged human-readable rendering of a question template. Structured consumers use hasTemplateElement and elementIndex rather than parsing placeholder punctuation from this rendering." ;
    rdfs:domain :QuestionTemplate ;
    rdfs:range rdf:langString .

:elementIndex
    a rdf:Property ;
    rdfs:label "template element index" ;
    rdfs:comment "The zero-based occurrence position of a template element within its owning question template. Conforming complete template graphs use unique indices contiguous from zero." ;
    rdfs:domain :TemplateElement ;
    rdfs:range xsd:nonNegativeInteger .

:segmentText
    a rdf:Property ;
    rdfs:label "template segment text" ;
    rdfs:comment "The exact fixed language-tagged text, including significant whitespace or punctuation, carried by a template text segment." ;
    rdfs:domain :TemplateTextSegment ;
    rdfs:range rdf:langString .

:parameterName
    a rdf:Property ;
    rdfs:label "template parameter name" ;
    rdfs:comment "A non-empty human-readable identifier for a logical input within its owning question template. The parameter IRI, not this mutable string, carries identity." ;
    rdfs:domain :TemplateParameter ;
    rdfs:range xsd:string .

:parameterRole
    a rdf:Property ;
    rdfs:label "template parameter role" ;
    rdfs:comment "An optional resource-valued classification of what a template parameter represents, such as a linguistic chunk or domain-independent authoring role. This extension point does not assert a mapping to an ontology term or formal-query variable." ;
    rdfs:domain :TemplateParameter ;
    rdfs:range rdfs:Resource .

:boundResource
    a rdf:Property ;
    rdfs:label "bound resource" ;
    rdfs:comment "The RDF resource assigned to a template parameter by a binding. Its rendered wording is recorded separately with bindingText." ;
    rdfs:domain :TemplateBinding ;
    rdfs:range rdfs:Resource .

:boundLiteral
    a rdf:Property ;
    rdfs:label "bound literal" ;
    rdfs:comment "The RDF literal assigned to a template parameter by a binding. Its rendered wording is recorded separately with bindingText." ;
    rdfs:domain :TemplateBinding ;
    rdfs:range rdfs:Literal .

:bindingText
    a rdf:Property ;
    rdfs:label "binding text" ;
    rdfs:comment "The exact language-tagged text inserted for a template parameter in one template instantiation, independently of whether the semantic bound value is a resource or literal." ;
    rdfs:domain :TemplateBinding ;
    rdfs:range rdf:langString .

:queryText
    a rdf:Property ;
    rdfs:label "query text" ;
    rdfs:comment "The executable source text of a formal query artifact, interpreted under its declared query language and processor regime." ;
    rdfs:domain :FormalQuery ;
    rdfs:range xsd:string .

:queryLanguage
    a rdf:Property ;
    rdfs:label "query language" ;
    rdfs:comment "Identifies the formal language in which a query artifact is expressed, such as the SPARQL 1.1 Query specification IRI." ;
    rdfs:domain :FormalQuery ;
    rdfs:range rdfs:Resource .

:usesFixture
    a rdf:Property ;
    rdfs:label "uses fixture" ;
    rdfs:comment "Identifies a checked-in or otherwise fixed test fixture used by a formal query contract or a concrete query execution." ;
    rdfs:range :TestFixture .

:answerText
    a rdf:Property ;
    rdfs:label "answer text" ;
    rdfs:comment "A language-tagged natural-language expected answer." ;
    rdfs:domain :ExpectedAnswer ;
    rdfs:range rdf:langString .

:answerResource
    a rdf:Property ;
    rdfs:label "answer resource" ;
    rdfs:comment "An RDF resource expected as all or part of an answer." ;
    rdfs:domain :ExpectedAnswer ;
    rdfs:range rdfs:Resource .

:constraintExpression
    a rdf:Property ;
    rdfs:label "constraint expression" ;
    rdfs:comment "The source text of an acceptable-answer expression, interpreted according to constraintLanguage." ;
    rdfs:domain :AnswerConstraint ;
    rdfs:range xsd:string .

:constraintLanguage
    a rdf:Property ;
    rdfs:label "constraint language" ;
    rdfs:comment "Identifies the language used to interpret an answer expression. Naming SHACL applies its declared regime to answer data and does not transform the query." ;
    rdfs:domain :AnswerConstraint ;
    rdfs:range rdfs:Resource .

:ResultCardinalityConstraintLanguage
    a dcterms:Standard ;
    rdfs:label "result cardinality constraint language" ;
    rdfs:comment "Identifies the local expression convention in which a non-negative integer denotes the expected number of result rows. The module's SHACL assessment rules check its lexical form and compare it with an observed result cardinality; it is not a general query or validation language." .

# Execution and coverage properties

:executionOf
    a rdf:Property ;
    rdfs:label "execution of" ;
    rdfs:comment "Relates a query execution to the formal query artifact it ran." ;
    rdfs:domain :QueryExecution ;
    rdfs:range :FormalQuery .

:evaluatesQuestion
    a rdf:Property ;
    rdfs:label "evaluates question" ;
    rdfs:comment "Relates a query execution to a competency question evaluated by that execution." ;
    rdfs:domain :QueryExecution ;
    rdfs:range :CompetencyQuestion .

:hasExecutionResult
    a rdf:Property ;
    rdfs:label "has execution result" ;
    rdfs:comment "Relates a query execution to the result record it generated." ;
    rdfs:domain :QueryExecution ;
    rdfs:range :ExecutionResult .

:executionStatus
    a rdf:Property ;
    rdfs:label "has execution status" ;
    rdfs:comment "Relates an execution result to its controlled outcome status." ;
    rdfs:domain :ExecutionResult ;
    rdfs:range :ExecutionStatus .

:resultMessage
    a rdf:Property ;
    rdfs:label "result message" ;
    rdfs:comment "A diagnostic message attached to an execution result; it is not a substitute for machine-checkable result data." ;
    rdfs:domain :ExecutionResult ;
    rdfs:range xsd:string .

:resultCardinality
    a rdf:Property ;
    rdfs:label "result cardinality" ;
    rdfs:comment "Records the observed number of result rows from a completed tabular query execution. Absence does not mean zero and a not-run or errored execution has no observed cardinality." ;
    rdfs:domain :ExecutionResult ;
    rdfs:range xsd:nonNegativeInteger .

:resultBoolean
    a rdf:Property ;
    rdfs:label "result boolean" ;
    rdfs:comment "Records the observed boolean returned by a completed boolean query execution. Absence does not mean false and does not establish that the query ran." ;
    rdfs:domain :ExecutionResult ;
    rdfs:range xsd:boolean .

:assessesResult
    a rdf:Property ;
    rdfs:label "assesses result" ;
    rdfs:comment "Identifies the execution result compared by an expectation assessment." ;
    rdfs:domain :ExpectationAssessment ;
    rdfs:range :ExecutionResult .

:assessesExpectation
    a rdf:Property ;
    rdfs:label "assesses expectation" ;
    rdfs:comment "Identifies the answer expectation against which an execution result is compared." ;
    rdfs:domain :ExpectationAssessment ;
    rdfs:range :AnswerExpectation .

:expectationSatisfied
    a rdf:Property ;
    rdfs:label "expectation satisfied" ;
    rdfs:comment "Records whether the assessed result satisfies the assessed expectation under its declared interpretation. The value is produced by an assessment process rather than entailed by the ontology." ;
    rdfs:domain :ExpectationAssessment ;
    rdfs:range xsd:boolean .

:coverageQuestion
    a rdf:Property ;
    rdfs:label "coverage question" ;
    rdfs:comment "Identifies the competency question that provides the basis for a coverage assertion." ;
    rdfs:domain :CoverageAssertion ;
    rdfs:range :CompetencyQuestion .

:coveredResource
    a rdf:Property ;
    rdfs:label "covered resource" ;
    rdfs:comment "Identifies the requirement, term, artifact, behavior, or other resource evaluated by a coverage assertion." ;
    rdfs:domain :CoverageAssertion ;
    rdfs:range rdfs:Resource .

:coverageStatus
    a rdf:Property ;
    rdfs:label "has coverage status" ;
    rdfs:comment "Relates a coverage assertion to its stated degree of coverage." ;
    rdfs:domain :CoverageAssertion ;
    rdfs:range :CoverageStatus .

# CQ kinds, sourced from the ROCQS five-kind model

:ScopingQuestion
    a :CompetencyQuestionKind ;
    dcterms:source
        <https://arxiv.org/abs/2412.13688> ,
        <https://github.com/zubeidaiscyber/ROCQS> ;
    rdfs:label "scoping question" ;
    rdfs:comment "A QuO/ROCQS kind that mentions one or more domain entities and contributes to demarcating the subject domain and content considered for inclusion in an actual or prospective ontology. This kind applies independently of the availability of a formalization or ontology-provided answer at scoping time." .

:ValidationQuestion
    a :CompetencyQuestionKind ;
    dcterms:source
        <https://arxiv.org/abs/2412.13688> ,
        <https://github.com/zubeidaiscyber/ROCQS> ;
    rdfs:label "validation question" ;
    rdfs:comment "A QuO/ROCQS kind that mentions one or more domain entities and is intended to validate ontology content. It is formalizable and answerable without requiring greater expressiveness than the ontology's permitted representation language." .

:FoundationalQuestion
    a :CompetencyQuestionKind ;
    dcterms:source
        <https://arxiv.org/abs/2412.13688> ,
        <https://github.com/zubeidaiscyber/ROCQS> ;
    rdfs:label "foundational question" ;
    rdfs:comment "A QuO/ROCQS kind that refers to an entity or characteristic from a foundational ontology in order to align or interrogate a distinct domain entity. It is not a synonym for any question considered conceptually fundamental." .

:RelationshipQuestion
    a :CompetencyQuestionKind ;
    dcterms:source
        <https://arxiv.org/abs/2412.13688> ,
        <https://github.com/zubeidaiscyber/ROCQS> ;
    rdfs:label "relationship question" ;
    rdfs:comment "A QuO/ROCQS kind used to determine a characteristic of a relationship: its arity, whether it is elementary, its participating entities or domain and range, or an expressible relational property such as transitivity. A question that merely retrieves links between resources is not thereby a relationship question." .

:MetapropertyQuestion
    a :CompetencyQuestionKind ;
    dcterms:source
        <https://arxiv.org/abs/2412.13688> ,
        <https://github.com/zubeidaiscyber/ROCQS> ;
    rdfs:label "metaproperty question" ;
    rdfs:comment "A QuO/ROCQS kind that applies one ontological metaproperty criterion to classify a foundational or domain entity, for example by rigidity, unity, or telicity. It is not an arbitrary question about ontology metadata." .

# Independent lifecycle purposes

:DesignPurpose
    a :QuestionPurpose ;
    rdfs:label "design purpose" ;
    rdfs:comment "Indicates that a question guides scope or modeling during ontology design." .

:EvaluationPurpose
    a :QuestionPurpose ;
    rdfs:label "evaluation purpose" ;
    rdfs:comment "Indicates that a question evaluates a target artifact, preferably with independence from construction evidence when generalization is claimed." .

:RegressionPurpose
    a :QuestionPurpose ;
    rdfs:label "regression purpose" ;
    rdfs:comment "Indicates that a question is repeatedly evaluated to detect loss of a previously accepted semantic capability." .

# Lifecycle, review, execution, and coverage values

:DraftState
    a :LifecycleState ;
    rdfs:label "working lifecycle state" ;
    rdfs:comment "The question is being formulated and may change without deprecation." .

:AcceptedState
    a :LifecycleState ;
    rdfs:label "accepted state" ;
    rdfs:comment "The question is an accepted part of the current semantic contract." .

:DeprecatedState
    a :LifecycleState ;
    rdfs:label "deprecated state" ;
    rdfs:comment "The question remains identifiable for compatibility but should not guide new work." .

:UnreviewedState
    a :ReviewState ;
    rdfs:label "unreviewed state" ;
    rdfs:comment "No review disposition has yet been recorded for the question." .

:InReviewState
    a :ReviewState ;
    rdfs:label "in review state" ;
    rdfs:comment "The question is currently under semantic or stakeholder review." .

:ApprovedState
    a :ReviewState ;
    rdfs:label "approved state" ;
    rdfs:comment "The question has passed the review regime claimed by its provenance." .

:ChangesRequestedState
    a :ReviewState ;
    rdfs:label "changes requested state" ;
    rdfs:comment "Review requested revision of the question or its connected contract." .

:NotRunStatus
    a :ExecutionStatus ;
    rdfs:label "not run status" ;
    rdfs:comment "The execution has no completed query run under the stated environment." .

:PassedStatus
    a :ExecutionStatus ;
    rdfs:label "passed status" ;
    rdfs:comment "The execution completed and satisfied its declared answer or regression assertions." .

:FailedStatus
    a :ExecutionStatus ;
    rdfs:label "failed status" ;
    rdfs:comment "The execution completed but did not satisfy its declared answer or regression assertions." .

:ErrorStatus
    a :ExecutionStatus ;
    rdfs:label "error status" ;
    rdfs:comment "The execution could not produce a valid evaluative result because processing failed." .

:CoveredStatus
    a :CoverageStatus ;
    rdfs:label "covered status" ;
    rdfs:comment "The identified question is asserted to cover the resource under the assertion's stated evidence and scope." .

:PartialCoverageStatus
    a :CoverageStatus ;
    rdfs:label "partial coverage status" ;
    rdfs:comment "The identified question covers some, but not all, of the resource or behavior under review." .

:UncoveredStatus
    a :CoverageStatus ;
    rdfs:label "uncovered status" ;
    rdfs:comment "The identified resource is asserted not to be covered by the question under review." .
